我的一个工作流引擎的设计概要

ZDNet软件频道 时间:2003-01-03 作者:javamonkey--Java研究组织 |  我要评论()
本文关键词:
这是作者的工作流引擎的设计概要,理解前提是至少使用过工作流,并且了解wfmc的相关内容。

前提是至少使用过工作流,并且了解wfmc的相关内容,如果你现在就想做一个,那可以先去wfmc.org上查看相关文档。

engine实现了工作流process instance的流转,功能调用等,通常的实现方法是在每个process instance开始节点往下节点一次执行,如果遇到分支,则启动新线程来处理后续的节点,如果遇到join节点,则线程等待状态其他线程执行完毕后在进行join操作。

基于线程的方法是很多工作流实现方法,但这样不可避免的导致一个jvm里有多个线程在使用,导致性能和安全问题。而且,engine不容易控制流程的状态,如当想要挂起/恢复process instance的时候就特别困难。

当然,engine的实现方法很多,利用j2ee提供的ejb,jms都能获得非常好的效果,在这,我提出一中小engine(不依赖j2ee)的设计思路,经过适当的修改,能适应任何性能要求高,安全性要求高的工程   在小engine中,有俩层queue的结构,流程事件,如,流程开始,结束,挂起,恢复,作废,以及节点的开始,结束等均push到这俩个queue 中,不同的是,第一层queue(以下简称Queue Fir)是用于整个流程,第二层queue(以下简称Queue Sec)只是用来协调processInstance内部的事件,该queue,可以接收Queue Fir传来的相应事件并作处理。

不难看出,其实这就是俩层Producer/consumer,性能和安全性表现在,适当的consumer可以改善系统性能将queue改善为持久性queue 可以提高系统安全。如果您需要的是一个适用于大项目的工作流engine,那你完全可以jms queue来代替内部的俩层queue,并在此基础上获得分布的性能  由于没有适当的图来表达这种小engine的设计,感觉很难说清楚,如果对此感兴趣,可以与我联系,共同完成这个engine的设计。



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134