JBPM,全称是Java Business Process Management,是一种基于J2EE的轻量级工作流管理系统。jBPM是公开源代码项目,遵循Apache License。
JBPM的配置还是比较容易的,只是配置的过程有些麻烦,但是只要你具备了一定的基础之后,是非常容易理解。在我刚开始配置的时候,总是“报错”JNDI没有绑定,而不是“信息”JNDI没有绑定,这两者的区别就是:“报错”说明配置有问题,而“信息”则表明我知道可以通过JNDI绑定的方式来实现但是我没有用它。
下面介绍配置的过程,而且,是基于JDBC直连的方式,你就不用考虑配置数据源的问题了。如果这个过程中出现关于数据源(Datasource)的异常信息,说明你又在配置JDBC直连的方式时考虑了数据源的配置。
系统环境
操作系统:Windows XP SP2
JBPM版本:jbpm-jpdl-suite-3.2.3
WEB服务器:Tomcat 6.0
JDK版本:Sun JDK1.6
MySQL:5.0
浏览器:IE 6.0
Ant版本:Ant 1.7.1
安装配置
主要分为两部分:
JDK,Ant,Tomcat,MySQL安装配置过程:略。
另一部分就是jbpm-jpdl-suite-3.2.3的准备工作,详细说明。
1、下载jbpm-jpdl-suite-3.2.3.zip
JBoss jBPM 官方(http://www.jboss.org/jbossjbpm/)当前发布的版本为 3.2.3,只需要下载jPDL Suite,下载后得到jbpm-jpdl-suite-3.2.3.zip,解压缩后得到jbpm-jpdl-3.2.3目录下的如下文件和目录:
│ └─jbpm-jpdl-3.2.3 │ jboss.eula.txt │ jbpm-identity.jar │ jbpm-jpdl.jar │ license.txt │ readme.html │ release.notes.html │ x.txt │ ├─config │ ├─db │ ├─deploy │ ├─designer │ ├─doc │ ├─examples │ ├─lib │ ├─server │ └─src |
2、MySQL数据库配置
启动MySQL数据库服务器,我使用root登录,创建一个数据库jbpm。
然后,在jbpm-jpdl-3.2.3\db目录下面可以看到数据库的SQL脚本文件,找到jbpm.jpdl.mysql.sql文件,在其中每行的末尾添加一个分号,例如,原来的为:
alter table JBPM_ACTION drop foreign key FK_ACTION_REFACT alter table JBPM_ACTION drop foreign key FK_CRTETIMERACT_TA alter table JBPM_ACTION drop foreign key FK_ACTION_PROCDEF alter table JBPM_ACTION drop foreign key FK_ACTION_EVENT alter table JBPM_ACTION drop foreign key FK_ACTION_ACTNDEL alter table JBPM_ACTION drop foreign key FK_ACTION_EXPTHDL |
修改后应该为:
alter table JBPM_ACTION drop foreign key FK_ACTION_REFACT; alter table JBPM_ACTION drop foreign key FK_CRTETIMERACT_TA; alter table JBPM_ACTION drop foreign key FK_ACTION_PROCDEF; alter table JBPM_ACTION drop foreign key FK_ACTION_EVENT; alter table JBPM_ACTION drop foreign key FK_ACTION_ACTNDEL; alter table JBPM_ACTION drop foreign key FK_ACTION_EXPTHDL; |
然后,就可以将该SQL脚本文件在MySQL数据库服务器上执行,创建数据库jbpm中的所有表,使用如下命令:
mysql> source D:\JBPM\jbpm-jpdl-suite-3.2.3\jbpm-jpdl-3.2.3\db\jbpm.jpdl.mysql.sql; |
从jbpm.jpdl.mysql.sql文件内容可以看到,如果你是第一次执行该脚本文件,它会首先假定数据库jbpm中存在这些表而执行删除操作,然后才能执行创建表的工作。
接着,可以初始化数据库,向其中插入数据:
INSERT INTO JBPM_ID_GROUP VALUES(1,'G','sales','organisation',NULL); INSERT INTO JBPM_ID_GROUP VALUES(2,'G','admin','security-role',NULL); INSERT INTO JBPM_ID_GROUP VALUES(3,'G','user','security-role',NULL); INSERT INTO JBPM_ID_GROUP VALUES(4,'G','hr','organisation',NULL); INSERT INTO JBPM_ID_GROUP VALUES(5,'G','manager','security-role',NULL); INSERT INTO JBPM_ID_USER VALUES(1,'U','user','user@sample.domain','user'); INSERT INTO JBPM_ID_USER VALUES(2,'U','manager','manager@sample.domain','manager'); INSERT INTO JBPM_ID_USER VALUES(3,'U','admin','admin@sample.domain','admin'); INSERT INTO JBPM_ID_USER VALUES(4,'U','shipper','shipper@sample.domain','shipper'); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(1,'M',NULL,NULL,2,4); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(2,'M',NULL,NULL,3,4); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(3,'M',NULL,NULL,4,4); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(4,'M',NULL,NULL,4,3); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(5,'M',NULL,NULL,1,3); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(6,'M',NULL,NULL,2,3); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(7,'M',NULL,NULL,3,3); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(8,'M',NULL,NULL,3,2); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(9,'M',NULL,NULL,2,2); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(10,'M',NULL,NULL,2,5); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(11,'M',NULL,'boss',2,1); INSERT INTO JBPM_ID_MEMBERSHIP VALUES(12,'M',NULL,NULL,1,1); |
保存为insert.sql文件,然后在MySQL数据库服务器上执行:
mysql> source D:\JBPM\jbpm-jpdl-suite-3.2.3\jbpm-jpdl-3.2.3\db\insert.sql; |
3、JBPM控制台配置
JBPM是通过Web的控制台来进行流程管理的,所以配置的时候有点麻烦,但是很容易理解。
要保证你的Ant正确配置好,然后启动一个cmd窗口,切花到jbpm-jpdl-3.2.3\deploy(我的为D:\Eclipse\workspace\jbpm-jpdl-3.2.3\deploy)目录下,执行如下命令:
ant customize.console.for.tomcat |
执行结果如下所示:
C:\Documents and Settings\SHIYANJUN>d: D:\>cd D:\Eclipse\workspace\jbpm-jpdl-3.2.3\deploy D:\Eclipse\workspace\jbpm-jpdl-3.2.3\deploy>ant customize.console.for.tomcat customize.console.for.tomcat: BUILD SUCCESSFUL |
这时,在D:\Eclipse\workspace\jbpm-jpdl-3.2.3\deploy目录下生成了两个目录:customized和target。
将customized目录下的jbpm-console.war文件拷贝到Tomcat安装目录下的webapps下面,启动Tomcat Web服务器,然后修改jbpm-console目录下的内容。
修改目录D:\Eclipse\workspace\jbpm-jpdl-3.2.3\deploy\target\war\WEB-INF\classes下的hibernate.cfg.xml文件,只需要修改mapping元素之前的内容property元素的内容。最初,默认只配置了如下三项:
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> <property name="hibernate.connection.datasource">java:comp/env/jdbc/JbpmDataSource</property> |
修改后需要添加,因为是JDBC直连,所以修改后如下:
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">111111</property> <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> |
你需要把涉及到数据源的配置注释掉或者删除掉,否则在后面测试启动Tomcat的时候会报JNDI为未绑定的异常。
接着,要引入相关的jar包文件(jbpm-console是一个jsf应用):
(1)将jboss-j2ee.jar、commons-collections.jar、jsf-api.jar和jsf-impl.jar四个文件添加到D:\Tomcat 6.0\webapps\jbpm-console\WEB-INF\lib目录下。
上面四个文件获取:
jboss-j2ee.jar可以从jbpm-jpdl-suite-3.2.3\jbpm-jpdl-3.2.3\lib目录中获取到;
commons-collections.jar可以从jbpm-jpdl-3.2.3\server\server\jbpm\lib目录中获取到;
jsf-api.jar和jsf-impl.jar可以从jbpm-jpdl-3.2.3\server\server\jbpm\deploy\jboss-web.deployer\jsf-libs目录中获取到。
(2)将MySQL的JDBC驱动程序jar包添加到Tomcat共享目录:例如,我将mysql-connector-java-5.0.3-bin.jar文件拷贝到D:\Tomcat 6.0\lib目录下。
4、Tomcat安全域配置
在%CATALINA_HOME%/conf/Catalina/localhost 创建一个jbpm-console.xml 文件,该配置文件的内容如下:
<Context> <Realm className="org.apache.catalina.realm.JDBCRealm" driverName="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/jbpm" connectionName="root" connectionPassword="111111" userTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g" userNameCol="g.TYPE_ = 'security-role' AND m.GROUP_ = g.ID_ AND m.USER_ = u.ID_ AND u.NAME_" userCredCol="DISTINCT u.PASSWORD_" userRoleTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g" roleNameCol="g.NAME_" /> </Context> |
这里使用的是MySQL数据库,连接的名称root,密码为111111。
测试JBPM
启动Tomcat,如果没有发生任何异常,说明配置成功了。特别注意,这里使用的是JDBC直连的方式,并没有为其配置Hibernate数据源,所以不可能发生与数据源有关的异常。
打开http://localhost:8080/jbpm-console,可以看到如图所示:
根据图中提示的Example User账号信息,登录JBPM控制台,我使用admin帐户,登录成功后,如图所示:
如果第一次登录,Processes下是没有项的,可以点击左侧的deploy连接,选择一个工作流定义文件(例如,选择使用D:\JBPM\jbpm-jpdl-suite-3.2.3\jbpm-jpdl-3.2.3\examples\websale\target\websale.jpdl),然后Deploy 该New Process,如图所示:
执行Deploy之后,如果成功,则直接跳转到Infomation页面,显示所有的Process,可以通过Process ID来查看某个工作流,包括通过直观的Process Image来审查。
还记得上面,在执行SQL脚本的时候,向数据库中的表中插入了一些初始化数据,这时,可以通过JBPM控制台上的Identities来查看,如图所示:
到此,完成全部安装配置过程。