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/06/18 05:47:14 UTC
cvs commit: jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/lifecycle ResourceProvider.java LifecycleHelper.java ResourceAccessor.java
donaldp 2002/06/17 20:47:14
Modified: containerkit/src/java/org/apache/excalibur/containerkit/lifecycle
LifecycleHelper.java
Added: containerkit/src/java/org/apache/excalibur/containerkit/kernel
KernelResourceProvider.java
containerkit/src/java/org/apache/excalibur/containerkit/lifecycle
ResourceProvider.java
Removed: containerkit/src/java/org/apache/excalibur/containerkit/kernel
KernelResourceAccessor.java
containerkit/src/java/org/apache/excalibur/containerkit/lifecycle
ResourceAccessor.java
Log:
Rename accessor to provider because Stephen likes name better
Revision Changes Path
1.1 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/KernelResourceProvider.java
Index: KernelResourceProvider.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.excalibur.containerkit.kernel;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.DefaultComponentManager;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.service.DefaultServiceManager;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.excalibur.containerkit.lifecycle.ResourceProvider;
import org.apache.excalibur.containerkit.metadata.ComponentMetaData;
import org.apache.excalibur.containerkit.metadata.DependencyMetaData;
import org.apache.excalibur.containerkit.metainfo.ComponentInfo;
import org.apache.excalibur.containerkit.metainfo.ContextDescriptor;
import org.apache.excalibur.containerkit.metainfo.EntryDescriptor;
/**
* This is the bas object via which the kernel aquires
* resources for each component. This base implementation
* will aquire components and make sure that all required
* components are present. It will also make sure that the types
* of values returned from context are valid.
*
* <p>Note that this class assumes that the dependency graph
* has been validated (presumably via
* {@link org.apache.excalibur.containerkit.verifier.AssemblyVerifier}</p>
*
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
* @version $Revision: 1.1 $ $Date: 2002/06/18 03:47:13 $
*/
public abstract class KernelResourceProvider
extends AbstractLogEnabled
implements ResourceProvider
{
private final static Resources REZ =
ResourceManager.getPackageResources( KernelResourceProvider.class );
/**
* Utility method via which the provider aquires services to place
* in ServiceManager for a particular component.
*
* <p>Must be implemented in subclass.</p>
*
* @param name the name of service
* @param entry the entry for component aquiring service
* @return the service object for specified name
*/
protected abstract Object getService( String name, Object entry );
/**
* Utility method via which the provider aquires a context value
* to place in Context for a particular component.
*
* <p>Must be implemented in subclass.</p>
*
* @param name the name of service
* @param entry the entry for component aquiring service
* @return the context value for specified name
*/
protected abstract Object getContextValue( String name, Object entry );
/**
* Create a Parameters object by Creating configuration object and converting that.
*
* @param entry the entry
* @return a new Parameters object for component
* @throws Exception if unable to create resource
*/
public Parameters createParameters( Object entry )
throws Exception
{
final Configuration configuration = createConfiguration( entry );
return Parameters.fromConfiguration( configuration );
}
/**
* Create a {@link Context} object that contains values specified in map.
* The default implementation creates a basic Context object but different
* containers may choose to overide this to provide their own subclass of context.
*
* @param contextData the data to place in context
* @return the Context object
*/
protected Context createContextImpl( final Map contextData )
{
final DefaultContext context = new DefaultContext( contextData );
context.makeReadOnly();
return context;
}
/**
* Return the {@link ComponentMetaData} for specified component entry.
* This implementation assumes that entry is instance of {@link ComponentMetaData}
* but subclasses should overide this method if this assumption does not hold true.
*
* @param entry the component entry
* @return the ComponentMetaData
*/
protected ComponentMetaData getMetaData( final Object entry )
{
return (ComponentMetaData)entry;
}
/**
* Create a context object for specified component.
*
* @param componentEntry the entry representing component
* @return the created Context
* @throws Exception if unable to create context or entrys in context
*/
public final Context createContext( final Object componentEntry )
throws Exception
{
final ComponentMetaData component = getMetaData( componentEntry );
final String componentName = component.getName();
final ContextDescriptor descriptor =
component.getComponentInfo().getContextDescriptor();
final Map contextData = new HashMap();
final EntryDescriptor[] entrys = descriptor.getEntrys();
for( int i = 0; i < entrys.length; i++ )
{
final EntryDescriptor entry = entrys[ i ];
final String key = entry.getKey();
final String type = entry.getType();
final boolean optional = entry.isOptional();
final Object value =
getContextValue( key, componentEntry );
if( null == value )
{
final String message =
REZ.getString( "resource.missing-context-value.error",
optional ? "1" : "2",
key,
componentName );
if( !optional )
{
throw new Exception( message );
}
else
{
getLogger().warn( message );
continue;
}
}
final boolean typeValid = objectImplementsType( value, type );
if( !typeValid )
{
final String message =
REZ.getString( "resource.bad-value-type.error",
optional ? "1" : "2",
key,
componentName,
type,
value.getClass().getName() );
if( !optional )
{
throw new Exception( message );
}
else
{
getLogger().warn( message );
continue;
}
}
contextData.put( key, value );
}
final Context context = createContextImpl( contextData );
final String classname = descriptor.getClassname();
final boolean validContextClass = objectImplementsType( context, classname );
if( !validContextClass )
{
final String message =
REZ.getString( "resource.bad-context-type.error",
classname,
context.getClass().getName(),
componentName );
throw new Exception( message );
}
return context;
}
/**
* Create a new ComponentManager for component.
*
* @param entry the entry
* @return a new ComponentManager for component
* @throws Exception if unable to create resource
*/
public final ComponentManager createComponentManager( final Object entry )
throws Exception
{
final Map services = createServiceMap( entry );
final DefaultComponentManager componentManager = new DefaultComponentManager();
final Iterator keys = services.keySet().iterator();
while( keys.hasNext() )
{
final String key = (String)keys.next();
final Object service = services.get( key );
if( !Component.class.isInstance( service ) )
{
final String message =
REZ.getString( "resource.service-not-a-component.error",
key,
service.getClass().getName() );
throw new Exception( message );
}
componentManager.put( key, (Component)service );
}
componentManager.makeReadOnly();
return componentManager;
}
/**
* Create a new ServiceManager for component.
*
* @param entry the entry
* @return a new ServiceManager for component
* @throws Exception if unable to create resource
*/
public final ServiceManager createServiceManager( final Object entry )
throws Exception
{
final Map services = createServiceMap( entry );
final DefaultServiceManager serviceManager = new DefaultServiceManager();
final Iterator keys = services.keySet().iterator();
while( keys.hasNext() )
{
final String key = (String)keys.next();
final Object service = services.get( key );
serviceManager.put( key, service );
}
serviceManager.makeReadOnly();
return serviceManager;
}
/**
* Create a Map of services for specified component.
* The map maps role name to service provider.
*
* @param componentEntry the component entry creating map for
* @return the map
* @throws Exception if error aquiring a service to place in map
*/
private Map createServiceMap( final Object componentEntry )
throws Exception
{
final ComponentMetaData component = getMetaData( componentEntry );
final ComponentInfo info = component.getComponentInfo();
final DependencyMetaData[] dependencies = component.getDependencies();
final HashMap services = new HashMap();
for( int i = 0; i < dependencies.length; i++ )
{
final DependencyMetaData dependency = dependencies[ i ];
final String role = dependency.getRole();
final String providerName = dependency.getProviderName();
final boolean optional = info.getDependency( role ).isOptional();
final Object service =
getService( providerName, componentEntry );
if( null == service )
{
final String message =
REZ.getString( "resource.missing-dependency.error",
optional ? "1" : "2",
role,
component.getName() );
if( !optional )
{
throw new Exception( message );
}
else
{
getLogger().warn( message );
continue;
}
}
services.put( role, service );
}
return services;
}
/**
* Check whether the specified value is compatible with specified type.
*
* @param value the value
* @param type the desired type
* @return true if value is compatible with type, false otherwise
*/
private boolean objectImplementsType( final Object value, final String type )
{
try
{
final Class clazz = value.getClass();
final ClassLoader classLoader = clazz.getClassLoader();
final Class typeClass = classLoader.loadClass( type );
if( typeClass.isAssignableFrom( clazz ) )
{
return true;
}
}
catch( final ClassNotFoundException cnfe )
{
}
return false;
}
}
1.8 +9 -9 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/lifecycle/LifecycleHelper.java
Index: LifecycleHelper.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/lifecycle/LifecycleHelper.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- LifecycleHelper.java 6 Jun 2002 21:48:03 -0000 1.7
+++ LifecycleHelper.java 18 Jun 2002 03:47:14 -0000 1.8
@@ -64,13 +64,13 @@
*
* @param name the name of the component
* @param entry the entry representing object
- * @param accessor the resource supplier
+ * @param provider the resource supplier
* @throws LifecycleException if an error occurs when block passes
* through a specific lifecycle stage
*/
public Object startup( final String name,
final Object entry,
- final ResourceAccessor accessor )
+ final ResourceProvider provider )
throws LifecycleException
{
int stage = 0;
@@ -79,14 +79,14 @@
//Creation stage
stage = STAGE_CREATE;
notice( name, stage );
- final Object object = accessor.createObject( entry );
+ final Object object = provider.createObject( entry );
//LogEnabled stage
stage = STAGE_LOGGER;
if( object instanceof LogEnabled )
{
notice( name, stage );
- final Logger logger = accessor.createLogger( entry );
+ final Logger logger = provider.createLogger( entry );
ContainerUtil.enableLogging( object, logger );
}
@@ -95,7 +95,7 @@
if( object instanceof Contextualizable )
{
notice( name, stage );
- final Context context = accessor.createContext( entry );
+ final Context context = provider.createContext( entry );
ContainerUtil.contextualize( object, context );
}
@@ -105,14 +105,14 @@
{
notice( name, stage );
final ServiceManager manager =
- accessor.createServiceManager( entry );
+ provider.createServiceManager( entry );
ContainerUtil.service( object, manager );
}
else if( object instanceof Composable )
{
notice( name, stage );
final ComponentManager componentManager =
- accessor.createComponentManager( entry );
+ provider.createComponentManager( entry );
ContainerUtil.compose( object, componentManager );
}
@@ -122,7 +122,7 @@
{
notice( name, stage );
final Configuration configuration =
- accessor.createConfiguration( entry );
+ provider.createConfiguration( entry );
ContainerUtil.configure( object, configuration );
}
@@ -132,7 +132,7 @@
{
notice( name, stage );
final Parameters parameters =
- accessor.createParameters( entry );
+ provider.createParameters( entry );
ContainerUtil.parameterize( object, parameters );
}
1.1 jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/lifecycle/ResourceProvider.java
Index: ResourceProvider.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.excalibur.containerkit.lifecycle;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.service.ServiceManager;
/**
* The interface via which resources required for a component
* are aquired.
*
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
* @version $Revision: 1.1 $ $Date: 2002/06/18 03:47:14 $
*/
public interface ResourceProvider
{
/**
* Create the object specified by entry.
*
* @param entry the entry
* @return the new object
* @throws Exception if unable to create resource
*/
Object createObject( Object entry )
throws Exception;
/**
* Create a new Logger for component.
*
* @param entry the entry
* @return a new Logger for component
* @throws Exception if unable to create resource
*/
Logger createLogger( Object entry )
throws Exception;
/**
* Create a new Context for component.
*
* @param entry the entry
* @return a new Context for component
* @throws Exception if unable to create resource
*/
Context createContext( Object entry )
throws Exception;
/**
* Create a new ComponentManager for component.
*
* @param entry the entry
* @return a new ComponentManager for component
* @throws Exception if unable to create resource
*/
ComponentManager createComponentManager( Object entry )
throws Exception;
/**
* Create a new ServiceManager for component.
*
* @param entry the entry
* @return a new ServiceManager for component
* @throws Exception if unable to create resource
*/
ServiceManager createServiceManager( Object entry )
throws Exception;
/**
* Create a new Configuration object for component.
*
* @param entry the entry
* @return a new Configuration object for component
* @throws Exception if unable to create resource
*/
Configuration createConfiguration( Object entry )
throws Exception;
/**
* Create a new Parameters object for component.
*
* @param entry the entry
* @return a new Parameters object for component
* @throws Exception if unable to create resource
*/
Parameters createParameters( Object entry )
throws Exception;
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>