根據工作流產(chǎn)品在運行時(shí)刻與業(yè)務(wù)應用系統的關(guān)系,可以將國內市場(chǎng)上的工作流軟件產(chǎn)品分為嵌入式和獨立運行兩大類(lèi)。本文希望通過(guò)分析這兩類(lèi)工作流產(chǎn)品的各自特點(diǎn),為選擇工作流產(chǎn)品的用戶(hù)提供一些參考。
因為工作流軟件一般應用在電子政務(wù)、企業(yè)辦公和管理軟件上,同時(shí)在這些領(lǐng)域使用J2EE架構已是一種趨勢,所以本文只著(zhù)重于介紹基于J2EE技術(shù)實(shí)現的工作流引擎。
嵌入式工作流引擎
在與業(yè)務(wù)應用的交互方式上,嵌入式工作流引擎通過(guò)提供WAPI(Workflow API)為展現層或業(yè)務(wù)邏輯層的其他部分提供服務(wù)(如啟動(dòng)指定工作流程、查詢(xún)工作任務(wù)、設置流程運行業(yè)務(wù)數據)。另一方面,工作流引擎經(jīng)常需要業(yè)務(wù)相關(guān)的數據或邏輯來(lái)決定流程流轉,或者需要在不同任務(wù)之間傳遞業(yè)務(wù)數據,這時(shí)候,流程引擎會(huì )調用業(yè)務(wù)應用中業(yè)務(wù)邏輯或數據訪(fǎng)問(wèn)模塊提供的API接口來(lái)完成相應操作。
獨立運行工作流引擎
在與業(yè)務(wù)應用的交互方式上,獨立運行工作流引擎會(huì )以遠過(guò)程調用的方式提供WAPI(Workflow API)。對于使用Java技術(shù)的獨立運行工作流引擎,遠過(guò)程調用方式可以是RMI、JMS,或者能夠跨越異構系統的Web Service。
另外,獨立運行工作流引擎也必須為反過(guò)來(lái)如何調用業(yè)務(wù)應用提供解決辦法。一般情況下,獨立運行工作流引擎應該能夠直接調用外部業(yè)務(wù)應用提供的遠程接口(如基于RMI、JMS或者Web Service的業(yè)務(wù)接口),另一方面,業(yè)務(wù)應用也必須為獨立運行工作流引擎提供遠過(guò)程調用業(yè)務(wù)方法。
當然也有省事而走捷徑的方法,比如國內市場(chǎng)占有率比較高的一款Java獨立運行工作流產(chǎn)品,雖然提供了基于RMI/JMS的WAPI,卻沒(méi)有提供工作流引擎直接調用外部業(yè)務(wù)遠程接口的方法。如果要讓工作流引擎調用外部業(yè)務(wù)邏輯,你必須編寫(xiě)一個(gè)實(shí)現廠(chǎng)商特有接口的Java類(lèi),然后將它上傳并注冊到工作流引擎中。
對比
下面我們就部署、二次開(kāi)發(fā)的難易程度、性能、是否支持分布和EAI,對這兩類(lèi)工作流引擎做一個(gè)對比。
1、部署: 對于一個(gè)基于Java技術(shù)的嵌入式工作流引擎,在部署時(shí)非常簡(jiǎn)單,你只要將對應的jar文件加到classpath中就可以了。獨立運行工作流引擎因為是獨立的應用,并且必須通過(guò)RMI/JMS/Web service等遠程調用技術(shù)與業(yè)務(wù)應用交互,所以部署起來(lái)要麻煩得多;
2、二次開(kāi)發(fā): 由于大部分獨立運行工作流引擎也會(huì )在客戶(hù)端,提供方便遠程調用的本地調用API,所以在二次開(kāi)發(fā)時(shí),程序員大部分時(shí)間都可以不大關(guān)注引擎是本地的還是遠程的。但在傳遞某些業(yè)務(wù)參數和例外處理中,遠程調用還是有些特殊的要求和限制的。因此總的來(lái)說(shuō),在二次開(kāi)發(fā)上獨立運行工作流引擎對程序員要求高一些;
3、性能:毫無(wú)疑問(wèn),因為沒(méi)有遠過(guò)程調用,嵌入式工作流引擎要占明顯優(yōu)勢;
4、分布和EAI:獨立運行工作流引擎能夠和多個(gè)業(yè)務(wù)系統打交道,嵌入式工作流不能直接和宿主系統以外的系統交互。因此只有獨立運行工作流引擎支持分布式應用,和支持通過(guò)業(yè)務(wù)流程做企業(yè)應用集成(EAI)。
如何選擇
通過(guò)上面的對比已經(jīng)很清楚了。如果你需要工作流程在多個(gè)系統中流轉,那么選擇獨立運行工作流引擎。在其他情況下,選擇嵌入式工作流引擎。
同時(shí),即使你因為分布或EAI而準備選擇獨立運行工作流引擎,你也應當選擇在業(yè)務(wù)與引擎兩個(gè)調用方向上,都直接支持遠過(guò)程調用的工作流產(chǎn)品。如果獨立運行工作流引擎在某個(gè)調用方向上(比如回調業(yè)務(wù)應用)沒(méi)有提供方法,需要用戶(hù)在二次開(kāi)發(fā)時(shí)自己解決,這種情況下請選擇嵌入式工作流引擎。
發(fā)展方向
一般國內獨立運行工作流產(chǎn)品歷史會(huì )比較長(cháng),大部分是在7-8年前開(kāi)始立項開(kāi)發(fā)的,那時(shí)候正是分布式應用理論最火熱的時(shí)候??呻S著(zhù)人們在實(shí)踐中的經(jīng)驗教訓和積累,發(fā)現很多情況下我們不需要復雜的分布式應用。這也是近幾年來(lái)在Java世界里,許多人提倡“輕量級”、“no-EJB”的原因。
事實(shí)上,嵌入式工作流引擎經(jīng)過(guò)一定的擴展也能夠處理跨系統的流程交互:
國際著(zhù)名工作流專(zhuān)家Michael zur Muehlen 在其 “Workflow-based Process Controlling”一書(shū)中談到:“在上個(gè)世紀80-90年代,大部分工作流應用采用第一種應用方式(獨立)?,F在,對于包含復雜流程的應用系統,許多軟件提供商重新定位和設計它們的工作流產(chǎn)品,使其成為應用系統的構件模塊(即嵌入式)”。你的看法呢?
聯(lián)系客服