【问题标题】:Issue while deploying multiple peristence.xml in tomee with JBPM, spring, JPA (Hibernate)使用 JBPM、spring、JPA(Hibernate)在 tomee 中部署多个 peristence.xml 时出现问题
【发布时间】:2016-07-18 04:17:17
【问题描述】:

我在通过xml configuration 配置具有多个persistence.xml 的多个实体管理器时遇到问题,有人可以帮我配置一下吗? 问题:

严重 [main] org.apache.openejb.config.ReportValidationResults.logResults FAIL ... core-web-1.0_A0:@PersistenceContext unitName 需要,多个可用单位:参考“em”,可用单位 [applicationPersistenceUnit, applicationPersistenceUnit, applicationPersistenceUnit, applicationPersistenceUnit]

Below is configuration:

    <bean id="appEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:jpadialect-ref="jpaDialect" p:jpavendoradapter-ref="jpaVendorAdapter">
<property name="jpaProperties"/>
<property name="packagesToScan">
<list>
<value>${application.model.packagesToScan}</value>
<value>org.kie.*</value>
<value>org.jbpm.*</value>
</list>
</property>
<property name="dataSource" ref="appDataSource"/>
<property name="persistenceUnitManager" ref="persistenceUnitManager"/>
</bean>

<bean id="persistenceUnitManager" class="org.springframework.data.jpa.support.MergingPersistenceUnitManager">
<property name="persistenceXmlLocations">
<list>
<value>classpath*:META-INF/persistence.xml</value>
<value>classpath*:META-INF/workflow-persistence.xml</value>
</list>
</property>
<property name="defaultDataSource" ref="appDataSource"/>
</bean>

拥有多个 persistence.xmls 的原因是 JBPM 需要单独的类集。

【问题讨论】:

    标签: spring hibernate jpa persistence jbpm


    【解决方案1】:

    您似乎有多个持久性单元,但 jpa 不知道如何处理实体管理器。它应该属于哪个持久化单元?

    尝试这样的事情(相应地更改您的本地需求)

      @PersistenceContext(unitName = "UNIT1", type = PersistenceContextType.TRANSACTION)
      private EntityManager unit1EntityManager;
    
      @PersistenceContext(unitName = "UNIT2", type = PersistenceContextType.TRANSACTION)
      private EntityManager unit2EntityManager;
    
      @PersistenceContext(unitName = "UNIT3", type = PersistenceContextType.TRANSACTION)
      private EntityManager unit3EntityManager;
    

    【讨论】:

      【解决方案2】:

      如果您有一些不是 EE(100% 弹簧、独立或其他)的 jar,您可以将它们从扫描中排除,创建一个 WEB-INF/exclusions.list 并在其中添加:

      default-list
      myjarprefix
      

      例如,如果 jar 被命名为 myjarprefix-1.2.3.jar。

      它会阻止扫描没有名称的非 EE @PersistenceContext/@PersistenceUnit,因此会让容器启动。

      如果这些类与 EE 代码混合,您可以添加一个 WEB-INF/scan.xml :

      <scan>
          <packages>
            <package>com.company.application.myeepackage</package>
          </packages>
      </scan>
      

      注意不要列出包含您要排除的类的包

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-24
        • 1970-01-01
        • 1970-01-01
        • 2020-03-18
        • 1970-01-01
        • 2012-10-30
        • 2019-05-05
        • 2020-03-05
        相关资源
        最近更新 更多