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");
}
}
spring和hibernate整合后手动管理事务工具类
最新推荐文章于 2019-01-07 17:17:04 发布