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