package net.sourceforge.seqware.common.hibernate; import net.sourceforge.seqware.common.factory.BeanFactory; import org.hibernate.FlushMode; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.orm.hibernate3.SessionFactoryUtils; import org.springframework.orm.hibernate3.SessionHolder; import org.springframework.transaction.support.TransactionSynchronizationManager; /** * <p> * Abstract InSessionExecutions class. * </p> * * @author boconnor * @version $Id: $Id */ public abstract class InSessionExecutions { private static Session session; private static SessionFactory sessionFactory; private static FlushMode oldMode; /** * <p> * runInSessionCalculations. * </p> */ protected void runInSessionCalculations() { bindSessionToThread(); hibernateCalls(); unBindSessionFromTheThread(); } /** * <p> * hibernateCalls. * </p> */ protected abstract void hibernateCalls(); /** * <p> * bindSessionToThread. * </p> */ public static void bindSessionToThread() { sessionFactory = BeanFactory.getSessionFactoryBean(); session = SessionFactoryUtils.getSession(sessionFactory, true); oldMode = session.getFlushMode(); TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); } /** * <p> * bindSessionToThread. * </p> * * @param mode * a {@link org.hibernate.FlushMode} object. */ public static void bindSessionToThread(FlushMode mode) { bindSessionToThread(); session.setFlushMode(mode); } /** * <p> * unBindSessionFromTheThread. * </p> */ public static void unBindSessionFromTheThread() { // session.flush(); // session.setFlushMode(oldMode); TransactionSynchronizationManager.unbindResource(sessionFactory); SessionFactoryUtils.releaseSession(session, sessionFactory); } /** * <p> * evict. * </p> * * @param o * a {@link java.lang.Object} object. */ public static void evict(Object o) { session.evict(o); } }