jBPM4.x入門教程
什麼是JBPM?
全稱是Java Business Process Management(業務流程管理),它是覆蓋一業務流程管理、工作流、服務協作等領域的一個開源的、靈活的、易擴充套件的可執行流程語言框架。它給我們提供流程邏輯的定義方法,給我們提供根據流程邏輯來排程業務物件的功能。能使我們避免在程式碼中硬編碼流程邏輯,因為硬編碼的邏輯難於理解和複用,並且非常容易受到變化的影響,維護起來極度困難。
注意:JBPM中是工作流中的一種,其它的還有activiti、OSWorkflow等等。
JBPM安裝配置
開發環境:Eclipse+GPD外掛+tomcat
安裝過程:
1、下載並安裝Eclipse3.x、jbpm4.x、tomcat6.x
2、安裝GPD外掛(eclipse圖形化流程設計器):"eclipse->help->Install New Software...->add->Archive",選擇jbpm安裝目錄install/src/gdp目錄下的jbpm-gpd-site.zip進行安裝。安裝成功後,配置jbpm執行環境"eclipse->Preference->JBoss jBPM->Runtime Location->add"選擇jbpm的安裝目錄。
3、配置JPDL xml的schema:"eclipse->Preference->XML->XML Catalog->add->File System
4、匯入開發用的jbpm jar包(包含jbpm安裝目錄中的jbpm.jar和lib下的所有包,最好建立User Libary)
5、建立配置檔案jbpm.cfg.xml和jbpm.hibernate.cfg.xml:若不知怎麼寫可參看jbpm安裝目錄中examples/src中的,然後根據自己需要修改即可。
6、設計自己的流程定義和Java類,正式開發
JBPM開發步驟
1、業務人員進行業務分析,建立process definition(其實是活動圖)。
2、根據業務人員建立的process definition建立JBPM的流程定義(即*.jpdl.xml檔案)。
3、開發人員編寫流程處理程式碼
4、開發人員,或者系統管理員進行流程部署,通常情況下系統都會有流程釋出的UI。
5、使用者進行流程操作。
JBPM例項
1、管理流程定義
部署流程定義:
String deploymentId=repositroyService.createDeployment().addResourceFromClasspath("asdf.jpdl.xml").deploy();
查詢流程定義:List<ProcessDefinition> list=repositroyService.createProcessDefinitionQuery().list();
刪除流程定義:repositroyService.deleteDeploymentCascade(deploymentId);
2、管理流程例項:
發起新流程:ProcessInstance pi=executionService.startProcessInstanceByKey("test",map);
執行等待的流程:pi=executionService.signalExecutionById(pi.getId());
檢視流程例項:List<ProcessInstance> list=executionService.createProcessInstanceQuery().list();
終止流程例項:executionService.endProcessInstance(pi.getId(),"終結理由");
刪除流程例項:executionService.deleteProcessInstanceCascade(pi.getId());
3、查詢當前任務例項:executionService.findProcessInstanceById("test.1001");
4、查詢角色任務:taskService.findPersonalTasks("科長");
5、完成提交:taskService.completeTask("2001");
JBPM核心物件
Configuration和ProcessEngine
Configuration是jbpm的配置檔案管理物件即資源載入物件,負責載入jbpm的各種配置,如資料庫連線配置,身份認證,jpdl等相關配置。
ProcessEngine是一個服務工廠,有點類似hibernate的sessionFactory,負責建立jbpm的每個服務。
1、ProcessEngine通過Configuration類構建,Configuration以單例模式獲取ProcessEngine物件
2、ProcessEngine是執行緒安全的,所有的執行緒和請求都可以使用同一個ProcessEngine物件
3、ProcessEngine processEngine=Configuration.getProcessEngine();
JBPM服務
1、RepositoryService:流程資源服務介面。提供對流程定義的部署、查詢、刪除和流程圖檢視等操作。
2、ExecutionService:流程執行服務介面。提供啟動流程例項、推進、刪除等操作。
3、TaskService:人工任務服務介面。提供對任務的建立、提交、查詢、儲存、刪除等操作。
4、HistoryService:流程歷史服務介面。提供對任務的管理操作。提供對流程歷史庫中流程例項、歷史活動例項等記錄的查詢。
5、ManagementService:流程管理介面,通常用來管理Job(非同步服務)。
6、IdentityService:身份認證服務介面。提供對流程使用者、使用者組管理。
JBPM流程變數
1、流程例項變數ProcessInstance
新增變數:
Map<String,Object> avriable=new HashMap<String,Object>();
variable.put("userId","001");
variable.put("userName","tom");
ProcessInstance processInstance=executionService.startProcessInstanceByKey("test",variable);
獲取變數:
String userId=executionService.getVariable("test.3001","userId").toString();
修改變數:
executionService.setVariable("test.3001","userId","10098");
移除變數:流程結束,便移除了流程變數。
2、任務變數Task
新增變數:
Map<String,Object> avriable=new HashMap<String,Object>();
variable.put("taskUserId","001");
variable.put("taskUserName","tom");
taskService.setVariable("5004",variable);
獲取變數:
String userId=taskService.getVariable("5004","taskUserName");
移除變數:
3、變數作用域,兩種變數之間的關係。
任務變數與流程變數:流程變數>任務變數
流程變數與流程變數:不同的流程例項變數不能互相訪問。
任務變數與任務變數:不同任務的任務變數不能互相訪問。
JBPM EL表示式
1、JBPM使用EL表示式獲取變數${name}
2、使用EL表示式執行物件方法
流程定義語言JPDL
JPDL(JBoss jBPM Process Definition Language)是構建於jBPM構架上的流程語言之一。在JPDL中提供了任務(task)、待處理狀態(wait states)、計時器(timers)、自動處理(automated actions)...等術語,並通過圖型化的流程定義,很直觀地描述業務流程。
JPDL常用活動(Activity)節點
1、控制流程的活動:能改變流程狀態的活動
Start(開始活動)
End(結束活動)
Decision(判斷活動)
Fork-join(分支活動);
sub-process(子流程)
State(狀態活動)
Task(人工任務活動)
2、原子活動:並不會對流程進行排程,而是執行相關程式碼。
java
script
sql
hql
email
JBPM Task人工任務活動
1、任務分配的幾種方式
Assignee
Candidate-groups
assingmentHander
Swimlanes
2、表單屬性form
轉載於:https://blog.51cto.com/netbloomy/1205533