| Title: persistence-unit-ref |
| 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. |
| |
| <a name="persistence-unit-ref-InjectionandLookup"></a> |
| # Injection and Lookup |
| |
| <a name="persistence-unit-ref-Viaannotation"></a> |
| ## Via annotation |
| |
| 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"); |
| } |
| } |
| |
| |
| <a name="persistence-unit-ref-Viaxml"></a> |
| ## Via xml |
| |
| The above @PersistenceUnit annotation usage is 100% equivalent to the |
| following 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 |
| |
| 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"); |
| } |
| } |
| |
| |
| <a name="persistence-unit-ref-Viaxml"></a> |
| # Via xml |
| |
| The above @PersistenceUnit annotation usage is 100% equivalent to the |
| following 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> |
| |
| |