jbpm 总结
来源:互联网 发布:虎嗅 源码 编辑:程序博客网 时间:2024/06/09 13:46
最近开始接触JBPM4,网上关于JBPM4的资料少之又少。大多是关于JBPM3的。而4跟3的API差异也较大。在学习过程中做了一点关于JBPM4的笔记。强烈期望JBPM4达人能贡献一些JBPM4方面的学习资料或视频教程或出版发行JBPM4的书籍之类的。
本文电子版下载
流程定义引擎:
ProcessEngine processEngine;
获取:
processEngine=Configuration.getProcessEngine();
重要的几个接口:
RepositoryService repositoryService;
ExecutionService executionService;
TaskService taskService;
HistoryService historyService;
ManagementService managementService;
获取:
repositoryService=processEngine.getRepositoryService();
executionService=processEngine.getExecutionService();
taskService=processEngine.getTaskService();
historyService=processEngine.getHistoryService();
managementService=processEngine.getManagementService();
说明:
RepositoryService主要用来管理和发布流程定义,发布流程定义、删除流程定义、查看流程定义。
流程定义发布:
repositoryService.createDeployment().addResourceFromClasspath
注:此方法表示从classpath路径加载一个流程定义文件,并发布,上例中demo.jpdl.xml文件位于src(classpath)路径下,若流程定义文件放置与包中,则需要使用包名+jpdl文件名。如com/jbpm/demo.jpdl.xml
查看流程定义:
repositoryService.createDeployment().addResourceFromClasspath
Listlist=repositoryService.createProcessDefinitionQ
for (ProcessDefinition processDefinition : list){
}
删除流程定义:
StringdeploymentId=repositoryService.createDeployment().addResourceFromClasspath
repositoryService.deleteDeploymentCascade(deploymentId);
deploymentId为流程定义部署Id
ExecutionService主要用来操作流程实例,启动流程实例、查看流程实例、删除流程实例、结束流程实例。
其前提条件是发布了流程定义
启动流程实例:
repositoryService.createDeployment().addResourceFromClasspath
使用executionService.startProcessInstanceByKe
同样也可以使用executionService.startProcessInstanceById
其Id属性由两部分组成流程定义的key和流程定义的版本来组成。形如key-version
例如:
ProcessInstanceprocessInstance=executionService.startProcessInstanceById
其中demo-1就为流程定义中的流程Id,其key为demo,版本号为1
同样使用此方法可用来启动指定版本号的流程实例。
查看流程实例:
Listlist=executionService.createProcessInstanceQue
for (ProcessInstance processInstance : list) {
}
级联删除流程实例:
executionService.deleteProcessInstanceCas
结束流程实例:
executionService.endProcessInstance(processInstance.getId(),"结束流程实例");
注意:在使用executionService.endProcessInstance()对流程实例进行结束操作后,需要重新查询processInstance才能得到更新后的流程实例,如果流程已结束,则查询结果为null
如:
executionService.endProcessInstance(processInstance.getId(),"结束流程实例");
System.out.println(processInstance.isEnded());
此行代码是无意义的,因为此时并未获取到更新后的流程实例,需要重新查询流程实例,所以此处返回为false
System.out.println("-----------查询流程实例--------------->");
Listlist=executionService.createProcessInstanceQue
for (ProcessInstance processInstance : list) {
}
结果:
false
-----------查询流程实例--------------->
使流程向下执行:
在使用executionService启动流程实例后,流程会顺着向下执行(即启动流程实例后,流程会从start节点向下移动),在state或task节点,流程会暂停下来,满足条件后流程会向下继续执行,直到流程end节点,结束流程。
在程序中是流程遵循某一条件,沿着某个方向流动的方法为executionService.signalExecutionById();
该方法有多个重载:
ProcessInstance signalExecutionById(StringexecutionId);
//若在流程定义某一个节点没有分支时(只有一个transition时),调用此方法,可将流程继续向下执行executionId为流程实例Id
ProcessInstance signalExecutionById(StringexecutionId, String signalName);
//若在流程定义某一个节点有多个分支时(有多个transition时),调用此方法,可将流程沿着transition所指的方向向下执行
executionId为流程实例Id,signalName为流程定义中transition节点的name属性的值
ProcessInstance signalExecutionById(StringexecutionId, String signalName, Map parameters);
用于将流程沿着signalName方向(transition的name属性所指的方向)向下继续执行,在执行的过程中顺便传递参数parameters
ProcessInstance signalExecutionById(StringexecutionId, Map parameters);
用于将流程向下继续执行,在执行的过程中顺便传递参数parameters
注:当一个节点有多个分支时,若要通过signalExecutionById()方法将流程向下执行必须明确指出signalName即(transition的name属性所指的方向),否则流程不会向下执行,仍会停留在当前节点。因为jbpm不确定流程该流向那个方向。
示例代码:
1.
流程定义文件:
- jbpm 总结
- jbpm 总结
- jbpm 总结
- jbpm 总结
- jbpm总结
- jbpm 手动安装
- JBPM API
- jBPM项目总结
- jBPM项目总结
- jbpm总结1
- jbpm总结2
- jbpm总结1
- jbpm总结1
- jbpm总结2
- jbpm总结3
- jbpm总结4
- JBPM总结四
- JBPM流程图详解总结
- 设置健康的myeclipse工作区背景色
- 灵活控制 Hibernate 的…
- 使用MyEclipse将项目打成jar包和wa…
- 日志记录的作用和方法
- JBPM API
- jbpm 总结
- Myeclipse10下搭建SSH框架(图解)St…
- 怎样将jpg转成pdf格式
- hibenate集合映射
- Hibernate反向工程使用心得
- sigsetjmp siglongjmp使用时要注意内存泄露
- <tx:method/> 有关的设置
- form表单提交后页面的跳转
- struts2的文件下载