1 package ejava.jpa.examples.query; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 import javax.persistence.*; 8 9 import org.apache.commons.logging.Log; 10 import org.apache.commons.logging.LogFactory; 11 import org.junit.*; 12 13 public class QueryBase { 14 private static Log log = LogFactory.getLog(QueryBase.class); 15 private static final String PERSISTENCE_UNIT = "jpa-query-example-test"; 16 private List<EntityManager> ems = new ArrayList<EntityManager>(); 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 = createEm(); 33 em.getTransaction().begin(); 34 } 35 36 @After 37 public void tearDown() throws Exception { 38 for (Iterator<EntityManager> itr=ems.iterator(); itr.hasNext();) { 39 close(itr.next()); 40 itr.remove(); 41 } 42 } 43 44 @AfterClass 45 public static void tearDownClass() { 46 log.debug("closing entity manager factory"); 47 if (emf!=null) { emf.close(); emf=null; } 48 } 49 50 protected EntityManager createEm() { 51 EntityManager emgr = emf.createEntityManager(); 52 ems.add(emgr); 53 return emgr; 54 } 55 56 public void close(EntityManager emgr) throws Exception { 57 if (emgr==null || !emgr.isOpen()) { return; } 58 try { 59 log.debug("tearDown() started, em=" + em); 60 if (!emgr.getTransaction().isActive()) { 61 emgr.getTransaction().begin(); 62 emgr.getTransaction().commit(); 63 } else if (!emgr.getTransaction().getRollbackOnly()) { 64 emgr.getTransaction().commit(); 65 } else { 66 emgr.getTransaction().rollback(); 67 } 68 emgr.close(); 69 } 70 catch (Exception ex) { 71 log.fatal("tearDown failed", ex); 72 throw ex; 73 } 74 } 75 76 public static void cleanup(EntityManager em) { 77 em.getTransaction().begin(); 78 new SalesFactory().setEntityManager(em).cleanup(); 79 em.getTransaction().commit(); 80 em.clear(); 81 } 82 83 public static void populate(EntityManager em) { 84 em.getTransaction().begin(); 85 new SalesFactory().setEntityManager(em).populate(); 86 em.getTransaction().commit(); 87 em.clear(); 88 } 89 }