package org.jstryker.database; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; /** * JPA tool to help with {@link EntityManager}. */ public class JPAHelper { private static EntityManagerFactory entityManagerFactory; private static EntityManager entityManager; private static String persistenceUnitName; /** * Creates or returns current {@link EntityManagerFactory}. * @param persistenceUnitName Persistence unit name form persistence.xml. * @return Current {@link EntityManagerFactory}. */ public static EntityManagerFactory entityManagerFactory(String persistenceUnitName) { if (entityManagerFactory == null) { JPAHelper.persistenceUnitName = persistenceUnitName; entityManagerFactory = Persistence.createEntityManagerFactory(JPAHelper.persistenceUnitName); } return entityManagerFactory; } /** * Creates or returns current {@link EntityManager} with {@link EntityTransaction} started. * @return Current {@link EntityManager}. */ public static EntityManager currentEntityManager() { if (entityManager == null) { entityManager = entityManagerFactory(persistenceUnitName).createEntityManager(); EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); } return entityManager; } /** * Rollback current {@link EntityTransaction} and closes {@link EntityManager}. */ public static void close() { entityManager.getTransaction().rollback(); entityManager.close(); entityManager = null; } }