1. 程式人生 > >用OSWorkFlow和JBPM開發工作流異同

用OSWorkFlow和JBPM開發工作流異同

一、OSWorkFlowJBPM開發工作流,首先要做的都是編寫工作流描述檔案,在此基礎上再進一步做相關的配置和呼叫。

二、編寫流程描述檔案方式

1、JBPM是通過圖形化的編輯工具(JBPM自帶的Eclipse外掛)來編寫業務流程如開始狀態,結束狀態,以及狀態之間的轉換,之後會自動生成XML檔案,但具體每一步相關的細節操作還是要手工配置(如該節點是屬於什麼型別節點,相關的函式,要不要較驗)。

2、OSWorkFlow則要通過手工寫XML檔案來定義流程檔案,而且它涉及的標籤元素比較多,其使用者手冊上也建議實施人員不要去修改流程,否則流程很容易破壞。

三、工作流資訊儲存方式

1、JBPM是將流程資訊直接儲存到資料庫,可以用任何方式對資料庫的操作,這樣就要引入儲存工作流資訊的相關表。

2、OSWorkFlow是既可以儲存在XML檔案裡,也可以儲存在資料庫中,儲存在資料庫中時需要配置propertySet.xml檔案,比較複雜,而且它不是完全支援hibernate(如引入osuser來作許可權分析時),此時要自定義操作資料庫的方式。

四、與系統整合

1、JBPM整合比較容易,加入Spring支援包spring-modules-jbpm31.jar,該包加入了SpringJBPM的包裝,所有的整合都是在此包基礎之上。之後還要配置sessionFactoryForJbpm ,jbpmConfiguration,jbpmTemplate, jbpmDao

2、OSWorkFlow

Spring整合須要如下所需元件:

1) SpringHibernateWorkflowStore,讓工作流程例項(如果需要的話)分享當前事務。

2) SpringTypeResolver,允許 OSWorkflow Spring ApplicationContext中獲得業務邏輯元件(conditions, functions等等)

3) SpringConfiguration這是一個 Workflow Configuration 介面的實現類,它包含指向 store factory的引用,這樣可以在 spring 中注射或者連線。

4) SpringWorkflowFactory

,這是一個 XMLWorkflowFactory 封裝包,它可以允許從容器中注入 configuration,從而不再從其它的 XML 配置檔案中讀取它們。

如果OSWorkFlow引入osuser.xml來設定許可權,則不支援Hibernate3因為osuser是比較獨立的模組,目前還沒有支援hibernate3,所以跟Spring整合時要修改配置檔案applicationContext-hibernate3.xml

五、能否實現可定製流程

目前我也不太清楚能否實現流程可定製,而文件中所給出的例子都是事先寫好流程描述檔案。據我所理解的,流程中的每一步都有相應的事件,該事件由一個動作(函式)實現,有些步可能要使用者參與,由使用者去決定下一步的流轉。因此我現在的理解是流程是事先寫好,如果要改變流程,則它相應每一步的動作也跟著變,這樣就是流程可定製嗎?但是流程的改變是通過改變XML來實現的,至於能不能通過介面來改變流程?我暫時還不清楚。

六、大體情況

1、JBPM

1)重點難點:JPDL語言的學習,主要是用來編寫流程檔案;理解3個介面:動作處理介面(提供影響流程執行的方法,在eventaction元素中被回撥),判定處理介面(用在decision判定節點中,提供方法來判定節點的轉向),委派處理介面(用在task的委派子元素assignment中,用來指定將任務分配給指定的人員或角色)。

2)開發步驟:通過圖形編輯工具編寫業務流程――>生成xml流程檔案――>修改流程檔案(判斷節點是任務節點、普通節點還是判定節點,之後作相應修改)――>匯入儲存流程資訊的資料庫表――>部署流程定義檔案(將流程檔案中的內容放到資料庫中)――>建立流程例項――>呼叫JBPM提供的signal方法執行流程流轉

3)流轉方法: 先確定節點是什麼節點,如果是普通的Node節點,則是流程執行到此節點不會中斷,繼續執行;如果是state節點,則流程執行到此節點會中斷,直到系統外的參與者發會命令才能繼續執行,即呼叫signal()或end()方法;如果節點是Task-node,則會根據task任務列表的任務有沒全部執行完來決定流轉。

4)流程定義檔案元素:一個JBPM的流程定義XML檔案中包含一個< process-definition>元素,而一個< process-definition>元素又包含零個或一個< description>元素,零個或多個的< swimlane>元素,一個< start-state>元素,零個或多個的< state>元素或< decision>元素或< fork>元素或< join>元素,以及零個或多個的< action>元素,零個或多個<task-node><node>元素,一個< end-state>元素等等。此外,< process definition>元素有一個標示符,以“name”屬性來表示,這個屬性必須存在,用來表示該流程的名稱。

5JBPMScheduler可以實現在JBPM流程中定時觸發某一動作。在流程中JPBM提供了timer節點供我們使用,通過這個節點我們可以實現節點動作的定時觸發。

2OSWorkFlow

1)重點難點:工作流檔案定義的元素,主要用來編寫工作流;OSWorkFlow.xmlpropertySet.xml檔案的配置;InputMap介面、Workflow 介面及WorkflowDescriptor介面。

2)開發步驟:手工編寫工作流檔案——>配置OSWorkflow.xml――>配置WorkStore——>配置propertySet.xml,osUser.xml檔案(如果需要使用者許可權)――>呼叫AbatractWorkflow類載入OSWorkflow.xml(它會自動載入工作流檔案及資料庫配置檔案)――>呼叫WorkFlow介面方法(initial()方法,transitionWorkflow()方法,doAction()方法)

3流轉方法:一個工作流包含多個步驟。每一個步驟都有一個當前狀態(例如, Queued, Underway, or Finished)。每一個步驟中都有一個或者多個動作可以被執行。每一個動作都可以設定執行條件(condition),也可以設定執行函式(pre-function or post-function)。動作產生結果(result),導致工作流的狀態和當前步驟發生改變

4流程定義檔案主要元素:步驟(step)、條件(conditions)、迴圈(loops)、分支(spilts)、合併(joins)、角色(roles)、函式(function

5osworkflow.xml配置:osworkflow.xml定義了persistence實現的方法(JDBC, EJB, Ofbiz),同樣也定義了用於載入流程定義資訊的workflow實現工廠。

6propertySet.xml配置:OSWorkflow利用property模組動態儲存變數,而propertyset能動態儲存的變數的型別,取決於workflowStore所選擇的PropertySet實現,WorkflowStoreosworkflow.xml中所配置的(你選擇了JDBCWorkflowStore,你就必須確保在propertyset.xml中正確配置了jdbc propertyset

7)osuser.xml配置: osuser.xml檔案配置所有與使用者和許可權相關的邏輯,但是目前只支援JDBC而不支援hibernate