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:[email protected]">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:[email protected]">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: [email protected]
For additional commands, e-mail: [email protected]