jBPM4.4+spring3

虽然基于jBPM4延续的Activiti5已经推出很长时间了,但是jBPM4在项目中还是有很广泛的使用。  

1、使用的相关开发工具软件。

  1)Eclipse IDE for Java EE Developers(Eclipse 4.2)

  2)jBPM4.4

  3)MySQL5.5

2、配置在Eclipse中设计流程的gpd插件。

  1)gpd插件所在目录:jbpm-4.4\install\src\gpd\jbpm-gpd-site.zip

  2)安装插件:Eclipse菜单 Help-->Install New Softwore...打开Install窗口;在Install窗口点击 Add...打开Add Repository窗口;在Add Repository窗口点击Archive...在插件所在目录选择jbpm-gpd-site.zip

  3)安装完成会提示是否重启Eclipse,选择重启。

3、配置jBPM的Runtime Locations。

  1)Eclipse菜单 Window-->Preferences-->JBoss jBPM-->Runtime Locations

  2)在Runtime Locations窗口点击Add...打开Add Location窗口,Name:起个名字,如jBPM4.4;Location:选择jBPM4.4的解压安装目录。

4、使用单元测试实现First jBPM4。

  1)新建一个Java Project,取名FirstJBPM4。

  2)把jbpm-4.4\jbpm.jar和jbpm-4.4\lib下的所有jar文件添加到项目的classpath路径下。(或者把jBPM4.4的所有jar配置成一个User Library,然后在项目中直接引用)

  3)把jbpm-4.4\examples\src目录下的jbpm.cfg.xml、jbpm.hibernate.cfg.xml和logging.properties加入到项目的src目录下。

  4)FirstJBPM4项目结构如下。

                                         

  5)修改jbpm.hibernate.cfg.xml文件,配置数据库相关信息。

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

<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<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/jbpm4</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>

        <!-- 其他配置 -->
        <property name="hibernate.show_sql">false</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>

  6)在MySQL中建立一个数据库叫jbpm4。

create database jbpm4 default character set utf8;

  7)在项目名称上点击右键New-->Source Folder,取名process。process和src是同级的,在process下存放流程定义文件。

  8)设计请假流程定义文件。在process下建立一个Package叫leave,然后leave上点击右键New-->jBPM Process Definition,取名Leave。

                                              

  9)画流程图,用assignee分配相应的任务处理人员

                                                  

  Leave.jpdl.xml文件如下

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

<process name="Leave" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="303,8,48,48">
      <transition name="to 提出申请" to="提出申请" g="-67,-20"/>
   </start>
   <end name="end1" g="303,340,48,48"/>
   <task name="提出申请" g="281,88,92,52" assignee="[员工]小李">
      <transition name="to 部门经理审批" to="部门经理审批" g="-91,-20"/>
   </task>
   <task name="部门经理审批" g="281,172,92,52" assignee="[部门经理]李总">
      <transition name="to 总经理审批" to="总经理审批" g="-79,-20"/>
   </task>
   <task name="总经理审批" g="281,256,92,52" assignee="[总经理]张总">
      <transition name="to end1" to="end1" g="-45,-20"/>
   </task>
</process>

  整个流程就是:[员工]小李提出申请--》[部门经理]李总审批--》[总经理]张总审批

  10)单元测试代码。

package cn.luxh.jbpm4;

import java.util.List;

import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.task.Task;
import org.junit.Test;



public class JBPM4Test {
    
       //建立jBPM4.4的数据库表
        @Test
        public void testCreateSchema() {
            new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory();
        }
        
        //流程引擎,通过流程引擎获取各种服务接口
        private ProcessEngine processEngine = Configuration.getProcessEngine();
        
        
        //部署流程定义
        @Test
        public void testDeployProcessDefinition() {
            processEngine.getRepositoryService()
                                .createDeployment()
                                .addResourceFromClasspath("leave/Leave.jpdl.xml")
                                .addResourceFromClasspath("leave/Leave.png").deploy();
        }
        
        //启动流程实例
        @Test
        public void testStartProcessInstance() {
            ProcessInstance processInstance = processEngine.getExecutionService().startProcessInstanceByKey("Leave");
            System.out.println("processInstance id is:"+processInstance.getId());
            System.out.println("processInstance key is:"+processInstance.getKey());
            System.out.println("processInstance name is:"+processInstance.getName());
        }
        
        //查找用户待办任务
        @Test
        public void testFindTasksByUserId() {
            String userId = "[员工]小李";
            //String userId = "[部门经理]李总";
            //String userId = "[总经理]张总";
            List<Task> tasks = processEngine.getTaskService().findPersonalTasks(userId);
            for(Task task : tasks) {
                System.out.println("当前处理人:"+task.getAssignee()+" 当前任务:"+task.getName());
            }
        }
        
        //处理待办
        @Test
        public void testCompleteTask() {
            String userId = "[员工]小李";
            //String userId = "[部门经理]李总";
            //String userId = "[总经理]张总";
            List<Task> tasks = processEngine.getTaskService().findPersonalTasks(userId);
            for(Task task : tasks) {
                processEngine.getTaskService().completeTask(task.getId());
            }
        }
        
}


一、准备数据库

  • 1.1首先安装ant   >>>>  baidu  or google
  • 1.2修改jbpm4.4的mysql.properties,主要是创建数据库的时候能对应你在mysql里面建立的schema,因为jbpm默认是用hibernate实现数据库的持久化 >>>>>D:\jbpm-4.4\install\jdbc
  • 1.3    cmd到>>>>>D:\jbpm-4.4\install 运行ant -Ddatabase=mysql create.jbpm.schema
    当看到 Successful字样的时候,去数据库检查一下看看表是否都建好了

二、创建Project

  • 2.1首先要创建一个Dynamic Web Project项目,并将jbpm配置文件放在指定位置,最后引入D:\jbpm-4.4\lib 下的jar
  • 我的jbpm.hibernate.cfg.xml
    1. <?xml version="1.0" encoding="utf-8"?> 
    2.  
    3. <!DOCTYPE hibernate-configuration PUBLIC  
    4.           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
    5.           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
    6. <hibernate-configuration> 
    7.   <session-factory> 
    8.      <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> 
    9.      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    10.      <property name="hibernate.connection.url">jdbc:mysql://192.168.0.100:3307/mtf_jbpm</property> 
    11.      <property name="hibernate.connection.username">MTF</property> 
    12.      <property name="hibernate.connection.password">a123b456</property> 
    13.      <property name="hibernate.hbm2ddl.auto">update</property>  
    14.  
    15.     <!--  <property name="show_sql">false</property> 
    16.     <property name="hibernate.format_sql">true</property> --> 
    17.  
    18.      <mapping resource="jbpm.repository.hbm.xml" /> 
    19.      <mapping resource="jbpm.execution.hbm.xml" /> 
    20.      <mapping resource="jbpm.history.hbm.xml" /> 
    21.      <mapping resource="jbpm.task.hbm.xml" /> 
    22.      <mapping resource="jbpm.identity.hbm.xml" />   
    23.  
    24.   </session-factory> 
    25. </hibernate-configuration> 

    需要注意的是hibernate.hbm2ddl.auto create-drop是默认,有点遗忘……

  • 2.3引入jbpm的jar >>D:\jbpm-4.4\lib 下,注意包的冲突,不要引入重复的
  • 1.   ${JBPM_HOME}/jbpm.jar(核心包)

    2.   JBPM_HOME/lib/*.jar,不添加以下jar包:servlet-api.jar, junit.jar。其中junit.jar一定不要添加,因为是3.8.2版本,与我们使用的junit4有冲突。

    3.   所使用的数据库对应的驱动的jar包(第2步所添加的jar包中已包含mysqljdbc驱动jar包)。

三、部署流程到Mysql数据库

  • 3.1需要写一个Junit testCase
    1. public class LeaveDeploy {  
    2.     private String deploymentId;  
    3.     private ProcessEngine processEngine;  
    4.     private TaskService taskService;  
    5.     private RepositoryService repositoryService;  
    6.     private ExecutionService executionService;  
    7.     private HistoryService historyService;  
    8.     @Test 
    9.     public void testDeploy() {  
    10.         processEngine = new Configuration().getProcessEngine();  
    11.         repositoryService = processEngine.getRepositoryService();  
    12.         executionService = processEngine.getExecutionService();  
    13.         taskService = processEngine.getTaskService();  
    14.         historyService = processEngine.getHistoryService();  
    15.         deploymentId = processEngine.getRepositoryService().createDeployment()  
    16.                 .addResourceFromClasspath("com/mtf/jbpm/process/leaveProcess.jpdl.xml")  
    17.                 //指定jpdl.xml的路径  
    18.             //  .addResourceFromClasspath("test/leaveProcess.png")  
    19.                 .deploy();  
    20.         System.out.println("发布成功!");  
    21.         System.out.println(deploymentId);  
    22.     }         

    运行junit,成功后发现数据库中有相应的记录就成功啦,其间可能遇到运行成功但是数据库没有字段增加的情况,忘了怎么解决了,我记的是粗心大意所致
     

四、总结

        这部分其实是很简单的,我刚开始用jbpm4.4的时候就是持久化不了数据库,记忆中好像是因为哪个地方配置出错了……还有就是我写的项目其实很偷 懒,jbpm实际上要求我们管理流程定义(增删改查),部署流程实际上推荐我们打成zip包上传到服务端然后在持久化到数据库
 

猜你喜欢

转载自ssydxa219.iteye.com/blog/1769698