首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NamingException: jta.UserTransaction

NamingException: jta.UserTransaction
EN

Stack Overflow用户
提问于 2014-10-01 03:29:56
回答 1查看 4.9K关注 0票数 2

我有一个hibernate应用程序,它直接使用Java事务API资源。我试图使用UserTransaction来完成一些基本的数据库事务

UserTransaction接口定义了允许应用程序显式管理事务边界的方法。

在hibernate.cfg.xml文件中,我具有以下属性:

代码语言:javascript
复制
<session-factory>
    <property name="show_sql">true</property>
    <property name="connection.datasource">java:comp/env/myDataSource</property>
    <property name="jta.UserTransaction">java:comp/UserTransaction</property>
    <property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>

在应用程序的web.xml中,UserTransaction设置在<resource-env-ref>中。

代码语言:javascript
复制
<resource-env-ref>
    <description>Object factory for MyBean instances.</description>
    <resource-env-ref-name>UserTransaction</resource-env-ref-name>
    <resource-env-ref-type>javax.transaction.UserTransaction</resource-env-ref-type>
</resource-env-ref>

在代码中,我尝试使用UserTransaction的JNDI名称来查找带有InitialContext

代码语言:javascript
复制
public UserTransaction getTransactionContext()
    throws Exception
    {
        if (this.ut == null) {
            ut = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
        }
    return ut;
    }   

但是,将返回以下异常:

代码语言:javascript
复制
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)

这个应用程序是从运行noramlly的Weblogic服务器移植到Apache的;也就是说,我是否需要在context.xml中定义context.xml才能使getTransactionContext()找到它?如果没有,如何在代码中适当地返回UserTransaction?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-01 04:20:33

将应用程序从成熟的Java应用服务器移植到Tomcat (web应用服务器)需要一些额外的步骤。

所有Java服务器都附带了一个JTA事务管理器,它们的事务引擎管理事务绑定和事务解析,比如UserTransaction JNDI上下文。

您可以使用比特隆Atomikos,并且需要在Tomcat context.xml中同时设置UserTransaction和TransactionSyncronizationRegistry。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26133663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档