1. 程式人生 > >學習JBPM 工作流引擎 API方法(二)

學習JBPM 工作流引擎 API方法(二)

分享一套j簡單的JBPM入門視訊

https://pan.baidu.com/s/1sNv5n0Xk3lXn-YSLxum2EQ 

提取碼:idfq 
 

我是在eclipse當中安裝的JBPM

安裝好JBPM之後,建立一個java專案 ,整個JBPM執行所需要的包

(所需要的jar包在視訊當中有詳細區分,並且整合完成的直接複製使用就好)

 

 資料庫用的是MySql的我提前安裝好了,並且是用的navicat連線的

 

然後可以在建立的java專案中配置jbpm的配置檔案

 

 

 jbpm.cfg.xml

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

<jbpm-configuration>

  <import resource="jbpm.default.cfg.xml" />
  <import resource="jbpm.businesscalendar.cfg.xml" />
  <import resource="jbpm.tx.hibernate.cfg.xml" />
  <import resource="jbpm.jpdl.cfg.xml" />
  <import resource="jbpm.bpmn.cfg.xml" />
  <import resource="jbpm.identity.cfg.xml" />

  <!-- Job executor is excluded for running the example test cases. -->
  <!-- To enable timers and messages in production use, this should be included. -->
  <!--
  <import resource="jbpm.jobexecutor.cfg.xml" />
  -->

</jbpm-configuration>

 

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:///jbpm01</property>
     <property name="hibernate.connection.username">root</property>
     <property name="hibernate.connection.password">u04</property>
     <property name="hibernate.hbm2ddl.auto">update</property>
     <property name="hibernate.format_sql">true</property>
     <property name="hibernate.show_sql">true</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>

 

 log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, stdout

 

配置完成之後,我們用已經安裝好的JBPM外掛畫出我們要測試用的的流程圖

具體修改流程的數值視訊當中有解釋,這裡就不說了

 

接下來我們就開始使用JBPM的API中的方法來演示一個完整的工作流程需要到那些的方法。

先建立 QuickStartTest 類

package cn.itcast.jbpm.a_quickstart;


import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.NewDeployment;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;
import org.junit.Test;



public class QuickStartTest {

	 @Test
	 //使用hibernate載入配置檔案完成建表操作
	 public  void testHibernateCreateTable(){
		 //能否使用hibernate載入配置檔案,建立表
		//載入hibernate.properties
		org.hibernate.cfg.Configuration configuration= new  org.hibernate.cfg.Configuration();
		configuration.configure("jbpm.hibernate.cfg.xml");//預設載入jbpm.hibernate.cfg.xml
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session =sessionFactory.openSession();
		session.close();
		sessionFactory.close();
	
	}
	 
	 @Test
	 //使用jbpm方式建表
	 public  void testJbpmCreateTable(){
		 //使用jbpm提供configuiation
		 org.jbpm.api.Configuration.getProcessEngine();
		 
	 }
	 
	 @Test
	 //部署流程
	 public void testDeploy(){
		//獲取引擎
		 ProcessEngine processEngine = org.jbpm.api.Configuration.getProcessEngine();
		 //獲得例項管理service
		 RepositoryService repositoryService = processEngine.getRepositoryService();
		//建立一個部署物件
		NewDeployment createDeployment = repositoryService.createDeployment();
		
		createDeployment.addResourceFromClasspath("helloworld/helloworld.jpdl.xml");
		createDeployment.addResourceFromClasspath("helloworld/helloworld.png");
		// 釋出
		createDeployment.deploy();
		 
	 }
	 
	 @Test
	 //測試啟動流程
	 public void testStartProccess(){
		 ProcessEngine processEngine = org.jbpm.api.Configuration.getProcessEngine();
		 //啟動流程 獲得ExecutionService
		 ExecutionService executionService = processEngine.getExecutionService();
		 //啟動 (通過看錶才能知道id,使用較少)
//		 executionService.startProcessInstanceById("1");
		 
		 //設計流程時,流程有name -----預設生成流程key
		 executionService.startProcessInstanceByKey("helloworld");
		 
	 }
	 
	 @Test
	 //檢視個人任務
	 public void testFindPersonlTask(){
			ProcessEngine processEngine = org.jbpm.api.Configuration.getProcessEngine();
			//檢視任務
			TaskService taskService = processEngine.getTaskService();
			//查詢個人任務
			List<Task> tasks = taskService.findPersonalTasks("員工");
			System.out.println(tasks.size());
			 for (Task task : tasks) {
					System.out.println("任務id : " + task.getId());
					System.out.println("任務名稱: " + task.getName());
					System.out.println("任務的辦理人 : " + task.getAssignee());
					System.out.println("執行流程例項id :" + task.getExecutionId());
					System.out.println("----------------");
			}
	 }
	 
		@Test
		// 辦理任務
		public void testCompleteTask(){
			ProcessEngine processEngine = org.jbpm.api.Configuration.getProcessEngine();
			// 檢視任務
			TaskService taskService = processEngine.getTaskService();
			
			// 必須通過任務id進行辦理
			//taskService.completeTask("80002");
			taskService.completeTask("90001");
		}
	 
	 
	 
}

 

 

//使用hibernate載入配置檔案完成建表操作  

先拿到JBPM的核心引擎(引擎包含很多的服務Service類,這些服務類每個都有明確的分工來處理流程的進度與資料處理)

 

	 @Test
	 //使用hibernate載入配置檔案完成建表操作
	 public  void testHibernateCreateTable(){
		 //能否使用hibernate載入配置檔案,建立表
		//載入hibernate.properties
		org.hibernate.cfg.Configuration configuration= new  org.hibernate.cfg.Configuration();
		configuration.configure("jbpm.hibernate.cfg.xml");//預設載入jbpm.hibernate.cfg.xml
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session =sessionFactory.openSession();
		session.close();
		sessionFactory.close();
	
	}

執行方法完成後資料庫預設生成18張表

 

部署我們剛剛畫好的請假流程,指定名稱部署

	 @Test
	 //部署流程
	 public void testDeploy(){
		//獲取引擎
		 ProcessEngine processEngine = org.jbpm.api.Configuration.getProcessEngine();
		 //獲得例項管理service
		 RepositoryService repositoryService = processEngine.getRepositoryService();
		//建立一個部署物件
		NewDeployment createDeployment = repositoryService.createDeployment();
		
		createDeployment.addResourceFromClasspath("helloworld/helloworld.jpdl.xml");
		createDeployment.addResourceFromClasspath("helloworld/helloworld.png");
		// 釋出
		createDeployment.deploy();
		 
	 }

 

部署好請假流程之後,接下來就是要啟動我們的請假流程

	 @Test
	 //測試啟動流程
	 public void testStartProccess(){
		 ProcessEngine processEngine = org.jbpm.api.Configuration.getProcessEngine();
		 //啟動流程 獲得ExecutionService
		 ExecutionService executionService = processEngine.getExecutionService();
		 //啟動 (通過看錶才能知道id,使用較少)
//		 executionService.startProcessInstanceById("1");
		 
		 //設計流程時,流程有name -----預設生成流程key
		 executionService.startProcessInstanceByKey("helloworld");
		 
	 }

 

啟動流程後,第一個接受人是員工,此時員工的任務列表中就會有一個處理任務

	 @Test
	 //檢視個人任務
	 public void testFindPersonlTask(){
			ProcessEngine processEngine = org.jbpm.api.Configuration.getProcessEngine();
			//檢視任務
			TaskService taskService = processEngine.getTaskService();
			//查詢個人任務
			List<Task> tasks = taskService.findPersonalTasks("員工");
			System.out.println(tasks.size());
			 for (Task task : tasks) {
					System.out.println("任務id : " + task.getId());
					System.out.println("任務名稱: " + task.getName());
					System.out.println("任務的辦理人 : " + task.getAssignee());
					System.out.println("執行流程例項id :" + task.getExecutionId());
					System.out.println("----------------");
			}
	 }

 

員工辦理當前任務,員工辦理完任務後當前任務就會流轉到了部門經理那,而後以此類推最後總經理處理完成後,請假流程就走完了,從這個這個簡單的請假例子當中可以體現出JBPM幫我們做了許可權控制業務流轉等操作大大的方便了我們的開發。

		@Test
		// 辦理任務
		public void testCompleteTask(){
			ProcessEngine processEngine = org.jbpm.api.Configuration.getProcessEngine();
			// 檢視任務
			TaskService taskService = processEngine.getTaskService();
			
			// 必須通過任務id進行辦理
			//taskService.completeTask("80002");
			taskService.completeTask("90001");
		}