当前位置: 代码迷 >> Java相关 >> 一次请求在同一个事务实现
  详细解决方案

一次请求在同一个事务实现

热度:257   发布时间:2013-04-24 16:21:49.0
一次请求在同一个事务实现
HiberSessionFilter过滤器代码:


[java] view plaincopyprint?
package www.csdn.dbshop.filter;  
  
import java.io.IOException;   
import javax.servlet.Filter;  import javax.servlet.FilterChain;  import javax.servlet.FilterConfig;  import javax.servlet.ServletException;  import javax.servlet.ServletRequest;  import javax.servlet.ServletResponse;  import javax.servlet.http.HttpServletRequest;   
import org.hibernate.Transaction;   
import www.csdn.dbshop.util.HiberSessionFactory;   
public class HiberSessionFilter implements Filter {   
    public void destroy() {   
    }  
  
    public void doFilter(ServletRequest request, ServletResponse response,              FilterChain chain) throws IOException, ServletException {   
        HttpServletRequest req = (HttpServletRequest) request;  
        // 获取当前请求的URI路径,例如/shoping/csdn/MemberAction_query.action           String requesturi = req.getRequestURI();  
        // 截取字符串,获取‘_’之后的字符串           String str = requesturi.substring(requesturi.indexOf("_") + 1);          // 截取 _名字 如过以 add ,update ,delete 开始 就添加事务处理,把有过事务的处理 都删除           // 根据获取‘_’之后的字符串,截取‘.’之前的字符串,即:就是URI中_到.之间的字符串,即:Action中的方法名           String uri = str.substring(0, str.indexOf("."));          // 判断截取的字符,如果是CUD则进行开启事务的操作,反之,不用开启事务           if ("addObject".equals(uri) || "updateObject".equals(uri)                  || "deleteObject".equals(uri) || "reg".equals(uri)                  || "register".equals(uri) || "buy".equals(uri)) {   
            Transaction ts = null;              try {                  ts = HiberSessionFactory.getSession().beginTransaction();  
                chain.doFilter(request, response);  
                ts.commit();  
            } catch (Exception e) {                  if (ts != null) {                      ts.rollback();  
                }  
                throw new RuntimeException(e);              } finally {                  // www.cdtarena.com关闭session                   HiberSessionFactory.closeSession();  
            }  
        } else {              try {                  chain.doFilter(request, response);  
            } catch (Exception e) {                  throw new RuntimeException(e);              } finally {                  // 关闭session                   HiberSessionFactory.closeSession();  
            }  
        }  
    }  
  
    public void init(FilterConfig filterConfig) throws ServletException {          // TODO Auto-generated method stub     
    }  
  
}  
web.xml代码:


[html] view plaincopyprint?
<!-- sessionclose过滤器 -->  
  <filter>     <filter-name>HiberSessionFilter</filter-name>     <filter-class>www.csdn.dbshop.filter.HiberSessionFilter</filter-class>   </filter>     
<filter-mapping>     <filter-name>HiberSessionFilter</filter-name>     <url-pattern>*.action</url-pattern>   </filter-mapping>   注意:在Struts2中,过滤器最好放在Struts2过滤器之前。


成都计算机培训之java培训、成都php培训找最专业的成都IT培训机构成都达内。!成都java培训官网:http://www.cdtarena.com
搜索更多相关的解决方案: 过滤器  package  public  import  

----------------解决方案--------------------------------------------------------
不懂,刚学Java
----------------解决方案--------------------------------------------------------
  相关解决方案