You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by at...@apache.org on 2009/03/27 15:38:24 UTC

svn commit: r759154 - in /portals/jetspeed-2/portal/trunk: components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/ jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/

Author: ate
Date: Fri Mar 27 14:38:23 2009
New Revision: 759154

URL: http://svn.apache.org/viewvc?rev=759154&view=rev
Log:
Restoring old PortletRequestResponseUnwrapper, but now renamed to ContainerRequestResponseUnwrapper.
This turned out to be required after all as for cross-context dispatching (on Tomcat) the original request is required
to maintain access to the ContainerRequest session during a Portlet invocation (note: with Tomcat server connector emptySessionPath="true").

Added:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultContainerRequestResponseUnwrapper.java   (contents, props changed)
      - copied, changed from r759128, portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultPortletRequestResponseUnwrapper.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/ContainerRequestResponseUnwrapper.java   (contents, props changed)
      - copied, changed from r759128, portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/PortletRequestResponseUnwrapper.java
Removed:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultPortletRequestResponseUnwrapper.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/LocalPortletInvokerFactory.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/PortletRequestResponseUnwrapper.java
Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/JetspeedPortletInvokerService.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/ServletPortletInvoker.java

Copied: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultContainerRequestResponseUnwrapper.java (from r759128, portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultPortletRequestResponseUnwrapper.java)
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultContainerRequestResponseUnwrapper.java?p2=portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultContainerRequestResponseUnwrapper.java&p1=portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultPortletRequestResponseUnwrapper.java&r1=759128&r2=759154&rev=759154&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultPortletRequestResponseUnwrapper.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultContainerRequestResponseUnwrapper.java Fri Mar 27 14:38:23 2009
@@ -20,25 +20,43 @@
 import javax.portlet.PortletResponse;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.HttpServletResponse;
 
 import org.apache.jetspeed.Jetspeed;
 
 /**
- * DefaultPortletRequestResponseUnwrapper implements PortletRequestResponseUnwrapper
+ * DefaultContainerRequestResponseUnwrapper implements ContainerRequestResponseUnwrapper
  * and finds servlet request or servlet response
  *
  * @author <a href="mailto:woonsan@apache.org">Woonsan Ko</a>
- * @version $Id: $
+ * @version $Id$
  */
-public class DefaultPortletRequestResponseUnwrapper implements PortletRequestResponseUnwrapper
+public class DefaultContainerRequestResponseUnwrapper implements ContainerRequestResponseUnwrapper
 {
     public ServletRequest unwrapPortletRequest(PortletRequest portletRequest)
     {
-        return Jetspeed.getCurrentRequestContext().getCurrentPortletWindow().getPortletRequestContext().getContainerRequest();
+        return unwrapContainerRequest(Jetspeed.getCurrentRequestContext().getCurrentPortletWindow().getPortletRequestContext().getContainerRequest());
     }
     
     public ServletResponse unwrapPortletResponse(PortletResponse portletResponse)
     {
-        return Jetspeed.getCurrentRequestContext().getCurrentPortletWindow().getPortletRequestContext().getContainerResponse();
+        return unwrapContainerResponse(Jetspeed.getCurrentRequestContext().getCurrentPortletWindow().getPortletRequestContext().getContainerResponse());
+    }
+    
+    public ServletRequest unwrapContainerRequest(HttpServletRequest containerRequest)
+    {
+        ServletRequest request = containerRequest;
+        while (request instanceof HttpServletRequestWrapper)
+        {
+            request = ((HttpServletRequestWrapper)request).getRequest();
+        }
+        return request;
+    }
+    
+    public ServletResponse unwrapContainerResponse(HttpServletResponse containerResponse)
+    {
+        return containerResponse;
     }
 }

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/DefaultContainerRequestResponseUnwrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/JetspeedPortletInvokerService.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/JetspeedPortletInvokerService.java?rev=759154&r1=759153&r2=759154&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/JetspeedPortletInvokerService.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/JetspeedPortletInvokerService.java Fri Mar 27 14:38:23 2009
@@ -70,13 +70,21 @@
     
     private ServletConfig servletConfig;
     private PortletFactory portletFactory;
+    private ContainerRequestResponseUnwrapper requestResponseUnwrapper;
     private String servletMappingName;
     
     public JetspeedPortletInvokerService(ServletConfig servletConfig, PortalContext portalContext, PortletFactory portletFactory)
     {
+        this(servletConfig, portalContext, portletFactory, new DefaultContainerRequestResponseUnwrapper());
+    }
+    
+    public JetspeedPortletInvokerService(ServletConfig servletConfig, PortalContext portalContext, 
+                                         PortletFactory portletFactory, ContainerRequestResponseUnwrapper requestResponseUnwrapper)
+    {
         this.servletConfig = servletConfig;
         this.portletFactory = portletFactory;
-        this.servletMappingName = portalContext.getConfigurationProperty(INVOKER_SERVLET_MAPPING_NAME, DEFAULT_MAPPING_NAME);                                
+        this.requestResponseUnwrapper = requestResponseUnwrapper;
+        this.servletMappingName = portalContext.getConfigurationProperty(INVOKER_SERVLET_MAPPING_NAME, DEFAULT_MAPPING_NAME);
     }
     
     public void action(PortletRequestContext requestContext, ActionRequest request, ActionResponse response, FilterManager filterManager)
@@ -139,7 +147,7 @@
         }
         else
         {
-            invoker =  new ServletPortletInvoker(servletMappingName);
+            invoker =  new ServletPortletInvoker(requestResponseUnwrapper, servletMappingName);
 
         }
         invoker.activate(portletFactory, portletDefinition, servletConfig);

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/ServletPortletInvoker.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/ServletPortletInvoker.java?rev=759154&r1=759153&r2=759154&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/ServletPortletInvoker.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/container/invoker/ServletPortletInvoker.java Fri Mar 27 14:38:23 2009
@@ -24,6 +24,8 @@
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -71,8 +73,15 @@
     protected boolean activated = false;
     protected String servletMappingName;
     
-    public ServletPortletInvoker(String servletMappingName)
+    /**
+     * requestResponseUnwrapper used to unwrap container request or portlet response
+     * to find the real servlet request or servlet response.
+     */
+    protected ContainerRequestResponseUnwrapper requestResponseUnwrapper;
+
+    public ServletPortletInvoker(ContainerRequestResponseUnwrapper requestResponseUnwrapper, String servletMappingName)
     {
+        this.requestResponseUnwrapper = requestResponseUnwrapper;
         this.servletMappingName = servletMappingName;
     }
 
@@ -144,13 +153,16 @@
             window.setAttribute(PortalReservedParameters.PORTLET_DEFINITION_ATTRIBUTE, portletDefinition);
             window.setAttribute(PortalReservedParameters.PORTLET_FILTER_MANAGER_ATTRIBUTE, filter);
 
+            ServletRequest request = this.requestResponseUnwrapper.unwrapContainerRequest(requestContext.getContainerRequest());
+            ServletResponse response = this.requestResponseUnwrapper.unwrapContainerResponse(requestContext.getContainerResponse());
+            
             if (useForward)
             {
-                dispatcher.forward(requestContext.getContainerRequest(), requestContext.getContainerResponse());
+                dispatcher.forward(request, response);
             }
             else
             {
-                dispatcher.include(requestContext.getContainerRequest(), requestContext.getContainerResponse());
+                dispatcher.include(request, response);
             }
             
         }

Copied: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/ContainerRequestResponseUnwrapper.java (from r759128, portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/PortletRequestResponseUnwrapper.java)
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/ContainerRequestResponseUnwrapper.java?p2=portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/ContainerRequestResponseUnwrapper.java&p1=portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/PortletRequestResponseUnwrapper.java&r1=759128&r2=759154&rev=759154&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/PortletRequestResponseUnwrapper.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/ContainerRequestResponseUnwrapper.java Fri Mar 27 14:38:23 2009
@@ -16,37 +16,40 @@
  */
 package org.apache.jetspeed.container.invoker;
 
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletResponse;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 /**
- * PortletRequestResponseUnwrapper finds servlet request or servlet response 
- * from portlet request or portlet response by unwrapping.
+ * ContainerRequestResponseUnwrapper finds the web container servlet request
+ * or servlet response suitable for cross-context dispatching
+ * from the current container request or response by unwrapping.
  * Third-party module can provide an implementation to decorate the real request
- * or response object of a servlet container.
- * For example, the real request object of a servlet container can be decorated
- * because it is not thread-safe under Jetspeed parallel rendering mode.
+ * or response object of a servlet container for instance to ensure reliable
+ * behavior when executing multiple portlet invocations in parallel on top of
+ * the same web container request and response.
  *
  * @author <a href="mailto:woonsan@apache.org">Woonsan Ko</a>
- * @version $Id: $
+ * @version $Id$
  */
-public interface PortletRequestResponseUnwrapper
+public interface ContainerRequestResponseUnwrapper
 {
     /**
-     * Unwraps portlet request to find the real servlet request.
+     * Unwraps the container request to find the web container servlet request
+     * suitable for cross-context request dispatching.
      * 
-     * @param portletRequest The portlet request to be unwrapped.
+     * @param containerRequest The container request to be unwrapped.
      * @return servletRequest The servlet request found by unwrapping.
      */
-    ServletRequest unwrapPortletRequest(PortletRequest portletRequest);
-    
+    ServletRequest unwrapContainerRequest(HttpServletRequest containerRequest);
+
     /**
-     * Unwraps portlet response to find the real servlet response.
+     * Unwraps the container response to find the web container servlet response
+     * suitable for cross-context request dispatching.
      * 
-     * @param portletResponse The portlet response to be unwrapped.
+     * @param containerResponse The container response to be unwrapped.
      * @return servletResponse The servlet response found by unwrapping.
      */
-    ServletResponse unwrapPortletResponse(PortletResponse portletResponse);
+    ServletResponse unwrapContainerResponse(HttpServletResponse containerResponse);
 }

Propchange: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/container/invoker/ContainerRequestResponseUnwrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org