avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mcconn...@apache.org
Subject cvs commit: avalon-sandbox/merlin/composition-spi/src/java/org/apache/avalon/composition/logging LoggerException.java LoggingDescriptor.java LoggingManager.java TargetDescriptor.java TargetProvider.java package.html
Date Tue, 08 Jul 2003 15:01:23 GMT
mcconnell    2003/07/08 08:01:23

  Modified:    merlin   maven.xml
               merlin/assembly/src/test/org/apache/avalon/assembly
                        TestBase.java
               merlin/composition/src/java/org/apache/avalon/composition/repository/impl
                        FileRepository.java
  Added:       merlin/composition/src/java/org/apache/avalon/composition/logging/impl
                        DefaultLoggingManager.java FileTargetProvider.java
                        Resources.properties package.html
               merlin/composition-spi/src/java/org/apache/avalon/composition/logging
                        LoggerException.java LoggingDescriptor.java
                        LoggingManager.java TargetDescriptor.java
                        TargetProvider.java package.html
  Log:
  Incorporate the logging sub-system into the composition package.
  
  Revision  Changes    Path
  1.22      +2 -1      avalon-sandbox/merlin/maven.xml
  
  Index: maven.xml
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/maven.xml,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- maven.xml	7 Jul 2003 09:42:35 -0000	1.21
  +++ maven.xml	8 Jul 2003 15:01:21 -0000	1.22
  @@ -31,7 +31,7 @@
       <maven:reactor
         basedir="${basedir}"
         includes="*/project.xml,merlin-extensions/merlin-jmx/project.xml,merlin-extensions/merlin-jndi/project.xml,merlin-extensions/merlin-servlet/project.xml"
  -      excludes="merlin-platform/*,merlin-plugin/*"
  +      excludes="merlin-platform/*,merlin-plugin/*,activation*/*"
         goals="merlin-propergate"
         banner="Installing:"
         ignoreFailures="false" />
  @@ -284,6 +284,7 @@
       <maven:reactor
         basedir="${basedir}"
         includes="*/project.xml,merlin-extensions/*/project.xml"
  +      excludes="activation*/*"
         goals="clean"
         banner="Cleaning subproject:"
         ignoreFailures="false"/>
  
  
  
  1.9       +2 -0      avalon-sandbox/merlin/assembly/src/test/org/apache/avalon/assembly/TestBase.java
  
  Index: TestBase.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/assembly/src/test/org/apache/avalon/assembly/TestBase.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- TestBase.java	4 Jul 2003 07:31:23 -0000	1.8
  +++ TestBase.java	8 Jul 2003 15:01:22 -0000	1.9
  @@ -51,6 +51,7 @@
   package org.apache.avalon.assembly;
   
   import java.io.File;
  +import java.net.URL;
   
   import org.apache.avalon.assembly.engine.impl.EngineClassLoader;
   import org.apache.avalon.assembly.locator.impl.DefaultLocator;
  @@ -153,6 +154,7 @@
           repository.enableLogging( getLogger().getChildLogger( "repository" ) );
           DefaultContext context = new DefaultContext();
           context.put( FileRepository.BASE_KEY, root );
  +        context.put( FileRepository.HOSTS_KEY, new URL[0] );
           context.makeReadOnly();
           repository.contextualize( context );
           return repository;
  
  
  
  1.1                  avalon-sandbox/merlin/composition/src/java/org/apache/avalon/composition/logging/impl/DefaultLoggingManager.java
  
  Index: DefaultLoggingManager.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, 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 "Jakarta", "Apache Avalon", "Avalon Framework" and
      "Apache Software Foundation"  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", 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 (INCLU-
   DING, 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/>.
  
  */
  
  package org.apache.avalon.composition.logging.impl;
  
  import java.io.File;
  import java.io.IOException;
  import java.util.HashMap;
  
  import org.apache.avalon.composition.logging.LoggingManager;
  import org.apache.avalon.composition.logging.LoggerException;
  import org.apache.avalon.composition.logging.LoggingDescriptor;
  import org.apache.avalon.composition.logging.TargetDescriptor;
  import org.apache.avalon.composition.logging.TargetProvider;
  import org.apache.avalon.excalibur.i18n.ResourceManager;
  import org.apache.avalon.excalibur.i18n.Resources;
  import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.logger.AvalonFormatter;
  import org.apache.avalon.framework.logger.LogKitLogger;
  import org.apache.avalon.meta.data.CategoryDirective;
  import org.apache.avalon.meta.data.CategoriesDirective;
  import org.apache.log.Hierarchy;
  import org.apache.log.LogTarget;
  import org.apache.log.Logger;
  import org.apache.log.Priority;
  import org.apache.log.output.io.FileTarget;
  import org.apache.log.output.io.StreamTarget;
  
  /**
   * A <code>LoggerManager</code> interface declares operation supporting
   * the management of a logging hierarchy.
   *
   * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
   */
  public class DefaultLoggingManager implements LoggingManager
  {
      //===============================================================
      // static
      //===============================================================
  
      public static final String SYSTEM_CATEGORY_DEFAULT = "sys";
  
      public static final String USER_CATEGORY_DEFAULT = "root";
  
      private static final Resources REZ =
              ResourceManager.getPackageResources( DefaultLoggingManager.class );
  
      /**
       * The default logging priority value.
       */
      public static final String DEFAULT_PRIORITY = "INFO";
  
      /**
       * The default logging target name.
       */
      public static final String DEFAULT_TARGET = "default";
  
      private static final String DEFAULT_FORMAT =
              "[%7.7{priority}] (%{category}): %{message}\\n%{throwable}";
  
      /**
       * The default fallback log target.
       */
      private static final StreamTarget DEFAULT_STREAM =
              new StreamTarget( System.out, new AvalonFormatter( DEFAULT_FORMAT ) );
  
      //===============================================================
      // state
      //===============================================================
  
      /**
       * Base directory of file targets.
       */
      private File m_baseDirectory;
  
      /**
       * The list of logging targets.
       */
      private LoggingDescriptor m_descriptor;
  
      /**
       * The implementation log hierarchy.
       */
      private Hierarchy m_logHierarchy;
  
      /**
       * The default logging channel.
       */
      private org.apache.avalon.framework.logger.Logger m_logger;
  
      /**
       * The list of logging targets.
       */
      private final HashMap m_targets = new HashMap();
  
      private String m_system;
  
      //==============================================================
      // constructor
      //==============================================================
  
      /**
       * <p>Application of a runtime context to the manager.
       * The context value will be passed directly to lifestyle handlers
       * established by this service.
       * @param context the runtime context
       */
      public DefaultLoggingManager( 
         File base, String system, LoggingDescriptor descriptor ) throws Exception
      {
          m_baseDirectory = base;
          if( system != null )
          {
              m_system = filter( system );
          }
          else
          {
              m_system = SYSTEM_CATEGORY_DEFAULT;
          }
  
          if( descriptor != null )
          {
              m_descriptor = descriptor;
          }
          else
          {
              m_descriptor = 
                new LoggingDescriptor(
                  "", null, null, new TargetDescriptor[0],
                  new CategoryDirective( "logging", "DEBUG", null ) );
          }
  
          //
          // setup the hierarchy, default logging target, and default priority
          //
  
          m_logHierarchy = new Hierarchy();
          getHierarchy().setDefaultLogTarget( DEFAULT_STREAM );
          m_targets.put( DEFAULT_TARGET, DEFAULT_STREAM );
          String priority;
          if( m_descriptor.getPriority() != null )
          {
              priority = m_descriptor.getPriority();
          } 
          else
          {
              priority = DEFAULT_PRIORITY;
          }
  
          getHierarchy().setDefaultPriority( Priority.getPriorityForName( priority ) );
  
          //
          // setup the bootstrap logging category
          //
  
          CategoryDirective bootstrap = m_descriptor.getBootstrapCategory();
  
          m_logger = 
            new LogKitLogger(
              addCategory( 
                bootstrap.getName(), 
                bootstrap.getPriority(), 
                bootstrap.getTarget(), 
                false ) );
  
          m_logger.debug( "setting default priority: " + priority );
  
          //
          // build targets based on the information contained in the descriptor
          //
  
          TargetDescriptor[] targets = m_descriptor.getTargetDescriptors();
          for( int i = 0; i < targets.length; i++ )
          {
              addTarget( targets[i] );
          }
  
          //
          // set the default target
          //
  
          String name = m_descriptor.getTarget();
          if( name != null )
          {
              LogTarget target = (LogTarget) m_targets.get( name );
              if( target != null )
              {
                  getHierarchy().setDefaultLogTarget( target );
              } 
              else
              {
                  throw new LoggerException(
                          "Supplied default logging target: '"
                          + name + "' does not exist." );
              }
          }
      }
  
      //===============================================================
      // 
      //===============================================================
  
      /**
       * Add a set of category entries using the supplied categories descriptor.
       * @param descriptor a set of category descriptors to be added under the path
       */
      public void addCategories( CategoriesDirective descriptor )
      {
          addCategories( "", descriptor );
      }
  
      /**
       * Add a set of category entries relative to the supplied base category
       * path, using the supplied descriptor as the definition of subcategories.
       * @param path the category base path
       * @param descriptor a set of category descriptors to be added under
       *   the base path
       */
      public void addCategories( String path, CategoriesDirective descriptor )
      {
          addCategory( path, descriptor.getPriority(), descriptor.getTarget() );
          CategoryDirective[] categories = descriptor.getCategories();
          for( int i = 0; i < categories.length; i++ )
          {
              CategoryDirective category = categories[i];
              final String priority = category.getPriority();
              final String target = category.getTarget();
              if( path.equals( "" ) )
              {
                  addCategory( category.getName(), priority, target );
              } else
              {
                  addCategory( path + "." + category.getName(), priority, target );
              }
          }
      }
  
      /**
       * Add a set of category entries relative to the system category
       * using the supplied descriptor as the definition of subcategories.
       * @param path the category base path
       * @param descriptor a set of category descriptors to be added under
       *   the system path
       */
      public void addSystemCategories( String path, CategoriesDirective descriptor )
      {
          final String category = convertToSystem( path );
          addCategories( category, descriptor );
      }
  
      /**
       * Create a system logging channel.
       *
       * @param path the category path
       * @return the logging channel
       */
      public org.apache.avalon.framework.logger.Logger getSystemLoggerForCategory( final String path )
      {
          final String category = convertToSystem( path );
          return getLoggerForCategory( category );
      }
  
      /**
       * Create a logging channel configured with the supplied category path,
       * priority and target.
       *
       * @param name logging category path
       * @param target the logging target to assign the channel to
       * @param priority the priority level to assign to the channel
       * @return the logging channel
       * @throws Exception if an error occurs
       */
      public org.apache.avalon.framework.logger.Logger getLoggerForCategory(
              final String name, String target, String priority )
              throws Exception
      {
          return new LogKitLogger( addCategory( name, target, priority ) );
      }
  
      /**
       * Configure Logging channel based on the description supplied in a
       * category descriptor.
       *
       * @param category defintion of the channel category, priority and target
       * @return the logging channel
       * @throws Exception if an error occurs
       */
      public org.apache.avalon.framework.logger.Logger getLoggerForCategory( final CategoryDirective category )
              throws Exception
      {
          return new LogKitLogger(
                  addCategory(
                          category.getName(),
                          category.getPriority(),
                          category.getTarget()
                  )
          );
      }
  
      //===============================================================
      // LoggerManager
      //===============================================================
  
      /**
       * Return the Logger for the specified category.
       * @param category the category path
       * @return the logging channel
       */
      public org.apache.avalon.framework.logger.Logger getLoggerForCategory( final String category )
      {
          if( category == null )
          {
              return new LogKitLogger( getHierarchy().getLoggerFor( "" ) );
          } else
          {
              String cat = filter( category );
              try
              {
                  return new LogKitLogger( getHierarchy().getLoggerFor( cat ) );
              } catch( Throwable e )
              {
                  throw new RuntimeException( "Bad category: " + cat );
              }
          }
      }
  
      /**
       * Return the default Logger.  This is the same
       * as getting the Logger for the "" category.
       * @return the default logging channel
       */
      public org.apache.avalon.framework.logger.Logger getDefaultLogger()
      {
          if( m_logger == null )
          {
              m_logger = getLoggerForCategory( "" );
          }
          return m_logger;
      }
  
      private Logger addCategory( String path, String priority, String target )
      {
          return addCategory( path, priority, target, true );
      }
  
      private Logger addCategory( String path, String priority, String target, boolean notify )
      {
          final String name = filter( path );
          final Logger logger;
  
          try
          {
              logger = getHierarchy().getLoggerFor( name );
          } 
          catch( Throwable e )
          {
              throw new RuntimeException( "Bad category: " + path + " or trans: " + name );
          }
  
          if( priority != null )
          {
              final Priority priorityValue = Priority.getPriorityForName( priority );
              if( !priorityValue.getName().equals( priority ) )
              {
                  final String message = REZ.getString( "unknown-priority", priority, path );
                  throw new IllegalArgumentException( message );
              }
              logger.setPriority( priorityValue );
          }
  
          if( target != null )
          {
              if( !target.equals( "default" ) )
              {
                  final LogTarget logTarget = (LogTarget) m_targets.get( target );
                  if( logTarget != null )
                  {
                      logger.setLogTargets( new LogTarget[]{logTarget} );
                  }
              }
          }
  
          if( notify && getLogger().isInfoEnabled() )
          {
              final String message =
                      REZ.getString( "category-create", name, target, priority );
              getLogger().debug( message );
          }
  
          return logger;
      }
  
      private String filter( String name )
      {
          String path = name.replace( '/', '.' );
          if( path.startsWith( "." ) )
          {
              path = path.substring( 1 );
              return filter( path );
          }
          if( path.endsWith( "." ) )
          {
              path = path.substring( 0, path.length() -1 );
              return filter( path );
          }
          return path;
      }
  
      private void addTarget( TargetDescriptor target ) throws Exception
      {
          final String name = target.getName();
          TargetProvider provider = target.getProvider();
          if( provider instanceof FileTargetProvider )
          {
              FileTargetProvider fileProvider = (FileTargetProvider) provider;
              String filename = fileProvider.getLocation();
              final AvalonFormatter formatter = new AvalonFormatter( DEFAULT_FORMAT );
              File file = new File( m_baseDirectory, filename );
              try
              {
                  FileTarget logTarget = new FileTarget( file.getAbsoluteFile(), false, formatter );
                  m_targets.put( name, logTarget );
              } catch( final IOException ioe )
              {
                  final String message =
                          REZ.getString( "target.nocreate", name, file, ioe.getMessage() );
                  throw new LoggerException( message, ioe );
              }
          } else
          {
              final String error =
                      "Unrecognized logging provider: " + provider.getClass().getName();
              throw new IllegalArgumentException( error );
          }
      }
  
      /**
       * Return the internal Logger.
       */
      private org.apache.avalon.framework.logger.Logger getLogger()
      {
          return m_logger;
      }
  
      private Hierarchy getHierarchy()
      {
          return m_logHierarchy;
      }
  
      private String convertToSystem( String path )
      {
          return m_system + "." + filter( path );
      }
  
  
  }
  
  
  
  1.1                  avalon-sandbox/merlin/composition/src/java/org/apache/avalon/composition/logging/impl/FileTargetProvider.java
  
  Index: FileTargetProvider.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, 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 "Jakarta", "Apache Avalon", "Avalon Framework" and
      "Apache Software Foundation"  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", 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 (INCLU-
   DING, 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/>.
  
  */
  
  package org.apache.avalon.composition.logging.impl;
  
  import org.apache.avalon.composition.logging.TargetProvider;
  
  
  /**
   * File target provider descriptor declares the criteria for creation of
   * an file based logging target.
   *
   * <p><b>XML</b></p>
   * <p>A file target element may be contained within a target element to declare
   * the target as a file based logging sink.</p>
   * <pre>
   *    <font color="gray">&lt;target name="kernel"&gt;</font>
   *       &lt;file location="<font color="darkred">kernel.log</font>" /&gt;
   *    <font color="gray">&lt;/target&gt;</font>
   * </pre>
   *
   * @see TargetProvider
   * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
   * @version $Revision: 1.1 $ $Date: 2003/07/08 15:01:22 $
   */
  public class FileTargetProvider extends TargetProvider
  {
      private final String m_location;
  
      /**
       * Creation of a new file target.
       * @param location the filename of the logging destination
       */
      public FileTargetProvider( final String location )
      {
          m_location = location;
      }
  
      /**
       * Return the filename of the logging target.
       * @return the filename
       */
      public String getLocation()
      {
          return m_location;
      }
  }
  
  
  
  1.1                  avalon-sandbox/merlin/composition/src/java/org/apache/avalon/composition/logging/impl/Resources.properties
  
  Index: Resources.properties
  ===================================================================
  builder.redundent-role.notice=Warning: Type for class {0} redundently specifies role name "{1}" in dependency when it is identical to the name of service. It is recomended that the <role/> section be elided.
  builder.creating-info.notice=Creating a Type for class "{0}".
  builder.created-info.notice=Constructed Type object for class {0}. Type contains {1} services, {2} dependencies, {3} context entrys and {4} loggers.
  builder.bad-toplevel-element.error=Error the component implemented by "{0}" has an invalid element at top level of component info descriptor. Expected: "component-info". Actual: "{1}"
  builder.missing-info.error=Unable to locate resource from which to load info for component implemented by class "{0}".
  builder.missing-xml-creator.error=Unable to create XMLTypeCreator, usually due to not having XML classes on Classpath. Thus unable to lookup XML descriptor for component type "{0}".
  
  builder.creating-profile.notice=Creating Profiles for class "{0}".
  
  target.nocreate=Error creating LogTarget named "{0}" for file {0}. (Reason: {2}).
  unknown-priority=Unknown priority "{0}" for Logger named "{1}".
  category-create=Creating a log category named "{0}" that writes to "{1}" target at priority "{2}".
  
  missing.extension=Unable to locate an extension that is required by application.\n  Extension Name: {0}\n  Specification Vendor: {1}\n  Specification Version: {2}\n  Implementation Vendor: {3}\n  Implementation Vendor-Id: {4}\n  Implementation Version: {5}\n  Implementation URL: {6}
  unsatisfied.extensions=Missing {0} extensions and thus can not build ClassLoader for application.
  bad-classpath-entry=There is a bad entry ("{0}") on classpath that made it impossible to load a manifest.
  available-extensions=Available extensions: {0}
  required-extensions=The list of required extensions for application includes: {0}
  optional-packages-added=The list of "Optional Packages" added to the application include: {0}
  classpath-entries=The list of classpath entrys for the application include: {0}
  
  
  
  
  1.1                  avalon-sandbox/merlin/composition/src/java/org/apache/avalon/composition/logging/impl/package.html
  
  Index: package.html
  ===================================================================
  <body>
  <p>The <code>logging</code> package contains the
  {@link org.apache.avalon.assembly.logging.impl.DefaultLoggingManager} which
  is an initial bootstrap logging mananager that uses mata information
  about logging targets and catagories.  This class is subject to
  refactoring to bring in into a component model to enable easy
  specialization and/or replacement.</p>
  </body>
  
  
  
  1.3       +28 -16    avalon-sandbox/merlin/composition/src/java/org/apache/avalon/composition/repository/impl/FileRepository.java
  
  Index: FileRepository.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/composition/src/java/org/apache/avalon/composition/repository/impl/FileRepository.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- FileRepository.java	8 Jul 2003 13:47:07 -0000	1.2
  +++ FileRepository.java	8 Jul 2003 15:01:23 -0000	1.3
  @@ -105,7 +105,7 @@
      /**
       * Sequence of remote hosts.
       */
  -    private URL[] m_hosts;
  +    private URL[] m_hosts = new URL[0];
   
       //------------------------------------------------------------------
       // lifecycle 
  @@ -122,28 +122,35 @@
       public void contextualize( final Context context ) throws ContextException
       {
           m_base = (File) context.get( BASE_KEY );
  -        URL[] hosts = (URL[]) context.get( HOSTS_KEY );
  -        m_hosts = new URL[ hosts.length ];
  -        for( int i=0; i<hosts.length; i++ )
  +        try
           {
  -            final String path = hosts[i].toString();
  -            if( !path.endsWith( "/" ) ) 
  +            URL[] hosts = (URL[]) context.get( HOSTS_KEY );
  +            m_hosts = new URL[ hosts.length ];
  +            for( int i=0; i<hosts.length; i++ )
               {
  -                try
  +                final String path = hosts[i].toString();
  +                if( !path.endsWith( "/" ) ) 
                   {
  +                    try
  +                    {
                       m_hosts[i] = new URL( path + "/" );
  +                    }
  +                    catch( Throwable e )
  +                    {
  +                        final String error = 
  +                          "Could not coerce supplied URL to a directory reference: " + path;
  +                        throw new IllegalArgumentException( error );
  +                    }
                   }
  -                catch( Throwable e )
  +                else
                   {
  -                    final String error = 
  -                      "Could not coerce supplied URL to a directory reference: " + path;
  -                    throw new IllegalArgumentException( error );
  +                    m_hosts[i] = hosts[i];
                   }
               }
  -            else
  -            {
  -                m_hosts[i] = hosts[i];
  -            }
  +        }
  +        catch( ContextException ce )
  +        {
  +            // use defaults
           }
       }
   
  @@ -227,6 +234,11 @@
                   throw new ConfigurationException( error, e );
               }
           }
  +
  +        //
  +        // TODO: update this so that we aggregate any host defined 
  +        // via context with hosts defined here
  +        //
   
           m_hosts = (URL[]) list.toArray( new URL[0] );
   
  
  
  
  1.1                  avalon-sandbox/merlin/composition-spi/src/java/org/apache/avalon/composition/logging/LoggerException.java
  
  Index: LoggerException.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, 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 "Jakarta", "Apache Avalon", "Avalon Framework" and
      "Apache Software Foundation"  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", 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 (INCLU-
   DING, 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/>.
  
  */
  
  package org.apache.avalon.composition.logging;
  
  import org.apache.avalon.framework.CascadingException;
  
  /**
   * Exception to indicate that there was a logging management related error.
   *
   * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
   * @version $Revision: 1.1 $ $Date: 2003/07/08 15:01:23 $
   */
  public class LoggerException
          extends CascadingException
  {
  
      /**
       * Construct a new <code>LoggerException</code> instance.
       *
       * @param message The detail message for this exception.
       */
      public LoggerException( final String message )
      {
          this( message, null );
      }
  
      /**
       * Construct a new <code>LoggerException</code> instance.
       *
       * @param message The detail message for this exception.
       * @param throwable the root cause of the exception
       */
      public LoggerException( final String message, final Throwable throwable )
      {
          super( message, throwable );
      }
  }
  
  
  
  
  1.1                  avalon-sandbox/merlin/composition-spi/src/java/org/apache/avalon/composition/logging/LoggingDescriptor.java
  
  Index: LoggingDescriptor.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, 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 "Jakarta", "Apache Avalon", "Avalon Framework" and
      "Apache Software Foundation"  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", 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 (INCLU-
   DING, 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/>.
  
  */
  
  package org.apache.avalon.composition.logging;
  
  import org.apache.avalon.meta.data.CategoryDirective;
  
  
  /**
   * Description of a top level logging system.
   *
   * <p><b>XML</b></p>
   * <p>A logging element declares the top level defaults for priority and target name, a set of
   * targets to which logging events shall be directed.
   * The logging element declares the application wide default logging priority.
   * A target element enables defintion of a logging file to which log entries will
   * be directed.  The target name attribute is the name referenced by category elements
   * defined within the loggers element. The priority attribute may container one of the values
   * <code>DEBUG</code>, <code>INFO</code>, <code>WARN</code> or <code>ERROR</code>.
   * The target must contain a single file element with the attribute <code>location</code>
   * the corresponds to the name of the logging file.</p>
   *
   * <pre>
   *    <font color="gray"><i>&lt;!--
   *    Definition of a logging system.
   *    --&gt;</i></font>
   *
   *    &lt;logging name="" priority="<font color="darkred">INFO</font>" target="<font color="darkred">kernel</font>"&gt;
   *      &lt;category name="logging" priority="<font color="darkred">WARN</font>"/&gt;
   *      &lt;target name="<font color="darkred">kernel</font>"&gt;
   *        &lt;file location="<font color="darkred">kernel.log</font>" /&gt;
   *      &lt;/target&gt;
   *    &lt;/logging&gt;
   * </pre>
   *
   * @see TargetDescriptor
   * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
   * @version $Revision: 1.1 $ $Date: 2003/07/08 15:01:23 $
   */
  public final class LoggingDescriptor extends CategoryDirective
  {
  
      /**
       * The dependencies keyed by role name.
       */
      private final TargetDescriptor[] m_targets;
  
      /**
       * The bootstrap logging category.
       */
      private final CategoryDirective m_bootstrap;
  
      /**
       * Create a LoggingDescriptor instance.
       */
      public LoggingDescriptor()
      {
          this( "", null, null, new TargetDescriptor[0], new CategoryDirective( "logging" ) );
      }
  
      /**
       * Create a LoggingDescriptor instance.
       *
       * @param root the root logger category name
       * @param priority the default logging priority
       * @param target the default logging target
       * @param targets the set of logging targets
       * @param bootstrap the bootstrap category to use to log mesages
       *    from the logging system
       */
      public LoggingDescriptor( final String root,
              final String priority,
              final String target,
              final TargetDescriptor[] targets,
              final CategoryDirective bootstrap )
      {
          super( root, priority, target );
          m_targets = targets;
          m_bootstrap = bootstrap;
      }
  
      /**
       * Return the set of logging target descriptors.
       *
       * @return the target descriptors
       */
      public TargetDescriptor[] getTargetDescriptors()
      {
          return m_targets;
      }
  
      /**
       * Return the bootstrap logging category to which the logging manager will
       * log information about its own activities.
       *
       * @return the category
       */
      public CategoryDirective getBootstrapCategory()
      {
          return m_bootstrap;
      }
  
  }
  
  
  
  1.1                  avalon-sandbox/merlin/composition-spi/src/java/org/apache/avalon/composition/logging/LoggingManager.java
  
  Index: LoggingManager.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, 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 "Jakarta", "Apache Avalon", "Avalon Framework" and
      "Apache Software Foundation"  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", 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 (INCLU-
   DING, 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/>.
  
  */
  
  package org.apache.avalon.composition.logging;
  
  import org.apache.avalon.framework.logger.Logger;
  import org.apache.avalon.meta.data.CategoryDirective;
  import org.apache.avalon.meta.data.CategoriesDirective;
  
  /**
   * A <code>LoggerManager</code> that supports the management of a logging hierarchy.
   * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
   */
  public interface LoggingManager
  {
      /**
       * Standard context key for the logging manager.
       */
       static final String KEY = "urn:assembly:logging";
  
       static final String SYSTEM_CATEGORY_KEY = "urn:avalon:assembly.logging.system-category";
  
      /**
       * Add a set of category entries using the supplied categories descriptor.
       * @param descriptor a set of category descriptors to be added under the path
       */
      public void addCategories( CategoriesDirective descriptor );
  
      /**
       * Add a set of category entries relative to the supplied base category
       * path, using the supplied descriptor as the definition of subcategories.
       * @param path the category base path
       * @param descriptor a set of category descriptors to be added under
       *   the base path
       */
      public void addCategories( String path, CategoriesDirective descriptor );
  
      /**
       * Add a set of category entries relative to the system category
       * using the supplied descriptor as the definition of subcategories.
       * @param path the category base path
       * @param descriptor a set of category descriptors to be added under
       *   the system path
       */
      public void addSystemCategories( String path, CategoriesDirective descriptor );
  
      /**
       * Create a system logging channel.
       *
       * @param category the category path
       * @return the logging channel
       */
      public Logger getSystemLoggerForCategory( final String category );
  
  
      /**
       * Create a logging channel configured with the supplied category path,
       * priority and target.
       *
       * @param name logging category path
       * @param target the logging target to assign the channel to
       * @param priority the priority level to assign to the channel
       * @return the logging channel
       * @throws Exception if an error occurs
       */
      public Logger getLoggerForCategory(
              final String name, String target, String priority )
              throws Exception;
  
      /**
       * Configure Logging channel based on the description supplied in a
       * category descriptor.
       *
       * @param category defintion of the channel category, priority and target
       * @return the logging channel
       * @throws Exception if an error occurs
       */
      public Logger getLoggerForCategory( final CategoryDirective category )
              throws Exception;
  
      /**
       * Return the Logger for the specified category.
       * @param category the category path
       * @return the logging channel
       */
      public Logger getLoggerForCategory( final String category );
  
      /**
       * Return the default Logger.  This is the same
       * as getting the Logger for the "" category.
       * @return the default logging channel
       */
      public Logger getDefaultLogger();
  }
  
  
  
  1.1                  avalon-sandbox/merlin/composition-spi/src/java/org/apache/avalon/composition/logging/TargetDescriptor.java
  
  Index: TargetDescriptor.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, 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 "Jakarta", "Apache Avalon", "Avalon Framework" and
      "Apache Software Foundation"  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", 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 (INCLU-
   DING, 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/>.
  
  */
  
  package org.apache.avalon.composition.logging;
  
  import java.io.Serializable;
  
  /**
   * A logging target descriptor.
   *
   * <p><b>XML</b></p>
   * A logging target declares target name and a logging mechanism.</p>
   *
   * <pre>
   *     &lt;target name="<font color="darkred">kernel</font>"&gt;
   *       &lt;file location="<font color="darkred">kernel.log</font>" /&gt;
   *     &lt;/target&gt;
   * </pre>
   *
   * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
   * @version $Revision: 1.1 $ $Date: 2003/07/08 15:01:23 $
   */
  public final class TargetDescriptor implements Serializable
  {
      /**
       * The target name.
       */
      private final String m_name;
  
      /**
       * The target provider descriptor.
       */
      private final TargetProvider m_provider;
  
      /**
       * Create a LoggingDescriptor instance.
       *
       * @param name the target name
       * @param provider the target provider description
       */
      public TargetDescriptor( final String name,
              final TargetProvider provider )
      {
          m_name = name;
          m_provider = provider;
      }
  
      /**
       * Return the target name.
       *
       * @return the target name.
       */
      public String getName()
      {
          return m_name;
      }
  
      /**
       * Return the target provider descriptor
       *
       * @return the provider descriptor
       */
      public TargetProvider getProvider()
      {
          return m_provider;
      }
  
  }
  
  
  
  1.1                  avalon-sandbox/merlin/composition-spi/src/java/org/apache/avalon/composition/logging/TargetProvider.java
  
  Index: TargetProvider.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, 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 "Jakarta", "Apache Avalon", "Avalon Framework" and
      "Apache Software Foundation"  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", 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 (INCLU-
   DING, 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/>.
  
  */
  
  package org.apache.avalon.composition.logging;
  
  import java.io.Serializable;
  
  /**
   * Abstract logging target provider type.  This is an empty abstract class from
   * all logging providers must inherit.
   *
   * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
   * @version $Revision: 1.1 $ $Date: 2003/07/08 15:01:23 $
   */
  public abstract class TargetProvider implements Serializable
  {
  }
  
  
  
  1.1                  avalon-sandbox/merlin/composition-spi/src/java/org/apache/avalon/composition/logging/package.html
  
  Index: package.html
  ===================================================================
  <body>
  <p>The <code>logging</code> package contains the
  {@link org.apache.avalon.composition.logging.LoggingManager} which
  is an interface to the initial bootstrap logging mananager that uses mata information
  about logging targets and catagories.
  </p>
  </body>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org


Mime
View raw message