根据公司工作需要,这个元旦开始才选定用jBPM工作流引擎,什么东西都是一片空白,而jBPM的example WebSale程序是选用的技术却是jsf, hibernate,一时无所适从。
  没办法只好硬着头皮啃下去,jsf,hibernate
  这两天都快抓狂了!!!无论如何都不能使用自己创建的mysql数据库
  就快放弃的时候,老天终于眷顾我啦!!!
   根据一些前人的blog和工作流群上的人的指点,现总结以下两种配置用mysql数据库datasource的方法。
(一)需要改jBPM源码(这个方法不太好,但是可以读读源码,了解机制)
配置连接 MySQL 
1. 在jbpm-3.0\lib目录下 创建mysql目录 
2. 将 mysql数据库驱动 (mysql-connector-java-3.1.7-bin.jar) copy到mysql 目录 
3. 在 mysql 中创建一个数据库,数据库名字 
4. 在jbpm-3.0\src\resources目录下创建mysql目录 
5. 把两个配置文件 (create.db.hibernate.properties, identity.db.xml) 从hsqldb目录下 拷贝到mysql目录 
create.db.hibernate.properties文件中内容参考如下:
# these properties are used by the build script to create 
# a hypersonic database in the build/db directory that contains 
# the jbpm tables and a process deployed in there
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/jbpm
hibernate.connection.username=jbpm
hibernate.connection.password=jbpm
hibernate.c3p0.min_size=1
hibernate.c3p0.max_size=3
hibernate.show_sql=true
6. 在jbpm\lib下创建mysql目录,放进mysql的jdbc  driver
7.修改build.deploy.xml  文件中create.db task
<target name="create.db" depends="declare.jbpm.tasks, db.clean" description="creates a hypersonic database with the jbpm tables and loads the processes in there">
     <jbpmschema actions="create" properties="${basedir}/src/resources/mysql/create.db.hibernate.properties"/> 
     <loadidentities file="${basedir}/src/resources/mysql/identity.db.xml" properties="${basedir}/src/resources/mysql/create.db.hibernate.properties"/> 
     <ant antfile="build.xml" target="build.processes" inheritall="false" /> 
     <deploypar properties="${basedir}/src/resources/mysql/create.db.hibernate.properties">
       <fileset dir="build" includes="*.par" />
     </deploypar>
   </target>
 因为 Hibernate 不能将它的SessionFactory与tomcat的jndi 绑定 , 我们直接在源码中修改 
9. 打开源文件 JbpmSessionFactory.java, 在 getInstance() 方法里, 删除下面代码 
InitialContext initialContext = new InitialContext();
 Object o = initialContext.lookup(jndiName); 
将下面这行 
instance = (JbpmSessionFactory) 
PortableRemoteObject.narrow(o, JbpmSessionFactory.class); 
替换为 instance = (JbpmSessionFactory) 
PortableRemoteObject.narrow(
new JbpmSessionFactory(createConfiguration()), JbpmSessionFactory.class); 
10.在 createConfiguration(String configResource) 方法里, 注释掉这段代码 
String hibernatePropertiesResource = 
JbpmConfiguration.getString("jbpm.hibernate.properties"); 
if (hibernatePropertiesResource!=null) 
{ 
   Properties hibernateProperties = new Properties(); 
   try 
      { 
         hibernateProperties.load( 
                 ClassLoaderUtil.getStream(hibernatePropertiesResource) ); 
      }
   catch (IOException e) 
     { 
         e.printStackTrace(); 
         throw new RuntimeException(
               "couldn't load the hibernate properties" + 
               " from resource '"hibernatePropertiesResource"'", e);
      } 
    log.debug("overriding hibernate properties with "+ hibernateProperties); configuration.setProperties(hibernateProperties); 
 } 
同时加入下面的代码 
configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect"); configuration.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/";); configuration.setProperty("hibernate.connection.username", ""); 
configuration.setProperty("hibernate.connection.password", ""); 
configuration.setProperty("hibernate.connection.pool_size", "15"); 
11.这种方法需要先开starter-kit中的jboss,然后build websale,最后deploy
参考文章:
http://mdvjiangbin.bokee.com/3185679.html
http://www.blogjava.net/znjqolf/archive/2005/12/19/24654.html
还有好多,查过之后都忘了链接了,谢谢前人的总结!
方法二:
1,在starter-kit server中部署的jbpm应用里的deploy目录中创建mysql-ds.xml
文件内容参考如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- The Hypersonic embedded database JCA connection factory config
$Id: hsqldb-ds.xml,v 1.15 2004/09/15 14:37:40 loubyansky Exp $ -->
<datasource>
   <local-tx-datasource>
      <!-- The jndi name of the DataSource, it is prefixed with java:/ -->
      <!-- Datasources are not available outside the virtual machine -->
      <jndi-name>DefaultDS</jndi-name>
      <!-- for tcp connection, allowing other processes to use the hsqldb
      database. This requires the org.jboss.jdbc.HypersonicDatabase mbean.
      <connection-url>jdbc:hsqldb:hsql://localhost:1701</connection-url>
-->
      <!-- for totally in-memory db, not saved when jboss stops. 
      The org.jboss.jdbc.HypersonicDatabase mbean necessary
      <connection-url>jdbc:hsqldb:.</connection-url>
-->
      <!-- for in-process persistent db, saved when jboss stops. The
      org.jboss.jdbc.HypersonicDatabase mbean is necessary for properly db shutdown
-->
      <connection-url>jdbc:mysql://localhost:3306/jbpm</connection-url>
      <!-- The driver class -->
      <driver-class>com.mysql.jdbc.Driver</driver-class>
      <!-- The login and password -->
      <user-name>jbpm</user-name>
      <password>jbpm</password>
      <!--example of how to specify class that determines if exception means connection should be destroyed-->
      <!--exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.DummyExceptionSorter</exception-sorter-class-name-->
      <!-- this will be run before a managed connection is removed from the pool for use by a client-->
      <!--<check-valid-connection-sql>select * from something</check-valid-connection-sql> -->
      <!-- The minimum connections in a pool/sub-pool. Pools are lazily constructed on first use -->
      <min-pool-size>5</min-pool-size>
      <!-- The maximum connections in a pool/sub-pool -->
      <max-pool-size>20</max-pool-size>
      <!-- The time before an unused connection is destroyed -->
      <!-- NOTE: This is the check period. It will be destroyed somewhere between 1x and 2x this timeout after last use -->
      <!-- TEMPORARY FIX! - Disable idle connection removal, HSQLDB has a problem with not reaping threads on closed connections -->
      <idle-timeout-minutes>0</idle-timeout-minutes>
   
   </local-tx-datasource>
        <metadata>
  <type-mapping>mySQL</type-mapping>
  </metadata>
 </datasource>
2,删除该目录有关hsqldb  设置datasource的两个xml文件。
3,edit 上一目录conf下的standardjaws.xml中的这段
<datasource>java:/DefaultDS</datasource>
   <type-mapping>mySQL</type-mapping>
让type-mapping对应mysql-ds.xml中的type-mapping
Step 4: JMS configuration descriptors 
a) Remove hsqldb-jdbc2-service.xml from folder deploy/jms. Save this file somewhere else. 
b) Copy mysql-jdbc2-service.xml from folder docs/example/jms to deploy/jms. 
c) Edit mysql-jdbc2-service.xml and change the datasource name if applicable. In my configuration I don't use HSQL at all so I configured the default datasource DefaultDS for MySQL. In this file, change mySQLDS to DefaultDS. Note that datasource names are case sensitive. 
Step 5: Install MySQL Java Connector 
Download MySQL Connector/J and place the file mysql-connector-java-3.0.15-ga-bin.jar in the lib folder of the server. 
!!!同时需要修改deploy中jbpm.sar文件夹里的jbpm.sar.cfg.jar文件,更新该文件里面的数据库配置
参考文章:
http://wiki.jboss.org/wiki/Wiki.jsp?page=SetUpAMysqlDatasource
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3861605