我想在我的应用程序中使用JTA Transaction Manager。我正在使用Spring和Glassfish。我想使用JNDI查找来获取JtaTransactionManager
实例。我的JtaTransactionManager
的Spring bean配置设置如下:
<tx:annotation-driven transaction-manager="jtaTransactionManager"/>
<bean id="jtaTransactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:comp/TransactionManager"/>
<property name="userTransactionName" value="java:comp/UserTransaction"/>
</bean>
但是当我运行该程序时,它报告了错误:
Caused by: org.springframework.transaction.TransactionSystemException: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]; nested exception is javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
与非初始化的JNDI上下文相关联。所以我添加了一个资源文件jndi.properties
,它添加了上面报告的缺少的初始上下文:
java.naming.factory.initial=???
但问题是:我应该在上面的JNDI初始上下文字段中放置什么才能通过JNDI查找获取Glassfish事务管理器?我搜索了很多来源,但没有找到这条信息。 official document只说:
要访问UserTransaction实例,您可以使用查找它 java:comp / UserTransaction JNDI名称或使用注入它 @Resource注释。
那么我应该如何在jndi.properties
文件中为JTA事务管理器设置JNDI初始工厂,以便TransactionManager
和UserTransaction
都可以注入我的jtaTransactionManager
bean中JNDI查找?感谢。