Package org.crank.crud.spring.support

Source Code of org.crank.crud.spring.support.OpenEntityManagerInViewUtil

package org.crank.crud.spring.support;

import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.orm.jpa.EntityManagerHolder;
import org.springframework.dao.DataAccessResourceFailureException;
import org.apache.log4j.Logger;

import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;

public class OpenEntityManagerInViewUtil {

    private static Logger logger = Logger.getLogger(OpenEntityManagerInViewUtil.class);

    public static void runWithEntityManager(EntityManagerFactory emf, Runnable runnable) {
        boolean participate = false;

        if (TransactionSynchronizationManager.hasResource(emf)) {
            participate = true;
        }
        else {
            try {
                EntityManager em = emf.createEntityManager();
                TransactionSynchronizationManager.bindResource(emf, new EntityManagerHolder(em));
            }
            catch (PersistenceException ex) {
                throw new DataAccessResourceFailureException("Could not create JPA EntityManager", ex);
            }
        }

        try {
            runnable.run();
        }
        finally {
            if (!participate) {
                EntityManagerHolder emHolder = (EntityManagerHolder)
                        TransactionSynchronizationManager.unbindResource(emf);
                closeEntityManager(emHolder.getEntityManager());
            }
        }
    }


  public static void closeEntityManager(EntityManager em) {
    if (em != null) {
      try {
        em.close();
      }
      catch (PersistenceException ex) {
                logger.debug("Problem closing entity manager ", ex);
            }
      catch (Throwable ex) {
                logger.debug("Unexpected exception when closing entity manager ", ex);
            }
    }
  }

}
TOP

Related Classes of org.crank.crud.spring.support.OpenEntityManagerInViewUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.