We have a Java servlet acting as dispatcher for a web app. For each request a database connection is created and then committed / rolled back at the end of the request depending on whether the action was successful or not. It looks something like:
public class WebDispatcher extends HttpServlet {
    protected void processRequest(HttpServletRequest request,
                                  HttpServletResponse response)
                                  throws ServletException, IOException {
        Connection conn = null;
        try {
           // Create connection
        } catch(.....) { 
        } finally {
          // Commit / Rollback connection
        }
    }
}
The problem occurs when there is an exception. For example if they don't have access to a certain action the dispatcher has to redirect them. It does this by using a request dispatcher.
} catch(RoleAuthorizationException rae) {
    request.getRequestDispatcher(.....).forward(request, response);
}
I had assumed that 'finally' would be called but it doesn't seem to be in this case. With each exception we end up losing a connection in the pool. As a workaround we are closing the connection with each exception but why isn't finally being called?
 
     
    