无法使用@PersistenceContext注入RESOURCE_LOCAL容器管理的EntityManager
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用@PersistenceContext注入RESOURCE_LOCAL容器管理的EntityManager相关的知识,希望对你有一定的参考价值。
我正在使用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的任何解决方案?
JTA:在Java EE环境中,事务由容器管理,默认情况下是JTA
事务。您可以通过查找或注入来获取实体管理器。
RESOURCE_LOCAL:在Java SE中,应用程序必须显式管理事务,资源本地事务是本机事务。您必须创建EntityManagerFactory
然后才能从中创建实体管理器。
当您在应用程序服务器中部署它时,请在persistence.xml中将transaction-type
更改为JTA
。
以上是关于无法使用@PersistenceContext注入RESOURCE_LOCAL容器管理的EntityManager的主要内容,如果未能解决你的问题,请参考以下文章
如何在单元测试期间注入 PersistenceContext?
如何在@FacesConverter 中注入@EJB、@PersistenceContext、@Inject、@Autowired 等?
PersistenceContext EntityManager 注入 NullPointerException
使用 @PersistenceContext(type=PersistenceContextType.EXTENDED) 时避免 1 级缓存问题