摘要:计算机硬件需要中央处理器,而计算机软件则需要中央控制器—工作流引擎。工作流引擎不但可以灵活控制软件的业务逻辑,快速适应需求的变化,还可以大大提高软件的开发效率,为公司节省成本提高竞争力。文章介绍了嵌入工作流引擎的设计思想与实现方法。
关键词:工作流引擎;应用开发;Java;Hibemet;Servlet
0 引言
在每个软件工程项目中,软件工程师都会面对的一个问题是:逻辑,即遵循一定规律的流程。流程可能是业务流程,也可能是生产流程。软件就是为这些流程量身定造的用于提高工作或生产效率的产物。因此在软件的开发过程中,程序员都不断地用重复的代码去塑造出这些流程,即业内人士所述的工作流。然而,在软件的维护过程中,往往由于业务或生产流程的变化,使得软件必须作出相应的修改。于是开发人员又要面临修改代码的任务。简单的流程代码倒不成问题,若碰上比较复杂的流程,则需花上较长时间去弄清楚代码的结构然后才能着手去修改,既费劲又容易出错。于是,有人便提出把整个软件流程图形化地表现出来,而且可以自定义。工作流引擎便应运而生。工作流引擎不仅解决了软件维护上的问题,而且它可以灵活地应用于不同的项目中,减少代码的编写量,从而加速软件的开发过程。例如:业务流程A->B->C->B,用工作流引擎的方法表示如图1所示。
显然用工作流引擎的方法定义流程,既逻辑清晰又形象。倘若业务逻辑需要变化,只需在工作流引擎上把流程方向线修改一下便可,免除了改动代码并且重新编译程序的麻烦。越复杂的流程越能体现它的优点。
工作流引擎既然是为开发人员而设计的,当然是嵌入到软件开发项目中的,它在整个软件中起到了大脑的作用。几乎所有相关的外围程序都由它统一管理与触发。例如图1中的ExcuteA()就是我们所说的外围程序。在实际开发的过程中,程序员只需编写外围程序然后把程序挂接到工作流引擎中适当的位置便可。就像工厂的生产线一样,不同的阶段做不同的加工。程序员只需管各阶段怎么加工,而什么时候做什么加工就交给工作流引擎去做。
1 灵动的工作流引擎的设计思想
工作流引擎要求设计灵活,适应性强,才便于嵌入到各种项目中使用。图2是一个轻量级工作流引擎设计方案,系统整体架构采用三层结构。
第一层是以Java Applet嵌入Web中实现的客户端。该客户端的优点在于不需安装而实时下载到IE中使用,在应用开发中免去了由于平台更新所带来的客户端重装的麻烦。而且Java Applet在图形界面方面的技术已经日趋成熟,利用Java中的AWT与Swing组件能较好地实现流程自定义界面的功能。当然优点的背后常常隐藏着缺点,这种做法必须以牺牲客户端资源为代价。
第二层是以WebSphere为Web服务器的中间层。该层内部又分为两层,上层是Java Servlet,下层是Hibemet。JavaServlet负责与客户端的Applet通信;而Hibemet则负责Oracle数据库的数据存取操作。两者之间也进行着密切的数据交流,共同构建整个系统程序的主体。此处采用Hibemet作数据库存取的中间件还有一个重要的优点就是Hibernet能灵活地支持多种数据库类型,以持久化的思想代替数据库存储的思想。倘若在应用开发中的系统采用的不是Oracle数据库,只需对Hibernet的设置作少量改动,工作流引擎便可兼容。
第三层是Oracle数据库,负责高效的数据存取操作。
2 灵动的工作流引擎的实现
2.1 界面功能
界面布局分为四个区:功能按键区、树型目录区、流程元素区以及流程开发区,如图3所示。
功能按键区:包括新建、保存、删除以及退出等功能按键。树型目录区:其实就是把多个已存储的流程按树型结构显示出来。流程元素区:包含开始节点、结束节点、普通节点以及方向线等流程中的元素。可把流程元素拖到流程开发区进行流程定义。流程开发区:进行流程定义的地方。在该区域可以自由地新建和拖动流程元素。
2.2 流程控制的实现
在数据库中建立三个表,分别是:
(1)节点表:用于存储流程中的节点属性。包括名字、节点权限、在定义区的位置、所属流程编号等。
(2)流向表:用于存储流程的方向线。包括出发节点、指向节点、所属流程编号、以及下面讲述到的触发函数和代谢函数。












