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]