spring和hibernate整合后手动管理事务工具类
2016-10-21 15:15
656 查看
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"); } }
相关文章推荐
- 基于Eclipse Maven的Spring4/Spring-MVC/Hibernate4整合之五:Hibernate的事务管理、手动回滚
- 【JavaWeb-25】事务管理相关知识、手动/半自动/自动管理事务案例、整合Junit、整合Web、spring和hibernate整合、struts2和spring整合
- Spring与Hibernate的整合,不配置事务管理器,事务会自动提交(Hibernate默认手动提交)
- Spring--hibernate整合_事务管理
- Spring与Hibernate整合事务管理的理解
- Spring整合Hibernate:2、使用Annotation方式进行声明式的事务管理
- 85-002-3 spring与hibernate的整合(采用AOP来管理事务实现声明式事务)
- spring整合hibernate的声明式事务管理
- Spring整合Hibernate:2、使用Annotation方式进行声明式的事务管理
- Spring整合Hibernate--声明式事务管理
- Spring中的事务管理,hibernate整合,struts整合(佟刚)
- Spring第13篇—–Spring整合Hibernate之声明式事务管理
- spring和hibernate整合,事务管理
- 学习笔记:spring与hibernate整合(采用aop来管理事务来实现声明式事务)
- Spring整合Hibernate:2、使用Annotation方式进行声明式的事务管理
- spring hibernate整合时配置文件的事务部分(spring管理事务)
- Spring声明式事务管理、Spring整合Hibernate
- Spring2.5整合Hibernate3.0中使用XML以tx来配置事务管理。
- Spring整合hibernate:3、使用XML进行声明式的事务管理
- Spring整合hibernate4:事务管理