我正在使用在Tomcat App服务器上运行的Java程序,该服务器连接到使用UserTransaction
&的Teradata数据库。 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 - 命名约定本身在代码和会话工厂之间匹配。任何人都可以提供一些可能性从高(或低)水平的角度来看失败的原因吗?如果问题太模糊,我可以提供更多信息。
答案 0 :(得分:2)
Tomcat是一个Web服务器,而不是符合JTA标准的应用程序服务器(例如JBoss,WebLogic,Glassfish)。
如果要使用JTA,则需要使用JTA独立实现,例如:
嵌入独立事务管理器将允许您访问通过JNDI公开UserTransactions的JTA事务管理器。