package dials.datastore; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; public class EntityManagerHelper { private final EntityManagerFactory entityManagerFactory; private final ThreadLocal<EntityManager> threadLocal; public EntityManagerHelper(EntityManagerFactory entityManagerFactory) { this.entityManagerFactory = entityManagerFactory; threadLocal = new ThreadLocal<>(); } public EntityManager getEntityManager() { EntityManager entityManager = threadLocal.get(); if (entityManager == null) { entityManager = entityManagerFactory.createEntityManager(); threadLocal.set(entityManager); } return entityManager; } public void closeEntityManager() { EntityManager entityManager = threadLocal.get(); if (entityManager != null) { entityManager.close(); threadLocal.set(null); } } public void closeEntityManagerFactory() { entityManagerFactory.close(); } public void beginTransaction() { getEntityManager().getTransaction().begin(); } public void rollback() { getEntityManager().getTransaction().rollback(); } public void commit() { getEntityManager().getTransaction().commit(); } }