blob: 52b4cb6bfcb4197e601922852345b043b64633c5 [file] [log] [blame]
= persistence-context
:index-group: JPA
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published
= Via annotation
Both lookup and injection of an EntityManager can be configured via the
`@PersistenceContext` annotation.
[source,java]
----
package org.superbiz;
import javax.persistence.PersistenceContext;
import javax.persistence.EntityManager;
import javax.ejb.Stateless;
import javax.naming.InitialContext;
@Stateless
@PersistenceContext(name = "myFooEntityManager", unitName = "foo-unit")
public class MyBean implements MyInterface {
@PersistenceContext(unitName = "bar-unit")
private EntityManager myBarEntityManager;
public void someBusinessMethod() throws Exception {
if (myBarEntityManager == null) throw new NullPointerException("myBarEntityManager not injected");
// Both can be looked up from JNDI as well
InitialContext context = new InitialContext();
EntityManager fooEntityManager = (EntityManager) context.lookup("java:comp/env/myFooEntityManager");
EntityManager barEntityManager = (EntityManager) context.lookup("java:comp/env/org.superbiz.MyBean/myBarEntityManager");
}
}
----
= Via xml
The above `@PersistenceContext` annotation usage is 100% equivalent to the
following xml.
[source,xml]
----
<persistence-context-ref>
<persistence-context-ref-name>myFooEntityManager</persistence-context-ref-name>
<persistence-unit-name>foo-unit</persistence-unit-name>
<persistence-context-type>Transaction</persistence-context-type>
</persistence-context-ref>
<persistence-context-ref>
<persistence-context-ref-name>org.superbiz.calculator.MyBean/myBarEntityManager</persistence-context-ref-name>
<persistence-unit-name>bar-unit</persistence-unit-name>
<persistence-context-type>Transaction</persistence-context-type>
<injection-target>
<injection-target-class>org.superbiz.calculator.MyBean</injection-target-class>
<injection-target-name>myBarEntityManager</injection-target-name>
</injection-target>
</persistence-context-ref>
----