= persistence-unit-ref
:index-group: JPA
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published

Both lookup and injection of an
EntityManagerFactory can be configured via the `@PersistenceUnit`
annotation or in xml. Annotations and xml have equal function in both
lookup and injection.

= Injection and Lookup

== Via annotation

[source,java]
----
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");
    }
}
----

== Via xml

The above `@PersistenceUnit` annotation usage is 100% equivalent to the
following xml.

[source,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>
----

== Lookup only

=== Via annotation

[source,java]
----
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");
    }
}
----

= Via xml

The above `@PersistenceUnit` annotation usage is 100% equivalent to the
following xml.

[source,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>
----
