欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JBPM工作流

程序员文章站 2022-03-16 19:26:39
...

一、 JBPM了解

       提供流程逻辑的定义方法,提供根据流程逻辑来调度业务对象的功能。可以避免在代码中硬编码流程逻辑,硬编码逻辑难于理解和服用,容易变化,维护起来很困难。

      它的业务逻辑定义没有采用目前的一些规范,如s XPDL, BPML, ebXML, BPEL4WS等,而是采用了它自己定义的jPdl。

       jPdl认为一个业务流程可以被看作是一个UML状态图。jPdl就是详细定义了这个状态图的每个部分,如起始、结束状态,以及状态之间的转换,通过图型化的流程定义,直观地描述业务流程。
JBPM工作流
      JBPM的另一个特色是它使用Hibernate来管理它的数据库。通过Hibernate,jBPM将数据的管理职能分离出去,自己专注于业务逻辑的处理。

二、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");
}
相关标签: Jbpm