1 package org.collectionspace.services.common.storage.jpa;
3 import javax.persistence.EntityManager;
4 import javax.persistence.EntityManagerFactory;
6 import org.collectionspace.services.common.context.ServiceContext;
7 import org.collectionspace.services.common.document.TransactionException;
8 import org.collectionspace.services.common.storage.TransactionContext;
10 @SuppressWarnings("rawtypes")
11 public class JPATransactionContext extends TransactionContext {
12 EntityManagerFactory emf;
15 @SuppressWarnings("unused")
16 private JPATransactionContext() {
17 // Don't allow anyone to create an empty instance
20 public JPATransactionContext(ServiceContext ctx) {
21 emf = JpaStorageUtils.getEntityManagerFactory();
22 em = emf.createEntityManager();
26 protected EntityManagerFactory getEntityManagerFactory() {
30 protected EntityManager getEntityManager() {
35 public ServiceContext getServiceContext() {
40 public void markForRollback() {
41 em.getTransaction().setRollbackOnly();
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.");
53 JpaStorageUtils.releaseEntityManagerFactory(emf);
57 public void beginTransaction() {
58 em.getTransaction().begin();
62 public void commitTransaction() {
63 em.getTransaction().commit();
67 public boolean isTransactionActive() {
68 return em.getTransaction().isActive();