Jpa 无法使用@PersistenceContext注入资源\本地容器管理的EntityManager

Jpa 无法使用@PersistenceContext注入资源\本地容器管理的EntityManager,jpa,jakarta-ee,jta,Jpa,Jakarta Ee,Jta,我使用JBossAS 7.1.1,能够配置一个新的JTA数据源,并使用 @PersistenceContext(unitName="TestPU") private EntityManager entityManager; 当我尝试使用RESOURCE\u LOCAL PersistenceUnit时,我得到一个错误,说我不能使用@PersistenceContext注入RESOURCE\u LOCAL PU 我已将persistence.xml配置如下: <persistence-un

我使用JBossAS 7.1.1,能够配置一个新的JTA数据源,并使用

@PersistenceContext(unitName="TestPU")
private EntityManager entityManager;
当我尝试使用RESOURCE\u LOCAL PersistenceUnit时,我得到一个错误,说我不能使用@PersistenceContext注入RESOURCE\u LOCAL PU

我已将persistence.xml配置如下:

<persistence-unit name="TestPU" transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <properties>   
    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/xy"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="blah"/>        
        <property name="hibernate.hbm2ddl.auto" value="update" />       
      </properties> 
</persistence-unit>
当我在AS 7.1.1上部署我的应用程序时,我遇到以下错误

JBAS011428: Cannot inject RESOURCE_LOCAL container managed EntityManagers using @PersistenceContext
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:169)
    at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:54)
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.processClassConfigurations(ModuleJndiBindingProcessor.java:162)
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:155)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    ... 5 more

任何将RESOURCE_LOCAL PU与@PersistenceContext一起使用的解决方案?

JTA:在Java EE环境中,事务由容器管理&默认情况下,它的
JTA
事务。您可以通过查找或注入获得实体管理器

资源本地:在JavaSE中,应用程序必须显式管理事务&资源本地事务是本机事务。您必须创建
EntityManagerFactory
&然后才能从中创建实体管理器


在应用服务器中部署时,请将persistence.xml中的
事务类型更改为
JTA

谢谢您的解释。因此,没有办法将JTA数据源配置为WAR/EAR的一部分?我们可以用注释来完成,但我正在寻找基于xml的配置。@sivaprasadeddy.k不客气。如果您已经配置了数据源,那么您可以在persistence.xml中用
@NayanWadekar提及它。您可以与RESOURCE_LOCAL(persistence.xml)和EntityManagerFactory(java代码)分享一个示例吗@Saba所需的xml代码已经发布,而java代码将是-
Persistence.createEntityManagerFactory(persistenceUnitName)
。谢谢@NayanWadekar这么认为。我相应地改变了它。现在它工作得很好。
JBAS011428: Cannot inject RESOURCE_LOCAL container managed EntityManagers using @PersistenceContext
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:169)
    at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:54)
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.processClassConfigurations(ModuleJndiBindingProcessor.java:162)
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:155)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    ... 5 more