您的位置:首页 > 编程语言 > Java开发

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");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: