为了部署流程,需要包装在一个业务文档中
一个业务文档相当与一个压缩文件,它包含:
业务归档中的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();
当流程实例被启动的时候,在流程中被使用的所有自定义类应该存在流程引擎的类路径下:
服务任务中:
当使用示例设置添加自定义类:
业务文档中每一个的流程定义,都会通过下列部署执行初始化属性key,version,name和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 |
如果在我们的类路径下面有一个流程:org/activiti/expenseProcess.bpmn20.xml, 该流程定义有一个流程key=expense. 以下遵循流程定义图片的命名规范(按照这个特定顺序):
如果在部署时一个图片资源已经存在,是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);
<property name="createDiagramOnDeploy" value="false" />
<definitions ... targetNamespace="yourCategory" ... />
repositoryService
.createDeployment()
.category("yourCategory")
...
.deploy();