mcconnell 2002/12/27 08:42:27
Modified: merlin/src/java/org/apache/avalon/merlin/container
ContainerLoader.java
Log:
Ratiuonalization relative to keneral functionality.
Revision Changes Path
1.8 +5 -130
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/ContainerLoader.java
Index: ContainerLoader.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/ContainerLoader.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ContainerLoader.java 21 Dec 2002 03:30:24 -0000 1.7
+++ ContainerLoader.java 27 Dec 2002 16:42:27 -0000 1.8
@@ -102,7 +102,10 @@
import org.apache.excalibur.configuration.ConfigurationUtil;
/**
- * An abstract utility class that provides support for
+ * An abstract utility class that provides support for the creation of subsidiary
+ * component management engines and utilities for he creation of component profiles
+ * (used with container descriptor creation).
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development
Team</a>
* @version $Revision$ $Date$
*/
@@ -119,133 +122,6 @@
// ContainerLoader
//==============================================================
- /**
- * Creation of a new appliance holding a container.
- * @param engine the component classloader to assign to the container
- * @param name the container name
- * @param home the root directory against which the classpath and extensions
- * will be resolved
- * @param config the container configuration
- * @param logger the logging channel to assign to the container
- */
- protected Appliance createContainer(
- EngineClassLoader engine, Registry registry, String name, File home,
Configuration config, Logger logger )
- throws Exception
- {
- return createContainer( engine, registry, name, home, config, logger, "/" );
- }
-
- /**
- * Creation of a new appliance holding a container.
- * @param engine the component classloader to assign to the container
- * @param name the container name
- * @param home the root directory against which the classpath and extensions
- * will be resolved
- * @param config the container configuration
- * @param logger the logging channel to assign to the container
- * @param partition if null, this is a root container of a block in which case
- * the block's engine, logging channel, and name are applied to the container
- */
- protected Appliance createContainer(
- EngineClassLoader engine, Registry registry, String name, File home,
Configuration config, Logger logger, String partition )
- throws Exception
- {
- String classname = config.getAttribute( "class",
DefaultContainer.class.getName() );
- Type type = engine.getRepository().getTypeManager().getType( classname );
- ContainerDescriptor descriptor = CREATOR.createContainerDescriptor( type,
config, name );
-
- Configuration[] components = config.getChildren( "component" );
- for( int i=0; i<components.length; i++ )
- {
- Profile profile = createProfile( name, engine, components[i] );
- engine.getRepository().getProfileManager().addProfile( profile );
- descriptor.addComponent( profile );
- }
-
- ArrayList list = new ArrayList();
- Configuration[] containers = config.getChildren( "container" );
- for( int i=0; i<containers.length; i++ )
- {
- //
- // create a classloader that will be supplied to the
- // container (including resolution of the container level classpath
- // and extension path additions), logger, and container name
- //
-
- Configuration childConfig = containers[i];
- Configuration engineConfig = childConfig.getChild( "engine" );
- String childName;
- Logger childLogger;
- EngineClassLoader childEngine;
- String childPartition;
- Registry childRegistry;
-
- if( partition == null )
- {
- childPartition = name + "/";
- }
- else
- {
- childPartition = partition + name + "/";
- }
- childName = childConfig.getAttribute( "name", "untitled" );
- childLogger = logger.getChildLogger( childName );
- childEngine = childEngine = createChildEngine( engine, home,
childConfig, childLogger );
- childRegistry = registry.createChild( name );
-
- //
- // recursively call this method to create the subsidiary containers
- //
-
- Appliance container =
- createContainer(
- childEngine, childRegistry, childName, home, childConfig,
childLogger, childPartition );
- list.add( container );
- }
-
- //
- // create the appliance context for the container
- //
-
- Map map = new Hashtable();
- map.put("urn:assembly:engine.classloader", engine );
- map.put("urn:merlin:container.containers", list );
- map.put("urn:merlin:container.descriptor", descriptor );
- map.put("urn:merlin:container.registry", registry );
- if( partition != null )
- {
- map.put("urn:avalon:partition.name", partition );
- }
- else
- {
- map.put("urn:avalon:partition.name", "" );
- }
-
- DefaultApplianceContext context = new DefaultApplianceContext( descriptor );
- context.setName( name );
- context.setDeploymentContext( map );
- if( partition != null )
- {
- context.setPartitionName( partition );
- }
-
- //
- // create the containement appliance
- //
-
- try
- {
- context.makeReadOnly();
- return engine.createAppliance( context, false );
- }
- catch( Throwable e )
- {
- final String error =
- "Unable to create containment appliance: " + name;
- throw new ContainerException( error, e );
- }
- }
-
protected Profile createProfile( String name, EngineClassLoader engine,
Configuration config )
throws ContainerException
{
@@ -354,5 +230,4 @@
throw new ContainerException( error, e );
}
}
-
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>