spring和hibernate整合后手动管理事务工具类

来源:互联网 发布:vr全景视频制作软件 编辑:程序博客网 时间:2024/04/24 13:01
import org.apache.log4j.Logger;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.springframework.orm.hibernate3.SessionFactoryUtils;import org.springframework.orm.hibernate3.SessionHolder;import org.springframework.transaction.support.TransactionSynchronizationManager;import com.isoftstone.fwk.dao.DaoFactory;import com.isoftstone.fwk.util.SpringUtils;public class DaoFactoryMod {public static Logger logger = Logger.getLogger(DaoFactoryMod.class);//**************************************************************************/** * 提交当前事务<br> * 重写DaoFactory的同名方法,其方法在提交事务后结束了session * @param 参数 说明 * @return void 返回值 说明 * @throws 异常 说明 *///**************************************************************************public static void commitTransaction(SessionFactory sessionfactory, boolean flag)    throws Exception{    Transaction transaction;    Session session;    transaction = null;    session = null;    try    {        SessionHolder sessionholder = (SessionHolder)TransactionSynchronizationManager.getResource(sessionfactory);        logger.debug("◆◆◆提交事务时sessionholder:"+sessionholder);        logger.debug("\u4E8B\u52A1\u63D0\u4EA4\u5F00\u59CB============");        if(sessionholder != null)        {            session = sessionholder.getSession();            logger.debug("◆◆◆提交事务时session:"+session);            transaction = session.getTransaction();            if(transaction != null && transaction.isActive())            {                transaction.commit();                logger.debug("◆◆◆提交事务时transaction:"+transaction);                transaction = null;            }        }        logger.debug("\u4E8B\u52A1\u63D0\u4EA4\u7ED3\u675F============");    }    catch(Exception exception)    {        if(flag)        {            session.clear();//回滚事务前一定要先清空session,否则rollback无效            logger.debug("◆◆◆回滚事务前清空session:"+session);            transaction.rollback();            logger.debug("◆◆◆提交事务时回滚transaction:"+transaction);        }        exception.printStackTrace();        throw exception;    }    return;}//**************************************************************************/** * 回滚当前事务<br> * 重写DaoFactory的同名方法,其方法在回滚事务后结束了session * @param 参数 说明 * @return void 返回值 说明 * @throws 异常 说明 *///**************************************************************************public static void rollbackTransaction(SessionFactory sessionfactory)    throws Exception{    Session session;    Object obj = null;    session = null;    try    {        SessionHolder sessionholder = (SessionHolder)TransactionSynchronizationManager.getResource(sessionfactory);        logger.debug("◆◆◆回滚事务时sessionholder:"+sessionholder);        if(sessionholder != null)        {            session = sessionholder.getSession();            logger.debug("◆◆◆回滚事务时session:"+session);            Transaction transaction = session.getTransaction();            session.clear();//回滚事务前一定要先清空session,否则rollback无效            logger.debug("◆◆◆回滚事务前清空session:"+session);            transaction.rollback();            logger.debug("◆◆◆回滚事务时回滚transaction:"+transaction);        }    }    catch(Exception exception)    {        exception.printStackTrace();        throw exception;    }    return;}//**************************************************************************/** * 获取或创建hibernate session绑定到当前线程<br> * 为后台定时任务线程创建session * @param 参数 说明 * @return void 返回值 说明 * @throws 异常 说明 *///**************************************************************************public static void bindSession(){logger.debug("\n\n");logger.debug("〓〓〓〓〓〓〓〓〓〓〓 开始获得或者创建hibernate session绑定到当前线程! 〓〓〓〓〓〓〓〓〓〓〓");logger.debug("-----------------------------------------------------------------");SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");//从spring中获取sessionFactorylogger.debug("◆◆◆绑定session时sessionfactory:"+sf);Session session = SessionFactoryUtils.getSession(sf, true);logger.debug("◆◆◆绑定session时session:"+session);//session.beginTransaction();SessionHolder sessionholder = new SessionHolder(session);logger.debug("◆◆◆绑定session时sessionholder:"+sessionholder);TransactionSynchronizationManager.bindResource(sf,sessionholder);logger.debug("▲▲▲▲▲▲▲▲▲▲ 获得或者创建hibernate session绑定到当前线程成功! ▲▲▲▲▲▲▲▲▲▲");}//**************************************************************************/** * 开始绑定到当前线程的session的事务<br> * 为后台定时任务线程开启事务 * @param 参数 说明 * @return void 返回值 说明 * @throws 异常 说明 *///**************************************************************************public static void beginTransaction(){SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");logger.debug("◆◆◆开始事务时sessionfactory:"+sf);Session session = SessionFactoryUtils.getSession(sf, true);logger.debug("◆◆◆开始事务时session:"+session);Transaction transaction=session.beginTransaction();logger.debug("◆◆◆开始事务时transaction:"+transaction);logger.debug("▲▲▲▲▲▲▲▲▲▲ 开始绑定到当前线程的session的事务! ▲▲▲▲▲▲▲▲▲▲");}//**************************************************************************/** * 提交绑定到当前线程的session的事务,提交失败后会自动回滚<br> * 为后台定时任务线程提交事务 * @param 参数 说明 * @return void 返回值 说明 * @throws 异常 说明 *///**************************************************************************public static void commitTransaction(){SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");logger.debug("◆◆◆提交事务时sessionfactory:"+sf);try {DaoFactoryMod.commitTransaction(sf,true);//DaoFactory.commitTransaction(sf);} catch (Exception e) {e.printStackTrace();}logger.debug("▲▲▲▲▲▲▲▲▲▲ 提交绑定到当前线程的session的事务! ▲▲▲▲▲▲▲▲▲▲");}//**************************************************************************/** * 回滚绑定到当前线程的session的事务<br> * 为后台定时任务线程回滚事务 * @param 参数 说明 * @return void 返回值 说明 * @throws 异常 说明 *///**************************************************************************public static void rollbackTransaction(){SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");logger.debug("◆◆◆回滚事务时sessionfactory:"+sf);try {DaoFactoryMod.rollbackTransaction(sf);//DaoFactory.rollbackTransaction(sf);} catch (Exception e) {e.printStackTrace();}logger.debug("▲▲▲▲▲▲▲▲▲▲ 回滚绑定到当前线程的session的事务! ▲▲▲▲▲▲▲▲▲▲");}//**************************************************************************/** * 解除当前线程的session绑定并关闭session<br> * 为后台定时任务线程关闭session * @param 参数 说明 * @return void 返回值 说明 * @throws 异常 说明 *///**************************************************************************public static void unbindSession(){SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");logger.debug("◆◆◆解除绑定session时sessionfactory:"+sf);try {Session session = SessionFactoryUtils.getSession(sf, true);logger.debug("◆◆◆解除绑定session时session:"+session);DaoFactory.unbindTransaction(sf);session.close();logger.debug("◆◆◆解除绑定session时关闭session:"+session);} catch (Exception e) {e.printStackTrace();}logger.debug("---------------------------------------------");logger.debug("〓〓〓〓〓〓〓〓〓〓〓 解除当前线程的session绑定! 〓〓〓〓〓〓〓〓〓〓〓");logger.debug("=============================================");logger.debug("\n\n");}}

1 0
原创粉丝点击