下面开始使用jbpm,不过在进行之前要明确一点,就是流程定义与流程实例的区别,一个流程定义就是相当于java中的类,一个流程实例就是相当于java中的实例对象,一个流程有一个Key,一个流程实例有一个id。这样下面的service类的使用就容易区分很多了。好吧,现在就开始下面的实践。附件的内容是一份不错的资料,可以好好看一下,主要的内容等一下更新。
以上两种方式创建流程引擎:(其他的服务都是用processEngine来获得)
ProcessEngine processEngine = Configuration.getProcessEngine();
ProcessEngine processEngine = new Configuration("my.xml").setResource().buildProcessEngine();
主要的服务:
RepositoryService------------------提供对流程定义的部署、查询、删除等操作;
ExecutionService-----------------提供流程实例、"执行"、推进、设置流程变量等;
ManagementService------------------提供流程管理控制服务,异步job;
TaskService------------------提供人工服务的创建,提交,查询,保存,删除等;
HistoryService
IdentityService-----------------身份认证,用户,用户组,组与成员关系;
开始部署(把流程入库):(其他还有很多种方式:addResourceFrom
XXX)
String deploymentId = reposityoryService.createDeployment().addResourceFromClasspath("org/jbpm/Order.jpdl.xml").deploy();
部署完了就要发起流程实例了(部署流程也是为了要用的哈,也是有很多种startProcessInstanceByKey的重载,看具体需求,API里面很多的)
ProcessInstance processInstance = executionService.startProcessInstanceByKey("Order");
最好的应该是下面的方式:(自己指定业务键Order1001,方便后续处理)
ProcessInstance processInstance = executionService.startProcessInstanceByKey("Order","Order1001");
这样处理会生成ID为Order.Order1001的流程实例
如果有时要与流程交互的话,变量的交换就少不了了,变量是用Map传给流程的
Map<String,Object> variables = new HashMap<String,Object>();
variables.put("var1","Alex");
ProcessInstance processInstance = executionService.startProcessInstanceByKey("Order",variables,"Order1001");
有个疑问:
如果执行了下面这一句的话是不是以后的流程产生实例就不用执行了??
deploymentId = repositoryService.createDeployment()
.addResourceFromClasspath("org/jbpm/examples/end/state/process.jpdl.xml")
.deploy();