jbpm在tomcat和mysql上的迁移部署过程
创始人
2024-12-24 07:04:26
0次

 jBPM,全称是Java Business Process Management,是一种基于J2EE的轻量级工作流管理系统。jBPM是公开源代码项目,遵循Apache License。jBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss,成为了JBoss企业中间件平台的一个组成部分,它的名称也改成JBoss jBPM。

     
jBPM有两大特色,使他成为市场的一大两点。其中最大的特色就是它的业务逻辑定义没有采用目前的一些规范,如WfMC´s
XPDL, BPML, ebXML, BPEL4WS等,而是它自己定义的JBoss jBPM Process definition
language
(jPdl)。jPdl把一个业务逻辑流程看作是一个UML状态图,如果你不熟悉UML状态图,那初学计算机语言的流程图应该熟悉吧,表达的方式和意思大
同小异。jPdl详细定义了这个状态图的每个部分,如起始、结束状态,状态之间的转换等;其另一大特色就是集成Hibernate,确切的说是绑定,使用
Hibernate来管理数据库,这样jBPM只专注于他的业务流程控制。

       从上面可以看出,jBPM是一个业务流程管理引擎,是一个工作流引擎。除此之外,它同时实现了对jPDL和对BPEL的支持。它整合
了Hibernate技术处理数据库,创建了一系列的数据库表,持久化工作流引擎所需的状态。因此,jBPM支持所有Hibernate支持的数据库,能
够把Java对象持久化到数据库中,把Hibernate支持的Java类的对象保存到数据库中!

       你完全可以像用 Java 的类库一样使用JBoss jBPM,而且通过配置JBoss jBPM也可以被部署在其它J2EE应用服务器上和任何数据库上。

       在本文中,我们首先来创建我们的JBoss jBPM运行开发环境。在开始之前,请准备一下软件产品:

·JDK 1.5 或者更高版本, 这里使用JDK 6u10b

·Apache Tomcat 5.5.x或更高版本,这里使用Tomcat 6.0.16

·MySQL 5.1 ,也可以选择其它Hiberante 支持的数据库,没有太大差别,这里使用MySQL 5.1

·Apache Ant 1.7.0

·JBPM-3.2.3

·Eclipse Europa(Eclipse V3.3) for JavaEE Developers或更高, 这里使用Eclipse V3.4

说明:JBoss jBPM的发布包中已经配置好了一套服务环境,是基于JBoss的。因为我们习惯了Tomcat 的小巧灵活,而且我们也不希望jBPM依赖JBoss。

1. 下载安装JDK,Tomcat, Ant, MySQL, 并设置相应的环境变量

 此步骤不再熬述,具体请查阅官方文档

  Jdk:http://java.sun.com/

  Ant:http://ant.apache.org/

Tomcat:http://tomcat.apache.org/

 Eclipse:http://www.eclipse.org/

 2. 下载JBoss jBPM

JBoss jBPM 官方(http://www.jboss.org/jbossjbpm/)当前发布的版本为 3.2.3, 只需要下载jPDL Suite,下载后得到jbpm-jpdl-suite-3.2.3.zip,这个套件包含了所有的内容和资源,包括eclipse插件,示例,和流程管理控制应用。

解压jbpm-jpdl-suite-3.2.3.zip,这里解压后得到D:/jbpm-jpdl-3.2.3,其主要目录结构如下:

D:/jbpm-jpdl-3.2.3

|--- db    这里都是些sql定义和数据文件,如果改用其它数据库,可以使用这些资源来创建,服务还是很周到的。顺便

|             罗嗦一句,jBPM 默认使用的是内存数据库 hsqldb ,这个数据库还没研究过(嘿嘿---)

|

|--- deploy  用来部署你的应用的包和资源

|

|--- designer  这里是Eclipse插件,这样你就可以在图形界面来定义你的业务流程,骨灰级人物没他也能过日子

|

|--- doc  这里是jBPM相关组件的API 文档

|

|--- examples  这里是些学习的例子

|

|--- lib  jBPM 的类库

|

|--- server  这里有一个JBoss 服务器,并且包含了本JBoss jBPM引擎,还部署了websale例子

|

|--- src  这里是JBoss jBPM的源代码

      3. 配置数据库

      jBPM需要把初始化数据和工作流定义存储到数据库中,它定义了一套数据结构来存储这些数据,这也是该容器本身的特点。

      在mysql 中创建一个数据库 jbpm ,(create database jbpm;),并创建用户jbossjbpm(密码:jbossjbpm)

      说明:如果你嫌麻烦可以使用root账号和其密码,不过下面的设置请做相应的更改

      在D:/jbpm-jpdl-3.2.3/db 找到jbpm.jpdl.mysql.sql,
该文件必须修改一下,以符合MySQL的语法结构。具体就是在每条语句的末尾增加一个分号";"你可以借助 UltrEdit,
EditPlus等工具来做这些事情(注意替换时要注意匹配大小写,有写表的字段中包含CREATE字符),如果是第一次创建这些数据库表,要删除
create语句上面的alter和drop(这些表还都不存在)。

      4. 准备jBPM包

      这是个jbpm-jpdl流程管理控制台,就像Tomcat有个单独的Administrator应用用来管理配置和部署一样的东东。有了他你可以在图形界面来操作控制你的应用。

      打开命令行控制台,切换到D:/jbpm-jpdl-3.2.3/deploy 目录,执行以下命令:

      ant customize.console.for.tomcat

    注意:请确保你的ant安装配置妥当,可以在命令行输入:ant -version 来检测ant 是否正确安装。命令执行后能看到ant的版本信息即OK

    ant customize.console.for.tomcat 执行成功后,会在D:/jbpm-jpdl-3.2.3/deploy 目录下生成customized和target目录,其中customized目录下的jbpm-console.war即是我们想要的war包。

       我们需要修改jbpm-console.war/WEB-INF/classes/hibernate.cfg.xml 文件,以适应我们的资源属性的需要。修改后的结果如下:

Xml代码 jbpm在tomcat和mysql上的迁移部署过程

  1. <hibernate-configuration>

  2.   <session-factory>


  3.     

  4.     <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialectproperty>


  5.     

  6.     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>

  7.     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpmproperty>

  8.     <property name="hibernate.connection.username">jbossjbpmproperty>

  9.     <property name="hibernate.connection.password">jbossjbpmproperty>

  10.      


  11.     <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProviderproperty>


  12.          org.hibernate.dialect.MySQLInnoDBDialect          com.mysql.jdbc.Driver     jdbc:mysql://localhost:3306/jbpm     jbossjbpm     jbossjbpm                org.hibernate.cache.HashtableCacheProvider               org.hibernate.transaction.JDBCTransactionFactory ...

           这里就是启用了 更换了默认的数据属性,JDBC connection properties ,还有自己定义的数据名字和帐号,另外需要注意的是用

    Xml代码 jbpm在tomcat和mysql上的迁移部署过程

    1. <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactoryproperty>

    org.hibernate.transaction.JDBCTransactionFactory

    代替JTATransactionFactory和CMTTransactionFactory,想用JTATransactionFactory或CMTTransactionFactory配置也可以,不过还没有研究过,有知道的朋友可以一起学习一下。

           拷贝jboss-j2ee.jar包至jbpm-console.war/WEB-INF/lib
    。发布包下(D:/jbpm-jpdl-3.2.3)很多地方都有这个包你可以找一下,比如
    D:/jbpm-jpdl-3.2.3/server/client。

           这里主要是用到了Java Transaction Architecture, 所以你可以用J2EE中的jta.jar包还替换jboss-j2ee.jar。jta相关信息请参考:http://java.sun.com/javaee/technologies/jta/index.jsp

            拷贝commons-collections.jar 包至jbpm-console.war/WEB-INF/lib 
    。发布包下(D:/jbpm-jpdl-3.2.3)好几处都有这个包,比如
    D:/jbpm-jpdl-3.2.3/server/server/jbpm/lib 。这个包是Apache Commons包,到处都找的的到。

           
    拷贝jsf-api.jar和jsf-impl.jar包至jbpm-console.war/WEB-INF/lib ,你可以在D:/jbpm-
    jpdl-3.2.3/server/server/jbpm/deploy/jboss-web.deployer/jsf-libs种找到这两个包。

            说明:因为jbpm-console是一个jsf应用,没这两个包,你访问时会报404或505错误。

            拷贝MySQL JDBC驱动程序包至%CATALINA_HOME%/lib (Tomcat 6)或%CATALINA_HOME%/common/lib(Tomcat 5.5)

            拷贝修改后的jbpm-console至%CATALINA_HOME%/webapps

            这样jBPM基本上配置完成,但是我们还不能访问他,还需要配置安全访问控制和初始的用户数据

            5. 配置Tomcat 安全域

            方法一:在%CATALINA_HOME%/conf/Catalina/localhost 创建一个jbpm-console.xml 文件,内容如下:

    Xml代码 jbpm在tomcat和mysql上的迁移部署过程

    1. <Context>

    2. <Realm  className="org.apache.catalina.realm.JDBCRealm"

    3.     driverName="com.mysql.jdbc.Driver"

    4.     connectionURL="jdbc:mysql://localhost:3306/jbpm"

    5.     connectionName="jbossjbpm"

    6.     connectionPassword="jbossjbpm"

    7.     userTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g"

    8.     userNameCol="g.TYPE_ = 'security-role' AND m.GROUP_ = g.ID_ AND m.USER_ = u.ID_ AND u.NAME_"

    9.     userCredCol="DISTINCT u.PASSWORD_"

    10.     userRoleTable="JBPM_ID_USER u, JBPM_ID_MEMBERSHIP m, JBPM_ID_GROUP g"

    11.     roleNameCol="g.NAME_" />

    12. Context>

    
    
    

             方法二:修改 %CATALINA_HOME%/conf/tomcat-users.xml文件来设置安全域。为了不和tomcat已有的用户冲突,这里把 tomcat以前的登陆帐号username="admin" 修改为username="tadmin",修改后的文件如下:

    Xml代码 jbpm在tomcat和mysql上的迁移部署过程

    1. xml version='1.0' encoding='utf-8'?>


    2. <tomcat-users>


    3.   <role rolename="user"/>


    4.   <role rolename="administrator"/>


    5.   <role rolename="manager"/>


    6.   <role rolename="sales"/>


    7.   <role rolename="hr"/>


    8.   <role rolename="admin"/>


    9.   <role rolename="participant"/>


    10.   <user username="user" password="user" roles="user,sales"/>


    11.   <user username="shipper" password="shipper" roles="user,hr"/>


    12.   <user username="manager" password="manager" roles="admin,hr,manager,user,sales"/>


    13.   <user username="tadmin" password="" roles="admin,manager"/>

    14.   <user username="admin" password="admin" roles="admin,user,hr"/>

    15. tomcat-users>

    
    
    
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
    
      
      
    

             6. 初始化数据

             在MySQL jbpm数据库中插入以下数据

    Sql代码 jbpm在tomcat和mysql上的迁移部署过程

    1. INSERT INTO JBPM_ID_GROUP VALUES(1,'G','sales','organisation',NULL);  


    2. INSERT INTO JBPM_ID_GROUP VALUES(2,'G','admin','security-role',NULL);  


    3. INSERT INTO JBPM_ID_GROUP VALUES(3,'G','user','security-role',NULL);  


    4. INSERT INTO JBPM_ID_GROUP VALUES(4,'G','hr','organisation',NULL);  


    5. INSERT INTO JBPM_ID_GROUP VALUES(5,'G','manager','security-role',NULL);  


    6. INSERT INTO JBPM_ID_USER VALUES(1,'U','user','user@sample.domain','user');  


    7. INSERT INTO JBPM_ID_USER VALUES(2,'U','manager','manager@sample.domain','manager');  


    8. INSERT INTO JBPM_ID_USER VALUES(3,'U','admin','admin@sample.domain','admin');  


    9. INSERT INTO JBPM_ID_USER VALUES(4,'U','shipper','shipper@sample.domain','shipper');  


    10. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(1,'M',NULL,NULL,2,4);  


    11. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(2,'M',NULL,NULL,3,4);  


    12. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(3,'M',NULL,NULL,4,4);  


    13. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(4,'M',NULL,NULL,4,3);  


    14. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(5,'M',NULL,NULL,1,3);  


    15. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(6,'M',NULL,NULL,2,3);  


    16. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(7,'M',NULL,NULL,3,3);  


    17. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(8,'M',NULL,NULL,3,2);  


    18. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(9,'M',NULL,NULL,2,2);  


    19. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(10,'M',NULL,NULL,2,5);  


    20. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(11,'M',NULL,'boss',2,1);  


    21. INSERT INTO JBPM_ID_MEMBERSHIP VALUES(12,'M',NULL,NULL,1,1);  

    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);

          7. 启动Tomcat 服务,查看控制台的日志,排除错误,数据库错误和支持库不完整都可能导致错误。

          在浏览器中输入:http://localhost:8080/jbpm 能正常访问说明部署成功,你可以用页面上列出的用户和账号登陆进去体验一下。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...