工作流引擎的设计与实现

工作流引擎的设计与实现
  07年刚进公司的时候,就接到老大开发工作流引擎的任务。在学校的时候对工作流只是有一个简单的了解和研究,所以压力还是比较大。还好国内的银狐兄对工作流的研究比较深,借鉴了哈他的研究思路,然后看了JBPM,OSWorkflow等开源项目的源码。看了大概10天左右对工作流有了比较深刻的理解。于是就开工了:)
   本来打算用开源的项目的,但是JBPM太大了,而且有些东西不适合我们公司产品的需求,而且代码量比较多,所以决定自己开发。现在我只能把这个项目的开发步骤和关键的东西给大家列出来:)
   根据WFMC推荐的标准,WF的一般由Definition Execution 和Coordinate With Other Dep组成,在考虑到标准化的问题后,引擎的定义部分用XML实现,所以首先需要做的事情就是定义Definition的Schema,这个Schema大的方向是根据XPDL的标准来做的。将节点分成不同的类型比如:StartNode EndNode TaskNode ForkNode,然后定义Transition(连接不同节点的转向)。
   在定义完基本的框架后,需要考虑的事情就是如何尽可能多的实现工作流的PATTERN,目前我们的工作流实现的PATTERN包括:串行、自循环、并行、鉴别式选择、同步聚合、条件聚合、鉴别式聚合等;同时支持流程嵌套模型(子流程)。
   如果需要实现更多的Pattern则只需要增加Node的类型和实现更多的规则引擎。我们开发的工作流引擎没有采用大公司的那种工作流规则引擎产品的模式,更多的是采用一种嵌入式模块的方式,我们支持的方式包括BEANSHELL,JNDI等。我们只要把BEANSHELL的代码写好然后上传就OK了。
   工作流引擎执行部分最重要的就是以下几个概念:ExecutionContext,Token.Token故名思意,就是标示一条执行路径当前节点的对象,如果有并发分支的话,那么就会出现父子Token的关系,它的主要的功能就是指示当前执行路径的当前执行节点;ExecutionContext表示的是流程执行的上下文,包括了现在流程所在的执行路径,以及创建的任务等等。
   只要把上面的两个概念弄清楚了,工作流引擎的开发我觉得就没什么问题了   好了下次再说:)

 

你可能感兴趣的:(设计模式,工作,workflow,jbpm,嵌入式)