Author: taylor
Date: Mon Dec 18 23:04:02 2006
New Revision: 488559
URL: http://svn.apache.org/viewvc?view=rev&rev=488559
Log:
https://issues.apache.org/jira/browse/JS2-226
patch from Woonsan Ko
* Improving Aggregator test (test is still broken)
* replace usage of Map interface to test for mulithreading with test for Worker
interface in all threading code
* fix bug with first time render failing due to portlet definitions and
entities missing on the first parallel render
Added:
portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/aggregator/
portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/aggregator/CurrentWorkerContext.java
Modified:
portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java
portals/jetspeed-2/trunk/components/portal/maven.xml
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJobImpl.java
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerImpl.java
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/container/invoker/ServletPortletInvoker.java
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/request/JetspeedRequestContextComponent.java
portals/jetspeed-2/trunk/components/portal/src/test/org/apache/jetspeed/aggregator/TestAggregator.java
Added:
portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/aggregator/CurrentWorkerContext.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/aggregator/CurrentWorkerContext.java?view=auto&rev=488559
==============================================================================
---
portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/aggregator/CurrentWorkerContext.java
(added)
+++
portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/aggregator/CurrentWorkerContext.java
Mon Dec 18 23:04:02 2006
@@ -0,0 +1,91 @@
+/*
+ * 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.aggregator;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+/**
+ * Maintains a context attributes for the current Thread
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">David Sean Taylor</a>
+ * @version $Id: $
+ */
+public final class CurrentWorkerContext
+{
+ private static ThreadLocal currentWorkerContext =
+ new ThreadLocal() {
+ protected synchronized Object initialValue() {
+ return new Hashtable();
+ }
+ };
+
+ private CurrentWorkerContext()
+ {
+ }
+
+ /**
+ * Returns an Enumeration containing the names of the attributes available
to this Thread.
+ * This method returns an empty Enumeration if the thread has no
attributes available to it.
+ */
+ public Enumeration getAttributeNames()
+ {
+ return ((Hashtable) currentWorkerContext.get()).keys();
+ }
+
+ /**
+ * @return an attribute in the current Thread
+ * @param attrName Locale for this Thread
+ */
+ public static Object getAttribute(String name)
+ {
+ return ((Hashtable) currentWorkerContext.get()).get(name);
+ }
+
+ /**
+ * Stores an attribute in this Thread.
+ * <br>
+ * @param name - a String specifying the name of the attribute
+ * @param o - the Object to be stored
+ */
+ public static void setAttribute(String name, Object o)
+ {
+ if (o != null) {
+ ((Hashtable) currentWorkerContext.get()).put(name, o);
+ } else {
+ removeAttribute(name);
+ }
+ }
+
+ /**
+ * Removes an attribute from this Thread.
+ * <br>
+ * @param name - a String specifying the name of the attribute
+ */
+ public static void removeAttribute(String name)
+ {
+ ((Hashtable) currentWorkerContext.get()).remove(name);
+ }
+
+ /**
+ * Removes all attributes from this Thread.
+ */
+ public static void removeAllAttributes()
+ {
+ ((Hashtable) currentWorkerContext.get()).clear();
+ }
+
+}
Modified:
portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java?view=diff&rev=488559&r1=488558&r2=488559
==============================================================================
---
portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java
(original)
+++
portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java
Mon Dec 18 23:04:02 2006
@@ -20,7 +20,6 @@
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
-import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
@@ -45,6 +44,8 @@
import org.apache.jetspeed.services.PortletServices;
import org.apache.jetspeed.tools.pamanager.PortletApplicationManagement;
import org.apache.jetspeed.util.DirectoryHelper;
+import org.apache.jetspeed.aggregator.Worker;
+import org.apache.jetspeed.aggregator.CurrentWorkerContext;
/**
* Jetspeed Container entry point.
@@ -204,18 +205,15 @@
Integer method = ContainerConstants.METHOD_NOOP;
Portlet portlet = null;
boolean destroyPortlet = false;
- Map workerAsMap = null;
+ boolean isParallelMode = false;
try
{
- Thread ct = Thread.currentThread();
- if (ct instanceof Map)
- {
- workerAsMap = (Map) ct;
- }
- if (workerAsMap != null)
+ isParallelMode = (Thread.currentThread() instanceof Worker);
+
+ if (isParallelMode)
{
- method = (Integer)
workerAsMap.get(ContainerConstants.METHOD_ID);
+ method = (Integer)
CurrentWorkerContext.getAttribute(ContainerConstants.METHOD_ID);
}
else
{
@@ -225,10 +223,10 @@
{
return;
}
- if (workerAsMap != null)
+ if (isParallelMode)
{
- portlet = (Portlet)
workerAsMap.get(ContainerConstants.PORTLET);
- portletName = (String)
workerAsMap.get(ContainerConstants.PORTLET_NAME);
+ portlet = (Portlet)
CurrentWorkerContext.getAttribute(ContainerConstants.PORTLET);
+ portletName = (String)
CurrentWorkerContext.getAttribute(ContainerConstants.PORTLET_NAME);
}
else
{
@@ -251,10 +249,10 @@
RenderRequest renderRequest = null;
RenderResponse renderResponse = null;
- if (workerAsMap != null)
+ if (isParallelMode)
{
- renderRequest = (RenderRequest)
workerAsMap.get(ContainerConstants.PORTLET_REQUEST);
- renderResponse = (RenderResponse)
workerAsMap.get(ContainerConstants.PORTLET_RESPONSE);
+ renderRequest = (RenderRequest)
CurrentWorkerContext.getAttribute(ContainerConstants.PORTLET_REQUEST);
+ renderResponse = (RenderResponse)
CurrentWorkerContext.getAttribute(ContainerConstants.PORTLET_RESPONSE);
}
else
{
Modified: portals/jetspeed-2/trunk/components/portal/maven.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/maven.xml?view=diff&rev=488559&r1=488558&r2=488559
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/maven.xml (original)
+++ portals/jetspeed-2/trunk/components/portal/maven.xml Mon Dec 18 23:04:02
2006
@@ -17,6 +17,6 @@
<project default="java:jar" xmlns:j="jelly:core" xmlns:define="jelly:define"
xmlns:maven="jelly:maven">
<!-- Target of maven test:single test -->
- <property name='testcase' value='org.apache.jetspeed.window.TestWindows' />
+ <property name='testcase'
value='org.apache.jetspeed.aggregator.TestAggregator' />
</project>
Modified:
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJobImpl.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJobImpl.java?view=diff&rev=488559&r1=488558&r2=488559
==============================================================================
---
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJobImpl.java
(original)
+++
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJobImpl.java
Mon Dec 18 23:04:02 2006
@@ -16,6 +16,7 @@
package org.apache.jetspeed.aggregator.impl;
+import java.util.Iterator;
import java.util.Map;
import javax.portlet.UnavailableException;
@@ -25,17 +26,18 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.jetspeed.PortalReservedParameters;
+import org.apache.jetspeed.aggregator.CurrentWorkerContext;
import org.apache.jetspeed.aggregator.PortletContent;
import org.apache.jetspeed.aggregator.RenderingJob;
+import org.apache.jetspeed.aggregator.Worker;
+import org.apache.jetspeed.components.portletentity.PortletEntityImpl;
import org.apache.jetspeed.om.common.portlet.MutablePortletEntity;
import org.apache.jetspeed.om.page.ContentFragment;
import org.apache.jetspeed.request.RequestContext;
import org.apache.jetspeed.statistics.PortalStatistics;
import org.apache.pluto.PortletContainer;
-import org.apache.pluto.om.window.PortletWindow;
import org.apache.pluto.om.portlet.PortletDefinition;
-import org.apache.pluto.om.entity.PortletEntity;
-import org.apache.jetspeed.components.portletentity.PortletEntityImpl;
+import org.apache.pluto.om.window.PortletWindow;
/**
* The RenderingJob is responsible for storing all necessary objets for
@@ -132,8 +134,7 @@
public void execute()
{
long start = System.currentTimeMillis();
-
- Map workerAsMap = null;
+ boolean isParallelMode = false;
try
{
@@ -142,24 +143,31 @@
// if the current thread is worker, then store attribues in that.
if (this.workerAttributes != null)
{
- Thread ct = Thread.currentThread();
- if (ct instanceof Map)
+ isParallelMode = (Thread.currentThread() instanceof Worker);
+ if (isParallelMode)
{
- workerAsMap = (Map) ct;
- workerAsMap.putAll(this.workerAttributes);
-
- // Sometimes, the portlet definition of some portlet
entities are replaced.
- // I could not find why it happens.
- // If the portlet definition of portlet entity is not same
as an attribute of worker's, then
- // reset the portlet definition of portlet entity. (by
Woonsan Ko)
- // TODO: Investigate more and find why it happens.
- PortletDefinition portletDefinition =
- (PortletDefinition)
workerAsMap.get(PortalReservedParameters.PORTLET_DEFINITION_ATTRIBUTE);
- PortletWindow window =
- (PortletWindow)
workerAsMap.get(PortalReservedParameters.PORTLET_WINDOW_ATTRIBUTE);
+ Iterator itAttrNames =
this.workerAttributes.keySet().iterator();
+ while (itAttrNames.hasNext())
+ {
+ String name = (String) itAttrNames.next();
+ CurrentWorkerContext.setAttribute(name,
this.workerAttributes.get(name));
+ }
+
+ // The portletEntity stores its portletDefinition into the
ThreadLocal member,
+ // before the worker starts doing a rendering job.
+ // So the thread contexts are different from each other.
+ // Therefore, in parallel mode, we have to clear
threadlocal fragmentPortletDefinition cache
+ // of portletEntity and to replace the portletDefinition
with one of current worker context.
+ // Refer to
org.apache.jetspeed.components.portletentity.PortletEntityImpl class
+
+ PortletWindow window = (PortletWindow)
+
CurrentWorkerContext.getAttribute(PortalReservedParameters.PORTLET_WINDOW_ATTRIBUTE);
+
PortletEntityImpl portletEntityImpl = (PortletEntityImpl)
window.getPortletEntity();
PortletDefinition oldPortletDefinition =
portletEntityImpl.getPortletDefinition();
-
+ PortletDefinition portletDefinition = (PortletDefinition)
+
CurrentWorkerContext.getAttribute(PortalReservedParameters.PORTLET_DEFINITION_ATTRIBUTE);
+
if
(!oldPortletDefinition.getId().equals(portletDefinition.getId())) {
portletEntityImpl.setPortletDefinition(portletDefinition);
}
@@ -189,9 +197,9 @@
}
finally
{
- if (workerAsMap != null)
+ if (isParallelMode)
{
- workerAsMap.clear();
+ CurrentWorkerContext.removeAllAttributes();
}
portletContent.complete();
Modified:
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerImpl.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerImpl.java?view=diff&rev=488559&r1=488558&r2=488559
==============================================================================
---
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerImpl.java
(original)
+++
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerImpl.java
Mon Dec 18 23:04:02 2006
@@ -18,10 +18,6 @@
import java.security.AccessControlContext;
import java.security.PrivilegedAction;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
import javax.security.auth.Subject;
@@ -36,10 +32,11 @@
* When no work is available, the worker simply sets itself in a waiting mode
* pending reactivation by the WorkerMonitor
*
- * @author <a href="mailto:[EMAIL PROTECTED]">Rapha�l Luta</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Raphael Luta</a>
+ * @author <a>Woonsan Ko</a>
* @version $Id$
*/
-public class WorkerImpl extends Thread implements Worker, Map
+public class WorkerImpl extends Thread implements Worker
{
/** Commons logging */
protected final static Log log = LogFactory.getLog(WorkerImpl.class);
@@ -60,9 +57,6 @@
/** Monitor for this Worker */
private WorkerMonitor monitor = null;
- /** Attributes for this Worker **/
- private Map attributes = null;
-
public WorkerImpl(WorkerMonitor monitor)
{
super();
@@ -207,82 +201,5 @@
monitor.release(this);
}
}
-
- // map implementations
-
- public int size()
- {
- return (null == this.attributes ? 0 : this.attributes.size());
- }
-
- public boolean isEmpty()
- {
- return (null == this.attributes ? true : this.attributes.isEmpty());
- }
-
- public boolean containsKey(Object key)
- {
- return (null == this.attributes ? false :
this.attributes.containsKey(key));
- }
-
- public boolean containsValue(Object value)
- {
- return (null == this.attributes ? false :
this.attributes.containsValue(value));
- }
-
- public Object get(Object key)
- {
- return (null == this.attributes ? null : this.attributes.get(key));
- }
-
- public Object put(Object key, Object value)
- {
- if (null == this.attributes) {
- this.attributes = new HashMap();
- }
-
- return this.attributes.put(key, value);
- }
-
- public Object remove(Object key)
- {
- if (null != this.attributes) {
- return this.attributes.remove(key);
- } else {
- return null;
- }
- }
-
- public void putAll(Map t)
- {
- if (null == this.attributes) {
- this.attributes = new HashMap();
- }
-
- this.attributes.putAll(t);
- }
-
- public void clear()
- {
- if (null != this.attributes) {
- this.attributes.clear();
- }
- }
-
- public Set keySet()
- {
- return (null == this.attributes ? null : this.attributes.keySet());
- }
-
- public Collection values()
- {
- return (null == this.attributes ? null : this.attributes.values());
- }
-
- public Set entrySet()
- {
- return (null == this.attributes ? null : this.attributes.entrySet());
- }
-
}
Modified:
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/container/invoker/ServletPortletInvoker.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/container/invoker/ServletPortletInvoker.java?view=diff&rev=488559&r1=488558&r2=488559
==============================================================================
---
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/container/invoker/ServletPortletInvoker.java
(original)
+++
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/container/invoker/ServletPortletInvoker.java
Mon Dec 18 23:04:02 2006
@@ -16,7 +16,6 @@
package org.apache.jetspeed.container.invoker;
import java.io.IOException;
-import java.util.Map;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
@@ -43,6 +42,8 @@
import org.apache.jetspeed.om.common.portlet.MutablePortletApplication;
import org.apache.jetspeed.om.common.portlet.PortletApplication;
import org.apache.jetspeed.request.RequestContext;
+import org.apache.jetspeed.aggregator.Worker;
+import org.apache.jetspeed.aggregator.CurrentWorkerContext;
import org.apache.pluto.om.portlet.PortletDefinition;
import org.apache.pluto.om.servlet.WebApplicationDefinition;
@@ -169,14 +170,13 @@
// So, hide the member variable by the following local variable.
PortletDefinition portletDefinition = null;
- // In case of parallel mode, get portlet definition object from the
worker thread.
+ // In case of parallel mode, get portlet definition object from the
worker thread context.
// Otherwise, refer the member variable.
- Map workerAsMap = null;
- Thread ct = Thread.currentThread();
- if (ct instanceof Map)
+ boolean isParallelMode = (Thread.currentThread() instanceof Worker);
+
+ if (isParallelMode)
{
- workerAsMap = (Map) ct;
- portletDefinition = (PortletDefinition)
workerAsMap.get(PortalReservedParameters.PORTLET_DEFINITION_ATTRIBUTE);
+ portletDefinition = (PortletDefinition)
CurrentWorkerContext.getAttribute(PortalReservedParameters.PORTLET_DEFINITION_ATTRIBUTE);
}
else
{
@@ -231,15 +231,15 @@
servletRequest.setAttribute(ContainerConstants.PORTAL_CONTEXT,
requestContext.getRequest().getContextPath());
// Store same request attributes into the worker in parallel mode.
- if (workerAsMap != null)
+ if (isParallelMode)
{
- workerAsMap.put(ContainerConstants.PORTLET, portletInstance);
- workerAsMap.put(ContainerConstants.PORTLET_CONFIG,
portletInstance.getConfig());
- workerAsMap.put(ContainerConstants.PORTLET_REQUEST,
portletRequest);
- workerAsMap.put(ContainerConstants.PORTLET_RESPONSE,
portletResponse);
- workerAsMap.put(ContainerConstants.METHOD_ID, methodID);
- workerAsMap.put(ContainerConstants.PORTLET_NAME,
app.getName()+"::"+portletDefinition.getName());
- workerAsMap.put(ContainerConstants.PORTAL_CONTEXT,
requestContext.getRequest().getContextPath());
+ CurrentWorkerContext.setAttribute(ContainerConstants.PORTLET,
portletInstance);
+
CurrentWorkerContext.setAttribute(ContainerConstants.PORTLET_CONFIG,
portletInstance.getConfig());
+
CurrentWorkerContext.setAttribute(ContainerConstants.PORTLET_REQUEST,
portletRequest);
+
CurrentWorkerContext.setAttribute(ContainerConstants.PORTLET_RESPONSE,
portletResponse);
+
CurrentWorkerContext.setAttribute(ContainerConstants.METHOD_ID, methodID);
+
CurrentWorkerContext.setAttribute(ContainerConstants.PORTLET_NAME,
app.getName()+"::"+portletDefinition.getName());
+
CurrentWorkerContext.setAttribute(ContainerConstants.PORTAL_CONTEXT,
requestContext.getRequest().getContextPath());
}
PortletRequestContext.createContext(portletDefinition,
portletInstance, portletRequest, portletResponse);
@@ -257,16 +257,16 @@
{
PortletRequestContext.clearContext();
- // In parallel mode, remove attributes of worker.
- if (workerAsMap != null)
+ // In parallel mode, remove all attributes of worker context.
+ if (isParallelMode)
{
- workerAsMap.remove(ContainerConstants.PORTLET);
- workerAsMap.remove(ContainerConstants.PORTLET_CONFIG);
- workerAsMap.remove(ContainerConstants.PORTLET_REQUEST);
- workerAsMap.remove(ContainerConstants.PORTLET_RESPONSE);
- workerAsMap.remove(ContainerConstants.METHOD_ID);
- workerAsMap.remove(ContainerConstants.PORTLET_NAME);
- workerAsMap.remove(ContainerConstants.PORTAL_CONTEXT);
+
CurrentWorkerContext.removeAttribute(ContainerConstants.PORTLET);
+
CurrentWorkerContext.removeAttribute(ContainerConstants.PORTLET_CONFIG);
+
CurrentWorkerContext.removeAttribute(ContainerConstants.PORTLET_REQUEST);
+
CurrentWorkerContext.removeAttribute(ContainerConstants.PORTLET_RESPONSE);
+
CurrentWorkerContext.removeAttribute(ContainerConstants.METHOD_ID);
+
CurrentWorkerContext.removeAttribute(ContainerConstants.PORTLET_NAME);
+
CurrentWorkerContext.removeAttribute(ContainerConstants.PORTAL_CONTEXT);
}
servletRequest.removeAttribute(ContainerConstants.PORTLET);
Modified:
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java?view=diff&rev=488559&r1=488558&r2=488559
==============================================================================
---
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
(original)
+++
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
Mon Dec 18 23:04:02 2006
@@ -42,6 +42,8 @@
import org.apache.jetspeed.container.url.PortalURL;
import org.apache.jetspeed.request.JetspeedRequestContext;
import org.apache.jetspeed.request.RequestContext;
+import org.apache.jetspeed.aggregator.Worker;
+import org.apache.jetspeed.aggregator.CurrentWorkerContext;
import org.apache.pluto.om.common.ObjectID;
import org.apache.pluto.om.entity.PortletApplicationEntity;
import org.apache.pluto.om.entity.PortletEntity;
@@ -213,10 +215,9 @@
Thread ct = Thread.currentThread();
- if (ct instanceof Map)
+ if (ct instanceof Worker)
{
- Map workerAsMap = (Map) ct;
- value = workerAsMap.get(name);
+ value = CurrentWorkerContext.getAttribute(name);
}
// If no attribute found, then look up from the request
@@ -374,17 +375,15 @@
Thread ct = Thread.currentThread();
- if (ct instanceof Map)
+ if (ct instanceof Worker)
{
- Map workerAsMap = (Map) ct;
-
if (null == value)
{
- workerAsMap.remove(name);
+ CurrentWorkerContext.removeAttribute(name);
}
else
{
- workerAsMap.put(name, value);
+ CurrentWorkerContext.setAttribute(name, value);
}
}
Modified:
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/request/JetspeedRequestContextComponent.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/request/JetspeedRequestContextComponent.java?view=diff&rev=488559&r1=488558&r2=488559
==============================================================================
---
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/request/JetspeedRequestContextComponent.java
(original)
+++
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/request/JetspeedRequestContextComponent.java
Mon Dec 18 23:04:02 2006
@@ -16,7 +16,6 @@
package org.apache.jetspeed.request;
import java.lang.reflect.Constructor;
-import java.util.Map;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
@@ -27,6 +26,8 @@
import org.apache.jetspeed.PortalReservedParameters;
import org.apache.jetspeed.userinfo.UserInfoManager;
+import org.apache.jetspeed.aggregator.Worker;
+import org.apache.jetspeed.aggregator.CurrentWorkerContext;
/**
* JetspeedRequestContextComponent
@@ -118,10 +119,9 @@
RequestContext rc = null;
Thread ct = Thread.currentThread();
- if (ct instanceof Map)
+ if (ct instanceof Worker)
{
- Map workerAsMap = (Map) ct;
- rc = (RequestContext)
workerAsMap.get(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
+ rc = (RequestContext)
CurrentWorkerContext.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
}
else
{
Modified:
portals/jetspeed-2/trunk/components/portal/src/test/org/apache/jetspeed/aggregator/TestAggregator.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/test/org/apache/jetspeed/aggregator/TestAggregator.java?view=diff&rev=488559&r1=488558&r2=488559
==============================================================================
---
portals/jetspeed-2/trunk/components/portal/src/test/org/apache/jetspeed/aggregator/TestAggregator.java
(original)
+++
portals/jetspeed-2/trunk/components/portal/src/test/org/apache/jetspeed/aggregator/TestAggregator.java
Mon Dec 18 23:04:02 2006
@@ -16,15 +16,49 @@
package org.apache.jetspeed.aggregator;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.security.Principal;
+import java.security.PrivilegedAction;
+import javax.security.auth.Subject;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
import junit.framework.Test;
import junit.framework.TestSuite;
+import org.apache.jetspeed.PortalReservedParameters;
+import org.apache.jetspeed.Jetspeed;
+import org.apache.jetspeed.profiler.Profiler;
+import org.apache.jetspeed.profiler.ProfileLocator;
+import org.apache.jetspeed.request.RequestContext;
import org.apache.jetspeed.aggregator.impl.ContentServerAdapterImpl;
import org.apache.jetspeed.aggregator.impl.PageAggregatorImpl;
+import org.apache.jetspeed.aggregator.impl.AsyncPageAggregatorImpl;
import org.apache.jetspeed.aggregator.impl.PortletAggregatorImpl;
import org.apache.jetspeed.headerresource.HeaderResourceFactory;
import org.apache.jetspeed.headerresource.impl.HeaderResourceFactoryImpl;
+import org.apache.jetspeed.engine.Engine;
+import org.apache.jetspeed.om.folder.Folder;
+import org.apache.jetspeed.om.page.ContentPage;
+import org.apache.jetspeed.om.page.Fragment;
+import org.apache.jetspeed.om.page.Page;
+import org.apache.jetspeed.om.page.ContentPageImpl;
+import org.apache.jetspeed.om.page.psml.PageImpl;
+import org.apache.jetspeed.page.PageManager;
+import org.apache.jetspeed.security.SecurityHelper;
+import org.apache.jetspeed.security.impl.UserPrincipalImpl;
+import org.apache.jetspeed.testhelpers.SpringEngineHelper;
+import org.apache.jetspeed.mockobjects.request.MockRequestContext;
+import org.apache.jetspeed.capabilities.Capabilities;
+import org.apache.jetspeed.capabilities.CapabilityMap;
+import org.apache.jetspeed.request.JetspeedRequestContext;
+import org.apache.jetspeed.container.state.NavigationalStateComponent;
+
+import com.mockrunner.mock.web.MockServletConfig;
+import com.mockrunner.mock.web.MockServletContext;
+import com.mockrunner.mock.web.MockHttpServletRequest;
+import com.mockrunner.mock.web.MockHttpServletResponse;
+import com.mockrunner.mock.web.MockHttpSession;
/**
* <P>Test the aggregation service</P>
@@ -35,9 +69,15 @@
*/
public class TestAggregator extends TestRenderer
{
+ private SpringEngineHelper engineHelper;
+ private Engine engine;
private PortletAggregator portletAggregator;
private PageAggregator pageAggregator;
-
+ private PageAggregator asyncPageAggregator;
+ private Profiler profiler;
+ private Capabilities capabilities;
+ private NavigationalStateComponent navComponent;
+
/**
* Start the tests.
*
@@ -52,6 +92,11 @@
{
super.setUp();
+ HashMap context = new HashMap();
+ engineHelper = new SpringEngineHelper(context);
+ engineHelper.setUp();
+ engine = (Engine) context.get(SpringEngineHelper.ENGINE_ATTR);
+
ArrayList paths = new ArrayList(4);
paths.add("portlet/{mediaType}/jetspeed");
paths.add("portlet/{mediaType}");
@@ -61,9 +106,18 @@
HeaderResourceFactory headerFactory = new HeaderResourceFactoryImpl();
ContentServerAdapter contentServer = new
ContentServerAdapterImpl(headerFactory, paths);
- pageAggregator = new PageAggregatorImpl(renderer, contentServer);
- portletAggregator = new PortletAggregatorImpl(renderer);
+ //pageAggregator = new PageAggregatorImpl(renderer, contentServer);
+ //asyncPageAggregator = new AsyncPageAggregatorImpl(renderer,
contentServer);
+ //portletAggregator = new PortletAggregatorImpl(renderer);
+ pageAggregator = (PageAggregator)
engine.getComponentManager().getComponent(PageAggregator.class);
+ asyncPageAggregator =
+ (PageAggregator)
engine.getComponentManager().getComponent("org.apache.jetspeed.aggregator.AsyncPageAggregator");
+ portletAggregator = (PortletAggregator)
engine.getComponentManager().getComponent(PortletAggregator.class);
+ profiler = (Profiler)
engine.getComponentManager().getComponent(Profiler.class);
+ capabilities = (Capabilities)
engine.getComponentManager().getComponent(Capabilities.class);
+ navComponent =
+ (NavigationalStateComponent)
engine.getComponentManager().getComponent(NavigationalStateComponent.class);
}
public static Test suite()
@@ -74,18 +128,94 @@
public void testBasic() throws Exception
{
+ doAggregation(false);
+ }
+
+ public void testParallelMode() throws Exception
+ {
+ doAggregation(true);
+ }
+
+ protected void tearDown() throws Exception
+ {
+ engineHelper.tearDown();
+ super.tearDown();
+ }
+
+ private void doAggregation(final boolean isParallelMode) throws Exception
+ {
assertNotNull("portlet aggregator is null", portletAggregator);
assertNotNull("page aggregator is null", pageAggregator);
- /*
- Profiler profiler =
(Profiler)Jetspeed.getComponentManager().getComponent(Profiler.class);
+ assertNotNull("async page aggregator is null", asyncPageAggregator);
+ assertNotNull("profiler is null", profiler);
+ assertNotNull("capabilities is null", capabilities);
+ assertNotNull("navigational state component is null", navComponent);
+
+ final RequestContext requestContext = initRequestContext();
+ final Subject subject = SecurityHelper.createSubject("user");
+
requestContext.getRequest().getSession().setAttribute(PortalReservedParameters.SESSION_KEY_SUBJECT,
subject);
+ requestContext.setSubject(subject);
+
+ ProfileLocator locator = profiler.createLocator(requestContext);
+ HashMap locators = new HashMap();
+ locators.put(ProfileLocator.PAGE_LOCATOR, locator);
+ requestContext.setProfileLocators(locators);
+
+
requestContext.setCapabilityMap(capabilities.getCapabilityMap("Mozilla/5"));
+
requestContext.setPortalURL(navComponent.createURL(requestContext.getRequest(),
requestContext.getCharacterEncoding()));
+
+ Exception ex = (Exception) Subject.doAsPrivileged(subject, new
PrivilegedAction()
+ {
+ public Object run()
+ {
+ try {
+ PageManager pageManager =
+ (PageManager)
engine.getComponentManager().getComponent(PageManager.class);
+ Page page = pageManager.getPage("/default-page.psml");
+ assertNotNull(page);
+ requestContext.setPage(new ContentPageImpl(page));
+
+ if (!isParallelMode) {
+ pageAggregator.build(requestContext);
+ } else {
+ asyncPageAggregator.build(requestContext);
+ }
+ } catch (Exception e) {
+ return e;
+ }
+ return null;
+ }
+ }, null);
+
+ if (ex != null)
+ throw ex;
+ }
+
+ private RequestContext initRequestContext()
+ {
+ ServletConfig config = engine.getServletConfig();
+ ServletContext context = config.getServletContext();
+ MockHttpSession session = new MockHttpSession();
+ session.setupServletContext(context);
+ assertEquals(context, session.getServletContext());
+
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ MockHttpServletResponse response = new MockHttpServletResponse();
+
+ request.setSession(session);
+
+ Principal p = new UserPrincipalImpl("user");
+ request.setUserPrincipal(p);
- RequestContext request = RequestContextFactory.getInstance(null, null,
null);
+ request.setScheme("http");
+ request.setContextPath("/jetspeed");
+ request.setServletPath("/portal/default-page.psml");
+ request.setMethod("GET");
- ProfileLocator locator = profiler.getProfile(request);
- request.setProfileLocator(locator);
+ RequestContext rc =
+ new JetspeedRequestContext(request, response, config, null);
- pageAggregator.build(request);
- */
+ return rc;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]