weaver      2003/08/07 13:35:30

  Modified:    commons/src/java/org/apache/jetspeed/dispatcher
                        JetspeedRequestDispatcher.java
  Log:
  - Added logging to JetspeedRequestDispatcher
  - JetspeedRequestDispatcher will now write exceptions/stack traces
     directly to the ServletResponse's print write.  Before, if a portlet
     failed, it only showed up in the console.  Now the behavior is more
     like a servlet container.
  
  Revision  Changes    Path
  1.2       +52 -11    
jakarta-jetspeed-2/commons/src/java/org/apache/jetspeed/dispatcher/JetspeedRequestDispatcher.java
  
  Index: JetspeedRequestDispatcher.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jetspeed-2/commons/src/java/org/apache/jetspeed/dispatcher/JetspeedRequestDispatcher.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- JetspeedRequestDispatcher.java    28 Jul 2003 23:46:38 -0000      1.1
  +++ JetspeedRequestDispatcher.java    7 Aug 2003 20:35:30 -0000       1.2
  @@ -53,6 +53,8 @@
    */
   package org.apache.jetspeed.dispatcher;
   
  +import java.io.PrintWriter;
  +
   import javax.servlet.RequestDispatcher;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
  @@ -61,6 +63,8 @@
   import javax.portlet.RenderRequest;
   import javax.portlet.PortletException;
   
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
   import org.apache.pluto.core.impl.RenderRequestImpl;
   import org.apache.pluto.core.impl.RenderResponseImpl;
   
  @@ -73,24 +77,25 @@
   public class JetspeedRequestDispatcher implements PortletRequestDispatcher
   {
       private RequestDispatcher requestDispatcher;
  +    private static final Log log = 
LogFactory.getLog(JetspeedRequestDispatcher.class);
   
       public JetspeedRequestDispatcher(RequestDispatcher requestDispatcher)
       {
           this.requestDispatcher = requestDispatcher;
       }
   
  -// portlet-only implementation
  +    // portlet-only implementation
   
  -    public void include(RenderRequest request, RenderResponse response)
  -        throws PortletException, java.io.IOException
  +    public void include(RenderRequest request, RenderResponse response) throws 
PortletException, java.io.IOException
       {
  -        try 
  +        HttpServletResponse servletResponse = null;
  +        try
           {
  -            HttpServletRequest servletRequest = 
(HttpServletRequest)((RenderRequestImpl)request).getRequest();
  -            HttpServletResponse servletResponse = 
(HttpServletResponse)((RenderResponseImpl)response).getResponse();                
  -                            
  -            this.requestDispatcher.include(servletRequest, servletResponse); 
  -                
  +            HttpServletRequest servletRequest = (HttpServletRequest) 
((RenderRequestImpl) request).getRequest();
  +            servletResponse = (HttpServletResponse) ((RenderResponseImpl) 
response).getResponse();
  +
  +            this.requestDispatcher.include(servletRequest, servletResponse);
  +
           }
           catch (java.io.IOException e)
           {
  @@ -98,14 +103,50 @@
           }
           catch (javax.servlet.ServletException e)
           {
  -            if (e.getRootCause()!=null)
  +            PrintWriter pw = null;
  +            if (servletResponse != null)
  +            {
  +                pw = servletResponse.getWriter();
  +                pw.write("JetspeedRequestDispatcher failed to include servlet 
resources. (details below) <br/>");
  +                pw.write("Exception: " + e.getClass().getName() + " <br/>");
  +                pw.write("Message: " + e.getMessage() + " <br/>");
  +                writeStackTrace(e.getStackTrace(), pw);
  +
  +            }
  +            log.error("JetspeedRequestDispatcher failed (details below)");
  +            log.error(
  +                "Begin: ******************************************* 
JetspeedRequestDispatcher Failure Report******************************************");
  +            log.error("Cause: " + e.getMessage(), e);
  +            if (e.getRootCause() != null)
               {
  +                log.error("Root Cause: " + e.getRootCause().getMessage(), 
e.getRootCause());
  +                if (pw != null)
  +                {
  +                    pw.write("<p>Root Cause: </p>");
  +                    pw.write("Message: " + e.getRootCause().getMessage() + " 
<br/>");
  +                    pw.write("Exception: " + e.getRootCause().getClass().getName() 
+ " <br/>");
  +                    writeStackTrace(e.getRootCause().getStackTrace(), pw);
  +                }
  +
  +                log.error(
  +                    "End: 
*******************************************JetspeedRequestDispatcher Failure 
Report******************************************");
                   throw new PortletException(e.getRootCause());
               }
               else
               {
  +                log.error(
  +                    "End: 
*******************************************JetspeedRequestDispatcher Failure 
Report******************************************");
                   throw new PortletException(e);
               }
  +        }
  +    }
  +
  +    protected static final void writeStackTrace(StackTraceElement[] traceArray, 
PrintWriter pw)
  +    {
  +        pw.write("<p>Stack Trace: </p>");
  +        for (int i = 0; i < traceArray.length; i++)
  +        {
  +            pw.write("&nbsp;&nbsp;&nbsp;" + traceArray[i].toString() + "<br />");
           }
       }
   
  
  
  

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

Reply via email to