本篇内容介绍了“如何部署工作流引擎”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
业务文档
业务归档中的Java类将不能够添加到类路径下
为了能够让流程运行,必须把存在于业务归档程中的流程定义使用的所有自定义的类(例如:Java服务任务或者实现事件的监听器)放在 [activiti引擎的类路径] 下
编程式部署
String barFileName = "path/to/process-one.bar";
ZipInputStream inputStream = new ZipInputStream(new FileInputStream(barFileName));
repositoryService.createDeployment()
.name("process-one.bar")
.addZipInputStream(inputStream)
.deploy();通过Activiti Explorer控制台部署
外部资源
Java类
流程中使用Spring beans
当表达式或者脚本使用Spring beans时,这些beans对于引擎执行流程定义时必须是可用的
如果要构建自定义的web应用并且按照Spring集成在应用上下文配置流程引擎.要记住,如果在使用Activiti rest web应用,那么也应该更新Activiti rest web应用的上下文.可以把在activiti-rest/lib/activiti-cfg.jar文件中的activiti.cfg.xml替换成的Spring上下文配置的activiti-context.xml文件
创建独立应用
可以将Activiti rest web应用加入到web应用之中,只需要配置一个 ProcessEngine,
从而不用确保所有的流程引擎的所有委托类在类路径下面并且是否使用正确的spring配置
流程定义的版本
BPMN中并没有版本的概念,而在Activiti中,流程定义的版本会在部署时创建,在部署的时候,流程定义被存储到Activiti使用的数据库之前,Activiti将会自动给流程定义分配一个版本号
业务文档中每一个的流程定义,都会通过下列部署执行初始化属性key,version,name和id:
XML文件中流程定义(流程模型)的id属性被当做是流程定义的key属性
XML文件中的流程模型的name属性被当做是流程定义的name 属性.如果该name属性没有指定,那么id属性被当作是name属性
带有特定key的流程定义在第一次部署的时候,将会自动分配版本号为1,对于之后部署相同key的流程定义时候,这次部署的版本号将会设置为比当前最大的版本号大1的值.该key属性被用来区别不同的流程定义
流程定义中的id属性被设置为 {processDefinitionKey}:{processDefinitionVersion}:{generated-id}, 这里的generated-id是一个唯一的数字被添加, 用于确保在集群环境中缓存的流程定义的唯一性
<definitions id="myDefinitions" >
<process id="myProcess" name="My important process" >
...
当部署了这个流程定义之后,数据库中的流程定义如下: |id|key|name|version| |--|--|--|--| |myProcess:1:676|myProcess|My important process|1|
| id | key | name | version |
|---|
| myProcess:1:676 | myProcess | My important process | 1 |
| myProcess:2:870 | myProcess | My important process | 2 |
| 当runtimeService.startProcessInstanceByKey("myProcess") 方法被调用时,它将会使用流程定义版本号为2的, 因为这是最新版本的流程定义.可以说每次流程定义创建流程实例时,都会默认使用最新版本的流程定义 |
|
|
|
<definitions id="myNewDefinitions" >
<process id="myNewProcess" name="My important process" >
...
| id | key | name | version |
|---|
| myProcess:1:676 | myProcess | My important process | 1 |
| myProcess:2:870 | myProcess | My important process | 2 |
| myNewProcess:1:1033 | myNewProcess | My important process | 1 |
注意: 新流程的key与我们的第一个流程是不同的,尽管流程定义的名称name是相同的(当然,名称name也可以是不相同的),Activiti仅仅只考虑id属性判断流程. 因此,新的流程定义部署的版本号为1
提供流程图片
流程定义的流程图可以被添加到部署中,该流程图将会持久化到Activiti所使用的数据库中并且可以通过Activiti的API进行访问.
流程图也可以被用来在Activiti Explorer控制台中的流程中进行显示
如果在我们的类路径下面有一个流程:org/activiti/expenseProcess.bpmn20.xml, 该流程定义有一个流程key=expense. 以下遵循流程定义图片的命名规范(按照这个特定顺序):
应该是org/activiti/expenseProcess.png.注意:这意味着在同一个BPMN2.0 XML文件夹中的每个流程定义都会有相同的流程定义图片.因此,在每一个BPMN 2.0 XML文件夹中仅仅只有一个流程定义,这绝对是不会有问题的
应该是org/activiti/expenseProcess.expense.png(或者jpg/gif).如果在一个BPMN2.0 XML文件中定义多个流程定义图片,这种方式更有意义.每个流程定义图片的文件名中都将会有一个流程定义key
如果在部署时一个图片资源已经存在,是BPMN2.0的XML文件名,后面是流程定义的key并且是一个图片的后缀.那么该图片将被使用.
如果并没有这样的图片存在,部署的时候寻找与匹配BPMN2.0 XML文件的名称的图片资源
使用编程式的部署方式:
repositoryService.createDeployment()
.name("expense-process.bar")
.addClasspathResource("org/activiti/expenseProcess.bpmn20.xml")
.addClasspathResource("org/activiti/expenseProcess.png")
.deploy(); ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("expense")
.singleResult();
String diagramResourceName = processDefinition.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), diagramResourceName);自动生成流程图片
在部署的情况下没有提供图片,如果流程定义中包含必要的'图像交换'信息时,Activiti流程引擎会自动生成一个图像
该资源可以按照上面部署时提供流程图片完全相同的方式获取: 
如果因为某种原因,在部署的时候,并不需要或者不必要生成流程定义图片,那么就需要在流程引擎配置的属性中使用isCreateDiagramOnDeploy进行配置就可以不生成流程定义图片:
<property name="createDiagramOnDeploy" value="false" />
类别
部署和流程定义都是用户定义的类别
流程定义类别在BPMN文件中属性的初始化的值:
<definitions ... targetNamespace="yourCategory" ... />
repositoryService
.createDeployment()
.category("yourCategory")
...
.deploy();“如何部署工作流引擎”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注天达云网站,小编将为大家输出更多高质量的实用文章!