JNDI 查找失败

JNDI lookup failure

如果有人可以帮助我纠正我的代码中的问题,我将不胜感激。不确定我哪里出错了。

目前我的persistence.xml包含

  <property name="hibernate.transaction.manager_lookup_class" value="#####.hibernate.JbossTSTransactionManagerLookup"/>

  <property name="hibernate.current_session_context_class" value="jta"/>

以及

 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

    <property name="persistenceUnitName" value="####"/>

    <property name="jpaDialect" ref="jpaDialect"/>

</bean>

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">

    <property name="transactionManagerName" value="java:comp/env/TransactionManager"/>

</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

上下文初始化失败:org.springframework.beans.factory.BeanCreationException:创建名称为 'transactionManager' 的 bean 在 class 路径资源 [###XMLConfig.xml] 中定义时出错:调用 init 方法失败;嵌套异常是 org.springframework.transaction.TransactionSystemException:JTA TransactionManager 在 JNDI 位置 [java:comp/env/TransactionManager] 不可用;嵌套异常是 org.springframework.jndi.TypeMismatchNamingException:在 JNDI 位置 [java:comp/env/TransactionManager] 可用的类型 [class com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple] 的对象不可分配给 [javax.transaction.TransactionManager]

原因:org.springframework.transaction.TransactionSystemException:JTA TransactionManager 在 JNDI 位置 [java:comp/env/TransactionManager] 不可用;嵌套异常是 org.springframework.jndi.TypeMismatchNamingException:在 JNDI 位置 [java:comp/env/TransactionManager] 可用的类型 [class com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple] 的对象不可分配给 [javax.transaction.TransactionManager]

在 org.springframework.transaction.jta.JtaTransactionManager.lookupTransactionManager(JtaTransactionManager.java:598)

原因:org.springframework.jndi.TypeMismatchNamingException:在 JNDI 位置 [java:comp/env/TransactionManager] 可用的 [class com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple] 类型的对象不可分配给[javax.transaction.TransactionManager] 在 org.springframework.jndi.JndiTemplate.lookup() 在 org.springframework.transaction.jta.JtaTransactionManager.lookupTransactionManager()

您项目的类路径似乎有问题。检查你的项目中是否存在同一个依赖的两个版本。在我的例子中,我在类路径中有多个版本的 jboss-transaction jar,只保留一个版本为我解决了这个问题。检查是否存在任何导致此问题的传递依赖项,您可以在 Maven pom 中将其排除。