我有一个使用 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>
并且,在应用程序 META-INF/spring/applicationContext.xml 文件中,我有这个:(我已经尝试了各种不同的 transactionManagerName 值,正如该主题的各种讨论中所建议的那样,因为它在应用程序服务器之间似乎是非标准的
<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>
这是一个声称适用于 JBoss 的示例:Spring JTA configuration - how to set TransactionManager?
这是一个在 xml 配置文件中不起作用的险兆:https ://issues.apache.org/jira/browse/TOMEE-38
如果您掌握了 initialContext,以下是如何在 java 代码中执行此操作:http: //osdir.com/ml/users.openejb.apache.org/2012-11/msg00110.html
[编辑:Tomee 文档讨论了如何声明事务管理器,但它说在 Tomee.xml 中进行,它属于服务器而不是单个 webapp;我想为单个应用程序而不是整个服务器配置事务管理器:http: //tomee.apache.org/containers-and-resources.html]