一、用OSWorkFlow和JBPM开发工作流,首先要做的都是编写工作流描述文件,在此基础上再进一步做相关的配置和调用。
二、编写流程描述文件方式
1、 JBPM是通过图形化的编辑工具(JBPM自带的Eclipse插件)来编写业务流程如开始状态,结束状态,以及状态之间的转换,之后会自动生成XML文件,但具体每一步相关的细节操作还是要手工配置(如该节点是属于什么类型节点,相关的函数,要不要较验)。
2、 OSWorkFlow则要通过手工写XML文件来定义流程文件,而且它涉及的标签元素比较多,其用户手册上也建议实施人员不要去修改流程,否则流程很容易破坏。
三、工作流信息保存方式
1、 JBPM是将流程信息直接保存到数据库,可以用任何方式对数据库的操作,这样就要引入保存工作流信息的相关表。
2、 OSWorkFlow是既可以保存在XML文件里,也可以保存在数据库中,保存在数据库中时需要配置propertySet.xml文件,比较复杂,而且它不是完全支持hibernate(如引入osuser来作权限分析时),此时要自定义操作数据库的方式。
四、与系统集成
1、 JBPM集成比较容易,加入Spring支持包spring-modules-jbpm31.jar,该包加入了Spring对JBPM的包装,所有的集成都是在此包基础之上。之后还要配置sessionFactoryForJbpm ,jbpmConfiguration,jbpmTemplate, jbpmDao。
2、 OSWorkFlow跟Spring集成须要如下所需组件:
1) SpringHibernateWorkflowStore,让工作流程实例(如果需要的话)分享当前事务。
2) SpringTypeResolver,允许 OSWorkflow 从 Spring ApplicationContext中获得业务逻辑组件(conditions, functions等等)。
3) SpringConfiguration, 这是一个 Workflow Configuration 接口的实现类, 它包含指向 store和 factory的引用,这样可以在 spring 中注射或者连接。
4) SpringWorkflowFactory,这是一个 XMLWorkflowFactory 封装包,它可以允许从容器中注入 configuration,从而不再从其它的 XML 配置文件中读取它们。
如果OSWorkFlow引入osuser.xml来设置权限,则不支持Hibernate3,因为osuser是比较独立的模块,目前还没有支持hibernate3,所以跟Spring集成时要修改配置文件applicationContext-hibernate3.xml
五、能否实现可定制流程
目前我也不太清楚能否实现流程可定制,而文档中所给出的例子都是事先写好流程描述文件。据我所理解的,流程中的每一步都有相应的事件,该事件由一个动作(函数)实现,有些步可能要用户参与,由用户去决定下一步的流转。因此我现在的理解是流程是事先写好,如果要改变流程,则它相应每一步的动作也跟着变,这样就是流程可定制吗?但是流程的改变是通过改变XML来实现的,至于能不能通过界面来改变流程?我暂时还不清楚。
六、大体情况
1、 JBPM
1)重点难点:JPDL语言的学习,主要是用来编写流程文件;理解3个接口:动作处理接口(提供影响流程执行的方法,在event和action元素中被回调),判定处理接口(用在decision判定节点中,提供方法来判定节点的转向),委派处理接口(用在task的委派子元素assignment中,用来指定将任务分配给指定的人员或角色)。
2)开发步骤:通过图形编辑工具编写业务流程――>生成xml流程文件――>修改流程文件(判断节点是任务节点、普通节点还是判定节点,之后作相应修改)――>导入保存流程信息的数据库表――>部署流程定义文件(将流程文件中的内容放到数据库中)――>创建流程实例――>调用JBPM提供的signal方法执行流程流转
3)流转方法: 先确定节点是什么节点,如果是普通的Node节点,则是流程执行到此节点不会中断,继续执行;如果是state节点,则流程执行到此节点会中断,直到系统外的参与者发会命令才能继续执行,即调用signal()或end()方法;如果节点是Task-node,则会根据task任务列表的任务有没全部执行完来决定流转。
4)流程定义文件元素:一个JBPM的流程定义XML文件中包含一个< process-definition>元素,而一个< process-definition>元素又包含零个或一个< description>元素,零个或多个的< swimlane>元素,一个< start-state>元素,零个或多个的< state>元素或< decision>元素或< fork>元素或< join>元素,以及零个或多个的< action>元素,零个或多个<task-node>和<node>元素,一个< end-state>元素等等。此外,< process definition>元素有一个标示符,以“name”属性来表示,这个属性必须存在,用来表示该流程的名称。
5)JBPM的Scheduler可以实现在JBPM流程中定时触发某一动作。在流程中JPBM提供了timer节点供我们使用,通过这个节点我们可以实现节点动作的定时触发。
2、OSWorkFlow
1)重点难点:工作流文件定义的元素,主要用来编写工作流;OSWorkFlow.xml及propertySet.xml文件的配置;InputMap接口、Workflow 接口及WorkflowDescriptor接口。
2)开发步骤:手工编写工作流文件——>配置OSWorkflow.xml――>配置WorkStore——>配置propertySet.xml,osUser.xml文件(如果需要用户权限)――>调用AbatractWorkflow类加载OSWorkflow.xml(它会自动加载工作流文件及数据库配置文件)――>调用WorkFlow接口方法(initial()方法,transitionWorkflow()方法,doAction()方法)
3) 流转方法:一个工作流包含多个步骤。每一个步骤都有一个当前状态(例如, Queued, Underway, or Finished)。每一个步骤中都有一个或者多个动作可以被执行。每一个动作都可以设置执行条件(condition),也可以设置执行函数(pre-function or post-function)。动作产生结果(result),导致工作流的状态和当前步骤发生改变
4) 流程定义文件主要元素:步骤(step)、条件(conditions)、循环(loops)、分支(spilts)、合并(joins)、角色(roles)、函数(function)
5)osworkflow.xml配置:osworkflow.xml定义了persistence实现的方法(如JDBC, EJB, Ofbiz),同样也定义了用于载入流程定义信息的workflow实现工厂。
6)propertySet.xml配置:OSWorkflow利用property模块动态保存变量,而propertyset能动态保存的变量的类型,取决于workflowStore所选择的PropertySet实现,WorkflowStore是osworkflow.xml中所配置的(你选择了JDBCWorkflowStore,你就必须确保在propertyset.xml中正确配置了jdbc propertyset)
7) osuser.xml配置: osuser.xml文件配置所有与用户和权限相关的逻辑,但是目前只支持JDBC而不支持hibernate。