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]