Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
Spring 如何访问e';什么是JTA事务管理器?_Spring_Jta_Openejb_Apache Tomee - Fatal编程技术网

Spring 如何访问e';什么是JTA事务管理器?

Spring 如何访问e';什么是JTA事务管理器?,spring,jta,openejb,apache-tomee,Spring,Jta,Openejb,Apache Tomee,我有一个使用Spring声明性事务管理的应用程序。如何将其部署到TomEE+容器中,以便应用程序使用TomEE的JTA事务管理器 更具体地说,如何从Spring的“application context.xml”文件中引用内置事务管理器 Spring的事务管理配置似乎希望通过bean引用或JNDI查找来查找事务管理器;我花了一天的时间研究这个问题,并查看源代码;我发现很多关于这个问题的讨论(参考文献如下),但没有明确的操作方法 我在应用程序的META-INF/persistence.xml中看到

我有一个使用Spring声明性事务管理的应用程序。如何将其部署到TomEE+容器中,以便应用程序使用TomEE的JTA事务管理器

更具体地说,如何从Spring的“application context.xml”文件中引用内置事务管理器

Spring的事务管理配置似乎希望通过bean引用或JNDI查找来查找事务管理器;我花了一天的时间研究这个问题,并查看源代码;我发现很多关于这个问题的讨论(参考文献如下),但没有明确的操作方法

我在应用程序的META-INF/persistence.xml中看到的是:

<persistence-unit name="myPersistenceUnit" transaction-type="JTA">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <jta-data-source>myDs-managed</jta-data-source>
    <non-jta-data-source>myDs-unmanaged</non-jta-data-source>
    <properties>
        <property name="openjpa.jdbc.DBDictionary" 
            value="org.apache.openjpa.jdbc.sql.PostgresDictionary"/>       
        <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
        <property name="openjpa.Run
        <property name="openjpa.Log" value="slf4j" />
    </properties>
</persistence-unit>

org.apache.openjpa.persistence.PersistenceProviderImpl
myDs管理
myDs非托管

您是否尝试过TransactionManager名称的
java:comp/env/TransactionManager
? ,
您是否已按此处所述声明了TransactionManager和数据源:?

Jukka,谢谢,是的,我尝试了java:comp/env/TransactionManager。我看过了您引用的文档页面,但它谈到了在tomee.xml中声明数据源和事务管理器,据我所知,它为所有应用程序配置了整个服务器实例;我只想为单个应用程序配置数据源和事务管理器。(编辑问题以澄清此问题)Spring不会为您创建底层容器管理的事务管理器或数据源,因此您需要在tomee.xml(或其他特定于容器的配置文件)中声明它们。我不知道TomEE是否允许您将其范围限制为单个应用程序。但如果确实需要,您可以在spring配置中将TomEE事务管理器和数据源声明为bean。但就我个人而言,我会让容器管理它们,而不必担心细节。Jukka,“让容器管理它们,而不必担心细节”正是我想要实现的目标。你能帮我做吗?结果比预期的简单:
JTA默认提供的事务管理器的类名是什么?我注意到TomEE+发行版包括geronimo事务和openejb核心,它们都有相当多的事务管道。
<tx:annotation-driven mode="aspectj" transaction-manager="txManager" />
<bean class="org.springframework.transaction.jta.JtaTransactionManager"
        id="txManager">
        <property name="transactionManagerName" 
                       value=" java:comp/TransactionManager"/>
</bean>