业务文档为了部署流程,须要包装在一个业务文档中
一个业务文档是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" >...当部署了这个流程定义之后,数据库中的流程定义如下:
idkeynameversionmyProcess:1:676myProcessMy important process1假如部署用一个流程的最新版本号(扭转用户工作),然而流程定义的id放弃不变.流程定义表将蕴含以下列表信息:idkeynameversionmyProcess:1:676myProcessMy important process1myProcess:2:870myProcessMy important process2当runtimeService.startProcessInstanceByKey("myProcess") 办法被调用时,它将会应用流程定义版本号为2的, 因为这是最新版本的流程定义.能够说每次流程定义创立流程实例时,都会默认应用最新版本的流程定义
创立第二个流程,在Activiti中,定义并且部署它,该流程定义会增加到流程定义表中:
<definitions id="myNewDefinitions" ><process id="myNewProcess" name="My important process" > ...表构造如下所示:idkeynameversionmyProcess:1:676myProcessMy important process1myProcess:2:870myProcessMy important process2myNewProcess:1:1033myNewProcessMy important process1留神: 新流程的key与咱们的第一个流程是不同的,只管流程定义的名称name是雷同的(当然,名称name也能够是不雷同的),Activiti仅仅只思考id属性判断流程. 因而,新的流程定义部署的版本号为1
...