NamingException:无法为jta.UserTransaction创建资源实例

时间:2014-09-30 03:52:33

标签: java hibernate jpa transactions jta

我正在使用在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;
    }    

但是,InitialContextlookup("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 - 命名约定本身在代码和会话工厂之间匹配。任何人都可以提供一些可能性从高(或低)水平的角度来看失败的原因吗?如果问题太模糊,我可以提供更多信息。

1 个答案:

答案 0 :(得分:2)

Tomcat是一个Web服务器,而不是符合JTA标准的应用程序服务器(例如JBoss,WebLogic,Glassfish)。

如果要使用JTA,则需要使用JTA独立实现,例如:

嵌入独立事务管理器将允许您访问通过JNDI公开UserTransactions的JTA事务管理器。