You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ms...@apache.org on 2012/03/07 22:10:10 UTC
svn commit: r1298120 - in /myfaces/trinidad/trunk:
trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/
trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/
trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/w...
Author: mstarets
Date: Wed Mar 7 21:10:10 2012
New Revision: 1298120
URL: http://svn.apache.org/viewvc?rev=1298120&view=rev
Log:
TRINIDAD-2218 - Need an ability for the WindowManager implementation to be executed before all Configurators and filters and to complete teh response
Modified:
myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/WindowManager.java
myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java
myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/PseudoFacesContext.java
myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java
Modified: myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/WindowManager.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/WindowManager.java?rev=1298120&r1=1298119&r2=1298120&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/WindowManager.java (original)
+++ myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/WindowManager.java Wed Mar 7 21:10:10 2012
@@ -85,4 +85,15 @@ abstract public class WindowManager
* @throws IOException if an output exception occurs
*/
public abstract void writeState(FacesContext context) throws IOException;
+
+ /**
+ * Performs any necessary action at the very beginning of the request
+ * @param externalContext ExternalContext instance
+ * @return true if processing of the request should continue, false otherwise
+ */
+ public boolean beginRequest(ExternalContext externalContext) throws IOException
+ {
+ return true;
+ }
+
}
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java?rev=1298120&r1=1298119&r2=1298120&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java Wed Mar 7 21:10:10 2012
@@ -18,6 +18,8 @@
*/
package org.apache.myfaces.trinidadinternal.config;
+import java.io.IOException;
+
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
@@ -27,6 +29,7 @@ import java.util.concurrent.atomic.Atomi
import java.util.concurrent.locks.ReentrantLock;
+import javax.faces.context.FacesContext;
import javax.faces.context.ExternalContext;
import javax.servlet.ServletRequest;
@@ -37,6 +40,7 @@ import org.apache.myfaces.trinidad.confi
import org.apache.myfaces.trinidad.context.ExternalContextDecorator;
import org.apache.myfaces.trinidad.context.RequestContext;
import org.apache.myfaces.trinidad.context.RequestContextFactory;
+import org.apache.myfaces.trinidad.context.WindowManager;
import org.apache.myfaces.trinidad.logging.TrinidadLogger;
import org.apache.myfaces.trinidad.skin.SkinFactory;
import org.apache.myfaces.trinidad.util.ClassLoaderUtils;
@@ -211,7 +215,19 @@ public final class GlobalConfiguratorImp
if (state.get(_IN_REQUEST) == null)
{
- _startConfiguratorServiceRequest(ec);
+ // Allow WindowManager to perform some processing at the beginning of request and optionally complete the response
+ if (!Boolean.TRUE.equals(state.get(_CONFIGURATORS_ABORTED)))
+ {
+ if (_beginWindowManagerRequest(ec))
+ {
+ _startConfiguratorServiceRequest(ec);
+ }
+ else
+ {
+ FacesContext.getCurrentInstance().responseComplete();
+ state.put(_CONFIGURATORS_ABORTED, Boolean.TRUE);
+ }
+ }
}
}
else
@@ -301,7 +317,7 @@ public final class GlobalConfiguratorImp
{
//Only end services at the end of a writable response. This will
//generally be RENDER, RESOURCE, and SERVLET.
- if (ExternalContextUtils.isResponseWritable(ec))
+ if (ExternalContextUtils.isResponseWritable(ec) && !Boolean.TRUE.equals(state.get(_CONFIGURATORS_ABORTED)))
{
_endConfiguratorServiceRequest(ec);
}
@@ -606,6 +622,23 @@ public final class GlobalConfiguratorImp
}
}
}
+
+ private boolean _beginWindowManagerRequest(ExternalContext ec)
+ {
+ WindowManager wm = RequestContext.getCurrentInstance().getWindowManager();
+ boolean cont = true;
+
+ try
+ {
+ cont = wm.beginRequest(ec);
+ }
+ catch(IOException e)
+ {
+ _LOG.severe(e);
+ }
+
+ return cont;
+ }
static private boolean _isSetRequestBugPresent(ExternalContext ec)
{
@@ -779,6 +812,9 @@ public final class GlobalConfiguratorImp
GlobalConfiguratorImpl.class.getName() + ".REQUEST_CONTEXT";
static private final String _REQUEST_TYPE =
GlobalConfiguratorImpl.class.getName() + ".REQUEST_TYPE";
+
+ static private final String _CONFIGURATORS_ABORTED =
+ GlobalConfiguratorImpl.class.getName() + ".CONFIGURATORS_ABORTED";
static private class TestRequest
extends ServletRequestWrapper
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/PseudoFacesContext.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/PseudoFacesContext.java?rev=1298120&r1=1298119&r2=1298120&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/PseudoFacesContext.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/PseudoFacesContext.java Wed Mar 7 21:10:10 2012
@@ -135,7 +135,7 @@ class PseudoFacesContext extends FacesCo
@Override
public boolean getResponseComplete()
{
- return false;
+ return _responseCompleted;
}
@Override
@@ -159,7 +159,7 @@ class PseudoFacesContext extends FacesCo
@Override
public void responseComplete()
{
- throw new UnsupportedOperationException();
+ _responseCompleted = true;
}
@Override
@@ -238,4 +238,6 @@ class PseudoFacesContext extends FacesCo
private final ExternalContext _external;
private ELContext _elContext;
private Application _application;
+
+ private boolean _responseCompleted = false;
}
\ No newline at end of file
Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java?rev=1298120&r1=1298119&r2=1298120&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/webapp/TrinidadFilterImpl.java Wed Mar 7 21:10:10 2012
@@ -173,6 +173,10 @@ public class TrinidadFilterImpl implemen
GlobalConfiguratorImpl config = GlobalConfiguratorImpl.getInstance();
config.beginRequest(externalContext);
+ // Allow Configurators to wrap response and request
+ request = (ServletRequest)externalContext.getRequest();
+ response = (ServletResponse)externalContext.getResponse();
+
String noJavaScript = request.getParameter(XhtmlConstants.NON_JS_BROWSER);
// Wrap the request only for Non-javaScript browsers
@@ -190,13 +194,19 @@ public class TrinidadFilterImpl implemen
FileUploadConfiguratorImpl.apply(externalContext);
request = new UploadRequestWrapper((HttpServletRequest)request, addedParams);
}
+
+ boolean responseComplete = facesContext.getResponseComplete();
// release the PseudoFacesContext, since _doFilterImpl() has its own FacesContext
facesContext.release();
try
{
- _doFilterImpl(request, response, chain);
+ // Abort processing if the response has been completed by Configurator
+ if (!responseComplete)
+ {
+ _doFilterImpl(request, response, chain);
+ }
}
// For PPR errors, handle the request specially
catch (Throwable t)
@@ -246,7 +256,7 @@ public class TrinidadFilterImpl implemen
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException
- {
+ {
// -= Scott O'Bryan =-
// Added for backward compatibility
// potentially wrap the ServletContext to check ManagerBean HA