在说明六个核心服务之前,需要提到的是ProcessEngine对象。类似一个工厂提供流程过程中所需的服务,抽象工厂设计模式的体现。而ProcessEngine对象是由Configruation对象来创建的,ProcessEngine是一个线程安全的对象,保证我们在开发过程中可以将这个对象放置到静态对象中,或者通过JNDI协议来获取对象;也能够方便开发者去开发使用。所有的请求都可以使用同一个ProcessEngine对象,读到这里大家也应该想到了单例模式的使用。
1.创建ProcessEngine对象
通过Configruation配置对象直接就可以获取ProcessEngine,前提是开发者的定义配置文件jbpm.cfg.xml放在在classpath路径下,并且名字没有改变。
ProcessEngine processEngine=Configuration.getProcessEngine();
当然如果要使用其他的配置文件也是可以的。这时候通过setResource来配置
/** provide an classpath resource as the configuration file */
public Configuration setResource(String resource)
2.六个流程操作接口
获取操作对象
repositoryService=processEngine.getRepositoryService();
executionService=processEngine.getExecutionService();
taskService=processEngine.getTaskService();
historyService=processEngine.getHistoryService();
managementService=processEngine.getManagementService();
identityService=processEngine.getIdentityService();
RepositoryService
流程资源服务接口,提供流程部署、查询、删除等操作。
如:
repositoryService.createDeployment().addResourceFromClasspath("offJbpm.jpdl.xml").deploy();
ExecutionService
流程服务执行接口,负责流程执行、流程推进、流程变量的设定等。
如:
Map<String,Object> map=new HashMap<String,Object>();
map.put("userId","1");
map.put("userName","cfl");
//id jbpm4_deployprop
ProcessInstance processInstance= executionService.startProcessInstanceByKey("offJbpm", map);
TaskService
任务服务接口,提供流程任务的创建、保存、删除、查询、完成。
如:
taskService.completeTask("30001");
HistoryService
流程历史服务接口,提供历史流程信息的查询、以及对这些历史流程信息的分析。
ManagementService
控制流程服务接口,提供job的异步控制执行查询。
IdentityService
在流程控制中存在相关人员,既然有相关人员就会相关人员但认证。
3.jbpm中的命令模式
在jbpm的流程服务接口的上层定义了一个抽象的服务Abstractimpl,抽象服务接口持有一个抽象的CommandService的对象,各个服务接口实现抽象服务接口。这样在实现过程中,具体的命令实现抽象接口后,执行自己内部的方法实际上是执行的抽象CommandServcie的excute泛型方法来实现的。
通过将消息发送者和消费者分开,并将消息封装为一个对象。达到消息消费者和消息发送者之间的解耦合,以此能够控制消息的撤销和恢复。并且在消息传递的过程中,无需去考虑消息具体实现。
如同其他的知识一样,在jbpm中常用的只有那么一些小众的api。在这里,笔者不是对于那些大包大揽的学习痴狂者的批评。只是在学习之初,往往需要掌握的就是这些常用的api。