官方文档太坑了,完全按照指南来,结果2个坑,
- 没说把ExampleDS换成jbpmDS。
2.数据库方言没换过来。结果报错如下:
2017-11-23 10:53:50,606 ERROR [org.kie.server.services.impl.KieServerImpl] (ServerService Thread Pool -- 69) Error when initializing server extension of type jBPM KIE Server extension: java.lang.RuntimeException: Unable to create EntityManagerFactory due to [PersistenceUnit: org.jbpm.domain] Unable to build Hibernate SessionFactory
at org.kie.server.services.jbpm.JbpmKieServerExtension.build(JbpmKieServerExtension.java:711)
at org.kie.server.services.jbpm.JbpmKieServerExtension.init(JbpmKieServerExtension.java:194)
.
.
.
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown table 'sequences' in information_schema
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2483)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2441)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1381)
at org.jboss.jca.adapters.jdbc.WrappedStatement.executeQuery(WrappedStatement.java:397)
at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorH2DatabaseImpl.extractMetadata(SequenceInformationExtractorH2DatabaseImpl.java:37)
at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:65)
at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.<init>(DatabaseInformationImpl.java:59)
at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:130)
... 32 more
仔细分析报错,然后分析日志, 根据线索发现使用的还是h2Dialect
at org.jboss.jca.adapters.jdbc.WrappedStatement.executeQuery(WrappedStatement.java:397)
at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorH2DatabaseImpl.extractMetadata(SequenceInformationExtractorH2DatabaseImpl.java:37)
。。。
2017-11-23 10:53:25,583 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 36) WFLYJCA0004: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)
2017-11-23 10:53:25,598 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-3) WFLYJCA0018: Started Driver service with driver-name = h2
里面有:SequenceInformationExtractorH2DatabaseImpl. 还有 service with driver-name = h2
定位问题所在。
然后看了半天官网文档,说的还是 改persistence.xml
db/jbpm-persistence-JPA2.xml :
This is the JPA persistence file that defines the persistence settings used by jBPM for both the process engine information, the logging/BAM information and task service.
In this file, you will have to change the name of the hibernate dialect used for your database.
The original line is:
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
In the case of a MySQL database, you need to change it to:
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
...
You need to change the dialect in persistence.xml to the dialect for your database, for example:
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
没办法,从ant脚本开始检查,发现build.xml里有方言设置,还给注释了。这段代码有2处,分别对应windows、Linux我只需要改win部分的
<!--arg value="-Dorg.uberfire.nio.git.daemon.port=${org.uberfire.nio.git.daemon.port}" />
<arg value="-Dorg.uberfire.nio.git.ssh.port=${org.uberfire.nio.git.ssh.port}" />
<arg value="-Djboss.socket.binding.port-offset=${jboss.port.offset}" />
<arg value="-Dorg.uberfire.nio.git.dir=${jboss.home}" />
<arg value="-Dorg.uberfire.metadata.index.dir=${jboss.home}" />
<arg value="-Dorg.kie.server.persistence.dialect=${org.kie.server.persistence.dialect}" / -->
把dialect设置拷贝出来:(根目录下的:build.xml中),改完后:
<property name="jboss.full.path.win" location="${jboss.home}/bin/standalone.bat" />
<exec executable="${jboss.full.path.win}" spawn="yes" osfamily="windows">
<env key="JAVA_OPTS" value="-Xms512m -Xmx1024m" />
<arg value="-b" />
<arg value="${jboss.bind.address}" />
<arg value="--server-config=standalone-full.xml" />
<arg value="-Dorg.kie.demo=false" />
<arg value="-Dorg.kie.example=false" />
<arg value="-Dorg.kie.server.id=default-kieserver" />
<arg value="-Dorg.kie.server.persistence.ds=java:jboss/datasources/jbpmDS" />
<arg value="-Dorg.kie.server.controller=http://localhost:8080/jbpm-console/rest/controller" />
<arg value="-Dorg.kie.server.location=http://localhost:8080/kie-server/services/rest/server" />
<arg value="-Dorg.kie.server.persistence.dialect=${org.kie.server.persistence.dialect}" />
<!--arg value="-Dorg.uberfire.nio.git.daemon.port=${org.uberfire.nio.git.daemon.port}" />
<arg value="-Dorg.uberfire.nio.git.ssh.port=${org.uberfire.nio.git.ssh.port}" />
<arg value="-Djboss.socket.binding.port-offset=${jboss.port.offset}" />
<arg value="-Dorg.uberfire.nio.git.dir=${jboss.home}" />
<arg value="-Dorg.uberfire.metadata.index.dir=${jboss.home}" />
<arg value="-Dorg.kie.server.persistence.dialect=${org.kie.server.persistence.dialect}" / -->
</exec>
然后修改${org.kie.server.persistence.dialect}的值,在build.properties文件中找到H2数据库属性设置,将H2的注释掉,MySQL的解除注释,结果如下:
# default is H2
#H2.version=1.3.168
#db.name=h2
#db.driver.jar.name=h2-${H2.version}.jar
#db.driver.download.url=http://repo1.maven.org/maven2/com/h2database/h2/${H2.version}/h2-${H2.version}.jar
#other options are:
#mysql
db.name=mysql
db.driver.module.prefix=com/mysql
db.driver.jar.name=mysql-connector-java-5.1.44.jar
db.driver.download.url=https://repository.jboss.org/nexus/service/local/repositories/central/content/mysql/mysql-connector-java/5.1.18/mysql-connector-java-5.1.18.jar
org.kie.server.persistence.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
修改为:
#mysql
db.name=mysql
db.driver.module.prefix=com/mysql
db.driver.jar.name=mysql-connector-java-5.1.18.jar
db.driver.download.url=https://repository.jboss.org/nexus/service/local/repositories/central/content/mysql/mysql-connector-java/5.1.18/mysql-connector-java-5.1.18.jar
org.kie.server.persistence.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
其他地方如官网所述,主要包括:
1、修改db\jbpm-persistence-JPA2.xml
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
In the case of a MySQL database, you need to change it to:
改为
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
2、 修改standalone-full-wildfly-{version}.xml :里面的DataSource
<datasources>
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<datasource jta="true" jndi-name="java:jboss/datasources/jbpmDS" pool-name="H2DS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:h2:tcp://localhost/~/jbpm-db;MVCC=TRUE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
</security>
</datasource>
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
改成MySQL,${passwordforyourdatabase}替换成你密码,数据库用户root推荐换成jbpm:
<datasources>
<datasource jta="true" jndi-name="java:jboss/datasources/jbpmDS" pool-name="MySQLDS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:mysql://localhost:3306/jbpm</connection-url>
<driver>mysql</driver>
<security>
<user-name>root</user-name>
<password>${passwordforyourdatabase}</password>
</security>
</datasource>
<drivers>
<driver name="mysql" module="com.mysql">
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
把数据源ExampleDS改成jbpmDS
<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" jms-connection-factory="java:jboss/DefaultJMSConnectionFactory" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
改成如下:
<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/jbpmDS" jms-connection-factory="java:jboss/DefaultJMSConnectionFactory" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
3、修改db/mysql_module.xml ,把里面的jar文件名改成正确的名字。这个名可以去build.properties中查找。
把
<module xmlns="urn:jboss:module:1.0" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java.jar"/>
</resources>
改成
<module xmlns="urn:jboss:module:1.0" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.18.jar"/>
</resources>
名称参考:根目录下的build.properties中数据库驱动属性设置db.driver.jar.name
#mysql
db.name=mysql
db.driver.module.prefix=com/mysql
db.driver.jar.name=mysql-connector-java-5.1.18.jar