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