activiti6.0实战--部署流程资源

activiti实战--部署流程资源


流程资源可以是各种类型的文件,在启动流程或流程实例运行过程中会被读取

一、常用流程资源

流程定义文件:扩展名为bpmn20.xml和bpmn

流程定义的图片:用BPMN2.0规范的各种图形描绘,一般用png格式

表单文件:把表单内容保存在一个扩展名为form的文件中

规则文件:例如Dro'o'ls的规则文件,扩展名为drl

二、部署流程资源涉及到的表

  • act_re_deployment(部署对象表)

存放流程定义的显示名和部署时间,每部署一次增加一条记录

  • act_re_procdef(流程定义表)

存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。注意:当流程定义的key相同的情况下,使用的是版本升级。

  • act_ge_bytearray(资源文件表)

存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件, activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中

三、部署流程资源方式

使用流程引擎的目的是为了使用流程驱动业务的流转。要用流程驱动业务就必须为业务启动一个流程实例,启动一个流程实例必须定义一系列活动,这一系列活动就组成了一个流程定义

  • classpath方式部署流程资源

classpath方式,顾名思义就是要以class目录为基础寻找对应的资源再部署

        //获取repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //定义classpath
        String processPath = "process/2-4.bpmn20.xml";

        //创建部署构建器---->部署入口
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();

        //添加流程资源文件
        deploymentBuilder.addClasspathResource(processPath).deploy();
        //执行部署。此操作会将流程定义文件内容持久化到数据库,并且以addClassPathResouce(resourceName)的参数作为资源名称
        Deployment deploy = deploymentBuilder.deploy();

        //获取部署的流程
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();

classpath方式一般用于开发阶段的测试环节,真正再产品环境中用的很少,而是通过管理界面手动部署或在设计完流程之后直接部署到引擎中

  • InputStream 方式部署流程资源

使用InputStream 方式部署流程资源需要传入一个输入流及资源的名称,输入流的来源不限,可以从classpath,可以从绝对路径,亦可以从网络

        RepositoryService repositoryService = processEngine.getRepositoryService();
        String filePath = "E:\\activitistudy\\acticitiDemo1\\src\\main\\resources\\process\\2-4.bpmn20.xml";
        //创建文本输入对象
        FileInputStream fileInputStream = new FileInputStream(filePath);
        //创建部署构建器
        DeploymentBuilder deployment = repositoryService.createDeployment();
        //参数一作为资源名称,参数二为流程资源输入流
        Deployment deploy = deployment.addInputStream("2-4bpmn", fileInputStream).deploy();
        System.out.println(deploy.getId());
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();
        System.out.println(processDefinition.getResourceName());

InputStream 方式从产品环境中用的比较多,例如从WEB客户端接受一个文件对象部署到引擎中,或者从URL读取文件流后部署到引擎

  • zip/bar格式压缩包方式部署流程

以上方式一次只能部署单个流程、除非多次调用deployment.addXXX(),那么如何一次性部署多个流程资源呢?activiti 允许把一批资源打包部署

        RepositoryService repositoryService = processEngine.getRepositoryService();
        //从class读取zip资源文件流
        InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream("resources.zip");
        DeploymentBuilder deployment = repositoryService.createDeployment();
        Deployment deploy = deployment.addZipInputStream(new ZipInputStream(resourceAsStream)).deploy();
        System.out.println(repositoryService.createProcessDefinitionQuery().count());

- Bpmn模型方式

见BPMN的使用


四、以上部署方式使用建议

  1. 如果客户端需要开发一套流程设计器建议使用addBpmnModel方式部署,该方式更加灵活,可塑性强
  2. 如果一次性需要部署多个流程资源,建议使用addZipInputStream方式。该方式常见的场景时,在web项目中使用文件上传的方式对流程资源进行部署。
  3. addClassPahResource方式不建议在生产环境中使用,使用该方式会使流程文档与项目高耦合,不灵活。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容