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