JTA UserTransaction 在 JNDI 位置 [java:comp/UserTransaction] 不可用 原因:javax.naming.NamingException:意外异常

问题描述 投票:0回答:1

`我已经面对这个问题很长时间了。我尝试过解决方案但没有运气。 我正在将java版本从jdk8迁移到jdk17。

堆栈跟踪: org.springframework.beans.factory.BeanCreationException:创建 ServletContext 资源中定义的名为“transactionManager”的 bean 时出错 [/WEB-INF/spring-config/transactionContext.xml]:JTA UserTransaction 在 JNDI 位置 [java:comp/ 不可用用户交易] .. 导致:org.springframework.transaction.TransactionSystemException:JTA UserTransaction 在 JNDI 位置 [java:comp/UserTransaction] 不可用 ... 55 更多 引起原因:javax.naming.NamingException:解析引用时出现意外异常 org.springframework.transaction.jta.JtaTransactionManager.lookupUserTransaction(JtaTransactionManager.java:574) ... 59 更多

这是部署问题。

我分别使用以下版本和配置。 JAVA:JDK 17 春季:18.0.6 Hibernate jpa 版本:6.4.4.Final 雅加达:10 雄猫:10.1

交易.xml

<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager"/>
<property name="transactionSynchronizationRegistryName"
value="java:comp/TransactionSynchronizationRegistry" />
<property name="userTransactionName"  value="java:comp/UserTransaction" />
<bean\>
<tx:annotation-driven transaction-manager="transactionManager" />

上下文.xml

<Resource accessToUnderlyingConnectionAllowed="true" allowLocalTransactions="true" auth="Container" className="org.enhydra.jdbc.pool.StandardXAPoolDataSource" driverClassName="org.postgresql.Driver" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" maxActive="100" maxIdle="20" maxWait="10000" minIdle="5" name="jdbc/meerkatDataSource" password="projectSpecificPassword" type="javax.sql.DataSource" url="projectSpecificURL" username="projectSpecificUsername" validationQuery="select 1 from Dual"/>

持久性.xml

<property name = "hibernate.jndi.class" value="javax.naming.InitialContext" />
<property name="hibernate.jndi.url" value="javax.naming.Context.PROVIDER_URL"/>
<property name="jta.UserTransaction" value="java:comp/UserTransaction"/>
<property name ="hibernate.transaction.coordinator.class" value="jta" />
<property name ="hibernate.transaction.jta.platform_resolver" value="org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformResolver" />
<property name = "hibernate.transaction.jta.platform" value ="org.hibernate.engine.transaction.jta.platform.internal.JOTMJtaPlatform"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />

任何建议或指导都会有帮助。`

spring-mvc jakarta-ee jndi java-17 tomcat10
1个回答
0
投票

:::更新:::


经过长时间的检查,终于解决了上述问题。请仔细按照以下步骤操作。

  1. Step1:检查JNDI配置。如果有任何拼写检查 必填。
  2. Step2:Java 版本损坏的可能性。安装 新鲜的。
  3. Step3:从pom.xml中删除所有jta相关的jar文件。添加 排除。检查是否有任何嵌套依赖项。

希望这对遇到类似问题的人有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.