turbine-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jtay...@apache.org
Subject cvs commit: jakarta-turbine-3/src/java/org/apache/turbine/exception DefaultExceptionHandler.java
Date Mon, 04 Mar 2002 23:45:35 GMT
jtaylor     02/03/04 15:45:35

  Modified:    .        build-test.xml default.properties deps.list
               src/java/org/apache/turbine Turbine.java
                        TurbineConstants.java
  Added:       src/java/org/apache/turbine ExceptionHandler.java
               src/java/org/apache/turbine/exception
                        DefaultExceptionHandler.java
  Log:
  Breaks out the first attempt at handling an exception thrown by the pipeline
  into another 'pluggable' handler. This allows users to define more complicated
  error handling if they need it (like advanced logging or emailing of fatal
  errors). The default behavior if nothing is configured should be unchanged.
  I'm not so sure about the package name (too general?) but I'm following
  Jason's suggestion. We can change it in the repository if somebody feels
  strongly about it.
  
  Revision  Changes    Path
  1.13      +3 -0      jakarta-turbine-3/build-test.xml
  
  Index: build-test.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-3/build-test.xml,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- build-test.xml	11 Feb 2002 23:58:05 -0000	1.12
  +++ build-test.xml	4 Mar 2002 23:45:35 -0000	1.13
  @@ -17,6 +17,7 @@
       <pathelement location="${commons-beanutils.jar}"/>
       <pathelement location="${commons-collections.jar}"/>
       <pathelement location="${commons-util.jar}"/>
  +    <pathelement location="${commons-io.jar}"/>
       <pathelement location="${fulcrum.jar}"/>
       <pathelement location="${servlet.jar}"/>
       <pathelement location="${stratum.jar}"/>
  @@ -241,6 +242,7 @@
       <copy file="${commons-beanutils.jar}" todir="${build.dir}/rttest/lib"/>
       <copy file="${commons-collections.jar}" todir="${build.dir}/rttest/lib"/>
       <copy file="${commons-util.jar}" todir="${build.dir}/rttest/lib"/>
  +    <copy file="${commons-io.jar}" todir="${build.dir}/rttest/lib"/>
       <copy file="${dom4j.jar}" todir="${build.dir}/rttest/lib"/>
       <copy file="${fulcrum.jar}" todir="${build.dir}/rttest/lib"/>
       <copy file="${junit.jar}" todir="${build.dir}/rttest/lib"/>
  @@ -249,6 +251,7 @@
       <copy file="${velocity.jar}" todir="${build.dir}/rttest/lib"/>
       <copy file="${jgen.jar}" todir="${build.dir}/rttest/lib"/>
       <copy file="${commons-jxpath.jar}" todir="${build.dir}/rttest/lib"/>
  +    <copy file="${httpunit.jar}" todir="${build.dir}/rttest/lib"/>
       
       <antcall target="copy-aspectj-runtime"/>
   
  
  
  
  1.18      +1 -0      jakarta-turbine-3/default.properties
  
  Index: default.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-3/default.properties,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- default.properties	17 Feb 2002 06:41:26 -0000	1.17
  +++ default.properties	4 Mar 2002 23:45:35 -0000	1.18
  @@ -41,6 +41,7 @@
   xmlParserAPIs.jar = ${lib.repo}/xmlParserAPIs-2.0.0.jar
   commons-collections.jar = ${lib.repo}/commons-collections.jar
   commons-util.jar = ${lib.repo}/commons-util-0.1-dev.jar
  +commons-io.jar = ${lib.repo}/commons-io.jar
   stratum.jar = ${lib.repo}/stratum-0.1-dev.jar
   dom4j.jar = ${lib.repo}/dom4j-1.1.jar
   commons-beanutils.jar = ${lib.repo}/commons-beanutils.jar
  
  
  
  1.8       +1 -0      jakarta-turbine-3/deps.list
  
  Index: deps.list
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-3/deps.list,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- deps.list	17 Feb 2002 06:41:26 -0000	1.7
  +++ deps.list	4 Mar 2002 23:45:35 -0000	1.8
  @@ -4,6 +4,7 @@
   commons-beanutils.jar
   commons-collections.jar
   commons-util-0.1-dev.jar
  +commons-io.jar
   dom4j-1.1.jar
   fulcrum-1.0.jar
   httpclient.jar
  
  
  
  1.29      +13 -24    jakarta-turbine-3/src/java/org/apache/turbine/Turbine.java
  
  Index: Turbine.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-3/src/java/org/apache/turbine/Turbine.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- Turbine.java	10 Feb 2002 08:19:30 -0000	1.28
  +++ Turbine.java	4 Mar 2002 23:45:35 -0000	1.29
  @@ -123,7 +123,7 @@
    * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
    * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
    * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
  - * @version $Id: Turbine.java,v 1.28 2002/02/10 08:19:30 dlr Exp $
  + * @version $Id: Turbine.java,v 1.29 2002/03/04 23:45:35 jtaylor Exp $
    */
   public class Turbine
       extends HttpServlet
  @@ -390,13 +390,7 @@
           {
               try
               {
  -                // try again with a different target
  -                data.setTarget(configuration.getString("template.error","/Error.vm"));
  -                data.setStackTrace(StringUtils.stackTrace(t), t);
  -
  -                // We act as a minimal Pipeline here to run the target
  -                // set above.
  -                new DefaultTargetValve().invoke(data, new NullValveContext());
  +                exceptionHandler.handleException( data, t );
               }
               catch (Exception f)
               {
  @@ -530,6 +524,8 @@
   
       private static Resolver resolver;
   
  +    private static ExceptionHandler exceptionHandler;
  +
       private static Pipeline pipeline;
   
       private static RunDataService runDataService;
  @@ -652,6 +648,15 @@
           resolver = (Resolver) Class.forName(resolverClass).newInstance();
           resolver.init();
   
  +        // Create the error handler
  +
  +        String exceptionHandlerClass =
  +            configuration.getString( EXCEPTION_HANDLER,
  +                "org.apache.turbine.exception.DefaultExceptionHandler" );
  +
  +        exceptionHandler = ( ExceptionHandler )
  +            Class.forName( exceptionHandlerClass ).newInstance();
  +
           // Set some system properties
           Configuration systemProperties = configuration.subset(SYSTEM);
   
  @@ -909,22 +914,6 @@
               Date expiryDate = new Date( System.currentTimeMillis() + expiry );
               data.getResponse().setHeader(
                       "Expires", HttpUtils.formatHttpDate(expiryDate));
  -        }
  -    }
  -
  -    /**
  -     * A skeleton {@link org.apache.turbine.ValveContext}
  -     * implementation to assist in invoking DefaultTargetValve in
  -     * {@link #handleException(RunData, HttpServletRequest,
  -     * HttpServletResponse, Throwable)}.
  -     */
  -    protected final class NullValveContext implements ValveContext
  -    {
  -        /**
  -         * No-op implementation of ValveContext interface.
  -         */
  -        public void invokeNext(RunData ignored)
  -        {
           }
       }
   }
  
  
  
  1.14      +5 -0      jakarta-turbine-3/src/java/org/apache/turbine/TurbineConstants.java
  
  Index: TurbineConstants.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-3/src/java/org/apache/turbine/TurbineConstants.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- TurbineConstants.java	4 Feb 2002 17:16:05 -0000	1.13
  +++ TurbineConstants.java	4 Mar 2002 23:45:35 -0000	1.14
  @@ -124,6 +124,11 @@
       public static final String MODULE_PACKAGES = "module.packages";
   
       /**
  +     * Configuration key for the ExceptionHandler that Turbine will use.
  +     */
  +    public static final String EXCEPTION_HANDLER = "exceptionHandler.default" ;
  +
  +    /**
        * what resolver Turbine will use
        */
       public static final String RESOLVER = "resolver.default";
  
  
  
  1.1                  jakarta-turbine-3/src/java/org/apache/turbine/ExceptionHandler.java
  
  Index: ExceptionHandler.java
  ===================================================================
  package org.apache.turbine;
  
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Turbine" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Turbine", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /**
   * Interface that defines an exception handler for the Turbine servlet. If a
   * throwable is thrown by the pipeline, the servlet will pass the Throwable
   * and RunData to the handleException method of the configured ExceptionHandler
   * to deal with.
   *
   * @author <a href="mailto:james@jamestaylor.org">James Taylor</a>
   * @version $Id: ExceptionHandler.java,v 1.1 2002/03/04 23:45:35 jtaylor Exp $
   */
  public interface ExceptionHandler
  {
      /**
       * This method will be called to handle a throwable thrown by the pipeline
       *
       * @param data RunData for the request where the error occured
       * @param throwable The throwable that was thrown
       *
       * @throw Exception if an error occurs handling the throwable. Turbine will
       *                  then attempt to provide some minimal handling.
       */
      public void handleException( RunData data, Throwable throwable )
          throws Exception;
  }
  
  
  
  1.1                  jakarta-turbine-3/src/java/org/apache/turbine/exception/DefaultExceptionHandler.java
  
  Index: DefaultExceptionHandler.java
  ===================================================================
  package org.apache.turbine.exception;
  
  import org.apache.turbine.ExceptionHandler;
  import org.apache.turbine.RunData;
  import org.apache.turbine.Turbine;
  import org.apache.turbine.ValveContext;
  import org.apache.turbine.pipeline.DefaultTargetValve;
  import org.apache.commons.util.StringUtils;
  
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Turbine" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Turbine", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /**
   * The default exception handler for {@link Turbine}. Populates the RunData
   * with information on the throwable, and then renders the template specified
   * by the 'template.error' configuration property.
   *
   * @author <a href="mailto:james@jamestaylor.org">James Taylor</a>
   * @version $Id: DefaultExceptionHandler.java,v 1.1 2002/03/04 23:45:35 jtaylor Exp $
   */
  public class DefaultExceptionHandler implements ExceptionHandler
  {
      /**
       * @see ExceptionHandler#handleException
       */
      public void handleException( RunData data, Throwable throwable )
          throws Exception
      {
          data.setTarget( Turbine.getConfiguration()
              .getString( "template.error", "/Error.vm" ) );
  
          data.setStackTrace( StringUtils.stackTrace( throwable ), throwable );
  
          // Simulate a minimal Pipeline here to run the target.
  
          new DefaultTargetValve().invoke(data, new NullValveContext());
      }
  
      /**
       * A skeleton {@link org.apache.turbine.ValveContext}
       * implementation to assist in invoking DefaultTargetValve in
       * {@link #handleException(RunData, Throwable)}.
       */
      protected final class NullValveContext implements ValveContext
      {
          /**
           * No-op implementation of ValveContext interface.
           */
          public void invokeNext(RunData ignored)
          {
              // Do nothing
          }
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:turbine-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:turbine-dev-help@jakarta.apache.org>


Mime
View raw message