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 ta...@apache.org on 2005/09/08 01:44:10 UTC

svn commit: r279462 - /portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/

Author: taylor
Date: Wed Sep  7 16:44:03 2005
New Revision: 279462

URL: http://svn.apache.org/viewcvs?rev=279462&view=rev
Log:
http://issues.apache.org/jira/browse/JS2-360 - Springize Aggregation

refactored spring assembly of aggregation components
made work manager a component, with configurable workers parameters
made the header resource factory a component
dependency injected new components associations into render and aggregator
abstracted out content manager coupling from aggregator via an adapter (JS2-24)

started on a new 'experimental' aggregator: AsyncPageAggregatorImpl
This aggregator is under development and will be changing over the next week quite a bit
It is NOT hooked into the pipeline




Added:
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJobImpl.java
      - copied, changed from r264709, portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJob.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerImpl.java
      - copied, changed from r264709, portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/Worker.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitorImpl.java
      - copied, changed from r264709, portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitor.java
Removed:
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJob.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/Worker.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitor.java
Modified:
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/PageAggregatorImpl.java
    portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/PortletRendererImpl.java

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/PageAggregatorImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/PageAggregatorImpl.java?rev=279462&r1=279461&r2=279462&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/PageAggregatorImpl.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/PageAggregatorImpl.java Wed Sep  7 16:44:03 2005
@@ -16,23 +16,18 @@
 package org.apache.jetspeed.aggregator.impl;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.jetspeed.Jetspeed;
 import org.apache.jetspeed.PortalReservedParameters;
 import org.apache.jetspeed.aggregator.ContentDispatcher;
+import org.apache.jetspeed.aggregator.ContentServerAdapter;
 import org.apache.jetspeed.aggregator.FailedToRenderFragmentException;
 import org.apache.jetspeed.aggregator.PageAggregator;
 import org.apache.jetspeed.aggregator.PortletRenderer;
 import org.apache.jetspeed.container.state.NavigationalState;
-import org.apache.jetspeed.contentserver.ContentFilter;
 import org.apache.jetspeed.exception.JetspeedException;
-import org.apache.jetspeed.headerresource.HeaderResource;
-import org.apache.jetspeed.headerresource.HeaderResourceFactory;
 import org.apache.jetspeed.om.page.ContentFragment;
 import org.apache.jetspeed.om.page.ContentPage;
 import org.apache.jetspeed.request.RequestContext;
@@ -54,19 +49,19 @@
 
     private int strategy = STRATEGY_SEQUENTIAL;
     private PortletRenderer renderer;
+    private ContentServerAdapter contentServer;
 
-    private List fallBackContentPathes;
 
-    public PageAggregatorImpl( PortletRenderer renderer, int strategy, List fallBackContentPathes )
+    public PageAggregatorImpl( PortletRenderer renderer, int strategy, ContentServerAdapter contentServer)
     {
         this.renderer = renderer;
         this.strategy = strategy;
-        this.fallBackContentPathes = fallBackContentPathes;
+        this.contentServer = contentServer;
     }
 
-    public PageAggregatorImpl( PortletRenderer renderer, List fallBackContentPathes )
+    public PageAggregatorImpl( PortletRenderer renderer, ContentServerAdapter contentServer)
     {
-        this(renderer, STRATEGY_SEQUENTIAL, fallBackContentPathes);
+        this(renderer, STRATEGY_SEQUENTIAL, contentServer);
     }
 
     /**
@@ -95,52 +90,7 @@
             layoutDecorator = page.getDefaultDecorator(root.getType());
         }
 
-        String defaultPortletDecorator = page.getDefaultDecorator(ContentFragment.PORTLET);
-
-        ///////////////////////////////////////////////////////////////////////////////////////////////
-        //TODO: Remove hard coding of locations and use CM + TL
-        //      DST: Im going to encapsulate this into a class, which can be accessed
-        // by
-        //           the PowerTool when aggregating content, and make sure to modify the
-        // search path
-        //           according to the current decorator. Assigned issue to JiRa JS2-24
-        List contentPathes = (List) context.getSessionAttribute(ContentFilter.SESSION_CONTENT_PATH_ATTR);
-
-        if (contentPathes == null)
-        {
-            contentPathes = new ArrayList(2);
-            context.setSessionAttribute(ContentFilter.SESSION_CONTENT_PATH_ATTR, contentPathes);
-        }
-        String mediaType = context.getCapabilityMap().getPreferredMediaType().getName();
-        if (contentPathes.size() < 1)
-        {
-            // define the lookup order
-
-            contentPathes.add(root.getType() + "/" + mediaType + "/" + layoutDecorator);
-            // Start added by jamesliao, 27-05-2005
-            contentPathes.add(ContentFragment.PORTLET + "/" + mediaType + "/" + defaultPortletDecorator);
-            // End
-            
-            Iterator defaults = fallBackContentPathes.iterator();
-            while (defaults.hasNext())
-            {
-                String path = (String) defaults.next();
-                contentPathes.add(path.replaceAll("\\{mediaType\\}", mediaType));
-            }
-
-        }
-        else
-        {
-            contentPathes.set(0, root.getType() + "/" + mediaType + "/" + layoutDecorator);
-            // Start added by jamesliao, 27-05-2005, override the previous portlet-decorator
-            contentPathes.set(1, ContentFragment.PORTLET + "/" + mediaType + "/" + defaultPortletDecorator);
-            // End
-        }
-
-        if (layoutDecorator != null)
-        {
-            addStyle(context, layoutDecorator, ContentFragment.LAYOUT);
-        }
+        contentServer.prepareContentPaths(context, page);
 
         ///////////////////////////////////////////////////////////////////////////////////////////////
         ContentDispatcher dispatcher = renderer.getDispatcher(context, (strategy == STRATEGY_PARALLEL));
@@ -193,13 +143,13 @@
             if (maxedContentFragment.getDecorator() != null)
             {
                 log.debug("decorator=" + layoutContentFragment.getDecorator());
-                addStyle(context, maxedContentFragment.getDecorator(), ContentFragment.PORTLET);
+                contentServer.addStyle(context, maxedContentFragment.getDecorator(), ContentFragment.PORTLET);
             }
             else
             {
                 log.debug("no decorator for defined for portlet fragement," + layoutContentFragment.getId()
                         + ".  So using page default, " + defaultPortletDecorator);
-                addStyle(context, defaultPortletDecorator, ContentFragment.PORTLET);
+                contentServer.addStyle(context, defaultPortletDecorator, ContentFragment.PORTLET);
             }
             try
             {
@@ -217,21 +167,6 @@
         }
     }
 
-    private void addStyle( RequestContext context, String decoratorName, String decoratorType )
-    {
-        HeaderResourceFactory headerResourceFactory=(HeaderResourceFactory)Jetspeed.getComponentManager().getComponent(HeaderResourceFactory.class);
-        HeaderResource headerResource=headerResourceFactory.getHeaderResouce(context);
-
-        if (decoratorType.equals(ContentFragment.LAYOUT))
-        {
-            headerResource.addStyleSheet("content/css/styles.css");
-        }
-        else
-        {
-            headerResource.addStyleSheet("content/" + decoratorName + "/css/styles.css");
-        }
-    }
-
     protected void aggregateAndRender( ContentFragment f, RequestContext context, ContentPage page )
             throws FailedToRenderFragmentException
     {
@@ -271,13 +206,13 @@
         if (f.getDecorator() != null && f.getType().equals(ContentFragment.PORTLET))
         {
             log.debug("decorator=" + f.getDecorator());
-            addStyle(context, f.getDecorator(), ContentFragment.PORTLET);
+            contentServer.addStyle(context, f.getDecorator(), ContentFragment.PORTLET);
         }
         else if (f.getDecorator() == null && f.getType().equals(ContentFragment.PORTLET))
         {
             log.debug("no decorator for defined for portlet fragement," + f.getId() + ".  So using page default, "
                     + defaultPortletDecorator);
-            addStyle(context, defaultPortletDecorator, ContentFragment.PORTLET);
+            contentServer.addStyle(context, defaultPortletDecorator, ContentFragment.PORTLET);
         }
     }
 }

Modified: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/PortletRendererImpl.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/PortletRendererImpl.java?rev=279462&r1=279461&r2=279462&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/PortletRendererImpl.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/PortletRendererImpl.java Wed Sep  7 16:44:03 2005
@@ -26,7 +26,9 @@
 import org.apache.jetspeed.aggregator.FailedToRenderFragmentException;
 import org.apache.jetspeed.aggregator.PortletContent;
 import org.apache.jetspeed.aggregator.PortletRenderer;
+import org.apache.jetspeed.aggregator.RenderingJob;
 import org.apache.jetspeed.aggregator.UnknownPortletDefinitionException;
+import org.apache.jetspeed.aggregator.WorkerMonitor;
 import org.apache.jetspeed.components.portletentity.PortletEntityNotStoredException;
 import org.apache.jetspeed.container.window.FailedToRetrievePortletWindow;
 import org.apache.jetspeed.container.window.PortletWindowAccessor;
@@ -53,21 +55,22 @@
 {
     protected final static Log log = LogFactory.getLog(PortletRendererImpl.class);
 
-    private WorkerMonitor monitor;
-
+    private WorkerMonitor workMonitor;
     private PortletContainer container;
     private PortletWindowAccessor windowAccessor;
 
-    public PortletRendererImpl( PortletContainer container, PortletWindowAccessor windowAccessor )
+    public PortletRendererImpl(PortletContainer container, 
+                               PortletWindowAccessor windowAccessor,
+                               WorkerMonitor workMonitor)
     {
         this.container = container;
         this.windowAccessor = windowAccessor;
+        this.workMonitor = workMonitor;
     }
 
     public void start()
     {
-        this.monitor = new WorkerMonitor();
-        this.monitor.init();
+        // workMonitor.start();
     }
 
     public void stop()
@@ -167,7 +170,7 @@
             servletRequest = requestContext.getRequestForWindow(portletWindow);
             servletResponse = dispatcherCtrl.getResponseForWindow(portletWindow, requestContext);
             RenderingJob rJob = buildRenderingJob(fragment, servletRequest, servletResponse, requestContext);
-            monitor.process(rJob);            
+            workMonitor.process(rJob);            
         }
         catch (Exception e1)
         {
@@ -241,7 +244,7 @@
         
         PortletContent portletContent = dispatcher.getPortletContent(fragment);
         fragment.setPortletContent(portletContent);
-        return new RenderingJob(container, portletContent, fragment, request, response, requestContext, portletWindow);
+        return new RenderingJobImpl(container, portletContent, fragment, request, response, requestContext, portletWindow);
 
     }
 }

Copied: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJobImpl.java (from r264709, portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJob.java)
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJobImpl.java?p2=portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJobImpl.java&p1=portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJob.java&r1=264709&r2=279462&rev=279462&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJob.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJobImpl.java Wed Sep  7 16:44:03 2005
@@ -23,6 +23,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.jetspeed.PortalReservedParameters;
 import org.apache.jetspeed.aggregator.PortletContent;
+import org.apache.jetspeed.aggregator.RenderingJob;
 import org.apache.jetspeed.om.page.ContentFragment;
 import org.apache.jetspeed.request.RequestContext;
 import org.apache.pluto.PortletContainer;
@@ -36,10 +37,10 @@
  * @author <a href="mailto:raphael@apache.org">Rapha�l Luta</a>
  * @version $Id$
  */
-public class RenderingJob implements Runnable
+public class RenderingJobImpl implements RenderingJob
 {
     /** Commons logging */
-    protected final static Log log = LogFactory.getLog(RenderingJob.class);
+    protected final static Log log = LogFactory.getLog(RenderingJobImpl.class);
 
     /** WorkerMonitor used to flush the queue */
     private PortletWindow window = null;
@@ -52,7 +53,7 @@
 
     private PortletContent portletContent;
     
-    public RenderingJob(PortletContainer container, PortletContent portletContent, ContentFragment fragment, HttpServletRequest request, HttpServletResponse response, RequestContext requestContext, PortletWindow window)
+    public RenderingJobImpl(PortletContainer container, PortletContent portletContent, ContentFragment fragment, HttpServletRequest request, HttpServletResponse response, RequestContext requestContext, PortletWindow window)
     {
         this.container = container;
         
@@ -95,7 +96,7 @@
      *
      * 
      */
-    protected void execute()
+    public void execute()
     {
         
         try

Copied: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerImpl.java (from r264709, portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/Worker.java)
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerImpl.java?p2=portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerImpl.java&p1=portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/Worker.java&r1=264709&r2=279462&rev=279462&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/Worker.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerImpl.java Wed Sep  7 16:44:03 2005
@@ -23,6 +23,9 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.aggregator.RenderingJob;
+import org.apache.jetspeed.aggregator.Worker;
+import org.apache.jetspeed.aggregator.WorkerMonitor;
 
 /**
  * Worker thread processes jobs and notify its WorkerMonitor when completed.
@@ -32,10 +35,10 @@
  * @author <a href="mailto:raphael@apache.org">Rapha�l Luta</a>
  * @version $Id$
  */
-public class Worker extends Thread
+public class WorkerImpl extends Thread implements Worker
 {
     /** Commons logging */
-    protected final static Log log = LogFactory.getLog(Worker.class);
+    protected final static Log log = LogFactory.getLog(WorkerImpl.class);
 
     /** Running status of this worker */
     private boolean running = true;
@@ -53,14 +56,14 @@
     /** Monitor for this Worker */
     private WorkerMonitor monitor = null;
 
-    public Worker(WorkerMonitor monitor)
+    public WorkerImpl(WorkerMonitor monitor)
     {
         super();
         this.setMonitor(monitor);
         this.setDaemon(true);
     }
 
-    public Worker(WorkerMonitor monitor, ThreadGroup tg, String name)
+    public WorkerImpl(WorkerMonitor monitor, ThreadGroup tg, String name)
     {
         super(tg, name);
         this.setMonitor(monitor);
@@ -168,7 +171,7 @@
                             {
                                 try 
                                 {
-                                    Worker.this.job.run();
+                                    WorkerImpl.this.job.run();
                                 }
                                 catch (Throwable t)
                                 {                        

Copied: portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitorImpl.java (from r264709, portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitor.java)
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitorImpl.java?p2=portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitorImpl.java&p1=portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitor.java&r1=264709&r2=279462&rev=279462&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitor.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/aggregator/impl/WorkerMonitorImpl.java Wed Sep  7 16:44:03 2005
@@ -22,6 +22,9 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.jetspeed.aggregator.RenderingJob;
+import org.apache.jetspeed.aggregator.Worker;
+import org.apache.jetspeed.aggregator.WorkerMonitor;
 import org.apache.jetspeed.util.Queue;
 import org.apache.jetspeed.util.FIFOQueue;
 
@@ -33,12 +36,21 @@
  * which is flushed periodically by a QueueMonitor.
  *
  * @author <a href="mailto:raphael@apache.org">Rapha\u00ebl Luta</a>
+ * @author <a href="mailto:taylor@apache.org">David Sean Taylor </a>
  * @version $Id$
  */
-public class WorkerMonitor
+public class WorkerMonitorImpl implements WorkerMonitor
 {
+    public WorkerMonitorImpl(int minWorkers, int maxWorkers, int spareWorkers, int maxJobsPerWorker)
+    {
+        this.minWorkers = minWorkers;
+        this.maxWorkers = maxWorkers;
+        this.spareWorkers = spareWorkers;
+        this.maxJobsPerWorker = maxJobsPerWorker;
+    }
+    
     /** Commons logging */
-    protected final static Log log = LogFactory.getLog(WorkerMonitor.class);
+    protected final static Log log = LogFactory.getLog(WorkerMonitorImpl.class);
 
     /** Static counters for identifying workers */
     private static long sCount = 0;
@@ -64,12 +76,16 @@
     /** Job queue */
     private Queue queue;
 
-    public void init()
+    public void start()
     {
         addWorkers(this.minWorkers);
         setQueue(new FIFOQueue());
     }
 
+    public void stop()
+    {        
+    }
+    
     public void setQueue(Queue queue)
     {
         this.queue = queue;
@@ -96,7 +112,7 @@
 
             for (int i = 0; i < wCount; ++i)
             {
-                Worker worker = new Worker(this, this.tg, "WORKER_" + (++sCount));
+                Worker worker = new WorkerImpl(this, this.tg, "WORKER_" + (++sCount));
                 worker.start();
                 workers.push(worker);
             }



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