Java JTA的本地资源

Java JTA的本地资源,java,ejb,persistence,entitymanager,jta,Java,Ejb,Persistence,Entitymanager,Jta,我正在开发一个web应用程序,我必须使用我从未使用过的JTA。我开始使用EntityManager,但在这里似乎不起作用。当我使用EntityManager时,我收到以下消息: Only persistence units with transaction type JTA can be used as a container managed entity manager. 简而言之,我有一段代码: @PersistenceContext(unitName = "zJSF2PU") priva

我正在开发一个web应用程序,我必须使用我从未使用过的JTA。我开始使用EntityManager,但在这里似乎不起作用。当我使用EntityManager时,我收到以下消息:

Only persistence units with transaction type JTA can be used as a container managed entity manager.
简而言之,我有一段代码:

@PersistenceContext(unitName = "zJSF2PU")
private EntityManager em;
em.getTransaction().begin();
//some code
em.getTransaction().commit();

没有EntityManager我怎么做

在您的ejb项目中
META-INF/persistence.xml
必须具有以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<persistence>
    <persistence-unit name="myPersistenceUnitNamePersonalised" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/MySQL</jta-data-source>
        <properties>
            <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
            <property name="eclipselink.ddl-generation.output-mode" value="database" />
        <property name="eclipselink.logging.level" value="FINE" />
        </properties>
    </persistence-unit>
</persistence>

org.eclipse.persistence.jpa.PersistenceProvider
jdbc/MySQL
您必须在
应用服务器中声明这一点(jboss、tomcat、glassfish)

您需要搜索如何在
应用程序服务器中添加数据源和持久化单元

就这样。。。他们通过jndi交流

  • 从persistence.xml中删除
    transaction type=“RESOURCE\u LOCAL”

  • 删除对
    em.getTransaction()
    的调用。注入
    javax.transaction.UserTransaction
    (JTA)并使用其begin/commit/rollback方法。或者,将EM注入无状态EJB,并允许EJB容器自动管理事务


  • 我终于解决了我的问题。从我的搜索结果来看,当您在ManagedBeans中使用JTA时,您不能使用EntityManager。但是,它可以在无状态bean中使用,然后我们可以将这个无状态bean注入ManagedBean并使用它的方法。程序如下:

    • 创建EJB(带有@Stateless注释的简单类)

    • 将使用EntityManager的方法移动到EJB

    • 将EJB注入托管bean(使用@EJB注释)并调用相关方法

    有关更多信息,请参阅另一篇文章:

    即使对于CMT,您仍然使用实体管理器。您使用的是什么版本的JPA?eclipse链接,但我也使用了Hibernate,它是相同的东西不,不是提供程序。你用的是JPA1还是JPA2?我想你说的都是真的,但我需要知道怎么做,这就是为什么我提交了一段代码,如果你知道怎么做,你可以帮我更新代码吗?谢谢你的回答。另一方面,我尝试了无状态EJB,但也是一样的。对不起,这似乎是概念层面的误解,而不是代码层面的误解。很高兴你找到了答案。是的,我有这个,但这对我在这里发布的代码没有帮助,或者更好。它能有什么帮助呢?嗯。。我定义了一个JTA事务。。。我刚刚告诉过你如何添加一个持久化单元,比如
    zJSF2PU
    ,但是JTA:)