[转]jbpm 3.2.2+Tomcat 6.0.10+MySQL5.0.27/MSSQL2000全攻略

  大象刚刚接触jBPM,经过这几天的折腾,终于把jbpm-console这个项目在Tomcat6上布署成功了,现在把这几天来的学习经验拿出来和大家分享一下。(附件中有相关jar包和sql脚本下载)

    系统环境:windowsXP-SP2  JDK1.5.0_09  jbpm-jpdl-3.2.2  MySQL5.0.27  Tomcat6.0.10  MSSQL 2000

       1、安装JDK1.5.0_09

       不必一定要按我的版本来安装,不过至少JDK应该在1.5以上,JDK安装好以后,设置PATHCLASSPATH环境变量。

       2、安装Tomcat6.0.10

       这个没什么好说的,请用6.0的版本,因为大象没在5.05.5上测试过,而且这几个版本之间有很大的不同,为了能尽快上手,还是按照我写的来吧。^_^

       3、安装MySQL5.0.27

 

            MySQL安装中采用默认安装即可,字符集不用设置为GB2312GBK,这样做比较通用(大象用的MySQL没有设置)。

    4、安装Ant-1.7.0

      从apache网站上下载Ant,然后解压,设置PATH环境变量,在CMD中键入ant -version 如果看到:

       Apache Ant version 1.7.0 compiled on December 13 2006

       那说明你的PATH环境已经设置好了。

    5、安装jbpm-jpdl-3.2.2

 

       下载jbpm-jpdl-suite-3.2.2,然后解压就行,直接放在根目录下,比如:D:/jbpm-jpdl-3.2.2,这个版本是包含所有的一整套工具,目录下主要包含以下几个子目录:

       config —— jBPMHibernatelog4j的配置文件

       db —— 各种数据库的SQL语句

       deploy —— 已经打包好的war

       designer —— jBPMEclipse插件,具体在eclipse子目录中

 

       doc —— API文档及用户使用向导

            examples —— jBPM自带的例子程序

            lib —— 依赖的第三方依赖类库

            server —— 一个已经配置好了的基于JBossjBPM示例

 

            src —— jBPM的源代码

       jbpm-jpdl-suite-3.2.2的下载地址:http://sourceforge.net/project/showfiles.php?group_id=70542

       注意看下面一个链接:View older releases from the f) jBPM jPDL 3 package » 这是jbpm以前的版本

       6、安装Eclipse3.2.1MyEclipse5.1.0GA

             我使用的是一种整合版本,就是解压后可以直接使用,eclipsemyeclipse已经整合好了(嘿嘿,感觉非常方便,我自己还做了一个Eclipse3.3MyEclipse6.0的整合版,下次帖一个制作方法),版本比我的高应该没关系,虽然没试过,但网上有很多人都在高版本上做过,应该没问题。

       7、安装jbpm开发插件

            虽然布署jbpm-console这个项目不需要用到开发插件,但为了以后的开发,在这里我还是说一下,大象用的版本是3.0.13,为什么使用这个版本呢?因为我试过最新的3.1.3.sp2版,里面可视化编辑流程里左下角没有swimlanes标签,而3.0.13的版本中却有。

            3.0.13的下载地址:http://sourceforge.net/project/showfiles.php?group_id=70542&package_id=116692 这个页面可以找到所有的插件版本,当然包括最新版。

            下面来说下我的安装方法:

 

 

 

        

        看到这红线框的两个文件夹了吧,大象前面说了,我用的是一种整合版本,解压后就可以直接用了,所以这两个文件夹早就已经存在了,所以如果你们要用的话就像这样建两个文件夹吧,ThirdPlugins是放第三方插件的,Links是放ini配置文件的,下面都会有详细介绍。

            将下载的jbpm-gpd-3.0.13解压,复制整个eclipse文件夹,进入ThirdPlugins下,新建一文件夹,命名jbpm-gpd-3.0.13,再在此目录下粘贴eclipse文件夹

 

       另外还需要将plugins目录下的jar包作一下修改,只保留如下两个jar包,因为其它几个jar包在MyEclipse中也有,启动eclipse之后会发生冲突,而且千万不要想当然的,在myeclipse中把同名的jar包用高版本替换,不然你会发现启动之后全是错误,嘿嘿,大象试过,有着血一样的教训,请大家千万不要重蹈覆辙。

        此文件内容为:path=ThirdPlugins/jbpm-gpd-3.0.13

            OK,到此,插件安装已经全部完成,另外还需要在eclipse中对jBPM作一下设置,同样为了以后开发作准备。

            启动eclipse,点击Windows->Preference,中文版为"窗口"->"span

    • SQL脚本.rar (6.9 KB)
    • 描述: sqlserver和mysql脚本
    • 下载次数: 15
  • 需要的JAR包.rar (2.8 MB)
  • 描述: 4个必须的jar包及sqlserver和mysql驱动
  • 下载次数: 69

点击Add,选择Search...找到你解压的jbpm-jpdl-3.2.2文件夹,然后填写Name,点击OK。回到主界面,此时还要勾选Name下的复选框,点击Apply

             Server Deployment里面的东西是用来布署流程用的,前提是你得先发布好jbpm-console控制台这个程序,保证这个程序跑起来没有问题,否则是不会成功的。8080端口号和你服务器保持一致,如TomcatJBoss,另外布署一个新流程时,一定要先启动服务器。jbpm-console这个名字是默认发布到服务器上的名字,比如Tomcat中,webapps下使用的名字和这个要一样,那个变了,这个也要跟着变,还是保持默认就行。upload不要作修改,说的这些其实与布署jbpm-console应用没有多大关系,大家看看就行。

     

       8、布署jbpm-console

             jbpm-jpdl-3.2.2/deploy目录下可以看到jbpm-console.warbuild.xml(当然还有其它文件,现在我们只关心这两个),在CMD中,进入jbpm-jpdl-3.2.2/deploy目录下,使用命令:ant customize.console.for.tomcat 然后我们在deploy下可以看到多出来customizedtarget两个文件夹,进入customized,可以看到jbpm-console.war这个文件,用winrar将其解压到当前目录下,这时我们就得到了jbpm-console的发布应用了,不过别高兴,还有很多工作没做呢。这里我来说下,为什么使用ant customize.console.for.tomcat 这个命令,打开build.xml文件,你可以看到这样一段代码:

<target name="customize.console.for.tomcat" description="Creates a customized jbpm-console.war for tomcat in the customized directory">

    <mkdir dir="target/war" />

    <mkdir dir="customized" />

    <unzip src="jbpm-console.war" dest="target/war" />

    <copy todir="target/war/WEB-INF/lib">

      <fileset dir="../lib">

        <include name="activation.jar" />

        <include name="antlr*.jar" />

        <include name="asm.jar" />

        <include name="bsh.jar" />

        <include name="cglib.jar" />

        <include name="commons-logging.jar" />

        <include name="dom4j.jar" />

        <include name="hibernate3.jar" />

        <include name="jboss-backport-concurrent.jar" />

        <include name="jbossretro-rt.jar" />

      </fileset>

    </copy>

    <delete>

      <fileset dir="target/war/WEB-INF/lib">

        <include name="el-api.jar" />

        <include name="el-ri.jar" />

      </fileset>

    </delete>

    <zip destfile="customized/jbpm-console.war">

      <fileset dir="target/war" />

    </zip>

</target>

             大家看到了吧,customize.console.for.tomcattagetname,所以这里使用这个命令就不觉得奇怪了,大象开始也觉得很迷惑,为什么网上都这样写,却不写为什么,看来是问题太简单了,那些大大们想来这根本就不是问题。呵呵呵~~~

      a)、加入必要的jar

            jbpm-console/WEB-INF/lib下要加入以下几个jar包:jboss-j2ee.jarcommons-collections.jarjsf-api.jarjsf-impl.jar,删除jsf-api-14.jarjsf-impl-14.jar这两个jar包。

      b)、建jBPM数据库

            jbpm-jpdl-3.2.2/db下找到jbpm.jpdl.mysql.sql,打开它删除前面的alter table JBPM_XX部分,保留后面的,然后再在每句SQL语句后面加上分号,检查一下有没有遗漏。然后在MySQL中新建一个jbpm数据库,将sql脚本导入进来,大象使用的是SQLyog可视化操作工具,其它相关的可视化工具非常多,可以任选一种使用,如果你不用这些工具来简化开发,那就配置mysqlPATH环境变量,在命令行中操作吧。^_^

            SQLyog中操作如下:

            1、点击菜单"DB"->"Create Database",输入jbpm

            2、点击菜单"Tools"->"Import From SQL Statements...",在弹出窗口中点击"..."按钮,选择jbpm.jpdl.mysql.sql文件,然后再点击Execute按钮。请在点击Execute前确保sql脚本没有语法错误,否则是不可能执行成功的。

c)、修改hibernate.cfg.xml文件

            修改jbpm-jpdl-3.2.2/deploy/customized/jbpm-console/WEB-INF/classeshibernate.cfg.xml文件,原配置文件要修改部分如下:

    <!-- hibernate dialect -->

    <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>

 

    <!-- JDBC connection properties (begin) ===

    <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>

    <property name="hibernate.connection.url">jdbc:hsqldb:mem:jbpm</property>

    <property name="hibernate.connection.username">sa</property>

    <property name="hibernate.connection.password"></property>

    ==== JDBC connection properties (end) -->

   

    <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>

   

    <!-- DataSource properties (begin) -->

    <property name="hibernate.connection.datasource">java:/JbpmDS</property>

    <!-- DataSource properties (end) -->

            修改后如下:

    <!-- hibernate dialect -->

    <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">自己的密码(无密码就空着)</property>

   

    <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>

   

    <!-- DataSource properties (begin)

    <property name="hibernate.connection.datasource">java:/JbpmDS</property>

    DataSource properties (end) -->

         d)、修改web.xml文件

               jbpm-console/WEB-INF下打开web.xml文件,在servlet前加入以下listener,注意:把listener放在所有的servlet前面,我发现网上很多帖子里都没有提到这一点,不知道他们的程序是怎么跑起来的?残念ING~~~

<listener>

     <listener-class>com.sun.faces.config.ConfigureListener</listener-class>

</listener>

<listener>

     <listener-class>com.sun.faces.application.WebappLifecycleListener</listener-class>

</listener>

             这两个监听器很关键,大象先一直没有成功的原因就是没有加这个,而这两个监听器都在jsf-impl.jar包中,jbpm-console这个应用可是用jsf来实现的,如果你不加,则会产生如下这些错误:

javax.servlet.ServletException: Servlet.init() for servlet Faces Servlet threw exception

          at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1202)

          at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:806)

          at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:656)

          at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)

          at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)

          at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)

          at org.apache.catalina.authenticator.FormAuthenticator.forwardToLoginPage(FormAuthenticator.java:316)

          at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:244)

          at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)

          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)

          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)

          at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

          at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)

          at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)

          at java.lang.Thread.run(Thread.java:595)

Caused by: java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactory

          at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:256)

          at javax.faces.webapp.FacesServlet.init(FacesServlet.java:142)

          at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)

          ... 16 more

 

java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactory

          at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:256)

          at javax.faces.webapp.FacesServlet.init(FacesServlet.java:142)

          at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)

          at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)

          at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4044)

          at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)

          at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:761)

          at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:741)

          at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)

          at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)

          at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)

          at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)

          at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)

          at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)

          at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)

          at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1023)

          at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)

          at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015)

          at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)

          at org.apache.catalina.core.StandardService.start(StandardService.java:448)

          at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)

          at org.apache.catalina.startup.Catalina.start(Catalina.java:552)

          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

          at java.lang.reflect.Method.invoke(Method.java:585)

          at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)

          at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

2008-8-3 13:03:49 org.apache.catalina.core.StandardContext loadOnStartup

严重: Servlet /jbpm-console threw load() exception

          e)、修改Tomcat安全验证

               有两种方法修改安全验证,第一种是修改%TOMCAT_HOME%/conf下的tomcat-users.xml文件,第二种是在%TOMCAT_HOME%/conf目录下再新建Catalina文件夹,然后再在Catalina文件夹下建localhost文件夹,在此目录下建jbpm-console.xml文件。

               i、修改tomcat-users.xml文件

                   修改前请备份tomcat-users.xml文件,修改后的内容如下:

<?xml version='1.0' encoding='utf-8'?>

<tomcat-users>

  <role rolename="user"/>

  <role rolename="administrator"/>

  <role rolename="manager"/>

  <role rolename="sales"/>

  <role rolename="hr"/>

  <role rolename="admin"/>

  <role rolename="participant"/>

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

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

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

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

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

</tomcat-users>

                  使用这种方式来处理安全验证将不用考虑向数据库中插入组,角色,用户之类的数据,完全由Tomcat来管理

             ii、新建jbpm-console.xml文件

                  使用这种方式将需要向数据库中插入数据,由jBPM来管理安全验证,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="自己的密码"

          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>

                  需要向数据库中插入的数据:

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

             这两种方法任选一种即可。

             此时基本工作都已经做完,不过在发布前,不要忘了,将MySQL的驱动拷贝到%TOMCAT_HOME%/lib目录下,然后就可以将jbpm-console文件夹复制到%TOMCAT_HOME%/webapps目录下了,接着在bin目录下双击tomcat6.exe启动服务器,等启动过程执行完后,打开IE,输入http://localhost:8080/jbpm-console 回车,应该就能看到jbpm控制台界面了。

     

          到此,在MySQL下的布署就全部结束了,如果能看到这个界面,那恭喜你,你终于成功了!


下面接着说下如何将MySQL数据库换成MS SQL Server 2000,其实很简单,如果在MySQL下布署成功了,只需要将hibernate.cfg.xml文件里的配置改成MS SQL Server 2000的连接方式就行了,另外在2000中建立jbpm的数据库也是必要的。

             9、使用SQL Server 2000数据库

               jbpm-jpdl-3.2.2/db下找到jbpm.jpdl.mssql.sql,打开后删除alter table JBPM_XXdrop table JBPM_XX这些语句,这些东东都是用来在以前的版本上做升级用的,我们是新建数据库当然用不到这些了。在SQL Server中新建jbpm数据库,COPY剩下的sql语句,在查询分析器里粘贴,然后执行,这时会有很多警告产生,如下:

警告: 已创建表 'JBPM_DELEGATION',但其最大行大小(8300)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT UPDATE 将失败。  

警告: 已创建表 'JBPM_LOG',但其最大行大小(18321)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT UPDATE 将失败。

               这些不用管它,接下来修改hiberate.cfg.xml文件,大象采用的是JTDS驱动的连接方式,修改后的内容如下:

    <!-- hibernate dialect -->

    <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>

   

    <property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>

    <property name="hibernate.connection.url">jdbc:jtds:sqlserver://localhost:1433/jbpm</property>

    <property name="hibernate.connection.username">sa</property>

    <property name="hibernate.connection.password">自己的密码(无密码就空着)</property>

   

    <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>

   

    <!-- DataSource properties (begin)

    <property name="hibernate.connection.datasource">java:/JbpmDS</property>

    DataSource properties (end) -->

             不要忘了,还要将JTDS的驱动拷贝到%TOMCAT_HOME%/lib目录下,如果采用的是Tomcat安全验证,此时就不用向数据库插入数据,直接就可以启动服务器运行了。如果采用的是jBPM来管理安全验证,此时则需要将前面提到的数据插入数据库中,在插入前需要修改一下,将每条记录前的ID号去掉,因为数据库中对此字段已经作了标识,不能手动对它设置。数据插入后,就启动服务器看下吧!

         写到这里,关于jbpm-console所有的布署都讲完了,大象以上所说的全部都是亲自在电脑上一步一步的做过,绝不会胡乱copy一下网上的东东发出来。如有什么问题,希望和大家一起交流。

         本帖为菠萝大象原创,原帖地址:http://bolo.javaeye.com/blog/223624

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值