You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by do...@apache.org on 2002/08/18 05:34:29 UTC
cvs commit: jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/verifier AssemblyVerifier.java MetaDataVerifier.java
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:mcconnell@apache.org">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: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>