mcconnell 2002/12/17 01:59:48
Modified: merlin/src/java/org/apache/avalon/merlin/block
BlockLoader.java
merlin/src/java/org/apache/avalon/merlin/container
ContainerLoader.java DefaultContainer.java
DefaultContainer.xinfo
merlin/src/java/org/apache/avalon/merlin/kernel
DefaultKernel.java
merlin/src/test/config block.xml
merlin/src/test/org/apache/avalon/playground
StandardComponent.xinfo
Log:
Integration of service registration support and synchronization with assembly
revisions.
Revision Changes Path
1.6 +7 -5
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/block/BlockLoader.java
Index: BlockLoader.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/block/BlockLoader.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- BlockLoader.java 17 Dec 2002 04:45:21 -0000 1.5
+++ BlockLoader.java 17 Dec 2002 09:59:47 -0000 1.6
@@ -97,6 +97,7 @@
import org.apache.avalon.merlin.container.ContainerException;
import org.apache.avalon.merlin.container.DefaultContainer;
import org.apache.avalon.merlin.container.builder.XMLContainerCreator;
+import org.apache.avalon.merlin.service.Registry;
import org.apache.avalon.meta.info.Type;
import org.apache.avalon.meta.model.LoggingDirective;
import org.apache.avalon.meta.model.Profile;
@@ -146,7 +147,8 @@
* @return the set of block appliance instances
* @exception Exception if an installation failure occurs
*/
- protected Block[] loadBlocks( EngineClassLoader parent, File home, URL[] urls,
Context system ) throws Exception
+ protected Block[] loadBlocks(
+ EngineClassLoader parent, Registry registry, File home, URL[] urls, Context
system ) throws Exception
{
int n = urls.length;
if( n > 0 )
@@ -167,7 +169,7 @@
URL url = urls[i];
try
{
- Block block = loadBlock( parent, home, url, system );
+ Block block = loadBlock( parent, registry, home, url, system );
blocks.add( block );
}
catch( Throwable e )
@@ -202,7 +204,7 @@
}
private Block loadBlock(
- EngineClassLoader parent, File home, URL url, Context system )
+ EngineClassLoader parent, Registry registry, File home, URL url, Context
system )
throws Exception
{
if( getLogger().isDebugEnabled() )
@@ -245,7 +247,7 @@
//
Configuration containerConfig = config.getChild( "container" );
- Appliance appliance = createContainer( engine, name, home, containerConfig,
logger );
+ Appliance appliance = createContainer( engine, registry, name, home,
containerConfig, logger );
Logger child = getLogger().getChildLogger( name );
DefaultBlock block = new DefaultBlock( appliance, url, manifest );
block.enableLogging( child );
1.4 +10 -6
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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ContainerLoader.java 17 Dec 2002 04:46:04 -0000 1.3
+++ ContainerLoader.java 17 Dec 2002 09:59:48 -0000 1.4
@@ -87,6 +87,7 @@
import org.apache.avalon.merlin.block.Block;
import org.apache.avalon.merlin.block.DefaultBlock;
import org.apache.avalon.merlin.container.builder.XMLContainerCreator;
+import org.apache.avalon.merlin.service.Registry;
import org.apache.avalon.assembly.appliance.Appliance;
import org.apache.avalon.assembly.appliance.ApplianceContext;
import org.apache.avalon.assembly.appliance.ApplianceManager;
@@ -127,10 +128,10 @@
* @param logger the logging channel to assign to the container
*/
protected Appliance createContainer(
- EngineClassLoader engine, String name, File home, Configuration config,
Logger logger )
+ EngineClassLoader engine, Registry registry, String name, File home,
Configuration config, Logger logger )
throws Exception
{
- return createContainer( engine, name, home, config, logger, null );
+ return createContainer( engine, registry, name, home, config, logger, null
);
}
/**
@@ -145,7 +146,7 @@
* the block's engine, logging channel, and name are applied to the container
*/
protected Appliance createContainer(
- EngineClassLoader engine, String name, File home, Configuration config,
Logger logger, String partition )
+ EngineClassLoader engine, Registry registry, String name, File home,
Configuration config, Logger logger, String partition )
throws Exception
{
String classname = config.getAttribute( "class",
DefaultContainer.class.getName() );
@@ -176,6 +177,7 @@
Logger childLogger;
EngineClassLoader childEngine;
String childPartition;
+ Registry childRegistry;
if( partition == null )
{
@@ -183,6 +185,7 @@
childLogger = logger;
childEngine = engine;
childPartition = name;
+ childRegistry = registry;
}
else
{
@@ -190,6 +193,7 @@
childLogger = logger.getChildLogger( childName );
childEngine = childEngine = createChildEngine( engine, home,
childConfig, childLogger );
childPartition = partition + "/" + name;
+ childRegistry = registry.createChild( name );
}
//
@@ -198,7 +202,7 @@
Appliance container =
createContainer(
- childEngine, childName, home, childConfig, childLogger,
childPartition );
+ childEngine, childRegistry, childName, home, childConfig,
childLogger, childPartition );
list.add( container );
}
@@ -210,6 +214,7 @@
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:merlin:container.partition", partition );
@@ -220,7 +225,6 @@
}
ApplianceContext context = new ApplianceContext( descriptor );
context.setDeploymentContext( map );
-
if( partition != null )
{
context.setPartitionName( partition );
1.3 +6 -1
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/DefaultContainer.java
Index: DefaultContainer.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/DefaultContainer.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DefaultContainer.java 17 Dec 2002 04:46:04 -0000 1.2
+++ DefaultContainer.java 17 Dec 2002 09:59:48 -0000 1.3
@@ -72,6 +72,7 @@
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.merlin.container.ContainerDescriptor;
+import org.apache.avalon.merlin.service.Registry;
import org.apache.avalon.meta.model.Profile;
/**
@@ -94,6 +95,8 @@
private ContainerDescriptor m_descriptor;
+ private Registry m_registry;
+
/**
* List of the appliance instances that the container is
* holding. Each appliance instance is a contained component.
@@ -142,6 +145,7 @@
m_containers = (List) context.get( "urn:merlin:container.containers" );
m_descriptor = (ContainerDescriptor) context.get(
"urn:merlin:container.descriptor" );
m_partition = (String) context.get( "urn:merlin:container.partition" );
+ m_registry = (Registry) context.get( "urn:merlin:container.registry" );
}
//==============================================================
@@ -182,6 +186,7 @@
context.setPartitionName( m_path );
Appliance appliance = createAppliance( context, true );
m_components.add( appliance );
+ m_registry.bind( appliance );
}
Iterator iterator = m_containers.iterator();
1.3 +2 -0
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/DefaultContainer.xinfo
Index: DefaultContainer.xinfo
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/DefaultContainer.xinfo,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DefaultContainer.xinfo 17 Dec 2002 04:46:04 -0000 1.2
+++ DefaultContainer.xinfo 17 Dec 2002 09:59:48 -0000 1.3
@@ -27,6 +27,8 @@
type="java.util.List"/>
<entry key="urn:merlin:container.descriptor"
type="org.apache.avalon.merlin.container.ContainerDescriptor"/>
+ <entry key="urn:merlin:container.registry"
+ type="org.apache.avalon.merlin.service.Registry"/>
<entry key="urn:merlin:container.partition"/>
</context>
1.12 +36 -7
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.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- DefaultKernel.java 17 Dec 2002 04:46:34 -0000 1.11
+++ DefaultKernel.java 17 Dec 2002 09:59:48 -0000 1.12
@@ -99,6 +99,8 @@
import org.apache.avalon.merlin.block.DefaultBlock;
import org.apache.avalon.merlin.block.BlockLoader;
import org.apache.avalon.merlin.container.Container;
+import org.apache.avalon.merlin.service.DefaultRegistry;
+import org.apache.avalon.merlin.service.Registry;
/**
* Default kernel implementation. The implementation provides support for
@@ -173,7 +175,9 @@
/**
* A map of root containers keyed by the block it is contained by.
*/
- private Map m_containers = new Hashtable();
+ private Map m_containers = new Hashtable();
+
+ private DefaultRegistry m_registry;
//==============================================================
// Contextualizable
@@ -263,6 +267,9 @@
throw new CascadingException( error, e );
}
+ String domain = m_config.getChild( "system" ).getChild( "host" ).getValue(
"localhost" );
+ m_registry = new DefaultRegistry( domain );
+
//
// announce initialization
//
@@ -311,7 +318,7 @@
CREATOR.createClasspathDescriptor( m_config.getChild( "blocks" ) );
URL[] urls = ClasspathDescriptor.expand( m_home, path );
Context system = getSystemContext();
- blocks = loadBlocks( m_engine, m_home, urls, system );
+ blocks = loadBlocks( m_engine, m_registry, m_home, urls, system );
for( int i=0; i<blocks.length; i++ )
{
m_blocks.add( blocks[i] );
@@ -364,12 +371,33 @@
// Initiate component assembly on all blocks.
//
+ if( getLogger().isInfoEnabled() )
+ {
+ getLogger().info( "commencing composite assembly phase" );
+ }
for( int i=0; i<blocks.length; i++ )
{
Block block = blocks[i];
Container container = (Container) m_containers.get( block );
container.assemble();
}
+
+ //
+ // list the registered services
+ //
+
+ Appliance[] appliances = m_registry.getAppliances();
+ if( appliances.length == 0 )
+ {
+ getLogger().info( "empty registry" );
+ }
+ else
+ {
+ for( int i=0; i<appliances.length; i++ )
+ {
+ getLogger().info("registry: " + appliances[i].getURL() );
+ }
+ }
}
//==============================================================
@@ -385,9 +413,9 @@
{
if( getLogger() != null )
{
- if( getLogger().isDebugEnabled() )
+ if( getLogger().isInfoEnabled() )
{
- getLogger().debug( "startup" );
+ getLogger().info( "commencing startup phase" );
}
}
@@ -412,9 +440,9 @@
{
if( getLogger() != null )
{
- if( getLogger().isDebugEnabled() )
+ if( getLogger().isInfoEnabled() )
{
- getLogger().debug( "shutdown" );
+ getLogger().info( "commencing shutdown phase" );
}
}
@@ -569,6 +597,7 @@
{
DefaultContext context = new DefaultContext();
context.put( "urn:avalon:home", m_home );
+ context.put( "urn:merlin:domain", m_registry.getBase().getHost() );
context.makeReadOnly();
m_system = context;
}
1.6 +4 -4 avalon-sandbox/merlin/src/test/config/block.xml
Index: block.xml
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/src/test/config/block.xml,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- block.xml 17 Dec 2002 04:48:11 -0000 1.5
+++ block.xml 17 Dec 2002 09:59:48 -0000 1.6
@@ -5,18 +5,18 @@
<block>
- <container>
+ <services>
+ <service type="org.apache.avalon.playground.StandardService:1.1" />
+ </services>
+ <container>
<component name="default"
class="org.apache.avalon.playground.StandardComponent" activation="startup">
<context class="org.apache.avalon.playground.StandardContext">
<entry key="location">New York</entry>
<import name="urn:avalon:home" key="home" />
</context>
</component>
-
<container name="test"/>
-
</container>
-
</block>
1.3 +1 -14
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardComponent.xinfo
Index: StandardComponent.xinfo
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardComponent.xinfo,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- StandardComponent.xinfo 17 Dec 2002 04:40:39 -0000 1.2
+++ StandardComponent.xinfo 17 Dec 2002 09:59:48 -0000 1.3
@@ -25,21 +25,8 @@
</context>
<services>
- <service>
- <reference type="org.apache.avalon.playground.StandardService" version="1.1"/>
- </service>
+ <service type="org.apache.avalon.playground.StandardService:1.1" />
</services>
-
- <dependencies>
- <!--
- Declaration of the services that this component type is
- dependent on.
- <dependency>
- <role>fake</role>
- <reference type="Xxx" version="1.1"/>
- </dependency>
- -->
- </dependencies>
</type>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>