JBPM工作流
程序员文章站
2022-03-16 19:26:39
...
一、 JBPM了解
提供流程逻辑的定义方法,提供根据流程逻辑来调度业务对象的功能。可以避免在代码中硬编码流程逻辑,硬编码逻辑难于理解和服用,容易变化,维护起来很困难。
它的业务逻辑定义没有采用目前的一些规范,如s XPDL, BPML, ebXML, BPEL4WS等,而是采用了它自己定义的jPdl。
jPdl认为一个业务流程可以被看作是一个UML状态图。jPdl就是详细定义了这个状态图的每个部分,如起始、结束状态,以及状态之间的转换,通过图型化的流程定义,直观地描述业务流程。
JBPM的另一个特色是它使用Hibernate来管理它的数据库。通过Hibernate,jBPM将数据的管理职能分离出去,自己专注于业务逻辑的处理。
二、JBPM核心对象
1、RepositoryService:流程资源服务接口。
—— 提供对流程定义的部署、查询、删除和流程图查看等操作
2、ExecutionService:流程执行服务接口。
—— 提供启动流程实例、推进、删除等操作
3、TaskService:人工任务服务接口。
—— 提供对任务的创建、提交、查询、保存、删除等操作
4、HistoryService:流程历史服务接口。
—— 提供对任务的管理操作。提供对流程历史库中历史流程实例、历史活动实例等记录的查询
5、ManagementService:流程管理接口。
—— 管理Jop(异步服务)
6、IdentityService:身份认证服务接口。
—— 提供对流程用户、用户组管理
三、JBPM实现流程
1、部署流程
/**
* 部署流程
*/
public void deploy() {
ProcessEngine processEngine = Configuration.getProcessEngine();
RepositoryService repositoryService = processEngine
.getRepositoryService();
repositoryService.createDeployment()
.addResourceFromClasspath("test.jpdl.xml").deploy();
}
2、创建流程实例
/**
* 请假流程
*/
public void createInstance() {
ProcessEngine processEngine = Configuration.getProcessEngine();
ExecutionService executionService = processEngine.getExecutionService();
ProcessInstance processInstance = executionService
.startProcessInstanceByKey("test");
System.out.println("流程实例ID====" + processInstance.getId());
}
3、拿到任务
/**
* 获取对应人员任务
*/
public void getTask() {
ProcessEngine processEngine = Configuration.getProcessEngine();
TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.findPersonalTasks("张三");
System.out.println("任务数量:=====" + tasks.size());
Task task = tasks.get(0);
System.out.println("任务名称:=====" + task.getActivityName());
System.out.println("任务人员:=====" + task.getAssignee() + "任务ID===="
+ task.getId());
}
4、查询任务流程当前所在节点
/**
* 查询流程实例当前所在节点
*/
public void getCurrentActivity() {
ProcessEngine processEngine = Configuration.getProcessEngine();
ExecutionService executionService = processEngine.getExecutionService();
String activityName = executionService.createProcessInstanceQuery()
.processInstanceId("test.10001").uniqueResult().findActiveActivityNames().toString();
System.out.println("当前任务所在节点===" + activityName);
}
5、完成任务
/**
* 完成任务
*/
public void completeTask() {
ProcessEngine processEngine = Configuration.getProcessEngine();
TaskService taskService = processEngine.getTaskService();
taskService.completeTask("10002");
}