You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2003/07/22 20:51:22 UTC

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves RequestListenerValve.java

remm        2003/07/22 11:51:22

  Modified:    catalina/src/share/org/apache/catalina/core
                        StandardContext.java StandardContextValve.java
                        StandardWrapper.java StandardWrapperValve.java
  Removed:     catalina/src/share/org/apache/catalina/valves
                        RequestListenerValve.java
  Log:
  - Use the context logger for all webapp related error messages.
  - Remove RequestListenerValve and merge into StandardContextValve.
    This is a needed feature for servlet compliance, so this should be in the core.
  - Note: maybe separate arrays should be introduced for the distinct listener
    types, since some have a significant performance impact (such as
    RequestAttributeListener). A lot of listener types were introduced in Servlet 2.4
    and the original TC 4.0 design should probably be extended.
  
  Revision  Changes    Path
  1.73      +15 -77    jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java
  
  Index: StandardContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java,v
  retrieving revision 1.72
  retrieving revision 1.73
  diff -u -r1.72 -r1.73
  --- StandardContext.java	21 Jul 2003 19:05:50 -0000	1.72
  +++ StandardContext.java	22 Jul 2003 18:51:21 -0000	1.73
  @@ -2845,13 +2845,6 @@
               }
           }
   
  -        // Create request listener valve
  -        if (ok) {
  -            if (!requestListenerConfig()) {
  -                log.error(sm.getString("standardContext.requestListenerStartFailed"));
  -            }
  -        }
  -
           // Restore the "Welcome Files" and "Resources" context attributes
           postResources();
           postWelcomeFiles();
  @@ -3551,7 +3544,8 @@
                         (this, (FilterDef) filterDefs.get(name));
                       filterConfigs.put(name, filterConfig);
                   } catch (Throwable t) {
  -                    log.error(sm.getString("standardContext.filterStart", name), t);
  +                    getServletContext().log
  +                        (sm.getString("standardContext.filterStart", name), t);
                       ok = false;
                   }
               }
  @@ -3626,8 +3620,9 @@
                   Class clazz = loader.loadClass(listeners[i]);
                   results[i] = clazz.newInstance();
               } catch (Throwable t) {
  -                log.error(sm.getString("standardContext.applicationListener",
  -                                 listeners[i]), t);
  +                getServletContext().log
  +                    (sm.getString("standardContext.applicationListener",
  +                                  listeners[i]), t);
                   ok = false;
               }
           }
  @@ -3660,8 +3655,9 @@
                   fireContainerEvent("afterContextInitialized", listener);
               } catch (Throwable t) {
                   fireContainerEvent("afterContextInitialized", listener);
  -                log.error(sm.getString("standardContext.listenerStart",
  -                                 instances[i].getClass().getName()), t);
  +                getServletContext().log
  +                    (sm.getString("standardContext.listenerStart",
  +                                  instances[i].getClass().getName()), t);
                   ok = false;
               }
           }
  @@ -3700,8 +3696,9 @@
                   fireContainerEvent("beforeContextDestroyed", listener);
               } catch (Throwable t) {
                   fireContainerEvent("beforeContextDestroyed", listener);
  -                log.error(sm.getString("standardContext.listenerStop",
  -                                 listeners[j].getClass().getName()), t);
  +                getServletContext().log
  +                    (sm.getString("standardContext.listenerStop",
  +                                  listeners[j].getClass().getName()), t);
                   ok = false;
               }
           }
  @@ -3828,8 +3825,9 @@
                   try {
                       wrapper.load();
                   } catch (ServletException e) {
  -                    log.error(sm.getString("standardWrapper.loadException",
  -                                     getName()), e);
  +                    getServletContext().log
  +                        (sm.getString("standardWrapper.loadException",
  +                                      getName()), e);
                       // NOTE: load errors (including a servlet that throws
                       // UnavailableException from tht init() method) are NOT
                       // fatal to application startup
  @@ -4099,14 +4097,6 @@
               }
           }
   
  -        // Create request listener lifecycle valve
  -        if (ok) {
  -            if (!requestListenerConfig()) {
  -                log.error(sm.getString
  -                          ("standardContext.requestListenerStartFailed"));
  -            }
  -        }
  -
           // Load and initialize all "load on startup" servlets
           if (ok) {
               loadOnStartup(findChildren());
  @@ -4779,58 +4769,6 @@
   
       }
   
  -
  -    /**
  -     * Create and deploy a Valve to handle request linitialization and
  -     * destroy listener lifecycle events. If there are no request listeners
  -     * registered to receive notifications do not instantiate valve.
  -     */
  -    private boolean requestListenerConfig() {
  -        // Only install this valive if there is a registered RequestListener.
  -        Object instances[] = getApplicationListeners();
  -        boolean registered = false;
  -        boolean ok = true;
  -
  -        if (instances != null) {
  -            for (int i = 0; i < instances.length; i++) {
  -                if (instances[i] instanceof ServletRequestListener) {
  -                    registered = true;
  -                    break;
  -                }
  -            }
  -        }
  -
  -        if (!registered) {
  -            return ok;
  -        }
  -
  -        // Instantiate a new CertificatesValve if possible
  -        Valve requestListener = null;
  -        try {
  -            Class clazz =
  -                Class.forName("org.apache.catalina.valves.RequestListenerValve");
  -            requestListener = (Valve) clazz.newInstance();
  -        } catch (Throwable t) {
  -            return false;
  -        }
  -
  -        // Add this Valve to our Pipeline
  -        try {
  -            if (this instanceof ContainerBase) {
  -                Pipeline pipeline = this.getPipeline();
  -                if (pipeline != null) {
  -                    this.addValve(requestListener);
  -                    log.info(sm.getString
  -                        ("standardContext.requestListenerConfig.added"));
  -                }
  -            }
  -        } catch (Throwable t) {
  -            log.error(sm.getString("standardContext.requestListenerConfig.error"), t);
  -            ok = false;
  -        }
  -        return ok;
  -
  -    }
   
       // -------------------- JMX methods  --------------------
   
  
  
  
  1.9       +124 -6    jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContextValve.java
  
  Index: StandardContextValve.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContextValve.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- StandardContextValve.java	18 Jul 2003 18:49:28 -0000	1.8
  +++ StandardContextValve.java	22 Jul 2003 18:51:21 -0000	1.9
  @@ -69,6 +69,9 @@
   import java.io.PrintWriter;
   
   import javax.servlet.ServletException;
  +import javax.servlet.ServletRequest;
  +import javax.servlet.ServletRequestEvent;
  +import javax.servlet.ServletRequestListener;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
   import javax.naming.NamingException;
  @@ -80,7 +83,9 @@
   import org.apache.naming.resources.DirContextURLStreamHandler;
   import org.apache.catalina.Container;
   import org.apache.catalina.Context;
  +import org.apache.catalina.Globals;
   import org.apache.catalina.HttpRequest;
  +import org.apache.catalina.Logger;
   import org.apache.catalina.Request;
   import org.apache.catalina.Response;
   import org.apache.catalina.ValveContext;
  @@ -194,7 +199,7 @@
           if (((StandardContext) container).getSwallowOutput()) {
               try {
                   SystemLogHandler.startCapture();
  -                wrapper.getPipeline().invoke(request, response);
  +                invokeInternal(wrapper, request, response);
               } finally {
                   String log = SystemLogHandler.stopCapture();
                   if (log != null && log.length() > 0) {
  @@ -202,7 +207,7 @@
                   }
               }
           } else {
  -            wrapper.getPipeline().invoke(request, response);
  +            invokeInternal(wrapper, request, response);
           }
   
       }
  @@ -212,6 +217,67 @@
   
   
       /**
  +     * Call invoke.
  +     */
  +    private void invokeInternal(Wrapper wrapper, Request request, 
  +                                Response response)
  +        throws IOException, ServletException {
  +
  +        Object instances[] = 
  +            ((StandardContext) container).getApplicationListeners();
  +
  +        ServletRequestEvent event = null;
  +
  +        if (instances.length > 0) {
  +            event = new ServletRequestEvent
  +                (((StandardContext) container).getServletContext(), 
  +                 request.getRequest());
  +            // create pre-service event
  +            for (int i = 0; i < instances.length; i++) {
  +                if (instances[i] == null)
  +                    continue;
  +                if (!(instances[i] instanceof ServletRequestListener))
  +                    continue;
  +                ServletRequestListener listener =
  +                    (ServletRequestListener) instances[i];
  +                try {
  +                    listener.requestInitialized(event);
  +                } catch (Throwable t) {
  +                    log(sm.getString("requestListenerValve.requestInit",
  +                                     instances[i].getClass().getName()), t);
  +                    ServletRequest sreq = request.getRequest();
  +                    sreq.setAttribute(Globals.EXCEPTION_ATTR,t);
  +                    return;
  +                }
  +            }
  +        }
  +
  +        wrapper.getPipeline().invoke(request, response);
  +
  +        if (instances.length > 0) {
  +            // create post-service event
  +            for (int i = 0; i < instances.length; i++) {
  +                if (instances[i] == null)
  +                    continue;
  +                if (!(instances[i] instanceof ServletRequestListener))
  +                    continue;
  +                ServletRequestListener listener =
  +                    (ServletRequestListener) instances[i];
  +                try {
  +                    listener.requestDestroyed(event);
  +                } catch (Throwable t) {
  +                    log(sm.getString("requestListenerValve.requestDestroy",
  +                                     instances[i].getClass().getName()), t);
  +                    ServletRequest sreq = request.getRequest();
  +                    sreq.setAttribute(Globals.EXCEPTION_ATTR,t);
  +                }
  +            }
  +        }
  +
  +    }
  +
  +
  +    /**
        * Report a "bad request" error for the specified resource.  FIXME:  We
        * should really be using the error reporting settings for this web
        * application, but currently that code runs at the wrapper level rather
  @@ -272,5 +338,57 @@
           }
   
       }
  +
  +
  +    /**
  +     * Log a message on the Logger associated with our Container (if any)
  +     *
  +     * @param message Message to be logged
  +     */
  +    private void log(String message) {
  +
  +        Logger logger = null;
  +        if (container != null)
  +            logger = container.getLogger();
  +        if (logger != null)
  +            logger.log("StandardContextValve[" + container.getName() + "]: "
  +                       + message);
  +        else {
  +            String containerName = null;
  +            if (container != null)
  +                containerName = container.getName();
  +            System.out.println("StandardContextValve[" + containerName
  +                               + "]: " + message);
  +        }
  +
  +    }
  +
  +
  +    /**
  +     * Log a message on the Logger associated with our Container (if any)
  +     *
  +     * @param message Message to be logged
  +     * @param throwable Associated exception
  +     */
  +    private void log(String message, Throwable throwable) {
  +
  +        Logger logger = null;
  +        if (container != null)
  +            logger = container.getLogger();
  +        if (logger != null)
  +            logger.log("StandardContextValve[" + container.getName() + "]: "
  +                       + message, throwable);
  +        else {
  +            String containerName = null;
  +            if (container != null)
  +                containerName = container.getName();
  +            System.out.println("StandardContextValve[" + containerName
  +                               + "]: " + message);
  +            System.out.println("" + throwable);
  +            throwable.printStackTrace(System.out);
  +        }
  +
  +    }
  +
   
   }
  
  
  
  1.29      +9 -9      jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapper.java
  
  Index: StandardWrapper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- StandardWrapper.java	4 Jun 2003 21:17:12 -0000	1.28
  +++ StandardWrapper.java	22 Jul 2003 18:51:21 -0000	1.29
  @@ -959,7 +959,7 @@
                           if (ex instanceof ClassNotFoundException){
                               throw (ClassNotFoundException)ex;
                           } else {
  -                            log.error( "Error loading "
  +                            getServletContext().log( "Error loading "
                                   + fclassLoader + " " + factualClass, ex );
                           }
                       }
  @@ -974,7 +974,7 @@
                   unavailable(null);
   
   
  -                log.error( "Error loading " + classLoader + " " + actualClass, e );
  +                getServletContext().log( "Error loading " + classLoader + " " + actualClass, e );
                   throw new ServletException
                       (sm.getString("standardWrapper.missingClass", actualClass),
                        e);
  @@ -1067,7 +1067,7 @@
                   // said so, so do not call unavailable(null).
                   throw f;
               } catch (Throwable f) {
  -                log.error("StandardWrapper.Throwable", f );
  +                getServletContext().log("StandardWrapper.Throwable", f );
                   instanceSupport.fireInstanceEvent(InstanceEvent.AFTER_INIT_EVENT,
                                                     servlet, f);
                   // If the servlet wanted to be unavailable it would have
  @@ -1185,7 +1185,7 @@
        *  to mark this servlet as permanently unavailable
        */
       public void unavailable(UnavailableException unavailable) {
  -        log.info(sm.getString("standardWrapper.unavailable", getName()));
  +        getServletContext().log(sm.getString("standardWrapper.unavailable", getName()));
           if (unavailable == null)
               setAvailable(Long.MAX_VALUE);
           else if (unavailable.isPermanent())
  @@ -1544,7 +1544,7 @@
           try {
               unload();
           } catch (ServletException e) {
  -            log.error(sm.getString
  +            getServletContext().log(sm.getString
                         ("standardWrapper.unloadException", getName()), e);
           }
   
  
  
  
  1.18      +70 -20    jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java
  
  Index: StandardWrapperValve.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardWrapperValve.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- StandardWrapperValve.java	21 Jul 2003 19:05:51 -0000	1.17
  +++ StandardWrapperValve.java	22 Jul 2003 18:51:21 -0000	1.18
  @@ -94,16 +94,12 @@
    */
   
   final class StandardWrapperValve
  -    extends ValveBase 
  - {
  +    extends ValveBase {
  +
       private static Log log = LogFactory.getLog(StandardWrapperValve.class);
   
       // ----------------------------------------------------- Instance Variables
   
  -    /**
  -     * The filter definition for our container-provided filter.
  -     */
  -    //private FilterDef filterDef = null;
   
       // Some JMX statistics. This vavle is associated with a StandardWrapper.
       // We exponse the StandardWrapper as JMX ( j2eeType=Servlet ). The fields
  @@ -113,12 +109,14 @@
       private int requestCount;
       private int errorCount;
   
  +
       /**
        * The string manager for this package.
        */
       private static final StringManager sm =
           StringManager.getManager(Constants.Package);
   
  +
       // --------------------------------------------------------- Public Methods
   
   
  @@ -159,7 +157,7 @@
   
           // Check for the servlet being marked unavailable
           if (!unavailable && wrapper.isUnavailable()) {
  -            log.info(sm.getString("standardWrapper.isUnavailable",
  +            log(sm.getString("standardWrapper.isUnavailable", 
                                wrapper.getName()));
               if (hres == null) {
                   ;       // NOTE - Not much we can do generically
  @@ -197,13 +195,13 @@
                                           wrapper.getName()));
               }
           } catch (ServletException e) {
  -            log.error(sm.getString("standardWrapper.allocateException",
  +            log(sm.getString("standardWrapper.allocateException",
                                wrapper.getName()), e);
               throwable = e;
               exception(request, response, e);
               servlet = null;
           } catch (Throwable e) {
  -            log.error(sm.getString("standardWrapper.allocateException",
  +            log(sm.getString("standardWrapper.allocateException",
                                wrapper.getName()), e);
               throwable = e;
               exception(request, response, e);
  @@ -215,12 +213,12 @@
               response.sendAcknowledgement();
           } catch (IOException e) {
               hreq.removeAttribute(Globals.JSP_FILE_ATTR);
  -            log.error(sm.getString("standardWrapper.acknowledgeException",
  +            log(sm.getString("standardWrapper.acknowledgeException",
                                wrapper.getName()), e);
               throwable = e;
               exception(request, response, e);
           } catch (Throwable e) {
  -            log.error(sm.getString("standardWrapper.acknowledgeException",
  +            log(sm.getString("standardWrapper.acknowledgeException",
                                wrapper.getName()), e);
               throwable = e;
               exception(request, response, e);
  @@ -260,13 +258,13 @@
               hreq.removeAttribute(Globals.JSP_FILE_ATTR);
           } catch (IOException e) {
               hreq.removeAttribute(Globals.JSP_FILE_ATTR);
  -            log.error(sm.getString("standardWrapper.serviceException",
  +            log(sm.getString("standardWrapper.serviceException",
                                wrapper.getName()), e);
               throwable = e;
               exception(request, response, e);
           } catch (UnavailableException e) {
               hreq.removeAttribute(Globals.JSP_FILE_ATTR);
  -            log.error(sm.getString("standardWrapper.serviceException",
  +            log(sm.getString("standardWrapper.serviceException",
                                wrapper.getName()), e);
               //            throwable = e;
               //            exception(request, response, e);
  @@ -295,13 +293,13 @@
                       break;
                   }
               }
  -            log.error(sm.getString("standardWrapper.serviceException",
  -                                   wrapper.getName()), rootCause);
  +            log(sm.getString("standardWrapper.serviceException",
  +                             wrapper.getName()), rootCause);
               throwable = e;
               exception(request, response, e);
           } catch (Throwable e) {
               hreq.removeAttribute(Globals.JSP_FILE_ATTR);
  -            log.error(sm.getString("standardWrapper.serviceException",
  +            log(sm.getString("standardWrapper.serviceException",
                                wrapper.getName()), e);
               throwable = e;
               exception(request, response, e);
  @@ -312,7 +310,7 @@
               if (filterChain != null)
                   filterChain.release();
           } catch (Throwable e) {
  -            log.error(sm.getString("standardWrapper.releaseFilters",
  +            log(sm.getString("standardWrapper.releaseFilters",
                                wrapper.getName()), e);
               if (throwable == null) {
                   throwable = e;
  @@ -326,7 +324,7 @@
                   wrapper.deallocate(servlet);
               }
           } catch (Throwable e) {
  -            log.error(sm.getString("standardWrapper.deallocateException",
  +            log(sm.getString("standardWrapper.deallocateException",
                                wrapper.getName()), e);
               if (throwable == null) {
                   throwable = e;
  @@ -342,7 +340,7 @@
                   wrapper.unload();
               }
           } catch (Throwable e) {
  -            log.error(sm.getString("standardWrapper.unloadException",
  +            log(sm.getString("standardWrapper.unloadException",
                                wrapper.getName()), e);
               if (throwable == null) {
                   throwable = e;
  @@ -359,6 +357,58 @@
   
   
       // -------------------------------------------------------- Private Methods
  +
  +
  +    /**
  +     * Log a message on the Logger associated with our Container (if any)
  +     *
  +     * @param message Message to be logged
  +     */
  +    private void log(String message) {
  +
  +        Logger logger = null;
  +        if (container != null)
  +            logger = container.getLogger();
  +        if (logger != null)
  +            logger.log("StandardWrapperValve[" + container.getName() + "]: "
  +                       + message);
  +        else {
  +            String containerName = null;
  +            if (container != null)
  +                containerName = container.getName();
  +            System.out.println("StandardWrapperValve[" + containerName
  +                               + "]: " + message);
  +        }
  +
  +    }
  +
  +
  +    /**
  +     * Log a message on the Logger associated with our Container (if any)
  +     *
  +     * @param message Message to be logged
  +     * @param throwable Associated exception
  +     */
  +    private void log(String message, Throwable throwable) {
  +
  +        Logger logger = null;
  +        if (container != null)
  +            logger = container.getLogger();
  +        if (logger != null)
  +            logger.log("StandardWrapperValve[" + container.getName() + "]: "
  +                       + message, throwable);
  +        else {
  +            String containerName = null;
  +            if (container != null)
  +                containerName = container.getName();
  +            System.out.println("StandardWrapperValve[" + containerName
  +                               + "]: " + message);
  +            System.out.println("" + throwable);
  +            throwable.printStackTrace(System.out);
  +        }
  +
  +    }
  +
   
       /**
        * Handle the specified ServletException encountered while processing
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org