mcconnell    2002/09/12 01:30:04

  Modified:    assembly build.xml
               assembly/src/etc activation.mf
               assembly/src/java/org/apache/excalibur/merlin/assembly
                        TypeManager.java
               assembly/src/java/org/apache/excalibur/playground/activation
                        TestServant.xinfo
  Added:       assembly/src/java/org/apache/excalibur/merlin/assembly
                        ServiceRegistry.java
  Log:
  Addition of a ServiceRegistry supporting the seperate service meta-info.
  
  Revision  Changes    Path
  1.61      +2 -1      jakarta-avalon-excalibur/assembly/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/build.xml,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- build.xml 11 Sep 2002 16:38:30 -0000      1.60
  +++ build.xml 12 Sep 2002 08:30:04 -0000      1.61
  @@ -474,7 +474,8 @@
     -->
   
     <target name="orb.context">
  -    <available property="orb.available" 
file="${apps.dir}/enterprise/orb/dist/orb-2.0.jar"/>
  +    <available property="orb.available" 
  +        file="${apps.dir}/enterprise/orb/dist/orb-2.0.jar"/>
     </target>
   
     <target name="orb.update" depends="orb.context" if="orb.available">
  
  
  
  1.4       +1 -1      jakarta-avalon-excalibur/assembly/src/etc/activation.mf
  
  Index: activation.mf
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/etc/activation.mf,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- activation.mf     12 Sep 2002 06:09:14 -0000      1.3
  +++ activation.mf     12 Sep 2002 08:30:04 -0000      1.4
  @@ -12,5 +12,5 @@
   Name: org/apache/excalibur/merlin/activation/Directory.class
   Avalon: Type
   
  -Name: org/apache/excalibur/merlin/activation/TestCase.class
  +Name: org/apache/excalibur/playground/activation/TestCase.class
   Avalon: Service
  
  
  
  1.21      +29 -5     
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/assembly/TypeManager.java
  
  Index: TypeManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/assembly/TypeManager.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- TypeManager.java  10 Sep 2002 23:07:21 -0000      1.20
  +++ TypeManager.java  12 Sep 2002 08:30:04 -0000      1.21
  @@ -115,6 +115,11 @@
       private TypeRegistry m_types;
   
      /**
  +    * The service registry.
  +    */
  +    private ServiceRegistry m_services;
  +
  +   /**
       * The base directory.
       */
       private File m_home;
  @@ -214,6 +219,7 @@
   
           getLocalLogger().debug("initialize");
           m_types = new TypeRegistry( this, getLocalLogger().getChildLogger( "types" 
) );
  +        m_services = new ServiceRegistry( this, getLocalLogger().getChildLogger( 
"services" ) );
   
           //
           // handle the bootstrap process
  @@ -307,13 +313,13 @@
                   final Iterator it = attributes.keySet().iterator();
                   while( it.hasNext() )
                   {
  +                    final String path = cleanName( name );
  +
                       final Object entry = it.next();
                       if( entry.toString().equals( "Avalon-Block" ) )
                       {
                           if( attributes.get( entry ).equals( "true" ) )
                           {
  -                            final String path = 
  -                              name.substring( 0, name.indexOf( ".class" ) );
                               try
                               {
                                   m_types.addBlock( path );
  @@ -336,8 +342,6 @@
                       {
                           if( attributes.get( entry ).equals( "Type" ) )
                           {
  -                            final String path = 
  -                              name.substring( 0, name.indexOf( ".class" ) );
                               try
                               {
                                   m_types.addType( path );
  @@ -348,6 +352,18 @@
                                   getLocalLogger().warn( warning, e );
                               }
                           }
  +                        else if( attributes.get( entry ).equals( "Service" ) )
  +                        {
  +                            try
  +                            {
  +                                m_services.addService( path );
  +                            }
  +                            catch( Throwable e )
  +                            {
  +                                final String warning = "Bypassing service: " + path 
;
  +                                getLocalLogger().warn( warning, e );
  +                            }
  +                        }
                       }
                   }
               }
  @@ -680,4 +696,12 @@
           return (Manifest[])manifests.toArray( new Manifest[ 0 ] );
       }
   
  +    /**
  +     * Strips the ".class" ending off of a Type/Block/Service name.
  +     */
  +    private final String cleanName( String name )
  +    {
  +        int end = name.indexOf( ".class" );
  +        return name.substring( 0, ( end >= 0 ) ? end : name.length() );
  +    }
   }
  
  
  
  1.1                  
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/assembly/ServiceRegistry.java
  
  Index: ServiceRegistry.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.excalibur.merlin.assembly;
  
  import java.util.List;
  import java.util.LinkedList;
  import java.util.ArrayList;
  import java.util.Hashtable;
  import java.util.Vector;
  import java.util.Iterator;
  import org.apache.avalon.framework.logger.Logger;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.excalibur.meta.info.ReferenceDescriptor;
  import org.apache.excalibur.meta.info.Service;
  import org.apache.excalibur.meta.info.builder.ServiceBuilder;
  import org.apache.excalibur.meta.verifier.VerifyException;
  
  /**
   * Internal table that holds available component type keyed relative
   * to the service it provides.
   *
   * @author <a href="mailto:[EMAIL PROTECTED]";>Stephen McConnell</a>
   * @version $Revision: 1.1 $ $Date: 2002/09/12 08:30:04 $
   */
  class ServiceRegistry extends AbstractLogEnabled 
  {
  
      //=======================================================================
      // state
      //=======================================================================
  
      private ServiceBuilder m_builder = new ServiceBuilder();
  
      private ClassLoader m_classloader;
  
     /**
      * Service types keyed by classname.
      */
      private Hashtable m_table = new Hashtable();
  
      //=======================================================================
      // constructor
      //=======================================================================
  
     /**
      * Creation of a new service registry.
      * @param registry the registry that will be supplied to new component defintions
      * @param loader the registry class loader
      * @param profiles the configuration fragment containing explicit component 
profiles
      */
      public ServiceRegistry( ClassLoader loader, Logger logger )
      {
          m_classloader = loader;
          super.enableLogging( logger );
          m_builder.enableLogging( logger );
          getLogger().debug("service registry established");
      }
  
      //=======================================================================
      // implemetation 
      //=======================================================================
  
     /**
      * Test is a service is know in the registry.
      */
      public boolean isLocal( String classname )
      {
          return getService( classname ) != null;
      }
  
     /**
      * Register a service defintion.
      *
      * @param classname the service class name
      * @return the service descriptor
      */
      public Service addService( String path ) throws Exception
      {
          final String classname = path.replace('/','.');
  
          getLogger().debug("service: " + classname );
          Service service = getService( classname );
          if( service == null )
          {
              service= m_builder.build( classname, m_classloader );
              m_table.put( classname, service );
          }
          return service;
      }
  
     /**
      * Returns the service implementation class.
      *
      * @param type the service defintion
      * @exception VerifyException if the service fails verification
      */
      protected Class getServiceClass( Service service ) throws Exception
      {
          return m_classloader.loadClass( service.getClassname() );
      }
  
     /**
      * Returns the set of services know to the registry.
      * @return the services
      */
      public Service[] getServices()
      {
          return (Service[]) m_table.values().toArray( new Service[0] );
      }
  
     /**
      * Returns the set of services matching a supplied phase.
      * @return the set of types capable of supporting the stage. 
      */
      public Service getService( ReferenceDescriptor reference )
      {
          Service service = (Service) m_table.get( reference.getClassname() );
          if( service.matches( reference ) )
          {
              return service;
          }
          return null;
      }
  
     /**
      * Returns a registered component type.
      * @return the component type from the registry or null if the type is unknown
      */
      public Service getService( String classname ) 
      {
          return (Service) m_table.get( classname );
      }
  }
  
  
  
  
  1.5       +1 -1      
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/playground/activation/TestServant.xinfo
  
  Index: TestServant.xinfo
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/playground/activation/TestServant.xinfo,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TestServant.xinfo 11 Sep 2002 06:57:24 -0000      1.4
  +++ TestServant.xinfo 12 Sep 2002 08:30:04 -0000      1.5
  @@ -51,7 +51,7 @@
     </component>
   
     <services>
  -    <service> 
  +    <service>
         <attributes>
           <attribute key="avalon:service.protocol" value="iiop"/>
           <attribute key="avalon:service.name" value="test-case"/>
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to