You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2002/08/03 05:50:06 UTC

cvs commit: jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel DefaultKernel.java

mcconnell    2002/08/02 20:50:06

  Modified:    assembly/src/etc kernel.xml
               assembly/src/java/org/apache/excalibur/merlin/container
                        DefaultContainer.java
               assembly/src/java/org/apache/excalibur/merlin/kernel
                        DefaultKernel.java
  Added:       assembly/demo/src/java/org/apache/excalibur/playground
                        CustomContainer.java
  Log:
  Addition of support for extended container implementations using <container name="fred" class="MyContainer" />
  
  Revision  Changes    Path
  1.1                  jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/CustomContainer.java
  
  Index: CustomContainer.java
  ===================================================================
  
  
  package org.apache.excalibur.playground;
  
  import org.apache.excalibur.merlin.container.DefaultContainer;
  
  /**
   * This is a minimal validation of the creation of a custom container.  More
   * work is need concernin the DefaultContainer API and validation that it provides
   * the necessary protected methods to make a it useful as a base class.
   *
   * @author <a href="mailto:mcconnell@osm.net">Stephen McConnell</a>
   */
  
  public class CustomContainer extends DefaultContainer 
  {
  
      //=======================================================================
      // Initializable
      //=======================================================================
  
      public void initialize() throws Exception
      {
          getLogger().info("this is the initialization of a cutomer container");
          super.initialize();
      }
  
  }
  
  
  
  1.22      +1 -1      jakarta-avalon-excalibur/assembly/src/etc/kernel.xml
  
  Index: kernel.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/etc/kernel.xml,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- kernel.xml	2 Aug 2002 12:31:01 -0000	1.21
  +++ kernel.xml	3 Aug 2002 03:50:06 -0000	1.22
  @@ -128,7 +128,7 @@
        child container instances.
        -->
   
  -     <container name="sub">
  +     <container name="sub" class="org.apache.excalibur.playground.CustomContainer">
   
          <container name="demo">
   
  
  
  
  1.21      +18 -2     jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/container/DefaultContainer.java
  
  Index: DefaultContainer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/container/DefaultContainer.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- DefaultContainer.java	2 Aug 2002 12:31:01 -0000	1.20
  +++ DefaultContainer.java	3 Aug 2002 03:50:06 -0000	1.21
  @@ -523,7 +523,10 @@
               context.put( MANAGER_KEY, manager );
               context.makeReadOnly();
     
  -            DefaultContainer container = new DefaultContainer();
  +            final String classname = 
  +              config.getAttribute( "class", DefaultContainer.class.getName() );
  +            DefaultContainer container = createContainerInstance( manager, classname );
  +
               final Logger logger = getLogger().getChildLogger( name );
               container.enableLogging( logger );
               container.contextualize( context );
  @@ -534,6 +537,19 @@
           catch( Throwable e )
           {
               final String error = "Error establishing subsidiary container.";
  +            throw new ContainerException( error, e );
  +        }
  +    }
  +
  +    private DefaultContainer createContainerInstance( ClassLoader loader, String classname ) throws ContainerException
  +    {
  +        try
  +        {
  +           return (DefaultContainer) loader.loadClass( classname ).newInstance();
  +        }
  +        catch( Throwable e )
  +        {
  +            final String error = "Cannot create a container from the classname: " + classname;
               throw new ContainerException( error, e );
           }
       }
  
  
  
  1.26      +17 -2     jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/DefaultKernel.java
  
  Index: DefaultKernel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/DefaultKernel.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- DefaultKernel.java	2 Aug 2002 06:36:10 -0000	1.25
  +++ DefaultKernel.java	3 Aug 2002 03:50:06 -0000	1.26
  @@ -265,9 +265,11 @@
       {
           ContainerManager manager = null;
           String name = null;
  +        String classname = null;
           try
           {
               name = config.getAttribute( "name", "root");
  +            classname = config.getAttribute( "class", DefaultContainer.class.getName() );
               ClasspathDescriptor classpath = 
                 m_creator.createClasspathDescriptor( config.getChild("classpath") );
               CategoriesDescriptor categories = 
  @@ -289,7 +291,7 @@
               context.put( DefaultContainer.MANAGER_KEY, manager );
               context.makeReadOnly();
     
  -            DefaultContainer container = new DefaultContainer();
  +            DefaultContainer container = createContainerInstance( manager, classname );
               Logger logger = manager.getLoggingManager().getLoggerForCategory( name );
               container.enableLogging( logger );
               container.contextualize( context );
  @@ -300,6 +302,19 @@
           catch( Throwable e )
           {
               final String error = "Error establishing root container.";
  +            throw new KernelException( error, e );
  +        }
  +    }
  +
  +    private DefaultContainer createContainerInstance( ClassLoader loader, String classname ) throws KernelException
  +    {
  +        try
  +        {
  +           return (DefaultContainer) loader.loadClass( classname ).newInstance();
  +        }
  +        catch( Throwable e )
  +        {
  +            final String error = "Cannot create a container from the classname: " + classname;
               throw new KernelException( error, e );
           }
       }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>