weaver 2005/03/08 13:59:15 Modified: portal/src/java/org/apache/jetspeed/engine/servlet ServletRequestImpl.java Added: portal/src/java/org/apache/jetspeed/engine/servlet NamespaceEncodedSession.java HttpSessionWrapper.java Log: Added a fix for the issues related to Tomcat not using a seperate session when a crosscontext dispatched to another. This patch uses the same namespace encodings approach as the PortletRequest does Revision Changes Path 1.35 +21 -1 jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java Index: ServletRequestImpl.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- ServletRequestImpl.java 4 Feb 2005 19:52:20 -0000 1.34 +++ ServletRequestImpl.java 8 Mar 2005 21:59:15 -0000 1.35 @@ -28,6 +28,7 @@ import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; +import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -35,6 +36,7 @@ import org.apache.jetspeed.container.url.PortalURL; import org.apache.jetspeed.request.JetspeedRequestContext; import org.apache.jetspeed.request.RequestContext; +import org.apache.pluto.om.common.ObjectID; import org.apache.pluto.om.entity.PortletApplicationEntity; import org.apache.pluto.om.entity.PortletEntity; import org.apache.pluto.om.portlet.PortletApplicationDefinition; @@ -61,12 +63,14 @@ private ServletRequest currentRequest = null; private Map portletParameters; + private ObjectID webAppId; public ServletRequestImpl( HttpServletRequest servletRequest, PortletWindow window ) { super(servletRequest); nameSpaceMapper = NamespaceMapperAccess.getNamespaceMapper(); this.portletWindow = window; + webAppId = portletWindow.getPortletEntity().getPortletDefinition().getPortletApplicationDefinition().getWebApplicationDefinition().getId(); } protected HttpServletRequest _getHttpServletRequest() @@ -447,4 +451,20 @@ .getPortletApplicationDefinition() .getWebApplicationDefinition().getContextRoot(); } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getSession() + */ + public HttpSession getSession() + { + return new NamespaceEncodedSession(super.getSession(), webAppId); + } + + /* (non-Javadoc) + * @see javax.servlet.http.HttpServletRequest#getSession(boolean) + */ + public HttpSession getSession(boolean arg0) + { + return new NamespaceEncodedSession(super.getSession(arg0), webAppId); + } } \ No newline at end of file 1.1 jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/engine/servlet/NamespaceEncodedSession.java Index: NamespaceEncodedSession.java =================================================================== /* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jetspeed.engine.servlet; import java.util.Collections; import java.util.Enumeration; import java.util.HashSet; import javax.servlet.http.HttpSession; import org.apache.pluto.om.common.ObjectID; import org.apache.pluto.util.NamespaceMapper; import org.apache.pluto.util.NamespaceMapperAccess; /** * @author Scott T Weaver * */ public class NamespaceEncodedSession extends HttpSessionWrapper { private NamespaceMapper nameSpaceMapper; private ObjectID webAppId; private HashSet mappedNames = new HashSet(); /** * @param session */ public NamespaceEncodedSession(HttpSession session, ObjectID webAppId) { super(session); this.nameSpaceMapper = NamespaceMapperAccess.getNamespaceMapper(); this.webAppId = webAppId; } /** * <p> * setAttribute * </p> * * @see javax.servlet.ServletRequest#setAttribute(java.lang.String, * java.lang.Object) * @param arg0 * @param arg1 */ public void setAttribute(String name, Object value) { if (name == null) { throw new IllegalArgumentException("Attribute name == null"); } if (skipEncode(name)) { super.setAttribute(name, value); } else { String encodedKey = nameSpaceMapper.encode(webAppId, name); mappedNames.add(name); super.setAttribute(encodedKey, value); } } /** * @see javax.servlet.http.HttpServletRequest#getAttribute(java.lang.String) */ public Object getAttribute(String name) { if (skipEncode(name)) { return super.getAttribute(name); } else { return super.getAttribute(NamespaceMapperAccess.getNamespaceMapper().encode(webAppId, name)); } } private boolean skipEncode(String name) { return name.startsWith("Pluto_") || name.startsWith("javax.portlet") || name.startsWith("javax.servlet") || name.startsWith("org.apache.jetspeed"); } /* * (non-Javadoc) * * @see javax.servlet.http.HttpSession#getAttributeNames() */ public Enumeration getAttributeNames() { Enumeration names = super.getAttributeNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (skipEncode(name)) { mappedNames.add(name); } } return Collections.enumeration(mappedNames); } /* * (non-Javadoc) * * @see javax.servlet.http.HttpSession#removeAttribute(java.lang.String) */ public void removeAttribute(String name) { if (skipEncode(name)) { super.removeAttribute(name); } else { mappedNames.add(name); super.removeAttribute(nameSpaceMapper.encode(webAppId, name)); } } } 1.1 jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/engine/servlet/HttpSessionWrapper.java Index: HttpSessionWrapper.java =================================================================== /* * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jetspeed.engine.servlet; import java.util.Enumeration; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionContext; /** * @author Scott T Weaver * */ public class HttpSessionWrapper implements HttpSession { private HttpSession session; public HttpSessionWrapper(HttpSession session) { this.session = session; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object obj) { return session.equals(obj); } /** * @param arg0 * @return */ public Object getAttribute(String arg0) { return session.getAttribute(arg0); } /** * @return */ public Enumeration getAttributeNames() { return session.getAttributeNames(); } /** * @return */ public long getCreationTime() { return session.getCreationTime(); } /** * @return */ public String getId() { return session.getId(); } /** * @return */ public long getLastAccessedTime() { return session.getLastAccessedTime(); } /** * @return */ public int getMaxInactiveInterval() { return session.getMaxInactiveInterval(); } /** * @return */ public ServletContext getServletContext() { return session.getServletContext(); } /** * @return */ public HttpSessionContext getSessionContext() { return session.getSessionContext(); } /** * @param arg0 * @return */ public Object getValue(String arg0) { return session.getValue(arg0); } /** * @return */ public String[] getValueNames() { return session.getValueNames(); } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ public int hashCode() { return session.hashCode(); } /** * */ public void invalidate() { session.invalidate(); } /** * @return */ public boolean isNew() { return session.isNew(); } /** * @param arg0 * @param arg1 */ public void putValue(String arg0, Object arg1) { session.putValue(arg0, arg1); } /** * @param arg0 */ public void removeAttribute(String arg0) { session.removeAttribute(arg0); } /** * @param arg0 */ public void removeValue(String arg0) { session.removeValue(arg0); } /** * @param arg0 * @param arg1 */ public void setAttribute(String arg0, Object arg1) { session.setAttribute(arg0, arg1); } /** * @param arg0 */ public void setMaxInactiveInterval(int arg0) { session.setMaxInactiveInterval(arg0); } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return session.toString(); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]