代码之家  ›  专栏  ›  技术社区  ›  Jason C

将信息从servlet发送回过滤器

  •  0
  • Jason C  · 技术社区  · 7 年前

    @Override public void doFilter (ServletRequest req, ServletResponse resp, FilterChain fc) 
        throws IOException, ServletException 
    {
        try {
            HibernateUtil.beginTransaction();
            fc.doFilter(req, resp);
            HibernateUtil.commitTransaction();
        } catch (Throwable t) {
            Logger.exception(t, "processing servlet request");
            HibernateUtil.rollbackTransaction();
            throw new ServletException(t);
        }
    }
    

    我现在一直在坚持这一点,我认为我遇到了OSIV(或至少是它的这个实现)的许多缺陷之一,那就是我现在希望能够回滚事务,甚至 正在引发异常。我希望servlet能够控制这一点,我认为除了以某种方式破解这个功能之外,我没有太多选择。

    HibernateUtil.beginTransaction();
    fc.doFilter(req, resp);
    if (/* something that was set by a servlet/jsp */)
        HibernateUtil.rollbackTransaction();
    else
        HibernateUtil.commitTransaction();
    

    我真的不确定将这样的信息从servlet传播回这个过滤器的可靠方式是什么。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Abhijit Sarkar    7 年前

    1. 您的交易取决于其他设置了标志的人。如果你在银行工作,我真的不想成为那里的客户。
    2. 如果使用请求属性,则必须提取Servlet中的值,并一直传递到DAO,假设您使用的是通用的多层架构。

    相反,您可以简单地从Hibernate会话对象获取当前事务,并要求其回滚。 Session.getTransaction().rollback()