OpenWFE 1.7.3pre0

OpenWFE 1.7.3pre0【最新修改版】   

2007-11-26 08:25:50|  分類: 編程技術 |  標籤: |字號 訂閱

OpenWFE FAQ

什麼是OpenWFE
OpenWFE是一個java寫的開源工作流引擎。
它由四個組件(服務器)組成:一個引擎、一個工作列表、一個反應器(自動參與者的容器)、一個web客戶端(一個通用的web應用的例子)。

OpenWFE需要什麼樣的運行環境
JDK1.4.0或者更高版本。
如果你只是運行引擎或工作列表,那麼只需要一個JRE就足夠了。
而web客戶端和droflo則需要JDK的環境,因爲它們需要把jsp編譯成servlet。

OpenWFE可以運行在websphere/weblogic/jboss/orion/…這些服務器中嗎
OpenWFE本身是可以單獨運行的,但是沒有任何東西阻止你在你的應用裏面和OpenWFE交互來進行流程的操作管理。
你可以把OpenWFE看作是一個外部的服務,就像數據庫或者是LDAP服務器一樣,在你的應用裏面使用它。
儘管如此,你還是可以把OpenWFE引擎嵌入到你的java應用裏面,關於這部分內容可以參看"Embedding OpenWFE".

openwfe-pyya、openwfe-dotnet、openwfe-perl這些是用來幹什麼的
這些是用來訪問OpenWFE的庫,使你可以在你的python / .NET應用裏面來使用OpenWFE的worksession(worksession提供了一些可以被遠程調用的方法,例如瀏覽、更新OpenWFE的工作列表,創建一個新的流程實例)。

Openwfe-pyya和openwfe-dotnet只是一個"代理"類庫,它通過網絡來和工作列表服務器交互。你還是需要自己來實現用戶界面。這樣或許是很簡單的:你只需要爲特定的角色設計一個用戶界面就可以了。

什麼是Prof Van Aalst工作流模式?OpenWFE是否支持這些模式
自從2003年期,OpenWFE已經支持其中的絕大多數。這個要歸功於它獨一無二的過程定義語言。這個語言支持併發和子流程等概念。
你可以讀這篇文檔來看OpenWFE是如何實現每一個流程模式的。

什麼是OpenWFE-aio
AIO的意思是"all in one"(全部集成在一塊)。這個版本里面的引擎、工作列表、反應器都運行在一個虛擬機裏面。

我可以把OpenWFE嵌入到我的應用裏面嗎
可以。關於這部分內容可以參看"Embedding OpenWFE"。

安裝並運行OpenWFE

這段僅作參考。現在的1.7.3已經有所不同,詳細情況請看下面我的回帖...

openwfe1.7.3的下載與配置
OpenWFE 是一個開放源碼的Java工作流引擎。在http://www.openwfe.org/download.html提供下載文件.現在提供的最新版本是 1.7.3. 我用的版本是1.7.2.(如果沒有特別說明,以後我有關openwfe的文章多指的是該版本,不同版本之間差異不大)下面我將以 openwfe1.7.2版本爲例介紹如何配置.
1,在配置前保證已經安裝好JDK和JVM.
2 將下載好的文件解壓到C盤 路徑:C:/openwfe-17.2
3 新建環境變量 OPENWFE_HOME = C:/openwfe-17.2
4 找到C:\openwfe-1.7.2\bin\owfe-suite.bat文件中的set JAVA_HOME=C:\j2sdk1.4.2_06
set OPENWFE_HOME=C:\openwfe-1.7.2兩行保證JAVA_HOME和OPENWFE_HOME的值和實際的值相符.
5 完成以上步驟後 打開命令行 輸入 owfe-suite.bat可以看到owfe.bat engine ,owfe.bat worklist ,owfe.bat webclient ,owfe.bat aprt ,owfe.bat wfdserver 幾個命令行窗口被打開呵呵恭喜你已經配置成功了 !
6 在瀏覽器中輸入http://localhost:7080/webclient就可以訪問openwfe提供的客戶端了

http://localhost:7080/droflo訪問流程設計器。

1 下載openwfe1.5.3
 
 
2 編譯openwfe1.5.3現在運行過程有變,應按照上面1.7.3的方法來
 
解壓openwfe-1.5.3-src.zip,然後打開命令符窗口,進入源文件的目錄,輸入ant dist — 回車。
 
幾秒鐘之後,出現了錯誤:現在已經沒有此錯誤
C:\openwfe-1.5.3-src\build.xml:59: Following error occured while executing this line
C:\openwfe-1.5.3-src\releases\build.xml:240: C:\pyya not found.
這個錯誤是由於作者沒有把一個不是很重要的源文件包沒有被打進去。
 
打開realeases/build.xml,
找到
<property
 name="pyya-home"
 value="../../pyya/" 
/>並刪除
 
找到
 <copy
     tofile="${distributed}/CHANGELOG_PYYA.txt"
     file="${pyya-home}/CHANGELOG.txt"
 />並刪除
 
找到
 <copy
     tofile="${all-in-one}/CHANGELOG_PYYA.txt"
     file="${pyya-home}/CHANGELOG.txt"
 />並刪除
 
再次輸入ant dist — 回車
大概半分鐘過後,出現BUILD SUCCESSFUL。
 
3 運行openwfe
 
進入releases\openwfe\bin目錄中,找到owfe-suite.bat並編輯
找到set OPENWFE_HOME=c:\openwfe-1.4.5
修改爲set OPENWFE_HOME=C:\openwfe-1.5.3-src\releases\openwfe(C:\openwfe-1.5.3-src爲源文件目錄)
 
保存並執行owfe-suite.bat,本人調試過程中發現,用命令行執行就會有問題“無法找到owfe.bat”,直接雙擊則沒有問題-_-!希望大家發現原因者跟我說一聲哈,謝謝!
出現了6個命令行窗口:1.7.3爲5個窗口即已大功告成(沒有了droflo)
engine,worklist,wfdserver,apre,webclient,droflo
 
4 openwfe一覽
 
openwfe運行以後,可以通過瀏覽器瀏覽的應用模塊的有webclient,uman,droflo
 
webclient爲一個簡單的工作流應用系統。http://localhost:7080/webclient
可以使用alice,bob,charly來登陸系統,進行創建流程實例,填寫表單等操作。
 
uman爲一個權限管理模塊,使用admin/admin登陸。
 
droflo爲一個web流程定義工具。
 
 
 
5 關閉openwfe
 

雙擊owfe-suite-stop.bat關閉openwfe

使用OpenWFE創建並運行一個流程

1.流程模型:
這個流程是一個非常簡單的流程,它由客戶填寫一個表單(在OpenWFE自帶的web應用中,表單字段是可以在運行時自定義的);然後由工作人員根據顧客填寫的表單進行處理,填寫處理意見等;處理完以後客戶可以看到處理結果並進行反饋。(流程模型圖)
2.定義流程的參與者:
在OpenWFE 的引擎中是通過參與者(participant)來和引擎外部交互的,在這裏例子中,我們爲這個流程定義兩個參與者customer和stuff。編輯etc\engine\participant-map.xml找到<include url="file:etc/engine/participant-map2.xml" />並在下面添加:

<participant name="customer"><br />
            
<param><br />
            
<param-name>dispatcherClass</param-name><br />
            
<param-value>openwfe.org.engine.impl.dispatch.SocketDispatcher</param-value><br />
            
</param><br />
            
<param><br />
            
<param-name>host</param-name><br />
            
<param-value>127.0.0.1</param-value><br />
            
</param><br />
            
<param><br />
            
<param-name>port</param-name><br />
            
<param-value>7008</param-value><br />
            
</param><br />
            
</participant><br />
            
<participant name="stuff"><br />
            
<param><br />
            
<param-name>dispatcherClass</param-name><br />
            
<param-value>openwfe.org.engine.impl.dispatch.SocketDispatcher</param-value><br />
            
</param><br />
            
<param><br />
            
<param-name>host</param-name><br />
            
<param-value>127.0.0.1</param-value><br />
            
</param><br />
            
<param><br />
            
<param-name>port</param-name><br />
            
<param-value>7008</param-value><br />
            
</param><br />
            
</participant> 

 

3.定義存儲區
 
在OpenWFE 的工作列表服務中,工作列表是保存在不同的存儲區中的,我們爲customer和stuff這兩個參與者分別創建一個存儲區Store.customer 和Store.stuff。編輯etc\worklist\worklist-configuration.xml並在其中添加:

<service<br />
            name="Store.customer"
<br />
            class="openwfe.org.worklist.impl.store.SimpleWorkItemStore"
<br />
            >
<br />
            
<param><br />
            
<param-name>participants</param-name><br />
            
<param-value>customer</param-value><br />
            
</param><br />
            
<param><br />
            
<param-name>lockTimeout</param-name><br />
            
<param-value>15m</param-value><br />
            
</param><br />
            
<param><br />
            
<param-name>unlockFrequency</param-name><br />
            
<param-value>3m</param-value><br />
            
</param><br />
            
<param><br />
            
<param-name>putStrategyClass</param-name><br />
            
<param-value>openwfe.org.worklist.impl.store.CorrelatedPutStrategy</param-value><br />
            
</param><br />
            
</service><br />
            
<service<br />
            name="Store.stuff"
<br />
            class="openwfe.org.worklist.impl.store.SimpleWorkItemStore"
<br />
            >
<br />
            
<param><br />
            
<param-name>participants</param-name><br />
            
<param-value>stuff</param-value><br />
            
</param><br />
            
<param><br />
            
<param-name>lockTimeout</param-name><br />
            
<param-value>15m</param-value><br />
            
</param><br />
            
<param><br />
            
<param-name>unlockFrequency</param-name><br />
            
<param-value>3m</param-value><br />
            
</param><br />
            
<param><br />
            
<param-name>putStrategyClass</param-name><br />
            
<param-value>openwfe.org.worklist.impl.store.CorrelatedPutStrategy</param-value><br />
            
</param><br />
            
</service>

4.定義流程
將下面的流程定義保存到workflow-definitions\first.xml
 

<?xml version="1.0" encoding="UTF-8"?><br />
            
<process-definition<br />
            name="first"
<br />
            revision="1.0"
<br />
            >
<br />
            
<sequence><br />
            
<participant ref="customer" /><br />
            
<participant ref="stuff" /><br />
            
<participant ref="customer" /><br />
            
</sequence><br />
            
</process-definition>


5.啓動openwfe
雙擊bin\owfe-suite.bat,啓動openwfe
6.定義權限
打開http://localhost:7081/pages/login.jsp,使用admin/admin登錄。
a.定義對存儲區Store.customer的操作權限store.customer

點擊最下面下拉框(openwfe.org.auth.Grant)後面的+
填寫:
name:store.customer
location:file:./jars/openwfe-worklist-actions.jar
然後點submit

在–Grants–下面找到store.customer行
選擇openwfe.org.worklist.auth.StorePermission,點擊+
輸入存儲區的名字Store.customer
選中read,write,delegate
然後點submit

b.定義對存儲區Store.stuff的操作權限store.stuff

點擊最下面下拉框(openwfe.org.auth.Grant)後面的+
填寫:
name:store.stuff
location:file:./jars/openwfe-worklist-actions.jar
然後點submit

在–Grants–下面找到store.stuff行
選擇openwfe.org.worklist.auth.StorePermission,點擊+
輸入存儲區的名字Store.stuff
選中read,write,delegate
然後點submit

c.定義流程啓動權限

點擊最下面下拉框(openwfe.org.auth.Grant)後面的+
填寫:
name:launch.test
location:file:./jars/openwfe-worklist-actions.jar
然後點submit

在–Grants–下面找到launch.first
在後面下拉框選擇openwfe.org.worklist.auth.StorePermission,點擊+
輸入mainEngine::http://localhost:7079/first.xml
然後點submit

d.保存權限的更改

點擊右上角的commit保存權限的更改。
 
7.定義用戶並分配權限
a.創建用戶ssd

在–Grants–上面找到下拉框openwfe.org.auth.BasicPrincipal,點擊後面的+
創建用戶ssd/ssd

b.創建用戶xiaoming

在–Grants–上面找到下拉框openwfe.org.auth.BasicPrincipal,點擊後面的+
創建用戶xiaoming/xiaoming

c.爲ssd分配權限

點擊ssd那一行的store.stuff前的+,使ssd具有對Store.stuff的操作權限。

d.爲xiaoming分配權限

點擊xiaoming那一行的store.customer,launch.first前的+,使xiaoming具有對Store.stuff的操作權限和啓動流程first.xml的權限。

e.保存對用戶定義的更改

點擊右上角的commit保存權限的更改。
 
8.測試流程
打開http://localhost:7080/webclient/pages/login.jsp,就可以分別用xiaoming和ssd登錄系統來測試剛纔創建的流程了。

使用OpenWFE取消一個流程

在worklist 中還沒有取消流程的方法。但是在引擎中是支持對流程的取消的。對一個流程的root expression進行cancel操作時,它會調用所有子表達式的cancel方法,子表達式還會對自己的子表達式進行取消。如果子表達式爲一個 ParticipantExpression,它的cancel操作會發送一個CancelItem給worklist,然後worklist將存儲區中的相關的WorkItem刪除。

修改一下control.bat(set OPENWFE_HOME=c:\openwfe-1.5.2,set JARS=jars這兩行),然後再修改etc/engine-policy.conf(將codebase "file:./jars/openwfe-engine-actions.jar"權限改爲permission java.security.AllPermission),這樣啓動OpenWFE就可以使用control.bat了。

在control.bat命令行中,應當首先調用list列出表達式。然後調用cancel num命令取消對應的表達式。這個num不是表達式Id(命令的幫助提示是不正確的),而應該是list命令中列出的表達式的序號(第一列的0,1,2)。

 

WMFC參考模型Openwfe組成比較

openwfe引擎

1,表達式(Expression)
在OpenWFE 的引擎中,一個流程實例由一系列表達式組成。這些表達式以一個樹形的結構來組織,樹根節點爲過程定義表達式(ProcessDefinition),葉子節點通常爲參與者表達式(ParticipantExpression)。每一個表達式都可以通過getParent()得到它的父表達式ID,如果一個表達式是組合表達式(CompositeFlowExpression),那麼它還可以調用getChildren()方法來得到它所有的子表達式ID。

常用的表達式有ProcessDefinition,SequenceExpression,ConcurrenceExpression,IfExpression,WhenExpression等。

每一個表達式都可以對一個workitem(workitem是對流程數據的封裝,類似於一個map)進行apply和reply操作,來實現對流程流轉的控制。

2,表達式池(ExpressionPool)
當需要一個表達式時,需要根據表達式ID從表達式池中得到表達式對象,表達式池決定什麼時候存取一個表達式以及是否緩存等。而具體的存取操作則由 ExpressionStore來實現(目前提供了XmlExpressionStore,XdbcExpressionStore, SerialExpressionStore實現)。

3,參與者表達式(ParticipantExpression)
參與者表達式與其它的表達式不同,意味着需要引擎外部實體的介入,因此它的apply和reply操作也較爲複雜。當一個參與者表達式被apply時,它會先根據參與者名字從ParticipantMap得到參與者對象,然後由該參與者對象相關聯的Dispatcher轉發到對應的模塊處理,一般情況下(即當 workitem爲流程過程中的workitem,參與者不是自動參與者的情況)將會用workItemCoder編碼後由 SocketDispatcher轉發給worklist處理。經worklist處理完以後的workitem返回將由Listener(通常爲 SocketListener)接受到,Listener將調用對應的WorkItemConsumer來處理,默認的WorkItemConsumer 是EngineWorkItemConsumer,它如果發現它待處理的workitem是一個流程中的workitem (InFlowWorkItem),它會調用參與者表達式的reply方法來完成這個表達式所指示操作。

4,FunctionMap
在流程定義中可以使用函數,那麼這些函數名是如何與具體的實現關聯起來就是FunctionMap要做的事。

發佈了32 篇原創文章 · 獲贊 12 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章