工作流虽然还在不成熟的发展阶段,甚至还没有一个公认的规范标准。但其应用却已经在快速展开,这说明市场对工作流框架的需求是急迫而巨大的。
我们公司的后台短信管理系统涉及短信编发、领导层层审核等操作,这是一个比较典型的工作流系统。过去我们用的工作流引擎是
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/
得到如下画面
![](https://i-blog.csdnimg.cn/blog_migrate/286e24f8b196ef24c385c927861a4e7c.jpeg)
这是一个已经用
jBPM
开发好的用户定单流程,具有下单、审核、估价等流程。它所用的数据库是一个内置的数据库。
以
cookie monster
用户登录,选择“
create new web sale order
”可以创建一个定单。如下图所示,在图左边是填写的定单情况,右边一整个定货流程的示意图,红色框表示流程进行到哪一步了。填写好定单好,选择“
Save and Close Task
”,完成定单提交。
![](https://i-blog.csdnimg.cn/blog_migrate/c55967d485b7086a57fd19593cbf9a56.jpeg)
选择右上角的“
Login as another user
”以另外一个用户名
ernie
登录。这时可以看到
ernie
用户的任务列表中多了一项。
![](https://i-blog.csdnimg.cn/blog_migrate/91f5a5102f930016a180439e7b3cefcf.jpeg)
点进去后,显示如下画面。这个示例对中文的支持不好,全都显示成了
unicode
码了。不管这什么多,反正知道是这么回事就行了。在
comment
项填写意见,选
OK
按钮,进入到下一步。如果选择
more info needed
按钮,则打回给
cookie monster
用户修改定单。
![](https://i-blog.csdnimg.cn/blog_migrate/62ce082a89f37c333f863a40cbbd4bc0.jpeg)
下面的流程,这里就不再赘述了。在这个很标准的工作流示例中,我们基本可以看到
jBPM
的应用范围还是比较广的。而且从这个示例,我们是看不出有
jBPM
的,也就是说
jBPM
在后台起着作用。
从这个例子,还看不出
jBPM
的优势。不过,如果在一个流程不确定,经常需要变动的项目中,
jBPM
的好处将会显然出来。应用
jBPM
后,改变流程只需改变流程描述文件,这将在后面的内容提到。
这是一个已做好的示例,接下来我们将仿造这个实例来开发一个请假流程