使用过滤器实现事务

过滤器的执行顺序:

Filter: Set Encoding begin! vvvvv

Filter: Setting encoding: UTF-8

Filter: Transaction begin! Vvvvv

      //业务逻辑//

//业务逻辑//

Filter: Transaction End!    ^^^^^

Filter: Set Encoding End!    ^^^^

 

由于以上的过滤器特点,我们可以在进入业务逻辑前开启事务,在结束逻辑后提交事务,如果提交失败,还可以做回滚处理。

 

这样在所有业务逻辑中就可以不用关心事务及session的开启和关闭。

所有业务逻辑中直接HibernateSessionFactory.getSession()获取session并使用,使用完可以不同理事务的提交和session的关闭。

 

 

本过滤器提供 事务的开启 结束时的提交 关闭session

       如果无法建立数据库连接,显示“无法建立数据库连接”信息。

       如果事务提交失败,则在页面上显示异常信息 进行事务回滚操作,并显示回滚的成功与否。

       无论是否有异常最后都将关闭session

 

web.xml配置

<filter>

<filter-name>TransactionFilter</filter-name> <filter-class>cn.desheng.scard.filters.TransactionFilter</filter-class>

</filter>

 

<filter-mapping>

<filter-name>TransactionFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

 

TransactionFilter文件
public class TransactionFilter implements Filter {

    public TransactionFilter() {

    }

    public void destroy() {

    }


    public void doFilter(ServletRequest request, ServletResponse response,

           FilterChain chain) throws IOException, ServletException {


       Session session = null;

       String error = null;


       try {


           session = HibernateSessionFactory.getSession();

           session.beginTransaction();


       }

       catch (Exception ex) {


           ex.printStackTrace();

 

 

           response.getWriter().write(

                  "无法连接到数据库,可能原因"

                         + " 1,数据库未打开"

                         + " 2,未安装数据库对应的驱动程序"

                         + " 3,未安装Hibernate库"

                         + " 4,Hibernate配置文件配置不当" +

                                "-- 异常信息为:"+ex.getMessage());


           return;

       }


       try {        


           chain.doFilter(request, response);


           session.getTransaction().commit();

       }

       catch (Exception ex) {

           ex.printStackTrace();

 

 

           response.getWriter().write(

                  提交事务时发生异常,异常信息为");

           response.getWriter().write("- " + ex.getMessage());

 

           response.getWriter().write("正尝试进行事务回滚");


           try {

              session.getTransaction().rollback();

              response.getWriter().write("事务回滚成功");

           }

           catch (Exception ex2) {

              ex2.printStackTrace();

              response.getWriter().write("事务回滚失败");

           }


       }

       finally {

           HibernateSessionFactory.closeSession();

       }


    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值