工作流虽然还在不成熟的发展阶段,甚至还没有一个公认的规范标准。但其应用却已经在快速展开,这说明市场对工作流框架的需求是急迫而巨大的。
我们公司的后台短信管理系统涉及短信编发、领导层层审核等操作,这是一个比较典型的工作流系统。过去我们用的工作流引擎是 shark ,然后在使用后发现其过于庞大,后台数据库操作频繁而未进行优化,直接导致的后果就是前台操作缓慢。于是经研究决定,将工作流引擎由 shark 换成 jBPM 。
jBPM 之前是一个开源软件,后加入 JBoss 组织。正好我们公司也是用 JBoss 的。不过 jBPM 并没有绑定在 JBOSS 上, Tomcat 等也可以使用它。
jBPM 的正处在不断发展中,做为开源软件的特点,其设计变化往往很大。所以一些过去的资料可能已经不适用了。于是作者根据自己的使用经验,重新整理出这份文档,以备学习参考。
注:本文使用的 jBPM 版本为 3.1.1
环境准备
1 、安装 JDK
所有 JAVA 开发第一个需要安装的,没什么好说的。记得把系统变量 JAVA_HOME 设上。
2 、安装 Ant
Ant 是使用 jBPM 必须的一个工具。 jBPM 中的很多操作都要用到 Ant 。
安装方法:
( 1 )先下载: http://archive.apache.org/dist/ant/binaries/ ,选一个如: apache-ant-1.6.5-bin.zip 。
( 2 )解压到 D:\ant (当然其他目录也可以)。
( 3 )设置如下系统变量: ANT_HOME=d:\ant 。
( 4 )把 %ANT_HOME%\bin 加入到系统变量 PATH 中。
3 、安装 Eclipse
Eclipse 不是开发 jBPM 必须的工具,但它是对 jBPM 开发很有帮助的工具,特别是 jBPM 提供了一个 Eclipse 插件用来辅助开发 jBPM 。关于 Eclipse 的安装不赘述了,本文用的版本是: Eclipse3.2
安装 jBPM
jBPM 的下载地址: http://www.jboss.com/products/jbpm/downloads
l JBoss jBPM 是 jBPM 的软件包
l JBoss jBPM Starters Kit 是一个综合包,它包括了 jBPM 软件包、开发插件、一个配置好了的基于 JBoss 的 jBPM 示例、一些数据库配置文件示例。
l JBoss jBPM Process Designer Plugin 是辅助开发 jBPM 的 Eclipse 插件。
l JBoss jBPM BPEL Extension jBPM 关于 BPEL 的扩展包
本指南选择下载: JBoss jBPM Starters Kit 。下载后解压到 D:\jbpm-starters-kit-3.1 ,目录下含有五个子目录:
l jbpm jBPM 的软件包
l jbpm-bpel 只含有一个网页
l jbpm-db 各种数据库 hibernate 配置文件示例,有些还包含了相应的 jdbc 驱动程序。
l jbpm-designer 辅助开发 jBPM 的 Eclipse 插件,具体在 jbpm-gpd-feature 子目录中
l jbpm-server 一个已经配置好了的基于 JBoss 的 jBPM 示例 .
感觉下工作流
前面我们说了,在 JBoss jBPM Starters Kit 的 jbpm-server 目录是一个已经配置好的了 jBPM 示例,那么让我们来感觉一下 jBPM 做出的东西吧。
双击 jbpm-server 目录下的 start.bat 文件,启动 JBoss 服务。这时会打开一个 DOS 窗口,启动完成后,日志会不断输出,其中最后一句是“ 13:55:39,937 DEBUG [StaticNotifier] going to wait for (CMD_EXECUTOR, java.lang.Object@1df59bd) ”,这表示 jBPM 在开始工作了,它不断进行轮询。
打开网页: http://localhost:8080/jbpm/ 得到如下画面
这是一个已经用 jBPM 开发好的用户定单流程,具有下单、审核、估价等流程。它所用的数据库是一个内置的数据库。
以 cookie monster 用户登录,选择“ create new web sale order ”可以创建一个定单。如下图所示,在图左边是填写的定单情况,右边一整个定货流程的示意图,红色框表示流程进行到哪一步了。填写好定单好,选择“ Save and Close Task ”,完成定单提交。
选择右上角的“ Login as another user ”以另外一个用户名 ernie 登录。这时可以看到 ernie 用户的任务列表中多了一项。
点进去后,显示如下画面。这个示例对中文的支持不好,全都显示成了 unicode 码了。不管这什么多,反正知道是这么回事就行了。在 comment 项填写意见,选 OK 按钮,进入到下一步。如果选择 more info needed 按钮,则打回给 cookie monster 用户修改定单。
下面的流程,这里就不再赘述了。在这个很标准的工作流示例中,我们基本可以看到 jBPM 的应用范围还是比较广的。而且从这个示例,我们是看不出有 jBPM 的,也就是说 jBPM 在后台起着作用。
从这个例子,还看不出 jBPM 的优势。不过,如果在一个流程不确定,经常需要变动的项目中, jBPM 的好处将会显然出来。应用 jBPM 后,改变流程只需改变流程描述文件,这将在后面的内容提到。
这是一个已做好的示例,接下来我们将仿造这个实例来开发一个请假流程。