View Javadoc
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  }