blob: 4c0acd4e2a9c2c07ef7a36ff7dfbc6e4ba85968d [file] [log] [blame]
Both lookup and injection of an EntityManagerFactory can be configured via the @PersistenceUnit annotation or <persistence-unit-ref> in xml. Annotations and xml have equal function in both lookup and injection.
h1. Injection and Lookup
h2. Via annotation
{code:title=Usable by EJB, Interceptor, Servlet, Filter, or Listener}
package org.superbiz;
import javax.persistence.PersistenceUnit;
import javax.persistence.EntityManagerFactory;
import javax.ejb.Stateless;
import javax.naming.InitialUnit;
@Stateless
public class MyBean implements MyInterface {
@PersistenceUnit(unitName = "bar-unit")
private EntityManagerFactory myBarEntityManagerFactory;
public void someBusinessMethod() throws Exception {
if (myBarEntityManagerFactory == null) throw new NullPointerException("myBarEntityManagerFactory not injected");
// Both can be looked up from JNDI as well
InitialContext unit = new InitialContext();
EntityManagerFactory barEntityManagerFactory = (EntityManagerFactory) context.lookup("java:comp/env/org.superbiz.MyBean/myBarEntityManagerFactory");
}
}
{code}
h2. Via xml
The above @PersistenceUnit annotation usage is 100% equivalent to the following xml.
{code:xml|title=ejb-jar.xml or web.xml}
<persistence-unit-ref>
<persistence-unit-ref-name>org.superbiz.calculator.MyBean/myBarEntityManagerFactory</persistence-unit-ref-name>
<persistence-unit-name>bar-unit</persistence-unit-name>
<persistence-unit-type>Transaction</persistence-unit-type>
<injection-target>
<injection-target-class>org.superbiz.calculator.MyBean</injection-target-class>
<injection-target-name>myBarEntityManagerFactory</injection-target-name>
</injection-target>
</persistence-unit-ref>
{code}
h1. Lookup only
h2. Via annotation
{code:title=Usable by EJB, Interceptor, Servlet, Filter, or Listener}
package org.superbiz;
import javax.persistence.PersistenceUnit;
import javax.persistence.EntityManagerFactory;
import javax.ejb.Stateless;
import javax.naming.InitialUnit;
@Stateless
@PersistenceUnit(name = "myFooEntityManagerFactory", unitName = "foo-unit")
public class MyBean implements MyInterface {
public void someBusinessMethod() throws Exception {
InitialContext context = new InitialContext();
EntityManagerFactory fooEntityManagerFactory = (EntityManagerFactory) context.lookup("java:comp/env/myFooEntityManagerFactory");
}
}
{code}
h1. Via xml
The above @PersistenceUnit annotation usage is 100% equivalent to the following xml.
{code:xml|title=ejb-jar.xml or web.xml}
<persistence-unit-ref>
<persistence-unit-ref-name>myFooEntityManagerFactory</persistence-unit-ref-name>
<persistence-unit-name>foo-unit</persistence-unit-name>
<persistence-unit-type>Transaction</persistence-unit-type>
</persistence-unit-ref>
{code}