OpenWFE 1.7.3pre0【最新修改版】

  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要做的事。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值