用OSWorkFlow和JBPM開發工作流異同
一、用OSWorkFlow和JBPM開發工作流,首先要做的都是編寫工作流描述檔案,在此基礎上再進一步做相關的配置和呼叫。
二、編寫流程描述檔案方式
1、JBPM是通過圖形化的編輯工具(JBPM自帶的Eclipse外掛)來編寫業務流程如開始狀態,結束狀態,以及狀態之間的轉換,之後會自動生成XML檔案,但具體每一步相關的細節操作還是要手工配置(如該節點是屬於什麼型別節點,相關的函式,要不要較驗)。
2、OSWorkFlow則要通過手工寫XML檔案來定義流程檔案,而且它涉及的標籤元素比較多,其使用者手冊上也建議實施人員不要去修改流程,否則流程很容易破壞。
三、工作流資訊儲存方式
1、JBPM是將流程資訊直接儲存到資料庫,可以用任何方式對資料庫的操作,這樣就要引入儲存工作流資訊的相關表。
2、OSWorkFlow是既可以儲存在XML檔案裡,也可以儲存在資料庫中,儲存在資料庫中時需要配置propertySet.xml檔案,比較複雜,而且它不是完全支援hibernate(如引入osuser來作許可權分析時),此時要自定義操作資料庫的方式。
四、與系統整合
1、JBPM整合比較容易,加入Spring支援包spring-modules-jbpm31.jar,該包加入了Spring對JBPM的包裝,所有的整合都是在此包基礎之上。之後還要配置sessionFactoryForJbpm ,jbpmConfiguration,jbpmTemplate, jbpmDao。
2、OSWorkFlow
1) SpringHibernateWorkflowStore,讓工作流程例項(如果需要的話)分享當前事務。
2) SpringTypeResolver,允許 OSWorkflow 從 Spring ApplicationContext中獲得業務邏輯元件(conditions, functions等等)。
3) SpringConfiguration,這是一個 Workflow Configuration 介面的實現類,它包含指向 store和 factory的引用,這樣可以在 spring 中注射或者連線。
4) SpringWorkflowFactory
如果OSWorkFlow引入osuser.xml來設定許可權,則不支援Hibernate3,因為osuser是比較獨立的模組,目前還沒有支援hibernate3,所以跟Spring整合時要修改配置檔案applicationContext-hibernate3.xml
五、能否實現可定製流程
目前我也不太清楚能否實現流程可定製,而文件中所給出的例子都是事先寫好流程描述檔案。據我所理解的,流程中的每一步都有相應的事件,該事件由一個動作(函式)實現,有些步可能要使用者參與,由使用者去決定下一步的流轉。因此我現在的理解是流程是事先寫好,如果要改變流程,則它相應每一步的動作也跟著變,這樣就是流程可定製嗎?但是流程的改變是通過改變XML來實現的,至於能不能通過介面來改變流程?我暫時還不清楚。
六、大體情況
1、JBPM
1)重點難點:JPDL語言的學習,主要是用來編寫流程檔案;理解3個介面:動作處理介面(提供影響流程執行的方法,在event和action元素中被回撥),判定處理介面(用在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”屬性來表示,這個屬性必須存在,用來表示該流程的名稱。
5)JBPM的Scheduler可以實現在JBPM流程中定時觸發某一動作。在流程中JPBM提供了timer節點供我們使用,通過這個節點我們可以實現節點動作的定時觸發。
2、OSWorkFlow
1)重點難點:工作流檔案定義的元素,主要用來編寫工作流;OSWorkFlow.xml及propertySet.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)
5)osworkflow.xml配置:osworkflow.xml定義了persistence實現的方法(如JDBC, EJB, Ofbiz),同樣也定義了用於載入流程定義資訊的workflow實現工廠。
6)propertySet.xml配置:OSWorkflow利用property模組動態儲存變數,而propertyset能動態儲存的變數的型別,取決於workflowStore所選擇的PropertySet實現,WorkflowStore是osworkflow.xml中所配置的(你選擇了JDBCWorkflowStore,你就必須確保在propertyset.xml中正確配置了jdbc propertyset)
7)osuser.xml配置: osuser.xml檔案配置所有與使用者和許可權相關的邏輯,但是目前只支援JDBC而不支援hibernate。