avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mcconn...@apache.org
Subject cvs commit: jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/doc-files registry.gif
Date Wed, 03 Jul 2002 19:08:36 GMT
mcconnell    2002/07/03 12:08:36

  Modified:    assembly/src/java/org/apache/excalibur/merlin/registry
                        DefaultRegistry.java DefaultRegistry.xinfo
                        Profile.java Registry.java ServiceRegistry.java
                        ServiceTable.java package.html
               assembly/src/java/org/apache/excalibur/merlin/registry/doc-files
                        registry.gif
  Removed:     assembly/src/java/org/apache/excalibur/merlin/registry
                        DefaultClassLoader.java Fileset.java Main.java
  Log:
  Seperation of Kernel/Container/Registry
  
  Revision  Changes    Path
  1.6       +85 -165   jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/DefaultRegistry.java
  
  Index: DefaultRegistry.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/DefaultRegistry.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- DefaultRegistry.java	3 Jul 2002 02:09:13 -0000	1.5
  +++ DefaultRegistry.java	3 Jul 2002 19:08:35 -0000	1.6
  @@ -74,7 +74,9 @@
   import org.apache.log.output.io.StreamTarget;
   
   import org.apache.excalibur.merlin.registry.*;
  -import org.apache.excalibur.merlin.registry.Profile;
  +import org.apache.excalibur.merlin.kernel.Container;
  +import org.apache.excalibur.merlin.kernel.ContainerClassLoader;
  +import org.apache.excalibur.merlin.kernel.Verifiable;
   
   /**
    * Provides support for the maintenance of a registry of 
  @@ -82,7 +84,7 @@
    * @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
    * @version $Revision$ $Date$
    */
  -public class DefaultRegistry extends AbstractLogEnabled implements Contextualizable, Serviceable,
Configurable, Initializable, Executable, Disposable, Registry
  +public class DefaultRegistry extends AbstractLogEnabled implements Contextualizable, Configurable,
Initializable, Executable, Disposable, Registry, Verifiable
   {
       //=======================================================================
       // static
  @@ -100,9 +102,9 @@
       public static final String CLASSLOADER_KEY = "classloader";
   
      /**
  -    * Context key value used to locate the extension repository.
  +    * Context key used to locate the application classloader.
       */
  -    public static final String EXTENSIONS_KEY = "extensions";
  +    public static final String CONTAINER_KEY = "container";
   
       private static final ComponentType[] EMPTY_DEFS = new ComponentType[0];
       private static final Profile[] EMPTY_PROFILES = new Profile[0];
  @@ -118,7 +120,7 @@
       * (not currently in use - will come into effect as registry hierachies as 
       * dealt with).
       */
  -    private Registry m_parent;
  +    private Container m_parent;
   
      /**
       * The context argument supplied by the container.
  @@ -135,20 +137,13 @@
       */
       private ServiceRegistry m_services;
   
  -    private ClassLoader m_classloaderParent;
  -
  -    private DefaultClassLoader m_classloader;
  +    private ContainerClassLoader m_classloader;
   
      /**
       * List of the component classname recorded in the jar file manifests.
       */
       private List m_classnames = new LinkedList();
   
  -   /**
  -    * The extensions repository (supplied by service manager).
  -    */
  -    private PackageRepository m_repository;
  -
       private Configuration m_config;
   
       private MetaDataVerifier m_verifier;
  @@ -159,7 +154,7 @@
   
       private Hashtable m_profiles = new Hashtable();
   
  -    private ComponentMetaData[] m_appContext;
  +    private DependencyMap m_map = new DependencyMap();
   
       //=======================================================================
       // LogEnabled
  @@ -181,38 +176,8 @@
       public void contextualize( Context context ) throws ContextException
       {
           m_context = context;
  -
  -        //
  -        // use the supplied classloader or none supplied get the context
  -        // classloader
  -        //
  -
  -        try
  -        {
  -            m_classloaderParent = (ClassLoader) context.get( CLASSLOADER_KEY );
  -            getLogger().debug("classloader supplied");
  -        }
  -        catch( ContextException ce )
  -        {
  -            m_classloaderParent = Thread.currentThread().getContextClassLoader();
  -            getLogger().debug("using context classloader", ce );
  -        }
  -
  -        //
  -        // use the supplied extension manager or none supplied create an empty
  -        // manager
  -        //
  -
  -        try
  -        {
  -            m_repository = (PackageRepository) context.get( EXTENSIONS_KEY );
  -            getLogger().debug("extension manager supplied");
  -        }
  -        catch( ContextException ce )
  -        {
  -            m_repository = new DefaultPackageRepository( new File[0] );
  -            getLogger().debug("extension manager created");
  -        }
  +        m_classloader = (ContainerClassLoader) context.get( CLASSLOADER_KEY );
  +        m_parent = (Container) context.get( CONTAINER_KEY );
       }
   
       //=======================================================================
  @@ -229,29 +194,6 @@
       }
   
       //=======================================================================
  -    // Service
  -    //=======================================================================
  -
  -   /**
  -    * Invoked by the container to establish services that this component
  -    * is dependent on.  The implementation will attempt to locate a parent
  -    * registry (optional dependency).
  -    *
  -    * @param manager a service manager
  -    */
  -    public void service( ServiceManager manager )
  -    {
  -        try
  -        {
  -            m_parent = (Registry) manager.lookup( REGISTRY_KEY );
  -        }
  -        catch( ServiceException se )
  -        {
  -            m_parent = null;
  -        }
  -    }
  -
  -    //=======================================================================
       // Initializable
       //=======================================================================
   
  @@ -262,21 +204,8 @@
       */
       public void initialize() throws Exception
       {
  -        getLogger().debug("local classloader creation");
  -        m_classloader = new DefaultClassLoader(
  -          m_repository, 
  -          m_classloaderParent, 
  -          m_config.getChild("classpath"), 
  -          getLogger().getChildLogger( "loader" )
  -        );
  -
  -        //
  -        // for all of the compoents declared under manifest jar block entries,
  -        // register these as potential service providers with the service repository
  -        //
  -
  -        getLogger().debug("repository creation");
  -        m_services = new ServiceRegistry( this, m_classloader, m_config.getChild("factories")
);
  +        getLogger().debug("initialize");
  +        m_services = new ServiceRegistry( this, m_classloader, m_config );
           m_services.enableLogging( getLogger().getChildLogger("services") );
           String[] blocks = m_classloader.getComponentClassnames();
   
  @@ -291,8 +220,6 @@
               {
                   // initialize the component type defintions
                   final String classname = blocks[i].replace('/','.');
  -                getLogger().debug("");
  -                getLogger().debug("register classname: " + classname );
                   m_services.register( classname );
               }
   
  @@ -303,36 +230,43 @@
               // construct the application context
               //
   
  -            Configuration factories = m_config.getChild("factories");
  -            Configuration[] entries = factories.getChildren();
  +            Configuration[] entries = m_config.getChildren( "component" );
               for( int i=0; i<entries.length; i++ )
               {
                   final Configuration factory = entries[i];
                   final String name = factory.getAttribute("name");
                   final String classname = factory.getAttribute("class");
                   final String mode = factory.getName();
  +
                   if( mode.equals("component") )
                   {
  -                    getLogger().debug("install: \n" + ConfigurationUtil.list( factory ));
  +                    getLogger().debug("container: \n" + ConfigurationUtil.list( factory
));
                       Profile profile = m_services.install( classname, name );
  -
  -                    listProfile( profile );
  -
  -                    //
  -                    // create a dependency graph for this component
  -                    //
  -
  -                    DependencyMap map = buildDependencyMap( profile );
  -                    list( map );
  +                    populate( m_map, profile );
  +                    //listProfile( profile );
                   }
                   else
                   {
                       // unrecognized declaration
                       getLogger().debug(
  -                      "bypassing unrecognized element " 
  -                      + ConfigurationUtil.list( factory ) );
  +                      "bypassing unrecognized element\n" 
  +                      + ConfigurationUtil.list( factory ) 
  +                    );
                   }
               }
  +
  +            //
  +            // if its a container we need to instantiate it and verify it.
  +            //
  +
  +            if( m_config.getName().equals("containers"))
  +            {
  +                getLogger().debug(
  +                  "nested containers (" 
  +                  + entries.length 
  +                  + ") pending validation."
  +                );
  +            }
           }
           catch( Throwable e )
           {
  @@ -341,30 +275,6 @@
           }
       }
   
  -    private DependencyMap buildDependencyMap( Profile profile )
  -    {
  -        DependencyMap map = new DependencyMap();
  -        map.add( profile );
  -        DependencyMetaData[] dependencies = profile.getDependencies();
  -        for( int j=0; j<dependencies.length; j++ )
  -        {
  -            populate( map, dependencies[j] );
  -        }
  -        return map;
  -    }
  -
  -    private void populate( DependencyMap map, DependencyMetaData dependency )
  -    {
  -        Profile profile = m_services.getInstalledProfile( dependency.getProviderName()
);
  -        map.add( profile );
  -        DependencyMetaData[] dependencies = profile.getDependencies();
  -        for( int j=0; j<dependencies.length; j++ )
  -        {
  -            populate( map, dependencies[j] );
  -        }
  -    }
  -
  -
       //=======================================================================
       // Executable
       //=======================================================================
  @@ -378,7 +288,34 @@
       */
       public void execute() throws Exception
       {
  -       // nothing to do yet - need to sort out the DependecyMap issue
  +    }
  +
  +    //=======================================================================
  +    // Verifiable
  +    //=======================================================================
  +
  +   /**
  +    * Method invoked by a parent container to request type level validation of 
  +    * the container.
  +    *
  +    * @exception ValidationException if a validation failure occurs
  +    */
  +    public void verify() throws VerifyException
  +    {
  +        getLogger().debug("DependencyMap listing");
  +        getLogger().debug("startup sequence");
  +        ComponentMetaData[] startup = m_map.getStartupGraph();
  +        doVerify( startup );
  +        for( int i=0; i<startup.length; i++ )
  +        {
  +            getLogger().debug("  start: " + startup[i] );
  +        }
  +        getLogger().debug("shutdown sequence");
  +        ComponentMetaData[] shutdown = m_map.getShutdownGraph();
  +        for( int i=0; i<shutdown.length; i++ )
  +        {
  +            getLogger().debug("  stop: " + shutdown[i] );
  +        }
       }
   
       //=======================================================================
  @@ -420,6 +357,27 @@
       // implementation
       //=======================================================================
   
  +    private void populate( DependencyMap map, Profile profile )
  +    {
  +        map.add( profile );
  +        DependencyMetaData[] dependencies = profile.getDependencies();
  +        for( int j=0; j<dependencies.length; j++ )
  +        {
  +            populate( map, dependencies[j] );
  +        }
  +    }
  +
  +    private void populate( DependencyMap map, DependencyMetaData dependency )
  +    {
  +        Profile profile = m_services.getInstalledProfile( dependency.getProviderName()
);
  +        map.add( profile );
  +        DependencyMetaData[] dependencies = profile.getDependencies();
  +        for( int j=0; j<dependencies.length; j++ )
  +        {
  +            populate( map, dependencies[j] );
  +        }
  +    }
  +
      /**
       * Test if the registry can resolve a request for a component with the supplied classname
       * @param classname a component or service class name
  @@ -509,45 +467,7 @@
           }
       }
   
  -    private void list( DependencyMap map )
  -    {
  -        try
  -        {
  -            getLogger().debug("DependencyMap listing");
  -            getLogger().debug("startup sequence");
  -            ComponentMetaData[] startup = map.getStartupGraph();
  -            verify( startup );
  -            for( int i=0; i<startup.length; i++ )
  -            {
  -                getLogger().debug("  start: " + startup[i] );
  -                //getLogger().debug("    consumers");
  -                //ComponentMetaData[] consumers = map.getConsumerGraph( startup[i] );
  -                //for( int j=0; j<consumers.length; j++ )
  -                //{
  -                //    getLogger().debug("      consumer: " + consumers[j].getName() );
  -                //}
  -                //getLogger().debug("    providers");
  -                //ComponentMetaData[] providers = map.getConsumerGraph( startup[i] );
  -                //for( int j=0; j<providers.length; j++ )
  -                //{
  -                //    getLogger().debug("      provider: " + providers[j].getName() );
  -                //}
  -
  -            }
  -            getLogger().debug("shutdown sequence");
  -            ComponentMetaData[] shutdown = map.getShutdownGraph();
  -            for( int i=0; i<shutdown.length; i++ )
  -            {
  -                getLogger().debug("  stop: " + shutdown[i] );
  -            }
  -        }
  -        catch( Throwable e )
  -        {
  -            getLogger().error("map error", e );
  -        }
  -    }
  -
  -    private void verify( ComponentMetaData[] assembly ) throws VerifyException
  +    private void doVerify( ComponentMetaData[] assembly ) throws VerifyException
       {
           MetaDataVerifier mdv = new MetaDataVerifier();
           for( int i=0; i<assembly.length; i++ )
  
  
  
  1.4       +5 -3      jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/DefaultRegistry.xinfo
  
  Index: DefaultRegistry.xinfo
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/DefaultRegistry.xinfo,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DefaultRegistry.xinfo	3 Jul 2002 02:09:58 -0000	1.3
  +++ DefaultRegistry.xinfo	3 Jul 2002 19:08:35 -0000	1.4
  @@ -28,11 +28,13 @@
       </service>
     </services>
   
  +  <!--
     <dependencies>
  -      <dependency>
  -          <role>registry</role>
  -          <service-ref type="org.apache.excalibur.merlin.registry.Registry" optional="true"/>
  +      <dependency optional="true">
  +          <role>parent</role>
  +          <service-ref type="org.apache.excalibur.merlin.kernel.Container" />
         </dependency>
     </dependencies>
  +  -->
   
   </component-info>
  
  
  
  1.3       +11 -9     jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Profile.java
  
  Index: Profile.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Profile.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Profile.java	3 Jul 2002 00:52:23 -0000	1.2
  +++ Profile.java	3 Jul 2002 19:08:35 -0000	1.3
  @@ -81,17 +81,19 @@
           DependencyDescriptor[] deps = type.getComponentInfo().getDependencies();
           for( int i=0; i<deps.length; i++ )
           {
  -            final String role = deps[i].getRole();
  -            final Profile provider = registry.getCandidateProfile( deps[i] );
  -            DependencyMetaData data = new DependencyMetaData( 
  -               role, 
  -               provider.getName() 
  -            );
  -            vector.add( data );
  +            if( !deps[i].isOptional() )
  +            {
  +                final String role = deps[i].getRole();
  +                final Profile provider = registry.getCandidateProfile( deps[i] );
  +                DependencyMetaData data = new DependencyMetaData( 
  +                  role, 
  +                  provider.getName() 
  +                );
  +                vector.add( data );
  +            }
           }
           return (DependencyMetaData[]) vector.toArray( new DependencyMetaData[0] );
       }
  -
   
       private final ComponentType m_type;
   
  
  
  
  1.3       +3 -2      jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Registry.java
  
  Index: Registry.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Registry.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Registry.java	3 Jul 2002 01:19:09 -0000	1.2
  +++ Registry.java	3 Jul 2002 19:08:35 -0000	1.3
  @@ -12,13 +12,14 @@
   import org.apache.excalibur.containerkit.metainfo.ServiceDescriptor;
   import org.apache.excalibur.merlin.registry.ComponentType;
   import org.apache.excalibur.merlin.registry.Profile;
  +import org.apache.excalibur.merlin.kernel.Container;
   
   /**
    * A service that provides support for location of components types.
    * @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
    * @version $Revision$ $Date$
    */
  -public interface Registry
  +public interface Registry 
   {
      /**
       * Default role.
  
  
  
  1.3       +6 -7      jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ServiceRegistry.java
  
  Index: ServiceRegistry.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ServiceRegistry.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ServiceRegistry.java	3 Jul 2002 00:54:43 -0000	1.2
  +++ ServiceRegistry.java	3 Jul 2002 19:08:35 -0000	1.3
  @@ -189,7 +189,6 @@
           return (ComponentType) m_types.get( classname );
       }
   
  -
       public Profile[] getProfiles( ServiceDesignator service )
       {
           //
  @@ -221,18 +220,18 @@
           getLogger().debug("getting profiles for service: " + service );
           Vector vector = new Vector();
           ComponentType[] components = table.getTypes();
  -        getLogger().debug("located table: = " 
  -          + table + ", size: " + ", " + components.length );
  +        //getLogger().debug("located table: = " 
  +        //  + table + ", size: " + ", " + components.length );
           for( int i=0; i<components.length; i++ )
           {
               try
               {
                   Profile[] profiles = components[i].getProfiles();
  -                getLogger().debug("  located provider: " + components[i] + ", profile:
" + profiles.length);
  +                //getLogger().debug("  located provider: " + components[i] + ", profile:
" + profiles.length);
                   for( int j=0; j<profiles.length; j++ )
                   {
                       vector.add( profiles[j] );
  -                    getLogger().debug("    profile: " + profiles[j].getComponentType()
);
  +                    //getLogger().debug("    profile: " + profiles[j].getComponentType()
);
                   }
               }
               catch( Throwable e )
  @@ -267,7 +266,7 @@
   
       private void register( ComponentType type )
       {
  -        getLogger().debug("registering provider type: " + getImplementationKey( type )
);
  +        //getLogger().debug("registering provider type: " + getImplementationKey( type
) );
           m_types.put( getImplementationKey( type ), type );
           ServiceDescriptor[] services = type.getComponentInfo().getServices();
           for( int i=0; i<services.length; i++ )
  
  
  
  1.2       +6 -6      jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ServiceTable.java
  
  Index: ServiceTable.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ServiceTable.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ServiceTable.java	3 Jul 2002 00:51:23 -0000	1.1
  +++ ServiceTable.java	3 Jul 2002 19:08:35 -0000	1.2
  @@ -55,7 +55,7 @@
       */
       public void add( ComponentType type )
       {
  -        getLogger().debug("addition\n\ttype:" + type + "\n\ttable: " + this );
  +        //getLogger().debug("addition\n\ttype:" + type + "\n\ttable: " + this );
           m_providers.add( type );
       }
   
  @@ -87,8 +87,6 @@
           return m_providers.size();
       }
   
  -
  -
      /**
       * Returns true if the table service designator matches the supplied designator.
       * @param service a service type designator
  @@ -100,10 +98,12 @@
           return m_designator.matches( service );
       }
   
  -
       public String toString()
       {
  -       return "ServiceTable:" + System.identityHashCode( this ) + ", " + m_designator;
  +       return "ServiceTable:" 
  +         + System.identityHashCode( this ) 
  +         + ", " 
  +         + m_designator;
       }
   }
   
  
  
  
  1.2       +5 -8      jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/package.html
  
  Index: package.html
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/package.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- package.html	1 Jul 2002 04:27:15 -0000	1.1
  +++ package.html	3 Jul 2002 19:08:35 -0000	1.2
  @@ -1,27 +1,24 @@
   
   <body>
   <p>
  -A geneneric container supporting component lifecycle management. The container serves as
a repository for component types and provides support for a type hierarchy based on an formal
component type and profile model.  The repository enables resolution of component types based
on a classloader, extension directory set defintion, supplied classpath, and application directives.
 Components are established based on the publication of components within a jar file manifest
together with explicit component profile directives included within the repository configuration.
Given a manifest declaration of a component implementation class, a component type definition
will be resolvable providing the registry can resolve all type constraints (specifically the
validation of the dependecies of candidate supplier components).
  +A geneneric component type management service supporting automated component assembly,
service deployment and service decommissioning . The service acts as a repository for component
types and profiles.  The repository enables resolution of component types based on a classloader,
extension directory set defintion (managemed by the host kernel), a supplied classpath, and
component deployment directives.  Components are established based on the publication of components
across a set jar file manifest together with explicit component profile directives included
within the registry configuration. Given a manifest declaration of a component implementation
class, a component type definition will be resolvable providing the registry can resolve all
type constraints (specifically the validation of the dependecies of candidate supplier components).
   </p>
   <h3>Funtional Summary</h3>
   <ul>
  -<li>Geneneric container supporting component lifecycle management.
  -<li>Hierachical container composition.
  +<li>Portable component type mangement.
  +<li>Automated service assembly.
   </ul>
   <h3>Key Features</h3>
  -<p>A primary objective of this container is to provide simple deployment of components
with minimal administration overhead.  In many cases, no component assembly directives are
required as the container will apply assembly logic based on the meta-information association
with component types that are either explicity declared, or implicly located via a classpath
and extension directories.</p>
  +<p>A primary objective of this service is to provide simple deployment of components
with minimal administration overhead.  In many cases, no component assembly directives are
required as the container will apply assembly logic based on the meta-information association
with component types that are either explicity declared, or implicly located via a classpath
and extension directories.</p>
   <ul>
  -<li>Stand-alone and embeddable deployment.
   <li>Automatic component profile generation.
   <li>Automatic assembly of components based on dependency and service production declarations.
   <li>Service provider selection plug-in architecture.
   <li>Customization of application content.
  -<li>Support for multiple extension directories.
  -<li>Protected classloading.
   </ul>
   
   <h3>Object Model</h3>
  -<p>The container object model provides a simplified view of the <code>containerkit</code>
framework.  The princincipal entry point is the {@link org.apache.excalibur.merlin.registry.Registry}
and the associated default component based implementation {@link org.apache.excalibur.merlin.registry.DefaultRegistry}.
 The registry acts as a component type repository.  Component types are exposed as instances
of the {@link org.apache.excalibur.merlin.registry.ComponentType} interface.  Each component
type represents a concrete component implementation class.  For each component type, the container
associates at least one instantiation {@link org.apache.excalibur.merlin.registry.Profile}.
 A profile is either a default profile generated by the container based on meta-information
derived from the type, or, an explicit profile declared by the component user under the registry
configuration.  Multiple profile for a particular component type can coexist in the same container.
  +<p>The registry object model provides a simplified view of the <code>containerkit</code>
framework.  The principal entry point is the {@link org.apache.excalibur.merlin.registry.Registry}
and the associated default  implementation {@link org.apache.excalibur.merlin.registry.DefaultRegistry}.
 The registry acts as a component type repository.  Component types are exposed as instances
of the {@link org.apache.excalibur.merlin.registry.ComponentType} interface.  Each component
type represents a concrete component implementation class.  For each component type, the container
associates at least one instantiation {@link org.apache.excalibur.merlin.registry.Profile}.
 A profile is either a default profile generated by the registry based on meta-information
derived from the type, or, an explicit profile declared by the component assembler via the
registry configuration.  Multiple profiles for a particular component type can coexist in
the same registry.
   
   <h3>Package Structure (UML)</h3>
   <p><img src=doc-files/registry.gif border=0></p>
  
  
  
  1.2       +27 -33    jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/doc-files/registry.gif
  
  	<<Binary file>>
  
  

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


Mime
View raw message