我正在使用在 Tomcat 应用服务器上运行的 Java 程序,该服务器连接到 Teradata 数据库,该数据库利用 hibernate 中设置的 UserTransaction
和 session-factory
连接到数据源的配置
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="connection.datasource">java:comp/env/My_DB</property>
<property name="jta.UserTransaction">java:comp/UserTransaction</property>
....
以及获取事务上下文的方法
public UserTransaction getTransactionContext()
throws Exception
{
if (this.ut == null) {
ut = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
}
return ut;
}
但是,InitialContext
在 lookup("java:comp/UserTransaction");
处失败并返回:
03:27:37,530 ERROR [someServlet:555] Error in someMethod
javax.naming.NamingException: Cannot create resource instance
at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:117)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)
我对使用jta.UserTransaction
很陌生;数据源映射按其应有的方式工作,但是我似乎无法返回 UserTransaction - 命名约定本身在代码和 session 工厂之间匹配。任何人都可以从高(或低)角度提供一些关于为什么失败的可能性吗?如果这个问题太模糊,我可以提供更多信息。
最佳答案
Tomcat 是一个 Web 服务器,而不是符合 JTA 的应用程序服务器(例如 JBoss、WebLogic、Glassfish)。
如果您想使用 JTA,您需要使用 JTA 独立实现,例如:
嵌入独立的事务管理器将使您能够访问通过 JNDI 公开 UserTransactions 的 JTA 事务管理器。
关于java - 命名异常 : Cannot create resource instance for jta. 用户事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26112494/