package org.esbtools.message.admin.common.utility; import javax.enterprise.inject.Disposes; import javax.enterprise.inject.Produces; import javax.inject.Named; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.PersistenceContext; @Named class EntityManagerProvider { @PersistenceContext(unitName = "EsbMessageAdminPU") private EntityManager entityManager; private static EntityManagerFactory entityManagerFactory; @Produces public EntityManager getEntityManager() { /* if running in container which doesn't support @PersistenceContext * (such as jetty), manually create the EntityManager. */ if (entityManager == null) { synchronized(EntityManagerProvider.class) { if (entityManagerFactory == null) { entityManagerFactory = Persistence.createEntityManagerFactory("EsbMessageAdminPU"); } } entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); } return entityManager; } public void closeEntityManager(@Disposes EntityManager em) { /* if running in a lightweight container (such as jetty), commit the * transaction and close the EntityManager */ if (entityManagerFactory != null) { em.getTransaction().commit(); em.close(); } } }