How to bind the EntityManager in JNDI?
By default the persistence unit are available in the java: Context. If you wish to make them available also in the global naming Context you have to add two properties to your persistence.xml configuration file:
- jboss.entity.manager.jndi.name gives you a transaction scoped entity manager you can interact with
- jboss.entity.manager.factory.jndi.name binds the entity manager factory into global JNDI.
<persistence>
<persistence-unit name="manager1">
<jta-data-source>java:/MySQLDS</jta-data-source>
<properties>
<property name="jboss.entity.manager.jndi.name" value="java:/Manager1"/>
<property name="jboss.entity.manager.factory.jndi.name" value="java:/Manager1Factory"/>
</properties>
</persistence-unit>
</persistence>
The typical use case for binding the EntityManager is to share the Persistence Unit across deployments. To achieve that:
- Firstly, the secondary deployment would declare a classloading dependency on the persistence jar deployment via jboss-deployment-structure.xml
- Then, just inject the EntityManager or look it up such as:
@Resource(lookup="java:/Manager1")
private EntityManager entityManager;