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:[EMAIL PROTECTED]">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: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>