我正在尝试在Java EE兼容的Application Server(例如Apache Tomcat)之外使用JTA 1.2,到目前为止,我尝试的是Mr. Jonathan Halliday's wayHow to Configure Server Platform Using Java

但是我跟随异常


  -javax.faces.FacesException:#{utama.satu}:javax.enterprise.context.ContextNotActiveException:ARJUNA016105:无法查找TransactionManager
  
  -造成原因:javax.faces.el.E​​valuationException:javax.enterprise.context.ContextNotActiveException:ARJUNA016105:无法查找TransactionManager
  
  -造成原因:javax.enterprise.context.ContextNotActiveException:ARJUNA016105:无法查找TransactionManager
  
  -由以下原因导致:javax.naming.NameNotFoundException:名称[TransactionManager]在此上下文中未绑定。找不到[TransactionManager]。


这是我的META-INF / context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="" reloadable="true">
<Resource auth="Container" factory="org.jboss.weld.resources.ManagerObjectFactory" name="BeanManager" type="javax.enterprise.inject.spi.BeanManager"/>
<Transaction factory="com.arjuna.ats.internal.jta.transaction.arjunacore.UserTransactionImple"/>
<ResourceLink global="jdbc/coba" name="jdbc/coba" type="javax.sql.DataSource" />
</Context>


这是我的conf / server.xml:

<GlobalNamingResources>
    ....
    <Resource name="jdbc/coba"
        auth="Container"
        type="javax.sql.DataSource"
        factory="org.jboss.jbossts.tomcat.TransactionalResourceFactory"
        XADataSourceImpl="com.microsoft.sqlserver.jdbc.SQLServerXADataSource"
        xa.setUser="sa"
        xa.setPassword="123456"
        xa.setURL="jdbc:sqlserver://127.0.0.1:1433;databaseName=hrd;"
        />
    ....
</GlobalNamingResources>


这是我的persistence.xml,它显示了我如何重新引用数据源:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="sungguhPU" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>java:comp/env/jdbc/coba</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <validation-mode>NONE</validation-mode>
        <properties>
            <property name="eclipselink.session.customizer" value="id.ac.ums.tomcat.JPAEclipseLinkSessionCustomizer"/>
            <property name="eclipselink.logging.level" value="FINEST"/>
            <property name="eclipselink.id-validation" value="NONE"/>
        </properties>
    </persistence-unit>
</persistence>


我还按照官方EclipseLink文档中的描述构建了我的客户org.eclipse.persistence.config.SessionCustomizer,但是在过去的24小时里,我仍然停留在相同的异常上:-(

最佳答案

没有检查暗示您使用的详细信息,但是您是否提供了TransactionSynchronizationRegistry?这就是@TransactionScoped的实现方式

您需要根据您的印象提供java:comp / TransactionManager和/或java:comp / TransactionSynchronizationRegistry

关于tomcat - 如何使用Narayana JTA 5.0.3.Final为在Tomcat中运行的Web应用程序提供XA事务支持?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25678766/

10-10 16:42