1 package myorg.queryex; 2 3 import javax.persistence.EntityManager; 4 import javax.persistence.EntityManagerFactory; 5 import javax.persistence.Persistence; 6 import org.apache.commons.logging.Log; 7 import org.apache.commons.logging.LogFactory; 8 import org.junit.After; 9 import org.junit.AfterClass; 10 import org.junit.Before; 11 import org.junit.BeforeClass; 12 13 14 public class QueryBase { 15 private static Log log = LogFactory.getLog(QueryBase.class); 16 private static final String PERSISTENCE_UNIT = "queryEx-test"; 17 protected static EntityManagerFactory emf; 18 protected EntityManager em; 19 20 @BeforeClass 21 public static void setUpClass() { 22 log.debug("creating entity manager factory"); 23 emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT); 24 EntityManager em1 = emf.createEntityManager(); 25 cleanup(em1); 26 populate(em1); 27 } 28 29 @Before 30 public void setUp() throws Exception { 31 log.debug("creating entity manager"); 32 em = emf.createEntityManager(); 33 em.getTransaction().begin(); 34 } 35 36 @After 37 public void tearDown() throws Exception { 38 if (em==null || !em.isOpen()) { return; } 39 try { 40 log.debug("tearDown() started, em=" + em); 41 if (!em.getTransaction().isActive()) { 42 em.getTransaction().begin(); 43 em.getTransaction().commit(); 44 } else if (!em.getTransaction().getRollbackOnly()) { 45 em.getTransaction().commit(); 46 } else { 47 em.getTransaction().rollback(); 48 } 49 em.close(); em=null; 50 log.debug("tearDown() complete, em=" + em); 51 } 52 catch (Exception ex) { 53 log.fatal("tearDown failed", ex); 54 throw ex; 55 } 56 } 57 58 @AfterClass 59 public static void tearDownClass() { 60 log.debug("closing entity manager factory"); 61 if (emf!=null) { emf.close(); emf=null; } 62 } 63 64 public static void cleanup(EntityManager em) { 65 em.getTransaction().begin(); 66 for (Movie movie : em.createQuery("from Movie", Movie.class).getResultList()) { 67 em.remove(movie); 68 } 69 for (Actor actor: em.createQuery("from Actor", Actor.class).getResultList()) { 70 em.remove(actor); 71 } 72 for (Director director: em.createQuery("from Director", Director.class).getResultList()) { 73 em.remove(director); 74 } 75 for (Person person: em.createQuery("from Person", Person.class).getResultList()) { 76 em.remove(person); 77 } 78 em.getTransaction().commit(); 79 } 80 81 public static void populate(EntityManager em) { 82 em.getTransaction().begin(); 83 new MovieFactory().setEntityManager(em).populate(); 84 em.getTransaction().commit(); 85 } 86 }