项目组工作流研究.docx

上传人:牧羊曲112 文档编号:1719863 上传时间:2022-12-16 格式:DOCX 页数:12 大小:228.63KB
返回 下载 相关 举报
项目组工作流研究.docx_第1页
第1页 / 共12页
项目组工作流研究.docx_第2页
第2页 / 共12页
项目组工作流研究.docx_第3页
第3页 / 共12页
项目组工作流研究.docx_第4页
第4页 / 共12页
项目组工作流研究.docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《项目组工作流研究.docx》由会员分享,可在线阅读,更多相关《项目组工作流研究.docx(12页珍藏版)》请在三一办公上搜索。

1、项目组工作流研究-开源产品OBE研究报告作者:小贝2004-2-201. OBE中的重要概念1.1. 工作流参考模型工作流参考模型是由WFMC提出来的,对工作流管理系统的实现的一个参考模型。以下是该模型的一个结构图:下面分别对各个部件进行解释:1.1.1. Work Flow Enactment Service这个组件就是OBE要实现的,主要功能是读取工作流定义、根据定义决定工作流的走向、为客户程序提供接口以驱动工作流。俗称工作流机或工作流引擎。1.1.2. Process Definition Tool用于以图形化的方式定义工作流。目前比较成熟的开源编辑工具为Jawe(jawe.object

2、web.org),OBE虽然也提供了一个工具,但还没完成。Process Definition Tool与Work Flow Enactment Service之间的接口也成为Interface 1,也就是说通过tool生成的文档,Work Flow Enactment Service要可以正确读取。1.1.3. Work Flow Client Application工作流机的客户端程序。该程序可为最终用户提供一个定制的用于驱动工作流的接口。客户端程序通过Interface 2与OBE交互。这是我们需要开发的。1.1.4. Invoked Applications在工作流运作的过程中,可能需

3、要调用工作流机之外的功能,这时可通过定义好的Interface 3来完成。这也是我们需要开发的。1.1.5. Administration and Monitoring Tools用于管理和监视工作流机。在OBE中的实现则是OBEWorklist。1.1.6. 别的Work Flow Enactment ServiceInterface 4用于工作流机之间的协作。1.2. XPDL对工作流的定义是以XPDL文档的方式存在的。XPDL是eXtensible Process Definition Language的缩写,且格式为XML的格式。XPDL中定义了一下几个概念:1.2.1. packag

4、e(包)为了把一些相关的对象组织在一起,XPDL定义了包这个概念。导入流程定义到OBE也是以包为单位的。一个包可定义多个process,participant以及application。而包之间可以互相引用各自定义的对象。1.2.2. process定义完成一个任务的所需过程,例如销售订单处理。工作流的运行也是以process为单位的。一个process由多个activity组成。1.2.3. activity一个activity代表了某件要做的事情。一个活动必须是原子操作,也就是说每一件必须要完成的事都必须定义为activity。Activity可以自动开始也可手动执行。一个Activity

5、可能会产生一个或多个workitem,这些workitem将由participant来处理。一个Activity可以因于所有workitem的完成而自动结束,也可能需要手动来结束。在OBE的实现中,Activity有completion strategy(表示什么情况下activity的状态变为完成),可以通过配置,由实现了strategy算法的类来进行决定。Completion Strategy算法描述的例子是:某个workitem完成后,activity是否也自动完成。1.2.4. participantparticipant代表了组织中的实体,这些实体将与工作流机交互(处理workite

6、m)。这些实体可以是人、机器或者工作流机自己。在OBE中对于不同种类的participant,有相应的处理(第一次阅读该文档的可以掠过以下内容):case ParticipantType.HUMAN_INT: /直接为某个用户名建立一个WorkItem,由该用户登陆系统后手动完成该workitemcase ParticipantType.ORGANIZATIONAL_UNIT_INT,case ParticipantType.SYSTEM_INT: /将为系统用户建立一个workitem,由于是系统用户参与的workitem,该workitem将由工作流机自动完成。case Participa

7、ntType.RESOURCE_INT:case ParticipantType.RESOURCE_SET_INT:case ParticipantType.ROLE_INT: /将根据算法解析出多个用户名,然后根据work item分配策略来决定最终的要分配work item的用户名列表。而在建立workitem时,为列表中的每个用户名都分别建立一个同样的workitem。1.2.5. Work ItemWork Item代表将要被participant处理的工作。Participant通过设置work item的状态(如完成)来控制work item,这可以通过Interface 2来完成

8、。工作流机可能会调用Tool或Application来帮助participant完成某个work item,这可以通过Interface 3来完成。在OBE的实现中,以下是产生WorkItem的算法:如果activity没有设置tool,将产生一个workitem;如果activity设置了tool,则为每个类型为Application的tool产生一个workitem。也就是说当tool的类型为procedure时,不产生workitem,而是由OBE直接执行。1.2.6. Tool or Application就是指参考模型中的Invoked Application。OBE使用Connec

9、tors来进行XPDL中定义的Application与实际实现的Application进行mapping(映射)。在OBE的实现中,有两种tool。一种是Application,表示由OBE调用但运行在别的JVM上的进程,一种是Procedure,表示由OBE调用但运行在同一JVM上。如前一节所述,Tool的类型对产生workitem有影响。2. OBE的组成部件2.1. OBE Core该部件包含了所有相对于WFMC Interface 1规范中的模型的java类。以下是通过解析xpdl文件来创建对象模型实例的例子:XPDLParser parser = new Dom4JXPDLParse

10、r();Package p = parser.parse(new FileInputStream(workflow.xpdl);进一步解释: WFMC Interface 1规范规定对工作流的定义是通过xpdl来完成的,xpdl是以xml的格式来写的,而OBE要对工作流定义进行处理就必须先解析xpdl并转换为可直接进行操作的java类,而其中一个类Package就代表了一个xpdl中的概念-“包”。总之xpdl中所定义的模型在OBE Core都有相应的类与对应。2.2. OBE Engine一旦关于工作流定义的对象树被创建,他们便可在engine中执行了。以下是执行workflow的例子:im

11、port java.util.ArrayList;import org.obe.engine.WorkflowEngine;WorkflowEngine wfEngine = new WorkflowEngine();/ add the package from the previous examplewfEngine.addPackage(p);ArrayList parameters = new ArrayList();List returnValues = wfEngine.executeSynch( packageID, workflowProcessID, parameters);2

12、.3. ConnectorsXPDL中提供了定义工具的方法,工具就是引擎在运行工作流的过程中可能会调用到的引擎所能实现以外的功能,可以看作是对引擎的扩展。但是为了在XPDL中不具体规定怎么实现这些工具,在XPDL只描述工具的ID和所需的参数。具体的工具的实现和工具ID的对应则是在repository中定义。默认的repository定义在文件BasicToolRepository.xml中。以后会具体描述怎样配置BasicToolRepository.xml文件。2.4. OBE ServerOBE引擎的工作方式有两种:一种是嵌入式,另外一种是以EJB Server的形式运行。嵌入方式运行时,

13、客户的进程中直接生成engine的实例,然后engine在客户进程中运行。而以EJB Server的形式运行时,客户端程序需通过rmi调用来驱动engine。至于什么情况下用哪种方式,可参考以下文档:OBE Server是将OBE Engine封装起来的组件,并以EJB的方式运行。以下是OBE对OBE Server的描述:The OBE Server provides a J2EE implementation which can execute workflow processes in a reliable and fault-tolerant fashion.2.5. OBEWorkli

14、st这是一个提供字符型界面的java application。通过它可以对engine进行所有WAPI规定的操作。他提供了连接engine的几种不同方式:本地,RMI以及XML_RPC。2.6. OBE Client它提供了用于与engine进行通信的几种不同协议的实现。OBEWorklist就是用到了它。OBE目前支持本地,本地j2ee,RMI以及XML-RPC等协议。3. OBE的编译由于OBE还没有release版,所以必须从cvs上先取下source,编译以后才能用OBE。3.1. 从cvs中取OBE的源码如图所示配置好cvs,然后checkout名为obe的module即可。3.2.

15、 运行prepare.cmd在编译OBE之前,需要先运行prepare.cmd这个批处理文件,因为编译OBE需要定制一些本地的配置,这些配置因各个不同的编译环境而不同,例如JBOSS和Weblogic的安装目录等。所以prepare.cmd需要一个命令行参数,即定制用的属性文件名。可以到obe/custom目录找到定制用的属性文件的例子文件,一般只要修改一下就可用了。3.3. 到obe项目的根目录下运行ant如果定制用的属性文件正确的话,会产生一个ear文件在obe/build目录,将这个文件部署到JBOSS或Weblogic中。4. OBE的使用1(以嵌入方式运行OBE)4.1. 用Jawe

16、写一个简单的流程定义文件4.2. 运行OBEWorklist出现以下菜单:Enter choice:1) Set Client Protocol2) Connect3) Disconnect4) Workflow Processes5) Worklist6) Set Logging LevelE) Print Last ExceptionM) Redisplay menuQ) Quit4.3. 选择1(Set Client Protocol),设置与Engine的通信协议出现:Enter protocol local:输入local,按回车;输入q,按回车;回到2.2所示的菜单。4.4. 选择

17、2 (Connect),连接Engine输入q,按回车;回到2.2所示的菜单。4.5. 选择4(Process Definitions),进入以下菜单Enter choice:1) List Process Definitions2) Change Process Definition State3) Import Package4) Update Package5) Export Package6) Delete PackageE) Print Last ExceptionQ) Back to Main Menu 4.6. 选择3 (Import Package):出现:Enter XPDL

18、 filename:输入xpdl文件的路径加文件名并按回车,如果倒入成功,按q退出菜单。4.7. 选择Workflow Processes,出现以下菜单 Enter choice:1) List Process Definitions2) Create & Start Process Instance3) List Process Instance Audit Entries4) List Process Instance Attributes5) Show Process Instance AttributeE) Print Last ExceptionM) Redisplay menuQ)

19、 Back to previous menu4.8. 选择2( Create & Start Process Instance)出现: Enter process definition ID: 输入xpdl文件中流程定义的ID,本文中例子流程的ID为test。如果创建成功会出现:Successfully created process test_Wor1 instance # 0 Do you wish to start the process?输入y表示启动该流程。输入q,回到主菜单。选择5( Worklist),出现以下菜单 - Worklist -Enter choice:1) List

20、 Work Items by Performer2) List Work Items by Participant3) List Work Items by Process Instance4) List Work Item Attributes5) Show Work Item Attribute6) Change Work Item State7) Execute a Work ItemE) Print Last ExceptionM) Redisplay menuQ) Back to previous menu这时可对workitem做进一步操作。5. OBE的使用2(以EJB方式运行O

21、BE)如果OBE的ear文件被正确部署,OBE就可运行在EJB方式了。可以用obeworklist测试一下。与上面一种的连接方式不一样的是,连接方式选择rmi,并输入正确的连接url和用户名、密码。如果连接成功就可以和前一种方式一样做import package、start process等操作了。6. 配置ToolRepository为了让OBE可以正确的调用客户程序开发的application(Interface 3),必须配置好ToolRepository。而ToolRepository配置文件所在的目录名config,且均为xml格式。6.1. 写ToolMetaData类首先要写一个

22、描述用的类(这也是为什么叫做MataData的原因),它将继承org.obe.client.api.repository.ToolMetaData。以下是一个例子程序:public final class DummyToolMetaData extends ToolMetaData static final long serialVersionUID = 4464988495419316127L; private static final String _implClass = org.obe.runtime.tool.DummyTool; private static final Strin

23、g _implCtorSig = java.lang.String, int ; private int _execTime; public DummyToolMetaData() super(); public DummyToolMetaData(String id, String displayName, String description, String docUrl, String author, int execTime) super(_implClass, _implCtorSig, id, displayName, description, docUrl, author, tr

24、ue); _execTime = execTime; public ToolMetaData introspect(ExternalReference extRef, EntityResolver entityResolver) return null; public Object createInstance(EntityResolver entityResolver) throws RepositoryException return createInstance(new Object_displayName, new Integer(_execTime); public int getE

25、xecTime() return _execTime; public void setExecTime(int execTime) _execTime = execTime; 这个例子没有实现具体的功能,但可以作为演示,表示任何tool都具有这些特征,其他例子可以看包org.obe.client.api.repository中的类。这个类的一个典型特征是_implClass属性中规定了真正实现了tool的功能的类。以下是实现功能的类的例子:public class DummyTool extends AbstractToolAgent private static final Log _log

26、ger = LogFactory.getLog( DummyTool.class); private String _name; private int _execTimeMS; /* * Constructs a new DummyTool with the given name. * The name can be used to identify the debug instance at runtime. * The execTime is set to 0. * * param name The debug name */ public DummyTool(String name)

27、this(name, 0); /* * Constructs a new DummyTool with the given name. * The name can be used to identify the debug instance at runtime. * The execTimeMS attribute can be used to specify a time that the * debug connector should execute to simulate a real tool * executing. * * param name The debug name

28、* param execTimeMS The amount of time for execution, in milliseconds. */ public DummyTool(String name, int execTimeMS) _name = name; _execTimeMS = execTimeMS; protected int _invokeApplication(Parameter parameters) throws InterruptedException, InvocationTargetException StringBuffer buffer = new Strin

29、gBuffer(Invoking dummy tool: ); buffer.append(_name); buffer.append(); for (int i = 0; i parameters.length; i+) buffer.append(parametersi.actualParmId); buffer.append(=); buffer.append(parametersi.value); buffer.append(); _logger.debug(buffer.toString(); _logger.debug(Sleeping for + _execTimeMS + mi

30、lliseconds); _status = ACTIVE; Thread.sleep(_execTimeMS); return 0; 这个类也有一个典型特征,那就是其_invokeApplication函数,我们只要实现这个函数便可为OBE完成特定功能。6.2. 配置castor-mapping.xml在该文件中加入类似与以下的内容: Mapping for class org.obe.client.api.repository.DummyToolMetaData 6.3. 配置BasicToolFactory.xml在该文件中加入类似与以下的内容: dummy Dummy Tool Modified Simulates the invocation of a tool. org.obe.runtime.tool.DummyTool java.lang.String int 注意元素entry的属性key,这个key将用来与XPDL中为Application定义的id相对应。(全文完)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号