package com;

import com.isoftstone.fwk.dao.ActionDao;
import com.isoftstone.fwk.dao.Dao;
import com.isoftstone.fwk.util.SpringUtils;

import java.sql.Connection;

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;

public class DaoFactory {
    public static Logger logger = Logger.getLogger(DaoFactory.class);

    public static Dao createActionDao() throws Exception {
        return ActionDao.newInstance();
    }

    public static void bindSession() {
        SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");
        Session session = SessionFactoryUtils.getSession(sf,
        SessionHolder sessionholder =
        TransactionSynchronizationManager.bindResource(sf, sessionholder);
    }

    public static SessionFactory bindTransaction() throws Exception {
        SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");
        Session session = SessionFactoryUtils.getSession(sf,
        session.beginTransaction();
        SessionHolder sessionHolder =
        TransactionSynchronizationManager.bindResource(sf, sessionHolder);
        return sf;
    }

    public static void beginTransaction() {
        SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");
        Session session = SessionFactoryUtils.getSession(sf,
        Transaction transaction = session.beginTransaction();
    }

    public static void commitTransaction() throws Exception {
        SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");
        commitTransaction(sf, true);
    }

    public static void commitTransaction(SessionFactory sf) throws Exception {
        commitTransaction(sf, true);
    }

    public static void commitTransaction(SessionFactory sf, boolean flag) throws Exception {

        Transaction transaction = null;
        Session session = null;
        Connection conn = null;
        try {
            SessionHolder sessionholder = (SessionHolder) TransactionSynchronizationManager.getResource(sf);
            if (sessionholder != null) {
                session = sessionholder.getSession();
                if (flag) {
                    transaction = session.getTransaction();
                    if (sessionholder != null) {
                        conn = sessionholder.getSession().connection();
                    }
                    boolean tt = session.connection().getAutoCommit();
                    if ((transaction != null) && (transaction.isActive()) && (!tt)) {
                        transaction.commit();
                        transaction = null;
                    }
                }
            }
        } catch (Exception exception) {
            if (flag) {
                transaction.rollback();
            }
            exception.printStackTrace();
            throw exception;
        }
    }

    public static void rollbackTransaction() {
        SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");
        try {
            rollbackTransaction(sf);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void rollbackTransaction(SessionFactory sessionfactory) throws Exception {
        Object obj = null;
        Session session = null;
        try {
            SessionHolder sessionholder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionfactory);
            if (sessionholder != null) {
                session = sessionholder.getSession();
                Transaction transaction = session.getTransaction();

                transaction.rollback();
            }
        } catch (Exception exception) {
            exception.printStackTrace();
            throw exception;
        }
    }

    public static void unbindSession() throws Exception {
        SessionFactory sf = (SessionFactory) SpringUtils.getSpringBean("sessionFactory");
        try {
            Session session = SessionFactoryUtils.getSession(sf, true);
            unbindTransaction(sf);
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void unbindTransaction(SessionFactory sf) throws Exception {
        TransactionSynchronizationManager.unbindResource(sf);
    }
}

最新文章

  1. 【BZOJ-2721】樱花 线性筛 + 数学
  2. wndows程序设计之书籍知识与代码摘录-封装一个类似printf的messagebox
  3. C++学习笔记之输入、输出和文件
  4. Python之str(),repr(),``
  5. HTML5和CSS3的学习视频
  6. linux学习记录(第六章、Linux 的文件权限与目录配置)
  7. MySQL(十一)之触发器
  8. java基本类型与Hadoop常见基本类型的对照
  9. 逆向实用干货分享,Hook技术第二讲,之虚表HOOK
  10. Java数据持久层框架 MyBatis之API学习十(Logging详解)
  11. Javascript 标识符及同名标识符的优先级
  12. 表单数据转javabean对象
  13. MongoDB分片详解
  14. Network POJ - 3694 (连通图标求桥)
  15. CRUD的操作,增删改查!
  16. hadoop -- fsck
  17. RabbitMQ消费端消息的获取方式(.Net Core)
  18. Web大前端面试题-Day2
  19. Android 之 Fagment 完全解析
  20. 【oneday_onepage】——Ten Changes To Make A Difference In Your Life

热门文章

  1. Android使用 LruCache 缓存图片
  2. laravel named route
  3. Qt之自定义搜索框
  4. 51nod1376 最长递增子序列的数量
  5. Intellij IDEA13 创建多模块Maven项目
  6. UVa572 - Oil Deposits
  7. 【英语】Bingo口语笔记(1) - Hold
  8. EIG集团简单介绍
  9. oracle interval-partition 解决range分区大难题
  10. Spring中@Resource与@Autoware