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]>

Reply via email to