From ef420c53bf5756a4e14afb47a54cef25e01017a9 Mon Sep 17 00:00:00 2001 From: adammurdoch Date: Thu, 14 Feb 2002 02:12:23 +0000 Subject: [PATCH] * DefaultTaskContext now uses a ServiceManager to locate services, rather than a ComponentManager. Currently all components are also exposed as services. * Some tidy up to DefaultExecutionFrame and DefaultWorkspace. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271313 13f79535-47bb-0310-9956-ffa450edef68 --- .../workspace/DefaultExecutionFrame.java | 33 ++----- .../workspace/DefaultTaskContext.java | 41 +++------ .../workspace/DefaultWorkspace.java | 85 ++++++++----------- .../components/workspace/Resources.properties | 1 - .../components/AbstractComponentTest.java | 6 ++ .../configurer/DefaultConfigurerTest.java | 2 +- .../components/AbstractComponentTest.java | 6 ++ .../configurer/DefaultConfigurerTest.java | 2 +- 8 files changed, 73 insertions(+), 103 deletions(-) diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultExecutionFrame.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultExecutionFrame.java index 552247372..bc4dd6ad8 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultExecutionFrame.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultExecutionFrame.java @@ -8,13 +8,8 @@ package org.apache.myrmidon.components.workspace; import org.apache.avalon.framework.component.Component; -import org.apache.avalon.framework.context.Context; -import org.apache.avalon.framework.context.ContextException; -import org.apache.avalon.framework.context.Contextualizable; -import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; import org.apache.myrmidon.api.TaskContext; -import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.interfaces.executor.ExecutionFrame; import org.apache.myrmidon.interfaces.type.TypeManager; @@ -25,29 +20,19 @@ import org.apache.myrmidon.interfaces.type.TypeManager; * @version $Revision$ $Date$ */ class DefaultExecutionFrame - implements ExecutionFrame, Component, LogEnabled, Contextualizable + implements ExecutionFrame, Component { - private Logger m_logger; - private TaskContext m_context; - private TypeManager m_typeManager; + private final Logger m_logger; + private final TaskContext m_context; + private final TypeManager m_typeManager; - public void enableLogging( final Logger logger ) + public DefaultExecutionFrame( final Logger logger, + final TaskContext context, + final TypeManager typeManager ) { m_logger = logger; - } - - public void contextualize( final Context context ) - throws ContextException - { - m_context = (TaskContext)context; - try - { - m_typeManager = (TypeManager)m_context.getService( TypeManager.class ); - } - catch( TaskException te ) - { - throw new ContextException( te.getMessage(), te ); - } + m_context = context; + m_typeManager = typeManager; } public TypeManager getTypeManager() diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java index 8fadb56ce..167a815d0 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java @@ -13,13 +13,12 @@ import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.excalibur.io.FileUtil; import org.apache.avalon.excalibur.property.PropertyException; import org.apache.avalon.excalibur.property.PropertyUtil; -import org.apache.avalon.framework.component.Component; -import org.apache.avalon.framework.component.ComponentException; -import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.context.ContextException; import org.apache.avalon.framework.context.DefaultContext; import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskException; +import org.apache.myrmidon.interfaces.service.ServiceException; +import org.apache.myrmidon.interfaces.service.ServiceManager; /** * Default implementation of TaskContext. @@ -34,14 +33,14 @@ public class DefaultTaskContext private final static Resources REZ = ResourceManager.getPackageResources( DefaultTaskContext.class ); - private ComponentManager m_componentManager; + private ServiceManager m_serviceManager; /** * Constructor for Context with no parent contexts. */ public DefaultTaskContext() { - this( (TaskContext)null ); + this( null, null ); } /** @@ -53,21 +52,21 @@ public class DefaultTaskContext } /** - * Constructor that specifies the ComponentManager for context. + * Constructor that specifies the service directory for context. */ - public DefaultTaskContext( final ComponentManager componentManager ) + public DefaultTaskContext( final ServiceManager serviceManager ) { - this( null, componentManager ); + this( null, serviceManager ); } /** * Constructor that takes both parent context and a service directory. */ public DefaultTaskContext( final TaskContext parent, - final ComponentManager componentManager ) + final ServiceManager serviceManager ) { super( parent ); - m_componentManager = componentManager; + m_serviceManager = serviceManager; } /** @@ -121,27 +120,15 @@ public class DefaultTaskContext { // Try this context first final String name = serviceClass.getName(); - if( m_componentManager.hasComponent( name ) ) + if( m_serviceManager != null && m_serviceManager.hasService( serviceClass ) ) { try { - final Component service = m_componentManager.lookup( name ); - if( !serviceClass.isInstance( service ) ) - { - final String message = - REZ.getString( "bad-service-class.error", - name, - service.getClass().getName(), - serviceClass.getName() ); - throw new TaskException( message ); - } - - return service; + return m_serviceManager.getService( serviceClass ); } - catch( final ComponentException ce ) + catch( final ServiceException se ) { - final String message = REZ.getString( "bad-find-service.error", name ); - throw new TaskException( message, ce ); + throw new TaskException( se.getMessage(), se ); } } @@ -236,8 +223,6 @@ public class DefaultTaskContext /** * Set property value. - * - * @param property the property */ public void setProperty( final String name, final Object value, final ScopeEnum scope ) throws TaskException diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java index a9da9aede..1ebdb7570 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java @@ -37,6 +37,9 @@ import org.apache.myrmidon.interfaces.executor.Executor; import org.apache.myrmidon.interfaces.model.Project; import org.apache.myrmidon.interfaces.model.Target; import org.apache.myrmidon.interfaces.model.TypeLib; +import org.apache.myrmidon.interfaces.service.ComponentManagerAdaptor; +import org.apache.myrmidon.interfaces.service.MultiSourceServiceManager; +import org.apache.myrmidon.interfaces.service.ServiceManager; import org.apache.myrmidon.interfaces.type.TypeManager; import org.apache.myrmidon.interfaces.workspace.Workspace; import org.apache.myrmidon.listeners.ProjectListener; @@ -142,7 +145,7 @@ public class DefaultWorkspace private TaskContext createBaseContext() throws TaskException { - final TaskContext context = new DefaultTaskContext( m_componentManager ); + final TaskContext context = new DefaultTaskContext(); final String[] names = m_parameters.getNames(); for( int i = 0; i < names.length; i++ ) @@ -220,8 +223,11 @@ public class DefaultWorkspace } } + /** + * Creates an execution frame for a project. + */ private ExecutionFrame createExecutionFrame( final Project project ) - throws TaskException + throws TaskException, ComponentException { //Create per frame ComponentManager final DefaultComponentManager componentManager = @@ -232,32 +238,11 @@ public class DefaultWorkspace final TypeManager typeManager = m_typeManager.createChildTypeManager(); componentManager.put( TypeManager.ROLE, typeManager ); - //try - //{ - // //Add VFS manager - // // TODO - need to drive this from a typelib descriptor, plus - // // should be adding services to the root frame, rather than here - // final DefaultFileSystemManager vfsManager = new DefaultFileSystemManager(); - // vfsManager.setBaseFile( project.getBaseDirectory() ); - // componentManager.put( FileSystemManager.ROLE, vfsManager ); - //} - //catch( Exception e ) - //{ - // throw new TaskException( e.getMessage(), e ); - //} - //We need to create a new deployer so that it deploys //to project specific TypeManager final Deployer deployer; - try - { - deployer = m_deployer.createChildDeployer( componentManager ); - componentManager.put( Deployer.ROLE, deployer ); - } - catch( ComponentException e ) - { - throw new TaskException( e.getMessage(), e ); - } + deployer = m_deployer.createChildDeployer( componentManager ); + componentManager.put( Deployer.ROLE, deployer ); // Deploy the imported typelibs deployTypeLib( deployer, project ); @@ -275,32 +260,28 @@ public class DefaultWorkspace componentManager.put( Project.ROLE + "/" + name, other ); } + // Create a service manager that aggregates the contents of the context's + // component manager, and service manager + final MultiSourceServiceManager serviceManager = new MultiSourceServiceManager(); + serviceManager.add( (ServiceManager)componentManager.lookup( ServiceManager.ROLE ) ); + serviceManager.add( new ComponentManagerAdaptor( componentManager ) ); + // Create and configure the context final DefaultTaskContext context = - new DefaultTaskContext( m_baseContext, componentManager ); + new DefaultTaskContext( m_baseContext, serviceManager ); context.setProperty( TaskContext.BASE_DIRECTORY, project.getBaseDirectory() ); - final DefaultExecutionFrame frame = new DefaultExecutionFrame(); + // Create a logger + final Logger logger = + new LogKitLogger( m_hierarchy.getLoggerFor( "project" + m_projectID ) ); + m_projectID++; - try - { - final Logger logger = - new LogKitLogger( m_hierarchy.getLoggerFor( "project" + m_projectID ) ); - m_projectID++; + final DefaultExecutionFrame frame = new DefaultExecutionFrame( logger, context, typeManager ); - frame.enableLogging( logger ); - frame.contextualize( context ); - - /** - * @todo Should no occur but done for the time being to simplify evolution. - */ - componentManager.put( ExecutionFrame.ROLE, frame ); - } - catch( final Exception e ) - { - final String message = REZ.getString( "bad-frame.error" ); - throw new TaskException( message, e ); - } + /** + * @todo Should no occur but done for the time being to simplify evolution. + */ + componentManager.put( ExecutionFrame.ROLE, frame ); return frame; } @@ -312,9 +293,17 @@ public class DefaultWorkspace if( null == entry ) { - final ExecutionFrame frame = createExecutionFrame( project ); - entry = new ProjectEntry( project, frame ); - m_entrys.put( project, entry ); + try + { + final ExecutionFrame frame = createExecutionFrame( project ); + entry = new ProjectEntry( project, frame ); + m_entrys.put( project, entry ); + } + catch( Exception e ) + { + final String message = REZ.getString( "bad-frame.error" ); + throw new TaskException( message, e ); + } } return entry; diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/Resources.properties b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/Resources.properties index a14206324..ab5ef4927 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/Resources.properties +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/Resources.properties @@ -15,7 +15,6 @@ no-version.error=No JavaVersion in Context. no-name.error=No Name in Context. no-dir.error=No Base Directory in Context. no-parent.error=Can't set a property with parent scope when context has no parent. -bad-find-services.error=Unable to find service "{0}". bad-scope.error=Unknown property scope! ({0}). bad-property.error=Property {0} must have a value of type {1}. null-resolved-value.error=Value "{0}" resolved to null. diff --git a/proposal/myrmidon/src/test/org/apache/myrmidon/components/AbstractComponentTest.java b/proposal/myrmidon/src/test/org/apache/myrmidon/components/AbstractComponentTest.java index fd4248301..fa3f48e56 100644 --- a/proposal/myrmidon/src/test/org/apache/myrmidon/components/AbstractComponentTest.java +++ b/proposal/myrmidon/src/test/org/apache/myrmidon/components/AbstractComponentTest.java @@ -33,6 +33,7 @@ import org.apache.myrmidon.components.deployer.ClassLoaderManager; import org.apache.myrmidon.components.extensions.DefaultExtensionManager; import org.apache.myrmidon.components.role.DefaultRoleManager; import org.apache.myrmidon.components.type.DefaultTypeManager; +import org.apache.myrmidon.components.service.DefaultServiceManager; import org.apache.myrmidon.interfaces.configurer.Configurer; import org.apache.myrmidon.interfaces.converter.ConverterRegistry; import org.apache.myrmidon.interfaces.converter.MasterConverter; @@ -42,6 +43,7 @@ import org.apache.myrmidon.interfaces.role.RoleManager; import org.apache.myrmidon.interfaces.type.TypeManager; import org.apache.myrmidon.interfaces.type.TypeException; import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; +import org.apache.myrmidon.interfaces.service.ServiceManager; import org.apache.myrmidon.converter.Converter; import org.apache.myrmidon.AbstractMyrmidonTest; @@ -133,6 +135,10 @@ public abstract class AbstractComponentTest m_componentManager.put( RoleManager.ROLE, component ); components.add( component ); + component = new DefaultServiceManager(); + m_componentManager.put( ServiceManager.ROLE, component ); + components.add( component ); + // Log enable the components for( Iterator iterator = components.iterator(); iterator.hasNext(); ) { diff --git a/proposal/myrmidon/src/test/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java b/proposal/myrmidon/src/test/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java index 416ada497..199f09725 100644 --- a/proposal/myrmidon/src/test/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java +++ b/proposal/myrmidon/src/test/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java @@ -52,7 +52,7 @@ public class DefaultConfigurerTest m_configurer = (Configurer)getComponentManager().lookup( Configurer.ROLE ); // Setup a context - m_context = new DefaultTaskContext( getComponentManager() ); + m_context = new DefaultTaskContext(); final File baseDir = new File( "." ).getAbsoluteFile(); m_context.setProperty( TaskContext.BASE_DIRECTORY, baseDir ); } diff --git a/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/AbstractComponentTest.java b/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/AbstractComponentTest.java index fd4248301..fa3f48e56 100644 --- a/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/AbstractComponentTest.java +++ b/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/AbstractComponentTest.java @@ -33,6 +33,7 @@ import org.apache.myrmidon.components.deployer.ClassLoaderManager; import org.apache.myrmidon.components.extensions.DefaultExtensionManager; import org.apache.myrmidon.components.role.DefaultRoleManager; import org.apache.myrmidon.components.type.DefaultTypeManager; +import org.apache.myrmidon.components.service.DefaultServiceManager; import org.apache.myrmidon.interfaces.configurer.Configurer; import org.apache.myrmidon.interfaces.converter.ConverterRegistry; import org.apache.myrmidon.interfaces.converter.MasterConverter; @@ -42,6 +43,7 @@ import org.apache.myrmidon.interfaces.role.RoleManager; import org.apache.myrmidon.interfaces.type.TypeManager; import org.apache.myrmidon.interfaces.type.TypeException; import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; +import org.apache.myrmidon.interfaces.service.ServiceManager; import org.apache.myrmidon.converter.Converter; import org.apache.myrmidon.AbstractMyrmidonTest; @@ -133,6 +135,10 @@ public abstract class AbstractComponentTest m_componentManager.put( RoleManager.ROLE, component ); components.add( component ); + component = new DefaultServiceManager(); + m_componentManager.put( ServiceManager.ROLE, component ); + components.add( component ); + // Log enable the components for( Iterator iterator = components.iterator(); iterator.hasNext(); ) { diff --git a/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java b/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java index 416ada497..199f09725 100644 --- a/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java +++ b/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java @@ -52,7 +52,7 @@ public class DefaultConfigurerTest m_configurer = (Configurer)getComponentManager().lookup( Configurer.ROLE ); // Setup a context - m_context = new DefaultTaskContext( getComponentManager() ); + m_context = new DefaultTaskContext(); final File baseDir = new File( "." ).getAbsoluteFile(); m_context.setProperty( TaskContext.BASE_DIRECTORY, baseDir ); }