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>