先说环境 我的环境是 struts2.1.8+spring2.5.6+hibernate3.5.0+tomcat7.0
错误提示如下
org.hibernate.MappingException: Unknown entity: org.jbpm.pvm.internal.id.PropertyImpl
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:580)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:91)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:842)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:835)
at org.jbpm.pvm.internal.id.PropertyImpl.getProperty(PropertyImpl.java:183)
at org.jbpm.pvm.internal.id.PropertyImpl.getPropertyValue(PropertyImpl.java:165)
at org.jbpm.pvm.internal.id.PropertyImpl.getNextDbid(PropertyImpl.java:76)
at org.jbpm.pvm.internal.cmd.CheckDbCmd.execute(CheckDbCmd.java:58)
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:128)
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:606)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:115)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:435)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:903)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:817)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:440)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.itcast.oa.test.TestSpring.<init>(TestSpring.java:20)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:195)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:244)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:241)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
在网上找了很多资料 有说是jbpm4.4与tomcat6.0以上版本jar冲突的
但是试了一下解决办法 也没用
于是开始自己看源码 发现是processhelper的createProcessEngine()方法抛出异常 推测是applicationContext没有注入
于是各种尝试
最后又回到看错误信息上
发现是 org.jbpm.pvm.internal.id.PropertyImpl的映射问题
于是上网百度了下 org.jbpm.pvm.internal.id.PropertyImpl的映射文件位置
jbpm包下的jbpm.repository.hbm.xml文件 内容如下
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field">
<!-- ### Deployment ##################################################### -->
<class name="org.jbpm.pvm.internal.repository.DeploymentImpl"
table="JBPM4_DEPLOYMENT">
<!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<id name="dbid" column="DBID_">
<generator class="assigned" />
</id>
<property name="name" type="text" column="NAME_" />
<property name="timestamp" column="TIMESTAMP_" />
<property name="state" column="STATE_" />
<map name="resources" cascade="all-delete-orphan">
<key foreign-key="FK_LOB_DEPLOYMENT">
<column name="DEPLOYMENT_" index="IDX_LOB_DEPLOYMENT" />
</key>
<map-key type="text" column="NAME_" />
<one-to-many class="org.jbpm.pvm.internal.lob.Lob"/>
</map>
<set name="objectProperties"
table="JBPM4_DEPLOYPROPS"
cascade="all-delete-orphan">
<key column="DEPLOYMENT_" />
<one-to-many class="org.jbpm.pvm.internal.repository.DeploymentProperty" />
</set>
</class>
<class name="org.jbpm.pvm.internal.repository.DeploymentProperty" table="JBPM4_DEPLOYPROP">
<id name="dbid" column="DBID_">
<generator class="assigned" />
</id>
<many-to-one name="deployment"
class="org.jbpm.pvm.internal.repository.DeploymentImpl"
column="DEPLOYMENT_"
foreign-key="FK_DEPLPROP_DEPL"
index="IDX_DEPLPROP_DEPL" />
<property name="objectName" column="OBJNAME_" />
<property name="key" column="KEY_" />
<property name="stringValue" column="STRINGVAL_" />
<property name="longValue" column="LONGVAL_" />
</class>
<class name="org.jbpm.pvm.internal.id.PropertyImpl" table="JBPM4_PROPERTY">
<id name="key" column="KEY_">
<generator class="assigned" />
</id>
<version name="version" column="VERSION_" />
<property name="value" column="VALUE_" />
</class>
</hibernate-mapping>
org.jbpm.pvm.internal.id.PropertyImpl的配置为红色区域
所以只要在jbpm.hibernate.cfg.xml中添加<mapping resource="jbpm.repository.hbm.xml"/>配置
问题就解决了