感觉下工作流
前面我们说了,在 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 后,改变流程只需改变流程描述文件,这将在后面的内容提到。
这是一个已做好的示例,接下来我们将仿造这个实例来开发一个请假流程。
4 数据库初始化
jBPM 需要数据库支持, jBPM 会把自己的一个初始化数据存储到数据库,同时工作流的数据也是存储到数据库中的。
jBPM 使用 Hibernate 来做为自己的存储层,因此只要是 Hibernate 支持的数据库, jBPM 也就支持。
本文先以 MySQL 为例,然后再以 Oracle 为例,来谈谈 jBPM
的数据库初始化操作。
注:在上面的 JBoss 自带的示例中,并没有设置数据库,那是因为 jBPM
默认使用的是内存数据库 hsqldb 。
4.1 MySQL
1 、首先安装 MySQL 。
MySQL 的安装比较简单,网上也有很多文章,本文不再赘述。本指南所用
MySQL 版本为 MySQL 4.1 ( for windows )。再找一个 MySQL 客户端,目的是方便查看数据库中的数据,本文推荐使用
MySQL 网站上免费提供的“ MySQL Query Brower ”,当然你用其他的客户端也行,比如 MySQL-Front
。
2 、建库
MySQL 中创建一个库,库名: jbpm
3 、生成建表的 SQL 语句并建表
将 jbpm-starters-kit-3.1.1 下的子目录 jbpm
改名为 jbpm.3 ,否则在执行下面的 ant 命令时会报如 jbpm.3 目录不存在的错误:
D:\jbpm-starters-kit-3.1.1\jbpm-db\build.xml:361:
The following error occurred while executing this line:
D:\jbpm-starters-kit-3.1.1\jbpm-db\build.xml:68:
Basedir D:\jbpm-starters-kit-3.1.1\jbpm.3 does not exist
在 DOS 窗下,进入 D:\jbpm-starters-kit-3.1.1\jbpm-db
目录,执行如下命令:
ant mysql.scripts
执行成功后,在 D:\jbpm-starters-kit-3.1.1\jbpm-db\build\mysql\scripts
目录里生成了四个 sql 文件,它们做什么用的一看名字就知道了。在 MySQL 客户端中执行“ mysql.create.sql
”脚本,这样将在 jbpm 库中创建一个个的数据表。
4.2 Oracle
先安装好 Oracle 服务器。我们公司有现存的 Oracle 服务器,也提供给了我一个属于我自己的用户名,一登录就可以任意在我的库之下创建表了。所以这一步就省了,没有的自个先装好吧。
访问 Oracle 推荐用“ PLSQL Developer ”。不过要连接
Oracle 还要在本机上装上 Oracle 自己的客户端程序,里面提供了 JDBC 包和一些配置。要连接服务器还得配置一下,我一般都是不用
GUI 而直接改 tnsnames.ora 文件,在我的电脑里此文件的目录地址是: D:\oracle\ora92\network\ADMIN\tnsnames.ora
,内容如下 ( 两面有两个配置了 ) :
# TNSNAMES.ORA
Network Configuration File: E:\oracle\ora92\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
WXXRDB_192.168.3.2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.2)(PORT =
1521))
)
(CONNECT_DATA =
(SID = wxxrDB)
(SERVER = DEDICATED)
)
)
WXXRDB_192.168.4.2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.2)(PORT =
1521))
)
(CONNECT_DATA =
(SID = wxxrDB)
(SERVER = DEDICATED)
)
) |
前面都是 Oracle 的一些知识,不会的 Google 一下吧。最后配置好后,用
PLSQL Developer 输入你的用户名和密码联接到 Oracle ,就算 OK 了。
参考上面 MySQL 的步骤,基本一样:
(1) 将 jbpm 改名为 jbpm.3
(2) 再执行 ant oracle.scripts
(3) 用 jbpm-db\build\oracle\scripts
目录的 oracle.create.sql 脚本,在 Oracle 中生成 jBPM 的所有表。在“ PLSQL Developer
”中可以新建一个 Command Windows 窗口然后输入命令: @D:\jbpm-starters-kit-3.1.1\jbpm-db\build\oracle\scripts\oracle.create.sql
5 安装 jBPM 的 Eclipse 开发插件
有个辅助工具开发起来方便一点,只不过现在 jBPM 的开发工具插件功能还不算太强,也就一个“项目创建向导”的功能,让你:
(1)不用再去配置 classpath 库的引用了
(2)直接得到了一个 jBPM 的项目初始结构
其实吧,开发 jBPM 也不需要什么插件工具,在熟练了以后,库引用了项目初始结构都可以手工创建。
插件不用再去下载了, jbpm-starters-kit-3.1.1
包里就有,目录地址如下: D:\jbpm-starters-kit-3.1.1\jbpm-designer\jbpm-gpd-feature\eclipse
,插件的安装方式是链接式还是直接复制式,任选吧。不懂的就去看看《 Eclipse 从入门精通》这本书,在前面章节都有讲到。另外,注明一下
Eclipse 的版本我是用 3.2 ,插件和 Eclispe 版本相关的,要注意了。
如果安装成功,则 Eclipse 首选项里多了一个 JBoss jBPM
,另外我们也需要到这个 jBPM 的首选项里做一些配置工作――指定 jBPM 的安装路径(如下图所示)。这个配置主要是为了找到
jbpm 下的各种 jar 包,好让 Eclipse 设置项目的库引用。本文指向路径是 d:\jbpm-starters-kit-3.1.1\jbpm.3
6 jBPM 的 Hello World
6.1 新建jBPM项目
主菜单“文件->新建->项目”,在弹出的对话框里,有“ Process Project ”项,如下图所示:
选上好,单击“下一步”,起个名“ myjbpm ”,然后就可以单击“完成”了。然后就生成了如下图所示的一个项目结构:
这个项目和通常 Eclipse 的项目结构有点不同,不过这是一个现在非常流行的项目结构, src/java 存放源文件,
test/java 存放相应的 JUnit 单元测试代码。如果你用 Maven 来编译构建项目,对这种目录结构一定不陌生。
项目创建起了,介绍一下里面的文件吧: