Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 容器管理事务的问题(openJPA+Spring+WAS 8.5)_Java_Spring_Spring Integration_Openjpa_Container Managed - Fatal编程技术网

Java 容器管理事务的问题(openJPA+Spring+WAS 8.5)

Java 容器管理事务的问题(openJPA+Spring+WAS 8.5),java,spring,spring-integration,openjpa,container-managed,Java,Spring,Spring Integration,Openjpa,Container Managed,在不使用@PersistenceContext的情况下将EntityManager注入DAO,我面临一个问题 我正在开发一个有两个EntityManagerFactory的应用程序,一个使用jndi数据源,另一个使用jdbc数据源。我必须在不使用@PersistenceContext的情况下将EntityManager注入DAO,因为我希望对两个数据源使用相同的DAO。这两个持久性单元位于同一persistence.xml中 我采用的方法是: persistenceContext-jdbc.xm

在不使用@PersistenceContext的情况下将EntityManager注入DAO,我面临一个问题

我正在开发一个有两个EntityManagerFactory的应用程序,一个使用jndi数据源,另一个使用jdbc数据源。我必须在不使用@PersistenceContext的情况下将EntityManager注入DAO,因为我希望对两个数据源使用相同的DAO。这两个持久性单元位于同一persistence.xml中

我采用的方法是:

persistenceContext-jdbc.xml

<tx:annotation-driven transaction-manager="demoTransactionManager" />
<bean id="demoEntityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="beanName" value="demoEntityManager" />
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="jdbcPersistence" />
    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="false" />
            <property name="databasePlatform" value="org.apache.openjpa.jdbc.sql.DB2Dictionary" />
        </bean>
    </property>
    <property name="loadTimeWeaver">
        <bean
            class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
</bean>

<bean id="demoDAO" class="com.test.dao.DemoDAO"
    <property name="demoEntityManager">
    <bean class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
        <property name="entityManagerFactory" ref="demoEntityManagerFactory"/>  
    </bean>
    </property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
    ....database properties....
</bean>

<bean id="demoTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="demoEntityManagerFactory" />
</bean>
persistenceContext-jndi.xml

<bean id="demoEntityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="beanName" value="demoEntityManager" />
    <property name="persistenceUnitName" value="jndiPersistence" />
    <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="false" />
            <property name="databasePlatform" value="org.apache.openjpa.jdbc.sql.DB2Dictionary" />
        </bean>
    </property>
</bean>

<bean id="demoDAO" class="com.test.dao.DemoDAO">
    <property name="demoEntityManager">
    <bean id="demoEntityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
        <property name="entityManagerFactory" ref="demoEntityManagerFactory"/>  
    </bean>
    </property>
</bean> 
尽管我能够为jdbc流注入EntityManager。对于jndi流,我面临同样的问题

应用程序使用spring integration@ServiceActivator轮询来自MQ的消息

以下是我得到的例外情况:

Setup of JMS message listener invoker failed for destination 'queue://<QueueName>' - trying to recover. Cause: Could not open JPA EntityManager for transaction; nested exception is <openjpa-2.2.2-r422266:1468616 nonfatal user error> org.apache.openjpa.persistence.InvalidStateException: You cannot access the EntityTransaction when using managed transactions.

让我们知道当您使用JpaTransactionManager而不是JpaTransactionManager时这是如何工作的我只在jdbc数据源的情况下使用了JpaTransactionManager?并且数据源是可行的。由于您尝试使用JPA、JDBC和JMS中的多个事务资源,因此您确实需要一些全局TX控制器。这是XA的情况下,JTA做的事情的事情!