]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
6e747f3190834a3064363e694b368ad59c7b4e4b
[tmp/jakarta-migration.git] /
1 package org.collectionspace.services.common.storage.jpa;
2
3 import javax.persistence.EntityManager;
4 import javax.persistence.EntityManagerFactory;
5
6 import org.collectionspace.services.common.context.ServiceContext;
7 import org.collectionspace.services.common.document.TransactionException;
8 import org.collectionspace.services.common.storage.TransactionContext;
9
10 @SuppressWarnings("rawtypes")
11 public class JPATransactionContext extends TransactionContext {
12         EntityManagerFactory emf;
13         EntityManager em;
14         
15         @SuppressWarnings("unused")
16         private JPATransactionContext() {
17                 // Don't allow anyone to create an empty instance
18         }
19         
20         public JPATransactionContext(ServiceContext ctx) {
21         emf = JpaStorageUtils.getEntityManagerFactory();            
22         em = emf.createEntityManager();
23         this.ctx = ctx;
24         }
25
26         protected EntityManagerFactory getEntityManagerFactory() {
27                 return emf;
28         }
29         
30         protected EntityManager getEntityManager() {
31                 return em;
32         }
33         
34         @Override
35         public ServiceContext getServiceContext() {
36                 return ctx;
37         }
38         
39         @Override
40         public void markForRollback() {
41                 em.getTransaction().setRollbackOnly();
42         }
43         
44         @Override
45         public void close() throws TransactionException  {
46                 if (em.getTransaction().isActive() == true && em.getTransaction().getRollbackOnly() == true) {
47                         em.getTransaction().rollback();
48         } else if (em.getTransaction().isActive() == true) {
49                 throw new JPATransactionException("There is an active transaction.  You must commit the active transaction prior to calling this close method.");
50         }
51         
52                 em.close();
53         JpaStorageUtils.releaseEntityManagerFactory(emf);
54         }
55
56         @Override
57         public void beginTransaction() {
58         em.getTransaction().begin();    
59         }
60
61         @Override
62         public void commitTransaction() {
63         em.getTransaction().commit();
64         }
65
66         @Override
67         public boolean isTransactionActive() {
68                 return em.getTransaction().isActive();
69         }
70 }