jBPM4.4之開發環境搭建


  雖然基於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());
            }
        }
        
}

 

  

 

 

   

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM