weaver 2005/01/11 12:02:01
Modified: portal/src/java/org/apache/jetspeed/aggregator/impl
RenderingJob.java PortletAggregatorImpl.java
ContentDispatcherImpl.java PortletRendererImpl.java
PageAggregatorImpl.java
Added: portal/src/java/org/apache/jetspeed/aggregator/impl
PortletContentImpl.java
Log:
Moved ContentDispatcher functionallity into FragmentImpl and RenderingJob.
Split PortletContent into a top level interface and implementation.
Revision Changes Path
1.7 +19 -30
jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJob.java
Index: RenderingJob.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/RenderingJob.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- RenderingJob.java 4 Jan 2005 16:05:44 -0000 1.6
+++ RenderingJob.java 11 Jan 2005 20:02:00 -0000 1.7
@@ -16,8 +16,6 @@
package org.apache.jetspeed.aggregator.impl;
-import java.io.IOException;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -26,7 +24,7 @@
import org.apache.jetspeed.PortalReservedParameters;
import org.apache.jetspeed.aggregator.ContentDispatcher;
import org.apache.jetspeed.aggregator.ContentDispatcherCtrl;
-import org.apache.jetspeed.aggregator.UnrenderedContentException;
+import org.apache.jetspeed.aggregator.PortletContent;
import org.apache.jetspeed.om.page.Fragment;
import org.apache.jetspeed.request.RequestContext;
import org.apache.pluto.PortletContainer;
@@ -54,6 +52,8 @@
private PortletContainer container = null;
private Fragment fragment = null;
private RequestContext requestContext = null;
+
+ private PortletContent portletContent;
public RenderingJob(PortletContainer container, ContentDispatcher
dispatcher, Fragment fragment, HttpServletRequest request, HttpServletResponse
response, RequestContext requestContext, PortletWindow window)
{
@@ -76,17 +76,16 @@
{
try
{
- execute();
- dispatcher.include(fragment);
- }
- catch (UnrenderedContentException e)
- {
- log.error("Failed to include fragment: "+e.toString(), e);
+ execute();
}
finally
{
- log.debug("Notifying dispatcher OID "+this.window.getId());
- dispatcherCtrl.notify(this.window.getId());
+
+ synchronized (portletContent)
+ {
+ log.debug("Notifying completion of rendering job for fragment
" + fragment.getId());
+ portletContent.notifyAll();
+ }
}
}
@@ -99,6 +98,7 @@
*/
protected void execute()
{
+ portletContent = dispatcher.getPortletContent(fragment);
try
{
log.debug("Rendering OID "+this.window.getId()+" "+ this.request
+" "+this.response);
@@ -106,32 +106,21 @@
this.request.setAttribute(PortalReservedParameters.PAGE_ATTRIBUTE,
requestContext.getPage());
this.request.setAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE,
requestContext);
this.request.setAttribute(PortalReservedParameters.CONTENT_DISPATCHER_ATTRIBUTE,dispatcher);
- container.renderPortlet(this.window, this.request,
this.response);
+ container.renderPortlet(this.window, this.request,
this.response);
+ this.response.flushBuffer();
+ fragment.setPortletContent(portletContent);
}
catch (Throwable t)
{
- // this will happen is request is prematurely aborted
+ // this will happen is request is prematurely aborted
log.error("Error rendering portlet OID " + this.window.getId(),
t);
- try
- {
-
t.printStackTrace(dispatcherCtrl.getResponseForWindow(this.window,
this.requestContext).getWriter());
- }
- catch (IOException e)
- {
- // not important
- }
+ fragment.overrideRenderedContent("Error rendering portlet
fragment: "+fragment.getId());
}
finally
{
- try
- {
- this.response.flushBuffer();
- }
- catch (Exception e)
- {
- log.error("Error flushing response buffer: "+e.toString(),
e);
- }
+ portletContent.complete();
}
+
}
/**
1.9 +3 -11
jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/PortletAggregatorImpl.java
Index: PortletAggregatorImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/PortletAggregatorImpl.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- PortletAggregatorImpl.java 4 Jan 2005 16:05:44 -0000 1.8
+++ PortletAggregatorImpl.java 11 Jan 2005 20:02:00 -0000 1.9
@@ -71,18 +71,10 @@
log.debug("No sepecific decorator portlet so using page default:
"+decorator);
}
-// {
-// log.debug("decorator=" + fragment.getDecorator());
-// addStyle(context, fragment.getDecorator(), "portlet");
-// }
-// else
-// {
-// log.debug("no decorator for portlet:" + fragment.getId());
-// }
-
+
ContentDispatcher dispatcher = renderer.getDispatcher(context,
false);
renderer.renderNow(fragment, context);
- dispatcher.include(fragment);
+ // dispatcher.include(fragment);
context.getResponse().getWriter().write(fragment.getRenderedContent());
}
1.9 +34 -195
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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- ContentDispatcherImpl.java 4 Jan 2005 16:05:44 -0000 1.8
+++ ContentDispatcherImpl.java 11 Jan 2005 20:02:00 -0000 1.9
@@ -15,8 +15,6 @@
*/
package org.apache.jetspeed.aggregator.impl;
-import java.io.CharArrayWriter;
-import java.io.PrintWriter;
import java.util.Hashtable;
import java.util.Map;
@@ -26,8 +24,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.jetspeed.aggregator.ContentDispatcher;
import org.apache.jetspeed.aggregator.ContentDispatcherCtrl;
-import org.apache.jetspeed.aggregator.FailedToRenderFragmentException;
-import org.apache.jetspeed.aggregator.UnrenderedContentException;
+import org.apache.jetspeed.aggregator.PortletContent;
import org.apache.jetspeed.om.page.Fragment;
import org.apache.jetspeed.request.RequestContext;
import org.apache.jetspeed.util.JetspeedObjectID;
@@ -61,109 +58,34 @@
this.isParallel = isParallel;
}
- /**
- * Include in the provided PortletResponse output stream the rendered
- * content of the request fragment. If the fragment rendered content is
not
- * yet available, the method will hold until it's completely rendered.
- *
- * @throws FailedToRenderFragmentException
- * if the Fragment to include could not be rendered.
- * @throws UnrenderedContentException
- */
- public void include( Fragment fragment )
- throws UnrenderedContentException
- {
- ObjectID oid = JetspeedObjectID.createFromString(fragment.getId());
- PortletContent content = (PortletContent) contents.get(oid);
- log.debug("Including content for OID " + oid);
-
- if (!isParallel)
- {
- log.debug("Synchronous rendering for OID " + oid);
- if(content.toString().length() > 0)
- {
- fragment.setRenderedContent(content.toString());
- }
- }
- else
- {
-
- if (content != null)
- {
- synchronized (content)
- {
- if (!content.isComplete())
- {
- log.debug("Waiting for content OID " + oid);
- try
- {
- content.wait();
- }
- catch (InterruptedException e)
- {
- }
- log.debug("Been notified that OID " + oid + " is
complete");
- }
-
- log.debug("Content OID " + oid + ": " +
content.toString());
- }
-
- try
- {
- if(content.toString().length() > 0)
- {
- fragment.setRenderedContent(content.toString());
- }
- }
- catch (Exception e)
- {
- log.error("Unable to include content OID " + oid + " in
response object", e);
- }
- finally
- {
- synchronized (contents)
- {
- log.debug("Removing content OID " + oid);
- ((PortletContent) contents.remove(oid)).release();
- }
- }
- }
- else
- {
- throw new UnrenderedContentException("It appears that the
content for fragment "+oid+" was not rendered. "+
- "Please verify that your aggregagtion implementation
fully renders all content.");
- }
- }
- }
-
- public void notify( ObjectID oid )
- {
- PortletContent content = (PortletContent) contents.get(oid);
-
- if (content != null)
- {
- synchronized (content)
- {
- if ((debugLevel > 0) && log.isDebugEnabled())
- {
- log.debug("Notifying complete OID " + oid);
- }
- content.setComplete(true);
- content.notifyAll();
- }
- }
- }
+// public void notify( ObjectID oid )
+// {
+// PortletContentImpl content = (PortletContentImpl)
contents.get(oid);
+//
+// if (content != null)
+// {
+// synchronized (content)
+// {
+// if ((debugLevel > 0) && log.isDebugEnabled())
+// {
+// log.debug("Notifying complete OID " + oid);
+// }
+// content.complete();
+// content.notifyAll();
+// }
+// }
+// }
public HttpServletResponse getResponseForWindow( PortletWindow window,
RequestContext request )
{
- PortletContent myContent = new PortletContent();
+ PortletContentImpl myContent = new PortletContentImpl();
return getResponseForId(request, myContent, window.getId());
}
public HttpServletResponse getResponseForFragment( Fragment fragment,
RequestContext request )
{
- PortletContent myContent = new PortletContent();
+ PortletContentImpl myContent = new PortletContentImpl();
ObjectID oid = JetspeedObjectID.createFromString(fragment.getId());
return getResponseForId(request, myContent, oid);
@@ -179,7 +101,7 @@
* @param oid
* @return
*/
- protected HttpServletResponse getResponseForId( RequestContext request,
PortletContent myContent, ObjectID oid )
+ protected HttpServletResponse getResponseForId( RequestContext request,
PortletContentImpl myContent, ObjectID oid )
{
synchronized (contents)
{
@@ -189,102 +111,19 @@
return new HttpBufferedResponse(request.getResponse(),
myContent.getWriter());
}
- protected class PortletContent
- {
- private CharArrayWriter cw;
- private PrintWriter writer;
- private boolean complete = false;
-
- PortletContent()
- {
- init();
- }
-
- public PrintWriter getWriter()
- {
- return writer;
- }
-
- public void init()
- {
- cw = new CharArrayWriter();
- writer = new PrintWriter(cw);
- }
-
- public void release()
- {
- writer.close();
- }
-
- public String toString()
- {
- writer.flush();
- return cw.toString();
- }
-
- public void writeTo( java.io.Writer out ) throws java.io.IOException
- {
- writer.flush();
- cw.writeTo(out);
- }
-
- public char[] toCharArray()
- {
- writer.flush();
- return cw.toCharArray();
- }
-
- public boolean isComplete()
- {
- return complete;
- }
-
- void setComplete( boolean state )
- {
- this.complete = state;
- }
- }
-
- /*
- * Sequentially wait on content generation
- *
- * @see
org.apache.jetspeed.aggregator.ContentDispatcher#sync(org.apache.jetspeed.om.page.Fragment)
+ /**
+ * <p>
+ * getPortletContent
+ * </p>
+ *
+ * @see
org.apache.jetspeed.aggregator.ContentDispatcher#getPortletContent(org.apache.jetspeed.om.page.Fragment)
+ * @param fragment
+ * @return
*/
- public void sync( Fragment fragment )
- {
+ public PortletContent getPortletContent( 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());
- }
- }
-
+ PortletContentImpl content = (PortletContentImpl) contents.get(oid);
+ return content;
}
-
}
1.26 +17 -19
jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/PortletRendererImpl.java
Index: PortletRendererImpl.java
===================================================================
RCS file:
/home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/PortletRendererImpl.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- PortletRendererImpl.java 4 Jan 2005 16:05:44 -0000 1.25
+++ PortletRendererImpl.java 11 Jan 2005 20:02:00 -0000 1.26
@@ -81,16 +81,17 @@
* @throws FailedToRenderFragmentException
* @throws FailedToRetrievePortletWindow
*/
- public void renderNow( Fragment fragment, RequestContext requestContext
) throws FailedToRenderFragmentException, FailedToRetrievePortletWindow
+ public void renderNow( Fragment fragment, RequestContext requestContext )
{
HttpServletRequest servletRequest = null;
HttpServletResponse servletResponse = null;
ContentDispatcher dispatcher = null;
- PortletWindow portletWindow = getPortletWindow(fragment);
+ PortletWindow portletWindow = null;
try
{
+ portletWindow = getPortletWindow(fragment);
PortletContainerServices.prepare("jetspeed");
ContentDispatcherCtrl dispatcherCtrl =
getDispatcherCtrl(requestContext, true);
dispatcher = getDispatcher(requestContext, true);
@@ -103,7 +104,7 @@
}
catch (Exception e)
{
- fragment.setRenderedContent(e.toString());
+ fragment.overrideRenderedContent(e.toString());
log.error(e.toString(), e);
}
}
@@ -115,17 +116,17 @@
* @throws FailedToRenderFragmentException
* @throws FailedToRetrievePortletWindow
*/
- public void renderNow( Fragment fragment, HttpServletRequest request,
HttpServletResponse response )
- throws FailedToRenderFragmentException,
FailedToRetrievePortletWindow
+ public void renderNow( Fragment fragment, HttpServletRequest request,
HttpServletResponse response )
{
RequestContext requestContext = (RequestContext) request
.getAttribute(PortalReservedParameters.REQUEST_CONTEXT_ATTRIBUTE);
ContentDispatcher dispatcher = getDispatcher(requestContext, true);
- PortletWindow portletWindow = getPortletWindow(fragment);
+ PortletWindow portletWindow = null;
try
{
+ portletWindow = getPortletWindow(fragment);
PortletContainerServices.prepare("jetspeed");
ContentDispatcherCtrl dispatcherCtrl =
getDispatcherCtrl(requestContext, true);
@@ -137,7 +138,7 @@
}
catch (Exception e)
{
- fragment.setRenderedContent(e.toString());
+ fragment.overrideRenderedContent(e.toString());
log.error(e.toString(), e);
}
}
@@ -151,15 +152,13 @@
* @throws UnknownPortletDefinitionException
* @throws FailedToRetrievePortletWindow
*/
- public void render( Fragment fragment, RequestContext requestContext )
throws FailedToRenderFragmentException, FailedToRetrievePortletWindow
+ public void render( Fragment fragment, RequestContext requestContext )
{
PortletContainerServices.prepare("jetspeed");
PortletWindow portletWindow;
-
-
ContentDispatcherCtrl dispatcherCtrl =
getDispatcherCtrl(requestContext, true);
ContentDispatcher dispatcher = getDispatcher(requestContext, true);
@@ -171,20 +170,19 @@
portletWindow = getPortletWindow(fragment);
servletRequest =
requestContext.getRequestForWindow(portletWindow);
servletResponse =
dispatcherCtrl.getResponseForWindow(portletWindow, requestContext);
-
+ RenderingJob rJob = buildRenderingJob(fragment, servletRequest,
servletResponse, requestContext);
+ monitor.process(rJob);
}
- catch (FailedToRetrievePortletWindow e1)
+ catch (Exception e1)
{
servletRequest = requestContext.getRequest();
servletResponse =
dispatcherCtrl.getResponseForFragment(fragment, requestContext);
log.error("render() failed: " + e1.toString(), e1);
- fragment.setRenderedContent(e1.toString());
- }
- finally
- {
- RenderingJob rJob = buildRenderingJob(fragment, servletRequest,
servletResponse, requestContext);
- monitor.process(rJob);
+ fragment.overrideRenderedContent(e1.toString());
+// ObjectID oid =
JetspeedObjectID.createFromString(fragment.getId());
+ // ((ContentDispatcherImpl) dispatcherCtrl).notify(oid);
}
+
}
/**
1.19 +13 -23
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.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- PageAggregatorImpl.java 6 Jan 2005 20:56:22 -0000 1.18
+++ PageAggregatorImpl.java 11 Jan 2005 20:02:00 -0000 1.19
@@ -123,10 +123,6 @@
contentPathes.add(path.replaceAll("\\{mediaType\\}",
mediaType));
}
- //
contentPathes.add("portlet/"+mediaType+"/jetspeed");
- // contentPathes.add("portlet/" + mediaType);
- // contentPathes.add("generic/" + mediaType);
- // contentPathes.add("/" + mediaType);
}
else
{
@@ -152,7 +148,7 @@
aggregateAndRender(root, context, page);
}
- dispatcher.include(root);
+ //dispatcher.include(root);
context.getResponse().getWriter().write(root.getRenderedContent());
if (null != window)
@@ -199,16 +195,14 @@
}
try
{
- renderer.render(maxedFragment, context);
- ContentDispatcher dispatcher =
renderer.getDispatcher(context, false);
- dispatcher.sync(maxedFragment);
- renderer.render(layoutFragment, context);
- dispatcher.sync(layoutFragment);
+ renderer.renderNow(maxedFragment, context);
+ renderer.renderNow(layoutFragment, context);
+
}
catch (Exception e)
{
log.error(e.getMessage(), e);
- maxedFragment.setRenderedContent("Sorry, but we were unable
access the requested portlet. Send the following message to your portal admin:
"+ e.getMessage());
+ maxedFragment.overrideRenderedContent("Sorry, but we were
unable access the requested portlet. Send the following message to your portal
admin: "+ e.getMessage());
}
@@ -259,20 +253,16 @@
log.debug("Rendering portlet fragment: [[name, " + f.getName() +
"], [id, " + f.getId() + "]]");
}
- try
- {
- renderer.render(f, context);
- }
- catch (Exception e)
- {
- log.error(e.getMessage(), e);
- f.setRenderedContent("Sorry, but we were unable access the
requested portlet. Send the following message to your portal admin: "+
e.getMessage());
- }
+
+
if (strategy == STRATEGY_SEQUENTIAL)
{
- ContentDispatcher dispatcher = renderer.getDispatcher(context,
false);
- dispatcher.sync(f);
+ renderer.renderNow(f, context);
+ }
+ else
+ {
+ renderer.render(f, context);
}
if (f.getDecorator() != null && f.getType().equals(Fragment.PORTLET))
1.1
jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/aggregator/impl/PortletContentImpl.java
Index: PortletContentImpl.java
===================================================================
/*
* Copyright 2000-2001,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.impl;
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import org.apache.jetspeed.aggregator.PortletContent;
public class PortletContentImpl implements PortletContent
{
private CharArrayWriter cw;
private PrintWriter writer;
private boolean complete = false;
PortletContentImpl()
{
init();
}
public PrintWriter getWriter()
{
return writer;
}
public void init()
{
cw = new CharArrayWriter();
writer = new PrintWriter(cw);
}
public void release()
{
writer.close();
}
public String toString()
{
writer.flush();
return cw.toString();
}
public void writeTo( java.io.Writer out ) throws java.io.IOException
{
writer.flush();
cw.writeTo(out);
}
public char[] toCharArray()
{
writer.flush();
return cw.toCharArray();
}
public boolean isComplete()
{
return complete;
}
void setComplete( boolean state )
{
this.complete = state;
}
public String getContent()
{
return toString();
}
/**
* <p>
* complete
* </p>
*
* @see org.apache.jetspeed.aggregator.PortletContent#complete()
*
*/
public void complete()
{
setComplete(true);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]