`
guochongcan
  • 浏览: 320306 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Struts与Hibernate整合将Session和Transaction放在Filter中

    博客分类:
  • SSH
阅读更多

修改HibernateSessionFactory文件(这个文件是由Hibernate帮我们自己动完成的)

加上如下内容:

private static final ThreadLocal trthreadLocal = new ThreadLocal();//事务线程

       /**

     * 打开事务

     */

    public static void OpenTransaction(){

       Transaction tran=(Transaction) trthreadLocal.get();

       if(tran==null){

           tran=getSession().beginTransaction();

           trthreadLocal.set(tran);

       }

    }

    /**

     * 提交事务

     */

    public static void CommitTransaction(){

       Transaction tran=(Transaction) trthreadLocal.get();

       if(tran!=null && !tran.wasCommitted() && !tran.wasRolledBack()){

           tran.commit();

           trthreadLocal.set(null);

       }

    }

    /**

     * 回滚事务

     */

    public static void RollbackTransaction(){

       Transaction tran=(Transaction) trthreadLocal.get();

       if(tran!=null && !tran.wasCommitted() && !tran.wasRolledBack()){

           tran.rollback();

           trthreadLocal.set(null);

       }

    }

新建一个开启与关闭SessionTransactionFilter

public class SessionTransactionFilter extends HttpServlet implements Filter {

   

    public void init(FilterConfig arg0) throws ServletException {

      

    }

   

    public void doFilter(ServletRequest arg0, ServletResponse arg1,

           FilterChain arg2) throws IOException, ServletException {

       try {

           HibernateSessionFactory.getSession();//打开session

           HibernateSessionFactory.OpenTransaction();//打开事务

           arg2.doFilter(arg0, arg1);

           HibernateSessionFactory.CommitTransaction();//事务提交

       } catch (Exception e) {

           HibernateSessionFactory.RollbackTransaction();//回滚事务

           e.printStackTrace();

       }finally{

           HibernateSessionFactory.closeSession();//关闭session

       }

    }

}

 

在我们的DAO中就可以不用管我们的SessionTransaction

1,  共公接口

public interface CommonDAO {

    public void save(Object obj);

    public void delete(Object obj);

    public void update(Object obj);

}

2,  共公方法

public class CommonDAOImple implements CommonDAO{

    public Session GetSession(){

       return HibernateSessionFactory.getSession();

    }

    public void delete(Object obj) {

       this.GetSession().delete(obj);

    }

    public void save(Object obj) {

       this.GetSession().save(obj);      

    }

    public void update(Object obj) {

       this.GetSession().update(obj);    

    }  

}

3,  具体的某一个城对象的interface如下:

public interface FlDAO extends CommonDAO {

    public TFl getone(int id);

    public List getall();

    public void delete(int id);

}

4,  具体的某一个城对象的DAO如下:

public class FlDAOImple extends CommonDAOImple implements FlDAO {

    public List getall() {

       Query query=this.GetSession().createQuery("from TFl");

       return query.list();

    }

    public TFl getone(int id) {

       return (TFl) this.GetSession().get(TFl.class, new Integer(id));

    }

    public void delete(int id) {

       Query query=this.GetSession().createQuery("delete TFl where FId=:id");

       query.setInteger("id", id);

       query.executeUpdate();

    }

}

 

5,  个人说明:

这样的做法可以解决Hibernate中的懒加载问题和每个方法中的Session开启与关闭,Transaction的开启与关闭。但是它带来的问题也是很大的

1,  Session的开启在客户端请求时打开,请求完全结束时关闭,这样Session的开启时间太长,而Session中是非线程安全的。并且一个Session保持与数据库一个连接,长时间的占用了数据库的资源。

2,  Transaction的开启时间在Session之后一点,关闭时间在Session之前一点,同样也开了很长的时间,这段时间内可能导致数据库里的数据库产生锁,别的线程没法操作数据。

分享到:
评论

相关推荐

    Hibernate_Session_Transaction

    可以对hibernate的 Session 和 Transaction 有更深入的认识 希望对一些概念比较模糊的人 有帮助

    HibernateSession , Transaction 研究

    NULL 博文链接:https://stewchicken.iteye.com/blog/938875

    spring-hibernate-maven-transaction整合

    spring-hibernate-maven-transaction整合

    Could not roll back Hibernate transaction.doc

    Could not roll back Hibernate transaction.doc

    第24次课-1 Spring与Hibernate的整合

    第24次课-1 Spring与Hibernate的整合 本节主要内容 24.1 概述 24.2 管理SessionFactory 24.3 Spring对Hibernate的简化 24.1 概述 24.1.1 概述 Spring提供了很多IoC特性的支持,方便处理大部分典型的Hibernate整合...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    Spring3+Hibernate4+Struts2 jar包 SSH框架

    spring 3.2.0+hibernate 4.1.6+struts2整合需要的jar包 的目录 antlr-2.7.7.jar aopalliance-1.0.jar asm-3.3.jar asm-commons-3.3.jar aspectjweaver-1.5.3.jar bonecp-0.7.1.RELEASE.jar cglib-2.1.3.jar ...

    Hibernate+Transaction+myeclipse6+事例+工程源码.rar

    介绍Hibernate+Transaction+myeclipse6+事例的应用参考工程源码.

    hibernate session.doc

    delete()方法用于从数据库中删除与Java对象对应的记录。如果传入的参数是持久化对象,Session就计划执行一个delete语句。如果传入的参数是游离对象,先使游离对象被Session关联,使它变为持久化对象,然后计划执行一...

    用户注册和登录是每个系统的必须存在的一部分,基于Dwr+Struts2+Spring+Hibernate写了一个用户登录注册系统

     压缩文件中不包含Jar文件(由于全部的Jar将近12M,不能全部上传),所用到的Jar目录为,工程中再也不会出现由于MyEclipse自动整合而出现的大量Jar文件 : Java代码 1. //如果不用,启动时不会出错,但使用Dwr时,会...

    Hibernate体系结构的概要图

    这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。  SessionFactory接口 SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建...

    Hibernate+中文文档

    11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit of work) 11.1.2. 长对话 11.1.3. 关注对象标识(Considering object identity) 11.1.4. 常见问题 11.2. 数据库事务声明 11.2.1. 非托管...

    hibernate操作数据库笔记

    //该方法将到classpath下解析hibernate.cfg.xml中的配置,如果不用Hibernate默认的配置文件名和路径,可在该方法中指定Hibernate配置文件的名称和路径 2.用Configuration对象获取SessionFactory和Session对象:...

    SSH(Spring Struts Hibernate)所有jar包

    1.1.24-20120814.043343-7.jar freemarker-2.3.19.jar hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.2.1.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar hibernate-validator-5.1.0.Final....

    Hibernate Web应用的开发步骤

    (2)将Hibernate所需的JAR包复制到WEB-INF/lib下。 (3)创建Hibernate的配置文件。 (4)利用Hibernate的第三方工具或Eclipse的有关插件从数据库中创建出相应的实体对象及其ORM映射文件。 (5)创建Hibernate的...

    Spring3+Hibernate4+Struts2 jar包

    D:\spring 3.2.0+hibernate 4.1.6+struts2整合需要的jar包 的目录 2013/05/11 15:26 <DIR> . 2013/05/11 15:26 <DIR> .. 2013/03/21 18:20 445,288 antlr-2.7.7.jar 2013/03/21 18:20 4,467 aopalliance-1.0.jar ...

    使用Maven Hibernate5 之Spring整合

    在准备整合Spring之前,也在网上看了各种配置。但是楼主心里还是很纠结,...楼主还是一步一步的来吧,感觉Spring操作Hibernate还是离不开DataSource,SessionFactory,Transaction这几个要素。 详细说明看我的博客文章。

    hibernate4.3完整jar包

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java...Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。

    Spring-Struts-IBatis-AOP-Transaction

    SSI(Struts2 + Spring + IBatis)框架集成。

    Hibernate稳定版(hibernate-release-5.2.18.Final.zip)

    Hibernate稳定版(hibernate-release-5.2.18.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。

Global site tag (gtag.js) - Google Analytics