package fi.pyramus.services.utils; import java.io.IOException; import javax.annotation.Resource; 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.HttpServletResponse; import javax.transaction.UserTransaction; public class TransactionFilter implements Filter { public void init(FilterConfig fc) throws ServletException { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { try { userTransaction.begin(); chain.doFilter(req, resp); userTransaction.commit(); } catch (Exception e) { if (resp instanceof HttpServletResponse) { ((HttpServletResponse) resp).setStatus(500); } try { userTransaction.rollback(); throw new ServletException(e); } catch (Exception e1) { throw new ServletException(e1); } } } public void destroy() { } @Resource private UserTransaction userTransaction; }