无法使用@PersistenceContext注入RESOURCE_LOCAL容器管理的EntityManager

时间:2012-04-12 05:08:12

标签: jpa java-ee jta

我正在使用JBoss AS 7.1.1并能够配置新的JTA数据源并使用

将其连接到我的EJB
@PersistenceContext(unitName="TestPU")
private EntityManager entityManager;

当我尝试使用RESOURCE_LOCAL PersistenceUnit时,我收到的错误是我无法使用@PersistenceContext注入RESOURCE_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>

在我的DAO中,

@Stateless
public class UserDAO {
    @PersistenceContext(unitName="TestPU")
    private EntityManager entityManager;


}

当我在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?

的任何解决方案

1 个答案:

答案 0 :(得分:22)

JTA:在Java EE环境中,事务由容器和管理员管理。默认情况下为JTA个事务。您可以通过查找或注入来获取实体管理器。

RESOURCE_LOCAL:在Java SE中,应用程序必须明确地管理事务。资源本地事务是本机事务。你必须创建EntityManagerFactory&amp;然后可以从中创建实体经理。

在应用程序服务器中部署它时,请将transaction-type更改为persistence.xml中的JTA