學習JBPM 工作流引擎 API方法(二)
阿新 • • 發佈:2019-01-12
分享一套j簡單的JBPM入門視訊
https://pan.baidu.com/s/1sNv5n0Xk3lXn-YSLxum2EQ
我是在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");
}