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]

Reply via email to