donaldp 2002/08/17 20:34:28 Modified: containerkit/src/java/org/apache/excalibur/containerkit/dependency DependencyMap.java containerkit/src/java/org/apache/excalibur/containerkit/kernel AbstractServiceKernel.java ComponentEntry.java MetaDataBuilder.java SimpleMetaDataBuilder.java SimpleResourceProvider.java SimpleServiceKernel.java containerkit/src/java/org/apache/excalibur/containerkit/lifecycle/impl AbstractResourceProvider.java containerkit/src/java/org/apache/excalibur/containerkit/metadata ComponentMetaData.java containerkit/src/java/org/apache/excalibur/containerkit/verifier AssemblyVerifier.java MetaDataVerifier.java Log: Remove link to ComponentInfo from within ComponentMetaData Revision Changes Path 1.11 +38 -35 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/dependency/DependencyMap.java Index: DependencyMap.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/dependency/DependencyMap.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- DependencyMap.java 17 Aug 2002 06:46:16 -0000 1.10 +++ DependencyMap.java 18 Aug 2002 03:34:27 -0000 1.11 @@ -8,9 +8,10 @@ package org.apache.excalibur.containerkit.dependency; import java.util.ArrayList; -import org.apache.excalibur.containerkit.metadata.ComponentMetaData; import org.apache.excalibur.containerkit.metadata.DependencyMetaData; +import org.apache.excalibur.containerkit.metadata.ComponentMetaData; import org.apache.excalibur.containerkit.metainfo.DependencyDescriptor; +import org.apache.excalibur.containerkit.kernel.ComponentEntry; /** * Utility class to help aquire a ordered graph of @@ -76,57 +77,57 @@ * * @param component the component */ - public void add( final ComponentMetaData component ) + public void add( final ComponentEntry component ) { m_components.add( component ); } /** - * Get the serilized graph of {@link ComponentMetaData} objects + * Get the serilized graph of {@link ComponentEntry} objects * required when starting up all the components. This makes sure * that all providers occur before their coresponding * consumers in graph. * * @return the ordered list of components */ - public ComponentMetaData[] getStartupGraph() + public ComponentEntry[] getStartupGraph() { return walkGraph( true ); } /** - * Get the serilized graph of {@link ComponentMetaData} objects + * Get the serilized graph of {@link ComponentEntry} objects * required when shutting down all the components. This makes * sure that all consumers occur before their coresponding * providers in graph. * * @return the ordered list of components */ - public ComponentMetaData[] getShutdownGraph() + public ComponentEntry[] getShutdownGraph() { return walkGraph( false ); } /** - * Get the serilized graph of {@link ComponentMetaData} objects + * Get the serilized graph of {@link ComponentEntry} objects * that use services of specified component. * * @param component the component * @return the ordered list of consumers */ - public ComponentMetaData[] getConsumerGraph( final ComponentMetaData component ) + public ComponentEntry[] getConsumerGraph( final ComponentEntry component ) { return getComponentGraph( component, false ); } /** - * Get the serilized graph of {@link ComponentMetaData} objects + * Get the serilized graph of {@link ComponentEntry} objects * that provide specified component with services. * * @param component the component * @return the ordered list of providers */ - public ComponentMetaData[] getProviderGraph( final ComponentMetaData component ) + public ComponentEntry[] getProviderGraph( final ComponentEntry component ) { return getComponentGraph( component, true ); } @@ -138,7 +139,7 @@ * @param providers true if traversing providers, false if consumers * @return the list of components in graph */ - private ComponentMetaData[] getComponentGraph( final ComponentMetaData component, final boolean providers ) + private ComponentEntry[] getComponentGraph( final ComponentEntry component, final boolean providers ) { final ArrayList result = new ArrayList(); visitcomponent( component, @@ -146,8 +147,8 @@ new ArrayList(), result ); - final ComponentMetaData[] returnValue = new ComponentMetaData[ result.size() ]; - return (ComponentMetaData[])result.toArray( returnValue ); + final ComponentEntry[] returnValue = new ComponentEntry[ result.size() ]; + return (ComponentEntry[])result.toArray( returnValue ); } /** @@ -158,7 +159,7 @@ * @param providers true if forward dependencys traced, false if dependencies reversed * @return the ordered node names */ - private ComponentMetaData[] walkGraph( final boolean providers ) + private ComponentEntry[] walkGraph( final boolean providers ) { final ArrayList result = new ArrayList(); final ArrayList done = new ArrayList(); @@ -166,16 +167,16 @@ final int size = m_components.size(); for( int i = 0; i < size; i++ ) { - final ComponentMetaData component = - (ComponentMetaData)m_components.get( i ); + final ComponentEntry component = + (ComponentEntry)m_components.get( i ); visitcomponent( component, providers, done, result ); } - final ComponentMetaData[] returnValue = new ComponentMetaData[ result.size() ]; - return (ComponentMetaData[])result.toArray( returnValue ); + final ComponentEntry[] returnValue = new ComponentEntry[ result.size() ]; + return (ComponentEntry[])result.toArray( returnValue ); } /** @@ -187,7 +188,7 @@ * @param order the order in which nodes have already been * traversed */ - private void visitcomponent( final ComponentMetaData component, + private void visitcomponent( final ComponentEntry component, final boolean providers, final ArrayList done, final ArrayList order ) @@ -215,19 +216,20 @@ * Traverse graph of components that provide services to * the specified component. * - * @param component the ComponentMetaData + * @param component the ComponentEntry */ - private void visitProviders( final ComponentMetaData component, + private void visitProviders( final ComponentEntry component, final ArrayList done, final ArrayList order ) { final DependencyDescriptor[] descriptors = - component.getComponentInfo().getDependencies(); + component.getInfo().getDependencies(); + final ComponentMetaData metaData = component.getMetaData(); for( int i = 0; i < descriptors.length; i++ ) { final DependencyMetaData dependency = - component.getDependency( descriptors[ i ].getRole() ); + metaData.getDependency( descriptors[ i ].getRole() ); // added != null clause to catch cases where an optional // dependency exists and the dependecy has not been bound @@ -235,7 +237,7 @@ if( dependency != null ) { - final ComponentMetaData other = + final ComponentEntry other = getComponent( dependency.getProviderName() ); visitcomponent( other, true, done, order ); } @@ -246,20 +248,21 @@ * Traverse all Consumers of component. ie Anyone that uses * service provided by component. * - * @param component the ComponentMetaData + * @param component the ComponentEntry */ - private void visitConsumers( final ComponentMetaData component, + private void visitConsumers( final ComponentEntry component, final ArrayList done, final ArrayList order ) { - final String name = component.getName(); + final String name = component.getMetaData().getName(); final int size = m_components.size(); for( int i = 0; i < size; i++ ) { - final ComponentMetaData other = - (ComponentMetaData)m_components.get( i ); - final DependencyMetaData[] roles = other.getDependencies(); + final ComponentEntry other = + (ComponentEntry)m_components.get( i ); + final DependencyMetaData[] roles = + other.getMetaData().getDependencies(); for( int j = 0; j < roles.length; j++ ) { @@ -285,14 +288,14 @@ * @param name the name of component * @return the component */ - private ComponentMetaData getComponent( final String name ) + private ComponentEntry getComponent( final String name ) { final int size = m_components.size(); for( int i = 0; i < size; i++ ) { - final ComponentMetaData component = - (ComponentMetaData)m_components.get( i ); - if( component.getName().equals( name ) ) + final ComponentEntry component = + (ComponentEntry)m_components.get( i ); + if( component.getMetaData().getName().equals( name ) ) { return component; } 1.19 +41 -23 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/AbstractServiceKernel.java Index: AbstractServiceKernel.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/AbstractServiceKernel.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- AbstractServiceKernel.java 17 Aug 2002 06:57:01 -0000 1.18 +++ AbstractServiceKernel.java 18 Aug 2002 03:34:28 -0000 1.19 @@ -17,9 +17,11 @@ import org.apache.avalon.framework.container.ContainerUtil; import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.excalibur.containerkit.dependency.DependencyMap; +import org.apache.excalibur.containerkit.factory.ComponentFactory; import org.apache.excalibur.containerkit.lifecycle.LifecycleHelper; import org.apache.excalibur.containerkit.lifecycle.ResourceProvider; import org.apache.excalibur.containerkit.metadata.ComponentMetaData; +import org.apache.excalibur.containerkit.metainfo.ComponentInfo; /** * The <code>AbstractServiceKernel</code> defines an application scope through @@ -37,6 +39,10 @@ private final static Resources REZ = ResourceManager.getPackageResources( AbstractServiceKernel.class ); /** + * The factory to use when creating components. + */ + private ComponentFactory m_factory; + /** * The resource provider to use to provide resources * for all the components. */ @@ -66,6 +72,7 @@ public void initialize() throws Exception { + m_factory = prepareFactory(); m_resourceProvider = prepareResourceProvider(); m_lifecycleHelper = prepareLifecycleHelper(); } @@ -100,6 +107,8 @@ } } + protected abstract ComponentFactory prepareFactory(); + protected abstract ResourceProvider prepareResourceProvider(); protected LifecycleHelper prepareLifecycleHelper() @@ -116,7 +125,7 @@ protected final void startupAllComponents() throws Exception { - final ComponentMetaData[] components = m_dependencyMap.getStartupGraph(); + final ComponentEntry[] components = m_dependencyMap.getStartupGraph(); processComponents( true, components ); } @@ -127,7 +136,7 @@ protected final void shutdownAllComponents() throws Exception { - final ComponentMetaData[] components = m_dependencyMap.getShutdownGraph(); + final ComponentEntry[] components = m_dependencyMap.getShutdownGraph(); processComponents( false, components ); } @@ -140,8 +149,8 @@ throws Exception { final ComponentEntry entry = (ComponentEntry)m_entrys.get( name ); - final ComponentMetaData[] components = - m_dependencyMap.getProviderGraph( entry.getProfile() ); + final ComponentEntry[] components = + m_dependencyMap.getProviderGraph( entry ); processComponents( true, components ); } @@ -154,12 +163,22 @@ throws Exception { final ComponentEntry entry = (ComponentEntry)m_entrys.get( name ); - final ComponentMetaData[] components = - m_dependencyMap.getConsumerGraph( entry.getProfile() ); + final ComponentEntry[] components = + m_dependencyMap.getConsumerGraph( entry ); processComponents( false, components ); } /** + * Return the {@link ComponentFactory} associated with kernel. + * + * @return the {@link ComponentFactory} associated with kernel. + */ + protected final ComponentFactory getFactory() + { + return m_factory; + } + + /** * Add a Component to the container. * This Must be called before any components are started * or else an exception is raised. @@ -167,11 +186,12 @@ * @param component the component */ protected final void addComponent( final ComponentMetaData component ) + throws Exception { - final String name = component.getName(); - final ComponentEntry entry = new ComponentEntry( component ); - m_entrys.put( name, entry ); - m_dependencyMap.add( component ); + final ComponentInfo info = m_factory.createInfo( component.getImplementationKey() ); + final ComponentEntry entry = new ComponentEntry( info, component ); + m_entrys.put( component.getName(), entry ); + m_dependencyMap.add( entry ); } protected final Object getComponent( final String name ) @@ -197,7 +217,7 @@ * through the phases */ private void processComponents( final boolean startup, - final ComponentMetaData[] components ) + final ComponentEntry[] components ) throws Exception { processComponentsNotice( components, startup ); @@ -245,15 +265,13 @@ * @throws Exception if there is error processing any of the components * through the phases */ - private void processComponent( final ComponentMetaData component, + private void processComponent( final ComponentEntry component, final boolean startup ) throws Exception { - final String name = component.getName(); - final ComponentEntry entry = - (ComponentEntry)m_entrys.get( name ); + final String name = component.getMetaData().getName(); - if( startup == entry.isActive() ) + if( startup == component.isActive() ) { //If component is already started and we said start //or the component is already stopped and we said stop @@ -269,14 +287,14 @@ { final Object object = m_lifecycleHelper.startup( name, - entry, + component, m_resourceProvider ); - entry.setObject( object ); + component.setObject( object ); } else { - final Object object = entry.getObject(); - entry.setObject( null ); + final Object object = component.getObject(); + component.setObject( null ); m_lifecycleHelper.shutdown( name, object ); } } @@ -302,7 +320,7 @@ * @param order the order the components will be processed in * @param startup true if application startup phase, false if shutdown phase */ - private void processComponentsNotice( final ComponentMetaData[] order, + private void processComponentsNotice( final ComponentEntry[] order, final boolean startup ) { if( getLogger().isInfoEnabled() ) @@ -312,7 +330,7 @@ final List pathList = new ArrayList(); for( int i = 0; i < order.length; i++ ) { - pathList.add( order[ i ].getName() ); + pathList.add( order[ i ].getMetaData().getName() ); } final String message = 1.12 +26 -8 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/ComponentEntry.java Index: ComponentEntry.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/ComponentEntry.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- ComponentEntry.java 17 Aug 2002 06:57:01 -0000 1.11 +++ ComponentEntry.java 18 Aug 2002 03:34:28 -0000 1.12 @@ -8,22 +8,28 @@ package org.apache.excalibur.containerkit.kernel; import org.apache.excalibur.containerkit.metadata.ComponentMetaData; +import org.apache.excalibur.containerkit.metainfo.ComponentInfo; /** * This is the structure that components are contained within when * loaded into a container. * * @author <a href="mailto:peter at apache.org">Peter Donald</a> - * @author <a href="mailto:[EMAIL PROTECTED]">Stephen McConnell</a> * @version $Revision$ $Date$ */ public class ComponentEntry { /** + * The {@link ComponentInfo} that describes + * the type of this component. + */ + private final ComponentInfo m_info; + + /** * The {@link ComponentMetaData} that describes * this component. */ - private final ComponentMetaData m_profile; + private final ComponentMetaData m_metaData; /** * The instance of this component. @@ -32,20 +38,32 @@ /** * Creation of a new <code>ComponentEntry</code> instance. - * @param profile the {@link ComponentMetaData} instance defining the component. + * @param metaData the {@link ComponentMetaData} instance defining the component. + */ + public ComponentEntry( final ComponentInfo info, + final ComponentMetaData metaData ) + { + m_info = info; + m_metaData = metaData; + } + + /** + * Returns the underlying {@link ComponentInfo} instance. + * + * @return the component info instance */ - public ComponentEntry( final ComponentMetaData profile ) + public ComponentInfo getInfo() { - m_profile = profile; + return m_info; } /** * Returns the underlying {@link ComponentMetaData} instance. * @return the component meta data instance */ - public ComponentMetaData getProfile() + public ComponentMetaData getMetaData() { - return m_profile; + return m_metaData; } /** 1.3 +2 -4 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/MetaDataBuilder.java Index: MetaDataBuilder.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/MetaDataBuilder.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- MetaDataBuilder.java 17 Aug 2002 06:57:01 -0000 1.2 +++ MetaDataBuilder.java 18 Aug 2002 03:34:28 -0000 1.3 @@ -8,7 +8,6 @@ package org.apache.excalibur.containerkit.kernel; import org.apache.excalibur.containerkit.metadata.ComponentMetaData; -import org.apache.excalibur.containerkit.factory.ComponentFactory; /** * Load metadata from some source. The source is usually @@ -30,7 +29,6 @@ * @throws Exception if unable to load or resolve meta * data for any reason */ - ComponentMetaData[] loadMetaData( String location, - ComponentFactory factory ) + ComponentMetaData[] loadMetaData( String location ) throws Exception; } 1.3 +8 -13 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/SimpleMetaDataBuilder.java Index: SimpleMetaDataBuilder.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/SimpleMetaDataBuilder.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SimpleMetaDataBuilder.java 17 Aug 2002 06:57:01 -0000 1.2 +++ SimpleMetaDataBuilder.java 18 Aug 2002 03:34:28 -0000 1.3 @@ -11,10 +11,8 @@ import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; -import org.apache.excalibur.containerkit.factory.ComponentFactory; import org.apache.excalibur.containerkit.metadata.ComponentMetaData; import org.apache.excalibur.containerkit.metadata.DependencyMetaData; -import org.apache.excalibur.containerkit.metainfo.ComponentInfo; import org.xml.sax.InputSource; /** @@ -27,8 +25,8 @@ public class SimpleMetaDataBuilder implements MetaDataBuilder { - public ComponentMetaData[] loadMetaData( final String location, - final ComponentFactory factory ) + public ComponentMetaData[] loadMetaData( final String location + ) throws Exception { final DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder(); @@ -37,11 +35,10 @@ final Configuration configuration = builder.build( input ); final Configuration[] children = configuration.getChildren( "component" ); - return loadComponentDatas( children, factory ); + return loadComponentDatas( children ); } - private ComponentMetaData[] loadComponentDatas( final Configuration[] components, - final ComponentFactory factory ) + private ComponentMetaData[] loadComponentDatas( final Configuration[] components ) throws Exception { final ArrayList profiles = new ArrayList(); @@ -49,25 +46,23 @@ for( int i = 0; i < components.length; i++ ) { final ComponentMetaData component = - loadComponentData( components[ i ],factory ); + loadComponentData( components[ i ] ); profiles.add( component ); } return (ComponentMetaData[])profiles.toArray( new ComponentMetaData[ profiles.size() ] ); } - private ComponentMetaData loadComponentData( final Configuration component, - final ComponentFactory factory ) + private ComponentMetaData loadComponentData( final Configuration component ) throws Exception { final String name = component.getAttribute( "name" ); final String impl = component.getAttribute( "impl" ); final Configuration config = component.getChild( "config" ); - final ComponentInfo info = factory.createInfo( impl ); final DependencyMetaData[] dependencies = parseAssociations( component.getChildren( "provide" ) ); - return new ComponentMetaData( name, dependencies, null, config, info ); + return new ComponentMetaData( name, impl, dependencies, null, config ); } private DependencyMetaData[] parseAssociations( final Configuration[] provides ) 1.7 +3 -18 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/SimpleResourceProvider.java Index: SimpleResourceProvider.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/SimpleResourceProvider.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- SimpleResourceProvider.java 17 Aug 2002 06:57:01 -0000 1.6 +++ SimpleResourceProvider.java 18 Aug 2002 03:34:28 -0000 1.7 @@ -11,12 +11,8 @@ import org.apache.excalibur.containerkit.factory.ComponentFactory; import org.apache.excalibur.containerkit.lifecycle.impl.AbstractResourceProvider; import org.apache.excalibur.containerkit.metadata.ComponentMetaData; -import org.apache.excalibur.containerkit.metainfo.ComponentDescriptor; -import org.apache.excalibur.containerkit.metainfo.ComponentInfo; /** - * - * * @author <a href="mailto:peter at apache.org">Peter Donald</a> * @version $Revision$ $Date$ */ @@ -24,18 +20,17 @@ extends AbstractResourceProvider { private final AbstractServiceKernel m_serviceKernel; - private final ComponentFactory m_factory; public SimpleResourceProvider( final AbstractServiceKernel serviceKernel, final ComponentFactory factory ) { + super( factory ); m_serviceKernel = serviceKernel; - m_factory = factory; } protected ComponentMetaData getMetaData( final Object entry ) { - return ((ComponentEntry)entry).getProfile(); + return ((ComponentEntry)entry).getMetaData(); } protected Object getService( final String name, @@ -49,16 +44,6 @@ { //Should return classloaders that are available return null; - } - - public Object createObject( final Object entry ) - throws Exception - { - final ComponentMetaData component = getMetaData( entry ); - final ComponentInfo info = component.getComponentInfo(); - final ComponentDescriptor descriptor = info.getComponentDescriptor(); - final String implementationKey = descriptor.getImplementationKey(); - return m_factory.createComponent( implementationKey ); } public Logger createLogger( final Object entry ) 1.9 +13 -9 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/SimpleServiceKernel.java Index: SimpleServiceKernel.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/SimpleServiceKernel.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- SimpleServiceKernel.java 17 Aug 2002 06:57:01 -0000 1.8 +++ SimpleServiceKernel.java 18 Aug 2002 03:34:28 -0000 1.9 @@ -34,7 +34,6 @@ private final static Resources REZ = ResourceManager.getPackageResources( SimpleServiceKernel.class ); - private ComponentFactory m_factory; private MetaDataBuilder m_metaDataBuilder; private String m_configURL; @@ -47,15 +46,12 @@ public void initialize() throws Exception { - m_factory = new DefaultComponentFactory( getClass().getClassLoader() ); - setupLogger( m_factory, "factory" ); + super.initialize(); m_metaDataBuilder = new SimpleMetaDataBuilder(); - setupLogger( m_factory, "builder" ); - - super.initialize(); + setupLogger( getFactory(), "builder" ); - final ComponentMetaData[] components = m_metaDataBuilder.loadMetaData( m_configURL, m_factory ); + final ComponentMetaData[] components = m_metaDataBuilder.loadMetaData( m_configURL ); for( int i = 0; i < components.length; i++ ) { final ComponentMetaData component = components[ i ]; @@ -80,10 +76,18 @@ super.dispose(); } + protected ComponentFactory prepareFactory() + { + final DefaultComponentFactory factory = + new DefaultComponentFactory( getClass().getClassLoader() ); + setupLogger( factory, "factory" ); + return factory; + } + protected ResourceProvider prepareResourceProvider() { final SimpleResourceProvider resourceProvider = - new SimpleResourceProvider( this, m_factory ); + new SimpleResourceProvider( this, getFactory() ); setupLogger( resourceProvider, "provider" ); return resourceProvider; } 1.14 +46 -5 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/lifecycle/impl/AbstractResourceProvider.java Index: AbstractResourceProvider.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/lifecycle/impl/AbstractResourceProvider.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- AbstractResourceProvider.java 17 Aug 2002 06:53:36 -0000 1.13 +++ AbstractResourceProvider.java 18 Aug 2002 03:34:28 -0000 1.14 @@ -28,6 +28,7 @@ import org.apache.excalibur.containerkit.metainfo.ComponentInfo; import org.apache.excalibur.containerkit.metainfo.ContextDescriptor; import org.apache.excalibur.containerkit.metainfo.EntryDescriptor; +import org.apache.excalibur.containerkit.factory.ComponentFactory; /** * This is a base object via which the @@ -51,6 +52,17 @@ private final static Resources REZ = ResourceManager.getPackageResources( AbstractResourceProvider.class ); + private final ComponentFactory m_factory; + + protected AbstractResourceProvider( final ComponentFactory factory ) + { + if( null == factory ) + { + throw new NullPointerException( "factory" ); + } + m_factory = factory; + } + /** * Utility method via which the provider aquires services to place * in ServiceManager for a particular component. @@ -76,6 +88,24 @@ protected abstract Object getContextValue( String name, Object entry ); /** + * Create a component for a particular entry. + * This implementation uses the associated + * {@link ComponentFactory} to create instance of + * component. + * + * @param entry the entry + * @return the newly created component + * @throws Exception if unable to create component + */ + public Object createObject( final Object entry ) + throws Exception + { + final ComponentMetaData component = getMetaData( entry ); + final String implementationKey = component.getImplementationKey(); + return m_factory.createComponent( implementationKey ); + } + + /** * Create a Parameters object by Creating configuration object and converting that. * * @param entry the entry @@ -160,9 +190,9 @@ { final ComponentMetaData component = getMetaData( componentEntry ); final String componentName = component.getName(); - - final ContextDescriptor descriptor = - component.getComponentInfo().getContextDescriptor(); + final String impl = component.getImplementationKey(); + final ComponentInfo info = m_factory.createInfo( impl ); + final ContextDescriptor descriptor = info.getContextDescriptor(); final Map contextData = new HashMap(); @@ -296,6 +326,16 @@ } /** + * Accessor for component factory for sub-classes. + * + * @return the componentFactory associated with ResourceProvider. + */ + protected final ComponentFactory getComponentFactory() + { + return m_factory; + } + + /** * Create a Map of services for specified component. * The map maps role name to service provider. * @@ -307,7 +347,8 @@ throws Exception { final ComponentMetaData component = getMetaData( componentEntry ); - final ComponentInfo info = component.getComponentInfo(); + final String impl = component.getImplementationKey(); + final ComponentInfo info = m_factory.createInfo( impl ); final DependencyMetaData[] dependencies = component.getDependencies(); final HashMap services = new HashMap(); 1.13 +19 -18 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/metadata/ComponentMetaData.java Index: ComponentMetaData.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/metadata/ComponentMetaData.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- ComponentMetaData.java 17 Aug 2002 06:59:02 -0000 1.12 +++ ComponentMetaData.java 18 Aug 2002 03:34:28 -0000 1.13 @@ -9,7 +9,6 @@ import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.parameters.Parameters; -import org.apache.excalibur.containerkit.metainfo.ComponentInfo; /** * Each component declared in the application is represented by @@ -25,7 +24,15 @@ public class ComponentMetaData { /** - * The name of the component profile. This is an + * The implementationKey for this component. + * Usually this represents a classname but + * alternative mechanisms could be used (ie URL + * of webservice). + */ + private final String m_implementationKey; + + /** + * The name of the component. This is an * abstract name used during assembly. */ private final String m_name; @@ -37,11 +44,6 @@ private final DependencyMetaData[] m_dependencies; /** - * The info object for component type. - */ - private final ComponentInfo m_componentInfo; - - /** * The parameters for component (if any). */ private final Parameters m_parameters; @@ -56,13 +58,12 @@ * * @param name the abstract name of component meta data instance * @param dependencies the meta data for any dependencies - * @param componentInfo the component componentInfo desribing the component type */ public ComponentMetaData( final String name, + final String implementationKey, final DependencyMetaData[] dependencies, final Parameters parameters, - final Configuration configuration, - final ComponentInfo componentInfo ) + final Configuration configuration ) { if( null == name ) { @@ -72,16 +73,16 @@ { throw new NullPointerException( "dependencies" ); } - if( null == componentInfo ) + if( null == implementationKey ) { - throw new NullPointerException( "componentInfo" ); + throw new NullPointerException( "implementationKey" ); } m_name = name; m_dependencies = dependencies; m_parameters = parameters; m_configuration = configuration; - m_componentInfo = componentInfo; + m_implementationKey = implementationKey; } /** @@ -95,13 +96,13 @@ } /** - * Return the info for component. + * Return the implementationKey for component. * - * @return the info for component type. + * @return the implementationKey for component. */ - public ComponentInfo getComponentInfo() + public String getImplementationKey() { - return m_componentInfo; + return m_implementationKey; } /** 1.29 +40 -17 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/verifier/AssemblyVerifier.java Index: AssemblyVerifier.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/verifier/AssemblyVerifier.java,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- AssemblyVerifier.java 17 Aug 2002 06:48:47 -0000 1.28 +++ AssemblyVerifier.java 18 Aug 2002 03:34:28 -0000 1.29 @@ -12,6 +12,7 @@ import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.framework.logger.AbstractLogEnabled; +import org.apache.excalibur.containerkit.factory.ComponentFactory; import org.apache.excalibur.containerkit.metadata.ComponentMetaData; import org.apache.excalibur.containerkit.metadata.DependencyMetaData; import org.apache.excalibur.containerkit.metainfo.ComponentInfo; @@ -60,7 +61,8 @@ * @param components the Components that make up assembly * @throws VerifyException if an error occurs */ - public void verifyAssembly( final ComponentMetaData[] components ) + public void verifyAssembly( final ComponentMetaData[] components, + final ComponentFactory factory ) throws VerifyException { String message = null; @@ -75,11 +77,11 @@ message = REZ.getString( "assembly.dependencies-mapping.notice" ); getLogger().info( message ); - verifyValidDependencies( components ); + verifyValidDependencies( components, factory ); message = REZ.getString( "assembly.dependency-references.notice" ); getLogger().info( message ); - verifyDependencyReferences( components ); + verifyDependencyReferences( components, factory ); message = REZ.getString( "assembly.nocircular-dependencies.notice" ); getLogger().info( message ); @@ -92,12 +94,13 @@ * @param components the ComponentMetaData objects for the components * @throws VerifyException if an error occurs */ - public void verifyValidDependencies( final ComponentMetaData[] components ) + public void verifyValidDependencies( final ComponentMetaData[] components, + final ComponentFactory factory ) throws VerifyException { for( int i = 0; i < components.length; i++ ) { - verifyDependenciesMap( components[ i ] ); + verifyDependenciesMap( components[ i ], factory ); } } @@ -210,7 +213,7 @@ for( int i = 0; i < deps.length; i++ ) { final String name = deps[ i ].getProviderName(); - final ComponentMetaData other = getComponentProfile( name, components ); + final ComponentMetaData other = getComponentMetaData( name, components ); dependencies.add( other ); } @@ -223,12 +226,13 @@ * @param components the ComponentMetaData objects for the components * @throws VerifyException if an error occurs */ - protected void verifyDependencyReferences( final ComponentMetaData[] components ) + protected void verifyDependencyReferences( final ComponentMetaData[] components, + final ComponentFactory factory ) throws VerifyException { for( int i = 0; i < components.length; i++ ) { - verifyDependencyReferences( components[ i ], components ); + verifyDependencyReferences( components[ i ], components, factory ); } } @@ -240,10 +244,11 @@ * @throws VerifyException if an error occurs */ protected void verifyDependencyReferences( final ComponentMetaData component, - final ComponentMetaData[] others ) + final ComponentMetaData[] others, + final ComponentFactory factory ) throws VerifyException { - final ComponentInfo info = component.getComponentInfo(); + final ComponentInfo info = getComponentInfo( component, factory ); final DependencyMetaData[] roles = component.getDependencies(); for( int i = 0; i < roles.length; i++ ) @@ -254,7 +259,7 @@ info.getDependency( roleName ).getService(); //Get the other component that is providing service - final ComponentMetaData provider = getComponentProfile( providerName, others ); + final ComponentMetaData provider = getComponentMetaData( providerName, others ); if( null == provider ) { final String message = @@ -267,7 +272,8 @@ //make sure that the component offers service //that user expects it to be providing - final ServiceDescriptor[] services = provider.getComponentInfo().getServices(); + final ComponentInfo providerInfo = getComponentInfo( provider, factory ); + final ServiceDescriptor[] services = providerInfo.getServices(); if( !hasMatchingService( service, services ) ) { final String message = @@ -280,6 +286,20 @@ } } + private ComponentInfo getComponentInfo( final ComponentMetaData component, final ComponentFactory factory ) + throws VerifyException + { + final String impl = component.getImplementationKey(); + try + { + return factory.createInfo( impl ); + } + catch( final Exception e ) + { + throw new VerifyException( e.getMessage(), e ); + } + } + /** * Get component with specified name from specified Component array. * @@ -287,7 +307,7 @@ * @param components the array of components to search * @return the Component if found, else null */ - protected ComponentMetaData getComponentProfile( final String name, + protected ComponentMetaData getComponentMetaData( final String name, final ComponentMetaData[] components ) { for( int i = 0; i < components.length; i++ ) @@ -395,7 +415,8 @@ * @param component the ComponentMetaData describing the component * @throws VerifyException if an error occurs */ - protected void verifyDependenciesMap( final ComponentMetaData component ) + protected void verifyDependenciesMap( final ComponentMetaData component, + final ComponentFactory factory ) throws VerifyException { //Make sure all role entries specified in config file are valid @@ -404,7 +425,8 @@ for( int i = 0; i < dependencySet.length; i++ ) { final String roleName = dependencySet[ i ].getRole(); - final DependencyDescriptor descriptor = component.getComponentInfo().getDependency( roleName ); + final ComponentInfo info = getComponentInfo( component, factory ); + final DependencyDescriptor descriptor = info.getDependency( roleName ); //If there is no dependency descriptor in ComponentInfo then //user has specified an uneeded dependency. @@ -420,7 +442,8 @@ } //Make sure all dependencies in ComponentInfo file are satisfied - final DependencyDescriptor[] dependencies = component.getComponentInfo().getDependencies(); + final ComponentInfo info = getComponentInfo( component, factory ); + final DependencyDescriptor[] dependencies = info.getDependencies(); for( int i = 0; i < dependencies.length; i++ ) { final DependencyDescriptor dependency = dependencies[ i ]; 1.10 +36 -8 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/verifier/MetaDataVerifier.java Index: MetaDataVerifier.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/verifier/MetaDataVerifier.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- MetaDataVerifier.java 17 Aug 2002 06:48:25 -0000 1.9 +++ MetaDataVerifier.java 18 Aug 2002 03:34:28 -0000 1.10 @@ -19,6 +19,7 @@ import org.apache.excalibur.containerkit.metainfo.ContextDescriptor; import org.apache.excalibur.containerkit.metainfo.ServiceDescriptor; import org.apache.excalibur.containerkit.metainfo.ServiceDesignator; +import org.apache.excalibur.containerkit.factory.ComponentFactory; /** * This Class verifies that an implementation is valid wrt the @@ -87,11 +88,12 @@ * @throws VerifyException if an error occurs */ public void verifyType( final ComponentMetaData component, - final ClassLoader classLoader ) + final ClassLoader classLoader, + final ComponentFactory factory ) throws VerifyException { final Class clazz = getClass( classLoader, component ); - verifyType( component, clazz ); + verifyType( component, clazz, factory ); } /** @@ -102,19 +104,45 @@ * @throws VerifyException if an error occurs */ public void verifyType( final ComponentMetaData component, - final Class clazz ) + final Class clazz, + final ComponentFactory factory ) throws VerifyException { final String name = component.getName(); + final String impl = component.getImplementationKey(); + final ComponentInfo info = getComponentInfo( impl, factory ); final Class[] interfaces = getServiceClasses( name, - component.getComponentInfo().getServices(), + info.getServices(), clazz.getClassLoader() ); m_verifier.verifyComponent( name, clazz, interfaces ); verifyDependencyPresence( component, clazz ); - verifyContextPresence( component, clazz ); + verifyContextPresence( component, info, clazz ); + } + + /** + * Retrieve component info from factory and throw a verify + * exception on error. + * + * @param impl the implementationKey + * @param factory the factory to use + * @return the ComponentInfo for implementationKey + * @throws VerifyException if unable to locate info + */ + private ComponentInfo getComponentInfo( final String impl, + final ComponentFactory factory ) + throws VerifyException + { + try + { + return factory.createInfo( impl ); + } + catch( final Exception e ) + { + throw new VerifyException( e.getMessage(), e ); + } } /** @@ -126,10 +154,10 @@ * @throws VerifyException if fails verification check */ protected void verifyContextPresence( final ComponentMetaData component, + final ComponentInfo info, final Class clazz ) throws VerifyException { - final ComponentInfo info = component.getComponentInfo(); final ContextDescriptor context = info.getContextDescriptor(); final int count = context.getEntrys().length; @@ -254,6 +282,6 @@ */ private String getClassname( final ComponentMetaData component ) { - return component.getComponentInfo().getComponentDescriptor().getImplementationKey(); + return component.getImplementationKey(); } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>