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 }