JBPM工作流引擎

JBPM工作流引擎JBPM全称为JavaBusinessProcessManagement,业务流程管理,它覆盖了业务流程管理、工作流、服务协议等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。  工作流引擎给我们提供了流程逻辑的定义方法,给我们提供了根据流程逻辑来调度业务对象的功能,能使我们避免在代码中硬编码流程逻辑。下面我们在eclipse中安装JBPM的插件,在eclipse中集成插件的方法

大家好,欢迎来到IT知识分享网。

    JBPM全称为Java BusinessProcess Management,业务流程管理,它覆盖了业务流程管理、工作流、服务协议等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。

    工作流引擎给我们提供了流程逻辑的定义方法,给我们提供了根据流程逻辑来调度业务对象的功能,能使我们避免在代码中硬编码流程逻辑。下面我们在eclipse中安装JBPM的插件,在eclipse中集成插件的方法和大多数插件集成一样,这里不详细介绍。安装完插件需要配置插件运行的环境,然后引入所需要的JBPM jar包。再引入JBPM的jar包时还需要引入Hibernate的jar包,jbpm和hibernate一样都是JBoss公司的产品,其核心都是配置文件,在jbpm中有一个jbpm.cfg.xml配置文件和jbpm.hibernate.cfg.xml位置文件,

    下面汇总JBPM中的基础知识点,对于深入的应用需要实践,在后面的博客我会详细介绍。

一、jbpm的相关jar包:

bsh.jar

jcr-1.0.jar

jbpm-identity.jar

jbpm-jpdl.jar

引入数据库驱动mysql-connector-java-3.1.13-bin.jar

二、提供相关的配置文件:jbpm.cfg.xml和jbpm.hibernate.cfg.xml,并且完成相关的配置

jbpm.hibernate.cfg.xml配置如下:

<hibernate-configuration>
  <session-factory>
  
    <!-- 数据库信息 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>

        <!-- 其他配置 -->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!-- 映射文件 -->
        <mapping resource="jbpm.repository.hbm.xml" />
        <mapping resource="jbpm.execution.hbm.xml" />
        <mapping resource="jbpm.history.hbm.xml" />
        <mapping resource="jbpm.task.hbm.xml" />
        <mapping resource="jbpm.identity.hbm.xml" />
     
  </session-factory>
</hibernate-configuration>

   我们以mysql的数据库为例,在拷贝相关jar包的时候不能忘记mysql的数据库驱动程序。

三、我们需要编写流程定义文件,也就是jpdl文件:

    JPDL(JBossjBPM Process Definition Language)是构建于jBPM框架上的流程语言之一。在jPDL中提供了任务(tasks)、待处理状态(waitstates)、计时器(timers)、自动处理(automated actions)….等术语,并通过图形化的流程定义,很直观地描述业务流程。

JBPM工作流引擎

test.jpdl.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<process key="test" name="test" xmlns="http://jbpm.org/4.4/jpdl">
   <start g="303,29,48,48" name="start1">
      <transition g="-52,-22" name="提交到科长" to="科长审批"/>
   </start>
   <task assignee="张三" g="279,148,92,52" name="科长审批">
      <transition g="-52,-22" name="提交到主任" to="主任审批"/>
   </task>
   <task assignee="李四" g="281,256,92,52" name="主任审批">
      <transition g="-50,-22" name="通过" to="end1"/>
   </task>
   <end g="305,359,48,48" name="end1"/>
	
</process>

   每一个jpdl文件都有一个key值,我们就是根据这个key值来创建流程实例。

四、我们做进一步的抽象,将一些公共的方法抽象出来成为一个抽象类,用于继承。

   每一个工作流程都需要开启流程服务和拿到流程对象引擎。

package com.tgb.video;

import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.IdentityService;
import org.jbpm.api.ManagementService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;

import junit.framework.TestCase;

public class JbpmTestCase extends TestCase {
	
	protected RepositoryService repositoryService;//部署流程服务
	
	protected ExecutionService executionService;//流程执行服务
	
	protected TaskService taskService;//任务服务
	
	protected HistoryService historyService;//历史服务
	
	protected ManagementService managementService;//流程管理服务
	
	protected IdentityService identityService;//身份认证服务
	
	
	protected void startUp(){
		//拿到ProcessEngine流程对象引擎
		ProcessEngine processEngine=Configuration.getProcessEngine();
		//开启所有的服务
		repositoryService=processEngine.getRepositoryService();
		executionService=processEngine.getExecutionService();
		taskService=processEngine.getTaskService();
		historyService=processEngine.getHistoryService();
		managementService=processEngine.getManagementService();
		identityService=processEngine.getIdentityService();
		
	}
	
	public void print(String name ,String value){
		System.out.print(name+"======="+value);
		
	}
}

    每一个流程都需要流程部署,创建流程实例,获取当前节点,获取任务和结束任务。所以我们也把这部分的操作抽象出来:

package com.tgb.video;

public interface JbpmUtil {
	public void deploy();//部署流程
	public void createInstance();//创建流程实例
	public void getCurrectActivity();//获取流程当前节点
	public void getTask();//获取任务
	public void completeTask();//完成任务
}	

部署、流程实现:

1、部署流程:

	public void deploy(){
		//拿到ProcessEngine流程对象引擎
		ProcessEngine processEngine=Configuration.getProcessEngine();
		//拿到RepositoryService服务
		RepositoryService repositoryService=processEngine.getRepositoryService();
		//通过xml文件部署
		repositoryService.createDeployment().addResourceFromClasspath("test.jpdl.xml").deploy();
	}

2、创建流程实例:

	public void createInstance(){
		ProcessEngine processEngine=Configuration.getProcessEngine();
		ExecutionService executionService=processEngine.getExecutionService();
		ProcessInstance 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 getCurrectActivity(){
		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 complateTask(){
		ProcessEngine processEngine=Configuration.getProcessEngine();
		TaskService taskService=processEngine.getTaskService();
		taskService.completeTask("20001");
	}

    整个流程就是这样,流程开始先要部署,然后创建流程实例获得流程实例的ID,然后根据ID查看当前流程所在节点,然后根据人员信息查看当前人员的任务,根据任务ID来结束任务。

    下篇博客我们分析JBPM的几个服务。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/11810.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信