From: Matti Tahvonen Date: Tue, 1 Dec 2009 08:50:44 +0000 (+0000) Subject: transactionStart/End and requestStart/End should now always happen in pairs X-Git-Tag: 6.7.0.beta1~2214 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b7d8f0964c8f850c0595ef5deab4ce095e3e2c3d;p=vaadin-framework.git transactionStart/End and requestStart/End should now always happen in pairs svn changeset:10114/svn branch:6.2 --- diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java index 3d165c2d2e..5c1396b449 100644 --- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java +++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java @@ -313,6 +313,9 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet (ResourceResponse) response); } else { Application application = null; + boolean transactionStarted = false; + boolean requestStarted = false; + try { // TODO What about PARAM_UNLOADBURST & redirectToApplication?? @@ -359,6 +362,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet if (application instanceof PortletRequestListener) { ((PortletRequestListener) application).onRequestStart( request, response); + requestStarted = true; } /* Start the newly created application */ @@ -369,6 +373,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet * end is called in the finally block below. */ applicationContext.startTransaction(application, request); + transactionStarted = true; /* Notify listeners */ @@ -460,15 +465,17 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet handleServiceException(request, response, application, e); } finally { // Notifies transaction end - if (application != null) { - ((PortletApplicationContext2) application.getContext()) - .endTransaction(application, request); - - if (application instanceof PortletRequestListener) { + try { + if (transactionStarted) { + ((PortletApplicationContext2) application.getContext()) + .endTransaction(application, request); + } + } finally { + if (requestStarted) { ((PortletRequestListener) application).onRequestEnd( request, response); - } + } } } } diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java index fc64ede5bd..65b587183b 100644 --- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java +++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java @@ -369,6 +369,8 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements } Application application = null; + boolean transactionStarted = false; + boolean requestStarted = false; try { // If a duplicate "close application" URL is received for an @@ -414,6 +416,7 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements if (application instanceof HttpServletRequestListener) { ((HttpServletRequestListener) application).onRequestStart( request, response); + requestStarted = true; } // Start the newly created application @@ -424,6 +427,7 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements * is called in the finally block below. */ webApplicationContext.startTransaction(application, request); + transactionStarted = true; /* Handle the request */ if (requestType == RequestType.FILE_UPLOAD) { @@ -480,14 +484,19 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements handleServiceException(request, response, application, e); } finally { // Notifies transaction end - if (application != null) { - ((WebApplicationContext) application.getContext()) - .endTransaction(application, request); + try { + if (transactionStarted) { + ((WebApplicationContext) application.getContext()) + .endTransaction(application, request); - if (application instanceof HttpServletRequestListener) { + } + + } finally { + if (requestStarted) { ((HttpServletRequestListener) application).onRequestEnd( request, response); } + } }