java - 命名异常 : Cannot create resource instance for jta. 用户事务

标签 java hibernate jpa transactions jta

我正在使用在 Tomcat 应用服务器上运行的 Java 程序,该服务器连接到 Teradata 数据库,该数据库利用 hibernate 中设置的 UserTransactionsession-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 - 命名约定本身在代码和 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/

相关文章:

Java 通过传递参数从另一个 jar 运行 jar

Java aes key 到 32 字节字符串表示

hibernate - 为 Play 框架构建查询优化层的通用方法?

jpa - JPQL 集合查询中集合的所有元素

java - 如何在jpa中编写order by和limit查询

java - 如何使 BLOB 在 Oracle 和 PostgreSQL 上工作?

java - 如何将字符串和整数添加到按钮的列表框中

java - 匹配 arraylist 中的字符串,其中字符串是 arraylist 串联的结果

java - Spring Boot + JPA : Column name annotation ignored

创建hibernate配置时出现java.lang.ExceptionInInitializerError