Cannot inject RESOURCE_LOCAL container managed EntityManager using @PersistenceContext
jakarta-ee, jpa, jta
Solution
JTA : In Java EE environment, transactions are managed by the container & by default its `JTA` transaction. You can get entity manager by lookup or injection.
RESOURCE_LOCAL : In Java SE, application have to manage transactions explicitly & resource local transactions are native transactions. You have to create `EntityManagerFactory` & then can create entity manager from it.
As you are deploying it in application server, change the `transaction-type` to `JTA` in persistence.xml.
Problem
I am using JBoss AS 7.1.1 and able to configure a new JTA datasource and wire it to my EJB using ``` @PersistenceContext(unitName="TestPU") private EntityManager entityManager; ``` When I tried to use RESOURCE_LOCAL PersistenceUnit I am getting the error saying I can't inject RESOURCE_LOCAL PU using @PersistenceContext. I have configured my persistence.xml as follows: ``` <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> ``` And in my DAO, ``` @Stateless public class UserDAO { @PersistenceContext(unitName="TestPU") private EntityManager entityManager; } ``` When I deployed my app on AS 7.1.1 I am getting the following error. ``` 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 ``` Any solution to use RESOURCE_LOCAL PU with @PersistenceContext?