mcconnell 2002/12/16 20:46:34
Modified: merlin/src/java/org/apache/avalon/merlin/kernel
DefaultKernel.java
Log:
Updated to incorporate block and container changes.
Revision Changes Path
1.11 +96 -13
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/kernel/DefaultKernel.java
Index: DefaultKernel.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/kernel/DefaultKernel.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- DefaultKernel.java 16 Dec 2002 01:09:47 -0000 1.10
+++ DefaultKernel.java 17 Dec 2002 04:46:34 -0000 1.11
@@ -55,6 +55,11 @@
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
+import java.util.List;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.ArrayList;
+import java.util.Hashtable;
import java.util.Enumeration;
import java.util.jar.JarFile;
import java.util.jar.Attributes;
@@ -93,6 +98,7 @@
import org.apache.avalon.merlin.block.Block;
import org.apache.avalon.merlin.block.DefaultBlock;
import org.apache.avalon.merlin.block.BlockLoader;
+import org.apache.avalon.merlin.container.Container;
/**
* Default kernel implementation. The implementation provides support for
@@ -159,6 +165,16 @@
*/
private Context m_system;
+ /**
+ * The list of blocks established by the kernel.
+ */
+ private List m_blocks = new ArrayList();
+
+ /**
+ * A map of root containers keyed by the block it is contained by.
+ */
+ private Map m_containers = new Hashtable();
+
//==============================================================
// Contextualizable
//==============================================================
@@ -251,9 +267,9 @@
// announce initialization
//
- if( getLogger().isDebugEnabled() )
+ if( getLogger().isInfoEnabled() )
{
- getLogger().debug( "initialization: " + m_home );
+ getLogger().info( "initialization from: " + m_home );
}
//
@@ -283,24 +299,23 @@
// kernel configuration
//
- if( getLogger().isDebugEnabled() )
+ if( getLogger().isInfoEnabled() )
{
- getLogger().debug( "block assembly" );
+ getLogger().info( "commencing block construction phase" );
}
+ Block[] blocks;
try
{
ClasspathDescriptor path =
CREATOR.createClasspathDescriptor( m_config.getChild( "blocks" ) );
URL[] urls = ClasspathDescriptor.expand( m_home, path );
-
- if( getLogger().isDebugEnabled() )
+ Context system = getSystemContext();
+ blocks = loadBlocks( m_engine, m_home, urls, system );
+ for( int i=0; i<blocks.length; i++ )
{
- getLogger().debug( "blocks: " + urls.length );
+ m_blocks.add( blocks[i] );
}
-
- Context system = getSystemContext();
- Block[] blocks = loadBlocks( m_engine, m_home, urls, system );
}
catch( Throwable e )
{
@@ -312,6 +327,49 @@
}
throw new KernelException( error, e );
}
+
+ //
+ // Instantiate the root container in each block.
+ //
+
+ if( getLogger().isInfoEnabled() )
+ {
+ getLogger().info( "commencing structural assembly phase" );
+ }
+
+ for( int i=0; i<blocks.length; i++ )
+ {
+ Block block = blocks[i];
+ Appliance appliance = block.getAppliance();
+ try
+ {
+ m_engine.assemble( appliance );
+ Container container = (Container)appliance.access();
+ m_containers.put( block, container );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Unable to deploy root container: " + appliance;
+ String log = ExceptionHelper.packException( error, e );
+ if( getLogger().isErrorEnabled() )
+ {
+ getLogger().error( log );
+ }
+ throw new KernelException( error, e );
+ }
+ }
+
+ //
+ // Initiate component assembly on all blocks.
+ //
+
+ for( int i=0; i<blocks.length; i++ )
+ {
+ Block block = blocks[i];
+ Container container = (Container) m_containers.get( block );
+ container.assemble();
+ }
}
//==============================================================
@@ -332,6 +390,17 @@
getLogger().debug( "startup" );
}
}
+
+ Iterator iterator = m_blocks.iterator();
+ while( iterator.hasNext() )
+ {
+ Block block = (Block) iterator.next();
+ Container container = (Container) m_containers.get( block );
+ if( container != null )
+ {
+ container.startup();
+ }
+ }
}
/**
@@ -348,6 +417,20 @@
getLogger().debug( "shutdown" );
}
}
+
+ Iterator iterator = m_blocks.iterator();
+ while( iterator.hasNext() )
+ {
+ Block block = (Block) iterator.next();
+ Container container = (Container) m_containers.get( block );
+ if( container != null )
+ {
+ m_containers.remove( block );
+ container.shutdown();
+ block.getAppliance().release( container );
+ block.getAppliance().terminate();
+ }
+ }
}
//==============================================================
@@ -361,9 +444,9 @@
{
if( getLogger() != null )
{
- if( getLogger().isDebugEnabled() )
+ if( getLogger().isInfoEnabled() )
{
- getLogger().debug( "dispose" );
+ getLogger().info( "bye" );
}
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>