@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传播回这个过滤器的可靠方式是什么。