r680 - nuiton-jpa/nuiton-jpa-junit/src/main/java/org/nuiton/jpa/junit
Author: bleny Date: 2013-06-27 11:34:46 +0200 (Thu, 27 Jun 2013) New Revision: 680 Url: http://nuiton.org/projects/sandbox/repository/revisions/680 Log: allow use of multiple entity managers in the junit rule Modified: nuiton-jpa/nuiton-jpa-junit/src/main/java/org/nuiton/jpa/junit/JpaEntityManagerRule.java Modified: nuiton-jpa/nuiton-jpa-junit/src/main/java/org/nuiton/jpa/junit/JpaEntityManagerRule.java =================================================================== --- nuiton-jpa/nuiton-jpa-junit/src/main/java/org/nuiton/jpa/junit/JpaEntityManagerRule.java 2013-06-26 07:17:58 UTC (rev 679) +++ nuiton-jpa/nuiton-jpa-junit/src/main/java/org/nuiton/jpa/junit/JpaEntityManagerRule.java 2013-06-27 09:34:46 UTC (rev 680) @@ -34,6 +34,8 @@ import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import java.util.Date; +import java.util.LinkedList; +import java.util.List; import java.util.Map; public class JpaEntityManagerRule implements TestRule { @@ -44,12 +46,14 @@ protected static String timestamp = String.valueOf(new Date().getTime()); - protected EntityManager entityManager; - protected boolean open = false; protected Map<String, String> jpaParameters; + protected EntityManagerFactory entityManagerFactory; + + protected List<EntityManager> openedEntityManagers = new LinkedList<EntityManager>(); + public JpaEntityManagerRule(String persistenceUnitName, Map<String, String> jpaParameters) { this.persistenceUnitName = persistenceUnitName; this.jpaParameters = jpaParameters; @@ -70,7 +74,7 @@ return new Statement() { @Override public void evaluate() throws Throwable { - createEntityManager(testClassName, testMethodName); + createEntityManagerFactory(testClassName, testMethodName); try { base.evaluate(); } finally { @@ -80,32 +84,49 @@ }; } - protected void createEntityManager(String testClassName, String testMethodName) { + protected void createEntityManagerFactory(String testClassName, String testMethodName) { String context = testClassName + '_' + testMethodName + '_' + timestamp; - EntityManagerFactory entityManagerFactory = - HibernateUtil.createTempEntityManagerFactory( + entityManagerFactory = HibernateUtil.createTempEntityManagerFactory( persistenceUnitName, context, jpaParameters); - entityManager = entityManagerFactory.createEntityManager(); - if (log.isDebugEnabled()) { - log.debug("created entityManager " + entityManager); + log.debug("created entityManagerFactory " + entityManagerFactory); } open = true; } + /** + * @deprecated use {@link #newEntityManager()} and save a reference to it + */ public EntityManager getEntityManager() { - if (!open) { + if (openedEntityManagers.isEmpty()) { + + openedEntityManagers.add(newEntityManager()); + + } + + return openedEntityManagers.get(0); + + } + + public EntityManager newEntityManager() { + + if ( ! open) { throw new IllegalStateException("entity manager is not yet opened"); } + EntityManager entityManager = + entityManagerFactory.createEntityManager(); + + openedEntityManagers.add(entityManager); + return entityManager; } @@ -113,14 +134,18 @@ /** Override to tear down your specific external resource. */ protected void closeEntityManager() { - if (log.isDebugEnabled()) { - log.debug("close entityManager " + entityManager); - } - open = false; - entityManager.close(); + for (EntityManager openedEntityManager : openedEntityManagers) { + if (log.isDebugEnabled()) { + log.debug("close entityManager " + openedEntityManager); + } + + openedEntityManager.close(); + + } + } }
participants (1)
-
bleny@users.nuiton.org