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

DaoFactory.java的更多相关文章

  1. Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  2. 《Java从入门到精通》src9-25

    find . -name *.java |xargs  -i sh -c "echo {};cat {}" > ../all.java[op@TIM src]$ cat al ...

  3. Java Web 中使用ffmpeg实现视频转码、视频截图

    Java Web 中使用ffmpeg实现视频转码.视频截图 转载自:[ http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html  ...

  4. java中的DAO设计模式

    创建数据库和表 sql语句: DROP TABLE IF EXISTS product; CREATE TABLE product( product_id varchar(20) NOT NULL, ...

  5. 使用java执行ffmpeg命令进行推流操作

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  6. Java实例---简单的数据库操作

    源码分析 DAOFactory.java package cn.ftl.mysql ; public class DAOFactory { public static IEmpDAO getIEmpD ...

  7. Java实现视频网站的视频上传、视频转码、及视频播放功能(ffmpeg)

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  8. DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户

    1. DAO简介    DAO设计模式是属于J2EE数据库层的操作,使用DAO设计模式可以简化大量代码,增强程序的可移植性. 2. DAO各部分详解    DAO设计模式包括5个重要的部分,分别为数据 ...

  9. JavaBean中DAO设计模式介绍(转)

    一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/Ser ...

随机推荐

  1. SQL查询时间去除非工作日...

    CREATE FUNCTION [f_WorkDayADD]( @date datetime, --基础日期 @workday int --要增加的工作日数 )RETURNS datetime AS ...

  2. HTML5游戏开发_是男人就下100层

    项目流程 市场调研(可行性分析)--> 可行性报告书  需求分析师.客户经理 需求分析--> 需求说明书  项目经理.需求分析师 概要设计--> 概要设计说明书(ER图, UML)  ...

  3. HDU 1850 (Nim博弈 取胜方案数) Being a Good Boy in Spring Festival

    考虑到Bouton定理的证明过程,设n个数的Nim和(异或和)为X,其最高位的1在第k位,那么n个数中一定有个y的第k为也是个1. 将y的数量变为X xor y,那么n的数的Nim和为0,便转为先手必 ...

  4. POJ 1988 Cube Stacking

    题意:有编号为1~N的N个小木块,有两种操作 M x y 将木块x所在的堆放到木块y所在的堆的上面 C x 询问木块x下面有多少块木块 代码巧妙就巧妙在GetParent函数中在进行路径压缩的同时,也 ...

  5. C#序列化XML至对象

    内容来源: http://www.cnblogs.com/fish-li/archive/2013/05/05/3061816.html#_label0 自己做的Demo下载地址:Demo

  6. 报错:对象必须实现 IConvertible;以分隔符进行分割链接concat_ws的使用方法;mysql数据类型转换cast,convert

    错误故障,mysql  服务器上用 concat_ws 函数,连接了一串数字,最后 服务器返回的字段就变成了一个 byte ,而我们想要的类型是  string 类型,那么转换的时候,就报错了. 正确 ...

  7. 14.Object-C--浅谈Foundation框架字符串NSString 与NSMutableString

    OC的字符串时经常使用到的,今天我对于OC字符串做一个简单的总结,如果有错误之处,麻烦留言指正.感谢! NSString是一个不可变长度的字符串对象.表示它初始化以后,你不能改变该变量所分配的内存中的 ...

  8. 【解题报告】[动态规划] RQNOJ - PID15 / 采药

    原题地址:http://www.rqnoj.cn/problem/15 好久以前做的题了,是个背包问题,就不解释了. #include<stdio.h> #define MAX 100 i ...

  9. 关于“怎么比较两个SQL查询语句产生的结果集是否相同”搜集到的一些资料

    一. 如果你这两个结果集都没有close,可以这样: rs.last(); rs2.last(); if (rs.getRow() != rs2.getRow()) { //记录数不等,即结果不等 } ...

  10. android操作SQLite

    一.SQLite SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 ...