gpt4 book ai didi

java - NamingException : jta. 用户事务

转载 作者:行者123 更新时间:2023-11-30 08:20:22 24 4
gpt4 key购买 nike

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

The UserTransaction interface defines the methods that allow an application to explicitly manage transaction boundaries

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

<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>

<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>

在代码中,我尝试使用 InitialContext 查找 UserTransaction通过它的 JNDI 名称

public UserTransaction getTransactionContext()
throws Exception
{
if (this.ut == null) {
ut = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
}
return ut;
}

但是会返回以下异常:

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)

此应用程序是从运行正常的 Weblogic 服务器移植到 Apache Tomcat 的;话虽如此 - 我是否需要在我的 context.xml 中定义 UserTransaction为了 getTransactionContext()找到它?如果不是,我如何才能在我的代码中适本地返回 UserTransaction?

最佳答案

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

所有 Java EE 服务器都带有 JTA 事务管理器,它们的事务引擎管理事务绑定(bind)和事务解析,例如 UserTransaction JNDI 上下文。

您可以使用 BitronixAtomikos ,您需要在 Tomcat context.xml 中同时设置 UserTransaction 和 TransactionSyncronizationRegistry。

关于java - NamingException : jta. 用户事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26133663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com