OpenWFE是John Mettraux所領導的項目組開發的一套符合WFMC標準的工作流管理系統組件。項目使用JAVA語言編寫,具有功能完善、通用型好、擴展能力強等特點。其除了能夠爲各種開發環境提供一個符合要求的工作流引擎之外,也能夠直接作爲一個完整有效的工作流管理系統進行使用。其主要功能模塊包括:
1) Engine(工作流引擎):負責描述和運行已經定義好的流程。一個定義的流程可以運行多個實例。此模塊既負責將流程項目分派給相應的用戶,同時也要監視和接受從用戶處返回的流程項目,並按照流程將該項目進行下一步的處理。
2) Worklist(流程項目清單):流程項目的集合,用來爲每一個用戶存儲其流程項目,通常是沒一類用戶一個集合。存儲的方式可以採用文件存儲或存儲到關係數據庫中,並同時爲用戶提供運行各個流程項目的接口。
3) Apre(Automatic Participants Runtime Environment,自動參與者運行環境):用來存放代理(自動參與者)。這些代理接收Apre的流程項目,根據其信息進行相應的修改後將其返回給Apre,再由Apre將其返回給工作流引擎。
4) WebClient(客戶端):通過Web訪問流程項目清單,通過與其交互來進行流程的操作和控制。
通過以上幾個模塊的協同工作,OpenWFE可以爲多個用戶提供可靠的工作流的運行與控制。同時作爲一個完整的項目,OpenWFE還包括Droflo(基於Web的圖形化流程定義模塊)、OpenWFE-ide(基於單機的圖形化流程定義插件)、OpenWFE-webflow(Web工作流模塊API)、Connectors(OpenWFE與各種開發語言環境的連接器)等多個模塊,這些模塊使OpenWFE既能夠進行流程的定義,也能夠進行流程的運行與控制,成爲一個完整的工作流管理系統。
2 OpenWFE的安裝
OpenWFE的安裝需要按照以下步驟來進行:
1) 安裝1.4版本以上的JDK
2) 將下載的OpenWFE解壓縮,注意其目錄名不應含空格
3) 根據JDK和OpenWFE的路徑來設置JAVA_HOME和OPENWFE_HOME兩個系統環境變量
4) 打開%OPENWFE_HOME%\bin\owfe-suite.bat文件來運行OpenWFE服務
5) 在瀏覽器中打開http://localhost:7080/webclient頁面使用OpenWFE
3 OpenWFE的使用
1) 運行位於bin目錄下的“owfe-suite.bat”文件,開啓OpenWFE的各項服務(使用Tomcat運行的方法參考“README.windows.txt”文件)
2) 登錄,對各自的流程進行操作
具體的操作方法可參照OpenWFE說明書,以下爲試用時的幾點注意事項:
1) 默認的用戶包括“alice”、“bob”、“charly”、“admin”等用戶,分別屬於不同的參與者,注意參與者與用戶不是同一個概念,參與者是擁有某種權限的一類用戶,相當於用戶組
2) OpenWFE操作主要體現在如何對工作流進行操作、控制與管理,其本身從運行效果和實際意義上來講距離實際應用還有一段距離
3) 掌握OpenWFE的使用需要對其結構有一定的瞭解。相當多的修改需要通過直接修改其各種xml配置文件來進行,具體內容見“doc”目錄下的使用手冊
4 OpenWFE的實現方式
OpenWFE項目使用JAVA和JSP編寫,項目爲B/S結構。在運行OpenWFE服務程序後,能夠直接通過瀏覽器進行工作流的定義,運行和管理等工作。同時,通過其爲其它開發語言環境提供的連接器,也可以使用其他語言開發調用OpenWFE服務的管理系統。
OpenWFE工作流管理系統通過內部幾個主要功能模塊的共同協作來進行工作流的管理。同時,爲了向其他開發語言環境提供進一步開發的接口,OpenWFE還同時針對各種語言提供了其與OpenWFE的工作流引擎服務“Engine”和流程項目清單服務“Worklist”的連接器,包括與針對.NET的連接器“OpenWFE-dotnet”、針對perl的連接器“OpenWFE-perl”和針對python的連接器“OpenWFE-python”等。以下如何在連接器中調用工作流引擎服務的功能和接口進行詳細的分析,並簡要介紹OpenWFE針對C#語言的連接器“OpenWFE-dotnet”。調用流程項目清單服務和其他的連接器的實現原理與這兩種基本相同。
4.1 Engine(工作流引擎)
在各個模塊中起到核心作用的仍是Engine(工作流引擎),其爲其他幾個模塊提供最基本也是最重要的Participant Map(參與者映射)和Socket Listener(Socke監聽)服務。其中Participant Map負責將工作流的工作項目傳送給相應的參與者,而Socket Listener負責接受參與者處理完畢後的工作項目。且能夠對外提供調用接口,及通過類似一下的url調用來進行工作流引擎的控制:“http://host:port/ServiceName/StoreName?session= session ID&action= actionString”以下對此調用的各個部分做簡要介紹:
1) Host:Engine引擎服務所運行計算機的主機名或IP地址,如若引擎服務運行在本地計算機的話此處可使用localhost或127.0.0.1
2) Port:調用引擎服務的端口,不同服務使用的端口不一致,如OpenWFE默認參與者使用的端口是“5080”,管理者使用的端口是“6080”,同時此端口可通過修改OpenWFE源代碼進行更換
3) ServiceName:調用引擎服務的模塊的名稱,如“worklist”、“engine”等
4) StoreName:用戶所處參與者的名稱,如“Store.alpha”等
5) Session:調用模塊與引擎服務之間對話的標識號。
6) Action:調用引擎服務所要進行的操作,接受的參數包括“launchFlow”、“saveWorkitem”、“delegate”、“getWorkitem”、“getStoreNames”等
對引擎服務的調用及可以直接通過Web形式,也可以在應用程序中直接調用,這就爲開發以OpenWFE引擎爲核心的B/S或C/S架構的工作流管理系統提供的必要的接口。
4.2連接器“OpenWFE-dotnet”
此連接器爲一個在.NET環境下調用OpenWFE引擎服務的演示程序,其演示了與引擎建立一個對話後通過調用運行並操作工作流的例子。此程序可以作爲開發以OpenWFE引擎爲核心的C/S程序的參考,也可以直接作爲開發此類程序時與引擎的連接器。程序中各個類的功能大體如下:
1) Test.cs:連接器的演示程序,可參照其中的調用方式直接使用連接器調用引擎服務
2) RestSession.cs:RestSession類,連接器中與引擎建立對話的基類,能夠產生url來調用相應的引擎服務
3) WorkSession.cs:WorkSession類,繼承RestSession,並通過字符串常量進行控制產生符合標準的url調用,用來調用“worklist”模塊,是連接器中調用引擎服務進行工作項目操作真正用到的類
4) ControlSession.cs:ControlSession類,繼承RestSession,並通過字符串常量進行控制產生符合標準的url調用,用來調用“engine”模塊,是連接器中調用引擎服務進行工作流控制真正用到的類
5) Attributes.cs:Attributes類和其他繼承Attributes類的工作項屬性,是工作項中各種屬性的定義,關於屬性的定義符合OpenWFE的設定,在操作時則採用哈希表技術,加快查找速度
6) Workitem.cs:Workitem類和其他繼承Workitem類的工作項,是各種工作項的定義
7) Codec.cs:工作項和工作項屬性與工作流定義(給定的xml文件)之間進行格式轉換和信息交換的工具類
8) Utils.cs:原linux開發環境與.NET開發環境類型轉換的工具
9) Socket.cs:負責網絡信息的偵聽和傳輸,按照要求將工作項轉換爲數據流後傳輸給給定的用戶,並負責接受該用戶返回的處理過的工作項目
10) OpenWfeException.cs:OpenWFE運行環境下產生的Exception的定義
5 開發OpenWFE引擎爲核心工作流管理系統的注意事項
OpenWFE作爲一個開放式項目,其開放的形式和不以商業利潤爲目的的特點決定了OpenWFE本身不能作爲一款商業軟件投入應用,但其良好的架構、強大的功能和擴展能力等決定了其核心的引擎服務,可以作爲開發一款能夠實際應用的工作流管理系統的最好選擇之一。
既然能夠使用連接器直接調用OpenWFE的引擎和項目清單服務,我們就可以用OpenWFE來作爲核心通過連接器進行與外部通訊,來建立自己的工作流管理系統。此時應該注意以下幾點:
1) OpenWFE通過連接器向外界提供的只有“Engin”和“Worklist”兩種服務,其餘需要用到的服務自行設計和添加。
2) OpenWFE只是符合WFMC的規範,具體的實現有其自身的特點,如對流程文件的定義等有其自身的定義,開發者需要對其有一定的掌握
3) OpenWFE是一個發展中的項目,圍繞其進行的開發也需考慮到其未來的發展,以便增強工作流管理系統自身未來的擴展能力