1 OpenWFE项目简介
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是一个发展中的项目,围绕其进行的开发也需考虑到其未来的发展,以便增强工作流管理系统自身未来的扩展能力
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是一个发展中的项目,围绕其进行的开发也需考虑到其未来的发展,以便增强工作流管理系统自身未来的扩展能力