taylor      2004/05/12 11:46:53

  Modified:    portal/src/java/org/apache/jetspeed/aggregator/impl
                        ContentDispatcherImpl.java PageAggregatorImpl.java
               portal/src/java/org/apache/jetspeed/aggregator
                        ContentDispatcher.java
  Log:
  implemented a sequential strategy in PageAggregator

  Parallel fails on Tomcat 5 due to bug JS2-17

  

  http://nagoya.apache.org/jira/browse/JS2-17

  

  J2 is now running on Tomcat 5, if you set your aggregation strategy to sequential

  I made sequential the default aggregation strategy until we can clear up JS2-17 and 
run parallel correctly

  

  This closes bug JS2-6

  

  http://nagoya.apache.org/jira/browse/JS2-6

  

  PR:

  Obtained from:

  Submitted by: 

  Reviewed by:  

  CVS: ----------------------------------------------------------------------

  CVS: PR:

  CVS:   If this change addresses a PR in the problem report tracking

  CVS:   database, then enter the PR number(s) here.

  CVS: Obtained from:

  CVS:   If this change has been taken from another system, such as NCSA,

  CVS:   then name the system in this line, otherwise delete it.

  CVS: Submitted by:

  CVS:   If this code has been contributed to Apache by someone else; i.e.,

  CVS:   they sent us a patch or a new module, then include their name/email

  CVS:   address here. If this is your work then delete this line.

  CVS: Reviewed by:

  CVS:   If we are doing pre-commit code reviews and someone else has

  CVS:   reviewed your changes, include their name(s) here.

  CVS:   If you have not had it reviewed then delete this line.

  
  Revision  Changes    Path
  1.5       +43 -1     
jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/ContentDispatcherImpl.java
  
  Index: ContentDispatcherImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/ContentDispatcherImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ContentDispatcherImpl.java        17 Mar 2004 22:19:53 -0000      1.4
  +++ ContentDispatcherImpl.java        12 May 2004 18:46:53 -0000      1.5
  @@ -342,4 +342,46 @@
               this.complete = state;
           }
       }
  +    
  +    /* 
  +     * Sequentially wait on content generation
  +     * @see 
org.apache.jetspeed.aggregator.ContentDispatcher#sync(org.apache.jetspeed.om.page.Fragment)
  +     */
  +    public void sync(Fragment fragment)
  +    {
  +        ObjectID oid = JetspeedObjectID.createFromString(fragment.getId());
  +
  +        PortletContent content = (PortletContent)contents.get(oid);
  +        
  +        synchronized (content)
  +        {
  +            if (!content.isComplete())
  +            {
  +                if ((debugLevel > 0) && log.isDebugEnabled())
  +                {
  +                    log.debug("Waiting for content OID "+oid);
  +                }
  +
  +                try
  +                {
  +                    content.wait();
  +                }
  +                catch (InterruptedException e)
  +                {
  +                }
  +
  +                if ((debugLevel > 0) && log.isDebugEnabled())
  +                {
  +                    log.debug("Been notified that OID "+oid+" is complete");
  +                }
  +            }
  +
  +            if ((debugLevel > 1) && log.isDebugEnabled())
  +            {
  +                log.debug("Content OID "+oid+": "+content.toString());
  +            }
  +        }
  +        
  +    }
  +    
   }
  
  
  
  1.6       +50 -62    
jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/PageAggregatorImpl.java
  
  Index: PageAggregatorImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/PageAggregatorImpl.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- PageAggregatorImpl.java   8 May 2004 02:14:03 -0000       1.5
  +++ PageAggregatorImpl.java   12 May 2004 18:46:53 -0000      1.6
  @@ -156,72 +156,74 @@
                   return;
               }
               
  -            if (strategy == STRATEGY_PARALLEL)
  +            // initializes the rendering stack with root children
  +            // root fragement is always treated synchronously
  +            for (Iterator i = currentFragment.getFragments().iterator(); 
i.hasNext();)
               {
  -                // initializes the rendering stack with root children
  -                // root fragement is always treated synchronously
  -                for (Iterator i = currentFragment.getFragments().iterator(); 
i.hasNext();)
  -                {
  -                    Fragment f = (Fragment) i.next();
  +                Fragment f = (Fragment) i.next();
   
  -                    if (!"hidden".equals(f.getState()))
  -                    {
  -                        stack.push(f);
  -                    }
  +                if (!"hidden".equals(f.getState()))
  +                {
  +                    stack.push(f);
                   }
  +            }
   
  -                // Walk through the Fragment tree, and start rendering "portlet" 
type
  -                // fragment
  -                while (!stack.isEmpty())
  -                {
  -                    currentFragment = (Fragment) stack.pop();
  +            // Walk through the Fragment tree, and start rendering "portlet" type
  +            // fragment
  +            while (!stack.isEmpty())
  +            {
  +                currentFragment = (Fragment) stack.pop();
   
  -                    if (checkAccess(context, ((currentFragment.getAcl() != null) ? 
currentFragment.getAcl() : acl), "render"))
  +                if (checkAccess(context, ((currentFragment.getAcl() != null) ? 
currentFragment.getAcl() : acl), "render"))
  +                {
  +                    if (currentFragment.getType().equals("portlet"))
                       {
  -                        if (currentFragment.getType().equals("portlet"))
  +                        // make the page aggreator less fragile
  +                        // by preventing failed rendering from screwing up the
  +                        // whole process
  +                        try
                           {
  -                            // make the page aggreator less fragile
  -                            // by preventing failed rendering from screwing up the
  -                            // whole process
  -                            try
  +                            if (log.isDebugEnabled())
                               {
  -                                if (log.isDebugEnabled())
  -                                {
  -                                    log.debug(
  -                                        "Rendering portlet fragment: [[name, "
  -                                            + currentFragment.getName()
  -                                            + "], [id, "
  -                                            + currentFragment.getId()
  -                                            + "]]");
  -                                }
  -                                // TODO This is where we add User Info.
  -                                RequestContext portletContext = context;
  -                                renderer.render(currentFragment, portletContext);
  +                                log.debug(
  +                                    "Rendering portlet fragment: [[name, "
  +                                        + currentFragment.getName()
  +                                        + "], [id, "
  +                                        + currentFragment.getId()
  +                                        + "]]");
                               }
  -                            catch (Exception e)
  +                            // TODO This is where we add User Info.
  +                            RequestContext portletContext = context;
  +                            renderer.render(currentFragment, portletContext);
  +                            if (strategy == STRATEGY_SEQUENTIAL)
                               {
  -                                log.error("Failed to render portlet \"" + 
currentFragment + "\": " + e.toString());
  +                                ContentDispatcher dispatcher = 
renderer.getDispatcher(context, false);
  +                                dispatcher.sync(currentFragment);
                               }
                           }
  -
  -                        // push the children frgaments on the rendering stack
  -                        for (Iterator i = 
currentFragment.getFragments().iterator(); i.hasNext();)
  +                        catch (Exception e)
                           {
  -                            Fragment f = (Fragment) i.next();
  -
  -                            if (!"hidden".equals(f.getState()))
  -                            {
  -                                stack.push(f);
  -                            }
  +                            log.error("Failed to render portlet \"" + 
currentFragment + "\": " + e.toString());
                           }
                       }
  -                    else
  +
  +                    // push the children frgaments on the rendering stack
  +                    for (Iterator i = currentFragment.getFragments().iterator(); 
i.hasNext();)
                       {
  -                        log.warn("Access denied RENDER fragment " + 
currentFragment);
  +                        Fragment f = (Fragment) i.next();
  +
  +                        if (!"hidden".equals(f.getState()))
  +                        {
  +                            stack.push(f);
  +                        }
                       }
                   }
  +                else
  +                {
  +                    log.warn("Access denied RENDER fragment " + currentFragment);
  +                }
               }
  -
  +            
               // Retrieves the content dispatcher appropriate for sequential
               // or parallel rendering
   
  @@ -229,20 +231,6 @@
   
               // Now synchronously trigger the rendering of the whole page
               renderer.renderNow(page.getRootFragment(), context);
  -
  -            // DEBUG Testing: Use ContentDispatcher to display all children
  -            // of root fragment
  -            /*
  -                        for(Iterator i = 
page.getRootFragment().getFragments().iterator(); i.hasNext();)
  -                        {
  -                            Fragment fragment = (Fragment)i.next();
  -            
  -                            if (!"hidden".equals(fragment.getState()))
  -                            {
  -                                dispatcher.include(fragment, context.getRequest(), 
context.getResponse());
  -                            }
  -                        }
  -            */
           }
           else
           {
  
  
  
  1.6       +8 -1      
jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/ContentDispatcher.java
  
  Index: ContentDispatcher.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/ContentDispatcher.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ContentDispatcher.java    25 Mar 2004 21:39:22 -0000      1.5
  +++ ContentDispatcher.java    12 May 2004 18:46:53 -0000      1.6
  @@ -45,4 +45,11 @@
        */
       public void include(Fragment fragment, javax.portlet.RenderRequest req, 
javax.portlet.RenderResponse rsp);
       
  +    /**
  +     * Sequentially wait on content generation for the given fragment.
  +     * 
  +     * @param fragment
  +     */
  +    public void sync(Fragment fragment);
  +    
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to