关于ssh整合jbpm4.4 无法获取processEngine的问题

在struts2.1.8+spring2.5.6+hibernate3.5.0+tomcat7.0环境下,整合jbpm4.4时遇到MappingException,具体表现为Unknown entity: org.jbpm.pvm.internal.id.PropertyImpl。通过检查源码发现是processhelper的createProcessEngine()方法抛出异常,问题根源在于缺少jbpm.repository.hbm.xml的映射配置,解决方法是在jbpm.hibernate.cfg.xml中添加<mapping resource='jbpm.repository.hbm.xml'/>。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


先说环境 我的环境是 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"/>配置

问题就解决了








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值