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 }