You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2004/01/21 01:10:27 UTC

cvs commit: avalon/merlin/platform/xdocs/meta/block/services index.xml service.xml

mcconnell    2004/01/20 16:10:27

  Modified:    merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl
                        DefaultBlock.java
               merlin/activation/impl/src/test/conf playground.xml
               merlin/composition/api/src/java/org/apache/avalon/composition/data
                        ServiceDirective.java
               merlin/composition/api/src/java/org/apache/avalon/composition/model
                        ServiceModel.java TypeRepository.java
               merlin/composition/impl/src/java/org/apache/avalon/composition/data/builder
                        XMLContainmentProfileCreator.java
               merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl
                        DefaultContainmentModel.java
                        DefaultModelRepository.java
                        DefaultServiceModel.java DefaultTypeRepository.java
               merlin/composition/impl/src/test/conf context.xml
                        playground.xml
               merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl
                        DefaultFactory.java
               merlin   maven.xml
               merlin/platform/xdocs/meta/block/services index.xml
                        service.xml
  Log:
  Improvements to the service export handling so that you no longer need to declare the <source> element under the <service> export in a <container>.
  
  Revision  Changes    Path
  1.11      +7 -3      avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl/DefaultBlock.java
  
  Index: DefaultBlock.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl/DefaultBlock.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- DefaultBlock.java	19 Jan 2004 21:45:07 -0000	1.10
  +++ DefaultBlock.java	21 Jan 2004 00:10:27 -0000	1.11
  @@ -242,8 +242,12 @@
                   throw new IllegalStateException( error );
               }
   
  -            String path = service.getServiceDirective().getPath();
  -            Appliance provider = (Appliance) m_block.locate( path );
  +            //String path = service.getServiceDirective().getPath();
  +            //Appliance provider = (Appliance) m_block.locate( path );
  +
  +            Appliance provider = 
  +              (Appliance) m_block.locate( 
  +                service.getServiceProvider() );
               if( m_logger.isDebugEnabled() )
                   m_logger.debug( "delegating: " +  method.getName() );
   
  
  
  
  1.3       +1 -3      avalon/merlin/activation/impl/src/test/conf/playground.xml
  
  Index: playground.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/activation/impl/src/test/conf/playground.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- playground.xml	19 Jan 2004 18:12:43 -0000	1.2
  +++ playground.xml	21 Jan 2004 00:10:27 -0000	1.3
  @@ -15,9 +15,7 @@
      </classloader>
   
      <services>
  -     <service type="org.apache.avalon.playground.basic.BasicService" version="1.1">
  -       <source>basic</source>
  -     </service>
  +     <service type="org.apache.avalon.playground.basic.BasicService" version="1.1"/>
      </services>
   
      <container name="subsidiary">
  
  
  
  1.2       +3 -3      avalon/merlin/composition/api/src/java/org/apache/avalon/composition/data/ServiceDirective.java
  
  Index: ServiceDirective.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/composition/api/src/java/org/apache/avalon/composition/data/ServiceDirective.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ServiceDirective.java	24 Sep 2003 09:31:11 -0000	1.1
  +++ ServiceDirective.java	21 Jan 2004 00:10:27 -0000	1.2
  @@ -79,7 +79,7 @@
   
           // TODO: put in place relative and absolute addressing
   
  -        if( path.startsWith( "/" ) )
  +        if( ( null != path ) && path.startsWith( "/" ) )
           {
               m_path = path.substring( 1, path.length() );
           }
  @@ -91,7 +91,7 @@
   
      /**
       * Return the virtual service component relative path.
  -    * @return the relative component path
  +    * @return the relative component path (possibly null)
       */
       public String getPath()
       {
  
  
  
  1.3       +7 -1      avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/ServiceModel.java
  
  Index: ServiceModel.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/ServiceModel.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ServiceModel.java	13 Jan 2004 11:41:24 -0000	1.2
  +++ ServiceModel.java	21 Jan 2004 00:10:27 -0000	1.3
  @@ -72,4 +72,10 @@
       * @return the service class
       */
       Class getServiceClass();
  +
  +   /**
  +    * Return the service provider.  
  +    * @return the model identifying the provider implementation
  +    */
  +    public DeploymentModel getServiceProvider();
   }
  
  
  
  1.4       +29 -1     avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/TypeRepository.java
  
  Index: TypeRepository.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/TypeRepository.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TypeRepository.java	13 Jan 2004 11:41:24 -0000	1.3
  +++ TypeRepository.java	21 Jan 2004 00:10:27 -0000	1.4
  @@ -51,6 +51,7 @@
   package org.apache.avalon.composition.model;
   
   import org.apache.avalon.composition.data.ComponentProfile;
  +import org.apache.avalon.composition.data.DeploymentProfile;
   import org.apache.avalon.composition.model.ProfileUnknownException;
   import org.apache.avalon.meta.info.DependencyDescriptor;
   import org.apache.avalon.meta.info.StageDescriptor;
  @@ -106,6 +107,14 @@
       Type[] getTypes( DependencyDescriptor dependency );
   
       /**
  +     * Locate the set of component types capable of services the supplied
  +     * dependency.
  +     * @param dependency a service dependency descriptor
  +     * @return a set of types capable of servicing the supplied dependency
  +     */
  +    Type[] getTypes( DependencyDescriptor dependency, boolean search );
  +
  +    /**
        * Locate the set of component types that provide the supplied extension.
        * @param stage a stage descriptor
        * @return a set of types that support the supplied stage
  @@ -132,6 +141,25 @@
       */
       ComponentProfile getProfile( Type type, String key ) 
         throws TypeUnknownException, ProfileUnknownException;
  +
  +   /**
  +    * Attempt to locate a packaged deployment profile meeting the 
  +    * supplied dependency description.
  +    *
  +    * @param dependency the dependency description 
  +    * @param search include profiles from parent repository in selection
  +    * @return the deployment profile (possibly null) 
  +    */
  +    DeploymentProfile getProfile( 
  +      DependencyDescriptor dependency, boolean search );
  +
  +   /**
  +    * Return a set of local deployment profile for the supplied dependency.
  +    * @param dependency the dependency descriptor
  +    * @param search include profiles from parent repository in selection
  +    * @return a set of profiles matching the supplied dependency
  +    */
  +    DeploymentProfile[] getProfiles( DependencyDescriptor dependency, boolean search );
   
   
   }
  
  
  
  1.6       +3 -9      avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/data/builder/XMLContainmentProfileCreator.java
  
  Index: XMLContainmentProfileCreator.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/data/builder/XMLContainmentProfileCreator.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XMLContainmentProfileCreator.java	19 Jan 2004 01:26:19 -0000	1.5
  +++ XMLContainmentProfileCreator.java	21 Jan 2004 00:10:27 -0000	1.6
  @@ -499,14 +499,8 @@
           try
           {
               ServiceDescriptor service = TYPE_CREATOR.buildService( config );
  -            Configuration source = config.getChild( "source", false );
  -            if( source == null ) 
  -            {
  -                final String error = 
  -                  "Service configuration must contain a source directive.";
  -                throw new MetaDataException( error );
  -            }
  -            String path = source.getValue();
  +            Configuration source = config.getChild( "source" );
  +            String path = source.getValue( null );
               return new ServiceDirective( service, path );
           }
           catch( Throwable ce )
  
  
  
  1.23      +127 -25   avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContainmentModel.java
  
  Index: DefaultContainmentModel.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContainmentModel.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- DefaultContainmentModel.java	20 Jan 2004 04:50:31 -0000	1.22
  +++ DefaultContainmentModel.java	21 Jan 2004 00:10:27 -0000	1.23
  @@ -208,33 +208,33 @@
                 + DeploymentModel.SEPARATOR;
           }
   
  -        ClassLoader classloader = context.getClassLoader();
  +        //
  +        // populate the containment model with a set of models
  +        // based on the profiles contained in the supplied 
  +        // containment profile
  +        //
  +
  +        DeploymentProfile[] profiles = context.getContainmentProfile().getProfiles();
  +        for( int i=0; i<profiles.length; i++ )
  +        {
  +            addModel( profiles[i] );
  +        }
  +
  +        //
  +        // setup the service export parameters
  +        //
  +
           ServiceDirective[] export = 
             context.getContainmentProfile().getExportDirectives();
           m_services = new DefaultServiceModel[ export.length ];
           for( int i=0; i<export.length; i++ )
           {
               ServiceDirective service = export[i];
  -            String classname = service.getReference().getClassname();
  -            try
  -            {
  -                Class clazz = classloader.loadClass( classname );
  -                m_services[i] = new DefaultServiceModel( service, clazz ); 
  -            }
  -            catch( Throwable e )
  -            {
  -                final String error = 
  -                  "Cannot load service class [" 
  -                  + classname 
  -                  + "].";
  -                throw new ModelException( error, e );
  -            }
  -        }
  -
  -        DeploymentProfile[] profiles = context.getContainmentProfile().getProfiles();
  -        for( int i=0; i<profiles.length; i++ )
  -        {
  -            addModel( profiles[i] );
  +            Class clazz = getServiceExportClass( service );
  +            DeploymentModel provider = 
  +              locateImplementionProvider( service );
  +            m_services[i] = 
  +              new DefaultServiceModel( service, clazz, provider ); 
           }
       }
   
  @@ -332,8 +332,12 @@
       }
   
       /**
  -     * Assemble the model.
  -     * @exception Exception if an error occurs during model assembly
  +     * Assemble the model.  Model assembly is a process of 
  +     * wiring together candidate service providers with consumers.
  +     * The assembly implementation will assemble each deployment
  +     * model contained within this model.
  +     *
  +     * @exception Exception if assembly cannot be fulfilled
        */
       public void assemble() throws AssemblyException
       {
  @@ -345,7 +349,8 @@
               }
   
               getLogger().debug( "assembly phase" );
  -            DeploymentModel[] models = m_context.getModelRepository().getModels();
  +            DeploymentModel[] models = 
  +              m_context.getModelRepository().getModels();
               for( int i=0; i<models.length; i++ )
               {
                   DeploymentModel model = models[i];
  @@ -1773,6 +1778,103 @@
               final String error = 
                 "Could not load the targets directive: " + url;
               throw new ModelException( error, e );
  +        }
  +    }
  +
  +   /**
  +    * Return the class declared by a container service export declaration.
  +    * @return the exported service interface class
  +    * @exception ModelException if the class cannot be resolved
  +    */
  +    private Class getServiceExportClass( ServiceDirective service )
  +      throws ModelException
  +    {
  +        String classname = service.getReference().getClassname();
  +        try
  +        {
  +            ClassLoader classloader = m_context.getClassLoader();
  +            return classloader.loadClass( classname );
  +        }
  +        catch( Throwable e )
  +        {
  +            final String error = 
  +              "Cannot load service class [" 
  +              + classname 
  +              + "].";
  +            throw new ModelException( error, e );
  +        }
  +    }
  +
  +   /**
  +    * Given a service directive declared by a container, locate a model 
  +    * with this containment model to map as the provider.  If not model
  +    * is explicity declared, the implementation will attempt to construct
  +    * a new model based on packaged profiles and add the created model to
  +    * the set of models within this container.
  +    * 
  +    * @param service the service directive
  +    * @return the implementing deployment model
  +    * @exception ModelException if an implementation is not resolvable 
  +    */
  +    private DeploymentModel locateImplementionProvider( ServiceDirective service )
  +      throws ModelException
  +    {
  +        final String path = service.getPath();
  +        if( null != path )
  +        {
  +            DeploymentModel provider = getModel( path );
  +            if( null == provider )
  +            {
  +                final String error = 
  +                  "Implemention provider path [" 
  +                  + path 
  +                  + "] for the exported service [" 
  +                  + service.getReference()
  +                  + "] in the containment model "
  +                  + this
  +                  + " does not reference a known model.";
  +               throw new ModelException( error );
  +            }
  +            else
  +            {
  +                return provider;
  +            }
  +        }
  +        else
  +        {
  +            final DependencyDescriptor dependency = 
  +              new DependencyDescriptor( 
  +                "export", 
  +                service.getReference() );
  +
  +            final ModelRepository repository = m_context.getModelRepository();
  +            final DeploymentModel[] candidates = repository.getModels();
  +            final ModelSelector selector = new DefaultModelSelector();
  +            DeploymentModel provider = selector.select( candidates, dependency );
  +            if( null != provider )
  +            {
  +                return provider;
  +            }
  +            else
  +            {
  +                TypeRepository repo = 
  +                  getClassLoaderModel().getTypeRepository();
  +                DeploymentProfile profile = 
  +                  repo.getProfile( dependency, false );
  +                if( profile != null )
  +                {
  +                    return addModel( profile );
  +                }
  +                else
  +                {
  +                    final String error = 
  +                      "Could not locate a provider for the exported service [" 
  +                        + dependency.getReference()
  +                        + "] in the containment model "
  +                        + this;
  +                    throw new ModelException( error );
  +                }
  +            }
           }
       }
   }
  
  
  
  1.3       +1 -3      avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultModelRepository.java
  
  Index: DefaultModelRepository.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultModelRepository.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultModelRepository.java	13 Jan 2004 11:41:26 -0000	1.2
  +++ DefaultModelRepository.java	21 Jan 2004 00:10:27 -0000	1.3
  @@ -117,7 +117,6 @@
           // attempt to locate a solution locally
           //
   
  -System.out.println( "## resolving dep: " + dependency );
           Iterator iterator = m_models.values().iterator();
           while( iterator.hasNext() )
           {
  @@ -132,7 +131,6 @@
           // attempt to locate a solution from the parent
           //
   
  -System.out.println( "## nothing local, try parent: " + m_parent );
           if( m_parent != null )
           {
               return m_parent.getModel( dependency );
  
  
  
  1.3       +15 -2     avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultServiceModel.java
  
  Index: DefaultServiceModel.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultServiceModel.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultServiceModel.java	13 Jan 2004 11:41:26 -0000	1.2
  +++ DefaultServiceModel.java	21 Jan 2004 00:10:27 -0000	1.3
  @@ -51,6 +51,7 @@
   package org.apache.avalon.composition.model.impl;
   
   import org.apache.avalon.composition.model.ServiceModel;
  +import org.apache.avalon.composition.model.DeploymentModel;
   import org.apache.avalon.composition.data.ServiceDirective;
   
   /**
  @@ -61,11 +62,14 @@
    */
   public class DefaultServiceModel implements ServiceModel
   {
  +    private final DeploymentModel m_provider;
       private final ServiceDirective m_directive;
       private final Class m_clazz;
   
  -    public DefaultServiceModel( ServiceDirective directive, Class clazz )
  +    public DefaultServiceModel( 
  +      ServiceDirective directive, Class clazz, DeploymentModel provider )
       {
  +        m_provider = provider;
           m_directive = directive;
           m_clazz = clazz;
       }
  @@ -87,5 +91,14 @@
       public Class getServiceClass()
       {
           return m_clazz;
  +    }
  +
  +   /**
  +    * Return the service provider.  
  +    * @return the model identifying the provider implementation
  +    */
  +    public DeploymentModel getServiceProvider()
  +    {
  +        return m_provider;
       }
   }
  
  
  
  1.5       +80 -4     avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultTypeRepository.java
  
  Index: DefaultTypeRepository.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultTypeRepository.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DefaultTypeRepository.java	13 Jan 2004 11:41:26 -0000	1.4
  +++ DefaultTypeRepository.java	21 Jan 2004 00:10:27 -0000	1.5
  @@ -55,6 +55,7 @@
   import java.util.Iterator;
   import java.util.List;
   
  +import org.apache.avalon.composition.model.ProfileSelector;
   import org.apache.avalon.composition.model.TypeRepository;
   import org.apache.avalon.composition.model.TypeUnknownException;
   import org.apache.avalon.composition.model.ProfileUnknownException;
  @@ -289,6 +290,18 @@
        */
       public Type[] getTypes( DependencyDescriptor dependency )
       {
  +        return getTypes( dependency, true );
  +    }
  +
  +    /**
  +     * Locate the set of component types in the local repository 
  +     * capable of servicing the supplied dependency.
  +     *
  +     * @param dependency a service dependency descriptor
  +     * @return a set of types capable of servicing the supplied dependency
  +     */
  +    public Type[] getTypes( DependencyDescriptor dependency, boolean search )
  +    {
           if( dependency == null )
           {
               throw new NullPointerException( "dependency" );
  @@ -306,7 +319,7 @@
               }
           }
   
  -        if( m_parent != null )
  +        if( search && m_parent != null )
           {
               Type[] suppliment = m_parent.getTypes( dependency );
               for( int i=0; i<suppliment.length; i++ )
  @@ -365,6 +378,22 @@
       public ComponentProfile[] getProfiles( Type type ) 
         throws TypeUnknownException
       {
  +        return getProfiles( type, true );
  +    }
  +
  +   /**
  +    * Return the set of deployment profiles for the supplied type. An 
  +    * implementation is required to return a array of types > 0 in length
  +    * or throw a TypeUnknownException.
  +    * @param type the type
  +    * @param search if the local search failes and search is TRUE then 
  +    *    delegate to a parent repository if available
  +    * @return a profile array containing at least one deployment profile
  +    * @exception TypeUnknownException if the supplied type is unknown
  +    */
  +    private ComponentProfile[] getProfiles( Type type, boolean search ) 
  +      throws TypeUnknownException
  +    {
           final String classname = type.getInfo().getClassname();
           ProfilePackage profiles = (ProfilePackage) m_profiles.get( classname );
           if( profiles != null )
  @@ -373,7 +402,7 @@
           }
           else
           {
  -            if( m_parent != null )
  +            if( search && m_parent != null )
               {
                   return m_parent.getProfiles( type );
               }
  @@ -408,12 +437,59 @@
       }
   
      /**
  +    * Attempt to locate a packaged deployment profile meeting the 
  +    * supplied dependency description.
  +    *
  +    * @param dependency the dependency description 
  +    * @param search the search policy  
  +    * @return the deployment profile (possibly null) 
  +    */
  +    public DeploymentProfile getProfile( 
  +      DependencyDescriptor dependency, boolean search )
  +    {
  +        DeploymentProfile[] profiles = getProfiles( dependency, search );
  +        ProfileSelector profileSelector = new DefaultProfileSelector();
  +        return profileSelector.select( profiles, dependency );
  +    }
  +
  +   /**
  +    * Return a set of local deployment profile for the supplied dependency.
  +    * @param dependency the dependency descriptor
  +    * @return a set of profiles matching the supplied dependency
  +    */
  +    public DeploymentProfile[] getProfiles( DependencyDescriptor dependency, boolean search ) 
  +    {
  +        Type[] types = getTypes( dependency, search );
  +        ArrayList list = new ArrayList();
  +        for( int i=0; i<types.length; i++ )
  +        {
  +            Type type = types[i];
  +            try
  +            {
  +                DeploymentProfile[] profiles = getProfiles( type, false );
  +                for( int j=0; j<profiles.length; j++ )
  +                {
  +                    list.add( profiles[j] );
  +                }
  +            }
  +            catch( TypeUnknownException e )
  +            {
  +                final String error = 
  +                  "Unexpected condition: " + e.toString();
  +                throw new IllegalStateException( error );
  +            }
  +        }
  +        return (DeploymentProfile[]) list.toArray( new DeploymentProfile[0] );
  +    }
  +
  +   /**
       * Return the set of local profiles.
       * @return a profile or null if a profile connot be resolve
       */
       private DeploymentProfile[] getProfiles()
       {
  -        return (DeploymentProfile[]) m_profiles.values().toArray( new DeploymentProfile[0] );
  +        return (DeploymentProfile[]) 
  +          m_profiles.values().toArray( new DeploymentProfile[0] );
       }
   
      /**
  
  
  
  1.2       +0 -5      avalon/merlin/composition/impl/src/test/conf/context.xml
  
  Index: context.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/composition/impl/src/test/conf/context.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- context.xml	24 Sep 2003 09:32:20 -0000	1.1
  +++ context.xml	21 Jan 2004 00:10:27 -0000	1.2
  @@ -4,11 +4,6 @@
   
      <classloader>
        <classpath>
  -       <!-- 
  -       <repository>
  -         <resource id="avalon-framework:avalon-framework-impl" version="4.1.5"/>
  -       </repository>
  -       -->
          <fileset dir="ext">
            <include>test-a.jar</include>
          </fileset>
  
  
  
  1.3       +2 -4      avalon/merlin/composition/impl/src/test/conf/playground.xml
  
  Index: playground.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/composition/impl/src/test/conf/playground.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- playground.xml	13 Jan 2004 11:41:27 -0000	1.2
  +++ playground.xml	21 Jan 2004 00:10:27 -0000	1.3
  @@ -15,9 +15,7 @@
      </classloader>
   
      <services>
  -     <service type="org.apache.avalon.playground.basic.BasicService" version="1.1">
  -       <source>basic</source>
  -     </service>
  +     <service type="org.apache.avalon.playground.basic.BasicService" version="1.1"/>
      </services>
   
      <container name="subsidiary">
  @@ -32,7 +30,7 @@
   
      <!--
      Commenting the following out to validate demand-driven discovery in 
  -   combination with automated assembly.
  +   combination with automated assembly and export resolution.
      -->
      <!--
      <component name="demo" 
  
  
  
  1.18      +0 -2      avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl/DefaultFactory.java
  
  Index: DefaultFactory.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl/DefaultFactory.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- DefaultFactory.java	16 Jan 2004 16:39:02 -0000	1.17
  +++ DefaultFactory.java	21 Jan 2004 00:10:27 -0000	1.18
  @@ -78,7 +78,6 @@
   import org.apache.avalon.composition.model.ContainmentContext;
   import org.apache.avalon.composition.model.ComponentModel;
   import org.apache.avalon.composition.model.ContainmentModel;
  -import org.apache.avalon.composition.model.ModelFactory;
   import org.apache.avalon.composition.model.SystemContext;
   import org.apache.avalon.composition.model.ClassLoaderContext;
   import org.apache.avalon.composition.model.ClassLoaderModel;
  @@ -86,7 +85,6 @@
   import org.apache.avalon.composition.model.ModelRepository;
   import org.apache.avalon.composition.model.impl.DefaultSystemContext;
   import org.apache.avalon.composition.model.impl.DelegatingSystemContext;
  -import org.apache.avalon.composition.model.impl.DefaultModelFactory;
   import org.apache.avalon.composition.model.impl.DefaultContainmentContext;
   import org.apache.avalon.composition.model.impl.DefaultContainmentModel;
   import org.apache.avalon.composition.model.impl.DefaultClassLoaderModel;
  
  
  
  1.41      +2 -2      avalon/merlin/maven.xml
  
  Index: maven.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/maven.xml,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- maven.xml	19 Jan 2004 14:14:57 -0000	1.40
  +++ maven.xml	21 Jan 2004 00:10:27 -0000	1.41
  @@ -309,7 +309,7 @@
       </ant:zip>
       <checksum file="${maven.build.dir}/${package.name}.zip"/>
   
  -    <ant:tar tarfile="${maven.build.dir}/${package.name}.tar">
  +    <ant:tar longfile="gnu" tarfile="${maven.build.dir}/${package.name}.tar">
         <tarfileset dir="${merlin.build.inst.dir}" prefix="merlin"/>
         <fileset dir="${basedir}">
           <include name="INSTALL.TXT"/>
  @@ -329,7 +329,7 @@
         <zipfileset dir="${basedir}/target/tutorials" prefix="tutorial"/>
       </ant:zip>
       <checksum file="${maven.build.dir}/${tutorial.name}.zip"/>
  -    <ant:tar tarfile="${maven.build.dir}/${tutorial.name}.tar">
  +    <ant:tar longfile="gnu" tarfile="${maven.build.dir}/${tutorial.name}.tar">
         <tarfileset dir="${basedir}/target/tutorials" prefix="tutorial"/>
       </ant:tar>
       <ant:gzip 
  
  
  
  1.3       +2 -4      avalon/merlin/platform/xdocs/meta/block/services/index.xml
  
  Index: index.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/platform/xdocs/meta/block/services/index.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- index.xml	2 Oct 2003 03:13:16 -0000	1.2
  +++ index.xml	21 Jan 2004 00:10:27 -0000	1.3
  @@ -94,9 +94,7 @@
      <!-- declaration of one or more services and the underling provider -->
   
      <services>
  -     <service type="tutorial.location.LocationService">
  -       <source>info</source>
  -     </service>
  +     <service type="tutorial.location.LocationService"/>
      </services>
   
      <classloader>
  
  
  
  1.3       +4 -3      avalon/merlin/platform/xdocs/meta/block/services/service.xml
  
  Index: service.xml
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/platform/xdocs/meta/block/services/service.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- service.xml	2 Oct 2003 03:13:16 -0000	1.2
  +++ service.xml	21 Jan 2004 00:10:27 -0000	1.3
  @@ -78,10 +78,11 @@
           <table>
             <tr><th>Element</th><th>Cardinality</th><th>Description</th></tr>
             <tr>
  -            <td>source</td><td>1</td>
  +            <td>source</td><td>0..1</td>
               <td>
                   Declaration of the relative address of the component that 
  -                shall be used to fulfil the service.
  +                shall be used to fulfil the service. The element is optional 
  +                under version 3.3 and later.
               </td>
             </tr>
           </table>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org