org.jbpm.ap.Jbpm Exception:no jBPM DB schema:no JBPM 4_EXECUTIONテーブル


もっと読む
リンク先:http://kevin12.iteye.com/blog/1949491
問題は以下の通りです

   30, 2013 2:24:14    org.jbpm.internal.log.Jdk14Log info
  : exception while executing command org.jbpm.pvm.internal.cmd.CheckDbCmd@2bfb3f37
org.jbpm.api.JbpmException: no jBPM DB schema: no JBPM4_EXECUTION table.   Run the create.jbpm.schema target first in the install tool.
	at org.jbpm.pvm.internal.cmd.CheckDbCmd.execute(CheckDbCmd.java:50)
	at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
	at org.jbpm.pvm.internal.tx.SpringCommandCallback.doInTransaction(SpringCommandCallback.java:45)
	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
	at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:49)
	at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
	at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
	at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:56)
	at org.jbpm.pvm.internal.processengine.ProcessEngineImpl.checkDb(ProcessEngineImpl.java:152)
	at org.jbpm.pvm.internal.processengine.SpringProcessEngine.create(SpringProcessEngine.java:70)
	at org.jbpm.pvm.internal.cfg.ConfigurationImpl.buildProcessEngine(ConfigurationImpl.java:90)
	at org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine(SpringHelper.java:50)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
最近はjbpm 4.4プロジェクト用のデータベースをsqlserverからorace 11 gに変更しました。hibernateを配置する際に上記のエラーが発生しました。ネットで原因を調べていませんでしたが、印刷の誤りによって詳しく分析してみると、データベース方言の問題かもしれません。以前にsqlserverデータベースをmysqlに変更した時に類似の問題がありました。今記録しておきます。
hibernate接続はデータベースごとに異なる方言があります。以下のように並べられます。
mysqlの方言:
org.hibernate.dialect.MySQLDialect
sqlserverの方言:
org.hibernate.dialect.SQLServerDialect
oracleの方言:
org.hibernate.dialect.OracleDialect
しかし、該当するデータベースの方言を配置すれば、プロジェクトは正常に実行できます。ただし、Javaプロジェクトでデータベースの添削を実行する時、データベースフィールドのタイプとjavaのデータタイプの変換に問題がある場合があります。この時は方言を書き換えます。mysqlとsqlserver方言の例を紹介します。
前に書いた招待状を参考にしてもいいです。http://kevin12.iteye.com/blog/1815460
mysqlに対して:
package com.sense.workflow.util;
import java.sql.Types;
import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQLInnoDBDialect;
/**
 * mysql      
 * @author lujinyong
 *
 */
public class ExtMySQL5Dialect  extends MySQLInnoDBDialect{
	public ExtMySQL5Dialect(){
		super();
		this.registerHibernateType(Types.LONGVARCHAR, Hibernate.STRING.getName());
		}
}
sqlserverに対する:
package com.sense.workflow.util;
import java.sql.Types;
import org.hibernate.Hibernate;
import org.hibernate.dialect.SQLServerDialect;
/**
 * sqlserver2008      
 * @author lujinyong
 *
 */
public class SqlServer2008Dialect extends SQLServerDialect{
	public SqlServer2008Dialect() {   
        super();   
        registerHibernateType(Types.CHAR, Hibernate.STRING.getName());   
        registerHibernateType(Types.VARCHAR, Hibernate.STRING.getName());   
        registerHibernateType(Types.LONGVARCHAR, Hibernate.STRING.getName());   
        registerHibernateType(Types.DECIMAL, Hibernate.DOUBLE.getName()); 
        registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName()); 
    }   
}
ヒベルナでの引用は以下の通りです。
com.sense.workflow.util.ExtMySQL5Dialect 
com.sense.workflow.util.SqlServer2008Dialect
oracleはまだ書いていません。後で追加します。
リンク先:http://kevin12.iteye.com/blog/1949491