业务文档
为了部署流程,须要包装在一个业务文档中
- 一个业务文档是Activiti引擎部署的单元
一个业务文档相当与一个压缩文件,它蕴含:
- BPMN2.0流程
- 工作表单
- 规定
- 其余任意类型的文件
- 业务文档是蕴含命名资源的容器
当一个业务文档被部署,它将会主动扫描以.bpmn20.xml或者.bpmn作为扩展名的BPMN文件.每个那样的文件都将会被解析并且可能会蕴含多个流程定义
业务归档中的Java类将不可能增加到类门路下为了可能让流程运行,必须把存在于业务归档程中的流程定义应用的所有自定义的类(例如:Java服务工作或者实现事件的监听器)放在 [activiti引擎的类门路] 下
编程式部署
- 通过一个压缩文件(反对Zip和Bar)部署业务文档
也能够通过一个独立资源(例如bpmn,xml等)构建部署
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控制台部署
Activiti web控制台容许你通过web界面的用户接口上传一个bar格局的压缩文件(或者一个bpmn20.xml格局的文件).抉择Management 标签和点击Deployment:
内部资源
- 流程定义保留在Activiti所反对的数据库中
- 当应用服务工作,执行监听器
- 从Activiti配置文件中配置的Spring beans时,流程定义可能援用这些委托类.
这些类或者Spring配置文件对于所有流程引擎中可能执行的流程定义必须是可用的
Java类
当流程实例被启动的时候,在流程中被应用的所有自定义类应该存在流程引擎的类门路下:
服务工作中:
- JavaDelegates
- 事件监听器
- 工作监听器
- 在部署业务文档时,这些类不用都存在于类门路下.当应用Ant部署一个新的业务文档时,意味着你的委托类不用存在类门路下
当应用示例设置增加自定义类:
- 应该增加蕴含自定义类的jar包到activiti-explorer控制台
- activiti-rest的webapp lib文件夹中
- 不要疏忽蕴含你自定义类的依赖关系
还能够将你自定义的依赖增加到你的Tomcat容器的装置目录中的${tomcat.home}/lib
流程中应用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放弃不变.流程定义表将蕴含以下列表信息:
id | key | name | version |
---|---|---|---|
myProcess:1:676 | myProcess | My important process | 1 |
myProcess:2:870 | myProcess | My important process | 2 |
当runtimeService.startProcessInstanceByKey("myProcess") 办法被调用时,它将会应用流程定义版本号为2的, 因为这是最新版本的流程定义.能够说每次流程定义创立流程实例时,都会默认应用最新版本的流程定义
创立第二个流程,在Activiti中,定义并且部署它,该流程定义会增加到流程定义表中:
<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. 以下遵循流程定义图片的命名标准(依照这个特定程序):
如果在部署时一个图片资源曾经存在,是BPMN2.0的XML文件名,前面是流程定义的key并且是一个图片的后缀.那么该图片将被应用.
- 应该是org/activiti/expenseProcess.expense.png(或者jpg/gif).如果在一个BPMN2.0 XML文件中定义多个流程定义图片,这种形式更有意义.每个流程定义图片的文件名中都将会有一个流程定义key
如果并没有这样的图片存在,部署的时候寻找与匹配BPMN2.0 XML文件的名称的图片资源
- 应该是org/activiti/expenseProcess.png.留神:这意味着在同一个BPMN2.0 XML文件夹中的每个流程定义都会有雷同的流程定义图片.因而,在每一个BPMN 2.0 XML文件夹中仅仅只有一个流程定义,这相对是不会有问题的
应用编程式的部署形式:
repositoryService.createDeployment().name("expense-process.bar").addClasspathResource("org/activiti/expenseProcess.bpmn20.xml").addClasspathResource("org/activiti/expenseProcess.png").deploy();
接下来,能够通过API来获取流程定义图片资源:
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" ... />
部署类别是能够间接应用API进行指定:
repositoryService .createDeployment() .category("yourCategory") ... .deploy();