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

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中获取sessionFactory
		logger.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");
		}
	
	
	}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值