在讲解jbpm的各种流程服务之前我们应该先了解JBPM的两个核心对象,ProcessEngine和Configuration,Configuration是jbpm的配置文件管理对象即资源加载对象,负责加载jbpm的各种配置如数据库连接配置,事务配置,身份认证,jpdl等相关配置。 ProcessEngine是一个服务工程,通过Configuration类创建,和hibernate中的sessionFactory类似,它负责创建jbpm的每一个服务。ProcessEngine是线程安全的,所有的线程和请求都可以使用同一个ProcessEngine对象。首先我们需要先创建流程对象引擎:
ProcessEngineprocessEngine=Configuration.getProcessEngine();
在这个流程对象引擎里面就包含了所有的服务,我们依次来认识这几个服务:
1、RepositoryService服务:流程资源服务的接口,提供对流程定义的部署、查询、删除和流程图查看等操作。下面是从流程引擎里面拿到这个服务然后部署流程的过程:
RepositoryService repositoryService=processEngine.getRepositoryService();
repositoryService.createDeployment().addResourceFromClasspath("test.jpdl.xml").deploy();
2、ExecutionService服务:流程执行服务的接口,提供启动流程实例、推进、删除等操作。下面是拿到该服务并创建流程实例的过程:
ExecutionService executionService=processEngine.getExecutionService();
ProcessInstance processInstance=(ProcessInstance)executionService.
startProcessInstanceByKey("test");
3、TaskService服务:人工任务服务接口,提供对任务的创建、提交、查询、保存、删除等操作。下面是拿到该服务接口,并查询任务:
TaskServicetaskService=processEngine.getTaskService();
List<Task>tasks=taskService.findPersonalTasks("李四");
4、HistoryService:服务,通过对任务的关联操作,对流程历史库中历史流程实例、历史活动实例等记录的查询。下面是拿到该服务并创建历史流程实例查询和历史流程任务查询的过程:
HistoryServicehistoryService=processEngine.getHistoryService();
HistoryProcessInstancehpi = historyService
.createHistoryProcessInstanceQuery().processInstanceId(pid)
.uniqueResult();
HistoryTaskhistoryTask = historyService.createHistoryTaskQuery()
.taskId(task.getId()).uniqueResult();
5、ManagementService服务:用户流程管理接口,通常用来管理Jop异步服务。先是该服务的创建过程:
ManagementServicemanagementService=processEngine.getManagementService();
6、IdentityService服务:用于身份认证服务接口,提供对流程用户、用户管理等操作。下面是该服务的创建过程:
IdentityServiceidentityService=processEngine.getIdentityService();
上面就是在jbpm中经常用到的几个服务,工作流的含义就是我们用这种可视化的工具创建一个流程图,然后对流程图进行部署,创建具体的流程实例,针对流程实例完成相应的操作,而任务就包含在实例里面,当然关于流程变量和任务变量的区别,我们之后的博客会介绍。在整个流程创建到销毁的过程都需要特定的服务接口来完成,这些服务接口都是通过流程引擎来获取,素以服务之间相互依存,共同完成流程实例,而流程引擎又需要Configuration流程资源加载后完成,所以jbpm的两个核心至关重要。