From 7edeb4e678f61ddb643d348cfd8fede79b1cfbe5 Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Thu, 21 Feb 2002 11:06:55 +0000 Subject: [PATCH] Rename myrmidons ServiceManager stuff to AntServiceManager Refactored the codebase to use Avalons ServiceManager rather than ComponentManager. The reason for this is that the ComponentManager required that contained objects implement the Component interface while the ServiceManager constructs do not have this requirement. This makes it much easier to extract parts of Myrmidon without any dependency on Ant/Avalon git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271495 13f79535-47bb-0310-9956-ffa450edef68 --- .../lib/avalon-framework-21022002.jar | Bin 0 -> 51951 bytes .../org/apache/aut/vfs/FileSystemManager.java | 4 +- .../configurer/ClassicConfigurer.java | 17 ++--- .../configurer/DefaultConfigurer.java | 28 +++++---- .../converter/DefaultMasterConverter.java | 27 ++++---- .../deployer/ClassLoaderManager.java | 2 - .../deployer/DefaultClassLoaderManager.java | 16 ++--- .../components/deployer/DefaultDeployer.java | 38 +++++------ .../components/embeddor/DefaultEmbeddor.java | 43 ++++++------- .../executor/AspectAwareExecutor.java | 16 ++--- .../components/executor/DefaultExecutor.java | 18 +++--- ...ger.java => DefaultAntServiceManager.java} | 43 +++++++------ .../workspace/ComponentManagerAdaptor.java | 54 ---------------- .../workspace/DefaultExecutionFrame.java | 3 +- .../workspace/DefaultTaskContext.java | 12 ++-- .../workspace/DefaultWorkspace.java | 59 +++++++++--------- .../workspace/ServiceManagerAdaptor.java | 54 ++++++++++++++++ .../apache/myrmidon/framework/Condition.java | 2 - .../factorys/ExecManagerFactory.java | 10 +-- .../framework/factorys/VfsManagerFactory.java | 6 +- .../interfaces/aspect/AspectManager.java | 3 +- .../interfaces/builder/ProjectBuilder.java | 5 +- .../interfaces/configurer/Configurer.java | 2 - .../converter/ConverterRegistry.java | 3 - .../interfaces/converter/MasterConverter.java | 3 +- .../interfaces/deployer/Deployer.java | 10 ++- .../interfaces/embeddor/Embeddor.java | 3 +- .../interfaces/executor/Executor.java | 2 - .../extensions/ExtensionManager.java | 3 +- .../myrmidon/interfaces/model/Project.java | 2 - .../myrmidon/interfaces/role/RoleManager.java | 3 - ...xception.java => AntServiceException.java} | 8 +-- ...iceManager.java => AntServiceManager.java} | 11 ++-- .../service/MultiSourceServiceManager.java | 16 ++--- .../interfaces/service/ServiceFactory.java | 2 +- .../myrmidon/interfaces/type/TypeManager.java | 3 - .../interfaces/workspace/Workspace.java | 2 - .../components/AbstractComponentTest.java | 54 ++++++++-------- .../configurer/DefaultConfigurerTest.java | 6 +- .../deployer/DefaultDeployerTest.java | 6 +- .../components/AbstractComponentTest.java | 54 ++++++++-------- .../configurer/DefaultConfigurerTest.java | 6 +- .../deployer/DefaultDeployerTest.java | 6 +- 43 files changed, 316 insertions(+), 349 deletions(-) create mode 100644 proposal/myrmidon/lib/avalon-framework-21022002.jar rename proposal/myrmidon/src/java/org/apache/myrmidon/components/service/{DefaultServiceManager.java => DefaultAntServiceManager.java} (73%) delete mode 100644 proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/ComponentManagerAdaptor.java create mode 100644 proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/ServiceManagerAdaptor.java rename proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/{ServiceException.java => AntServiceException.java} (84%) rename proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/{ServiceManager.java => AntServiceManager.java} (78%) diff --git a/proposal/myrmidon/lib/avalon-framework-21022002.jar b/proposal/myrmidon/lib/avalon-framework-21022002.jar new file mode 100644 index 0000000000000000000000000000000000000000..4efee027576bb7804e00f54d3cc4cb7f0018b8fc GIT binary patch literal 51951 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%0DpDqrO*YQ84b7 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 mxm^(U;t_t<Adam Murdoch */ public interface ClassLoaderManager - extends Component { String ROLE = ClassLoaderManager.class.getName(); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultClassLoaderManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultClassLoaderManager.java index b08a3ed72..e001893c8 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultClassLoaderManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultClassLoaderManager.java @@ -23,10 +23,10 @@ import org.apache.avalon.excalibur.extension.PackageManager; import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.framework.activity.Initializable; -import org.apache.avalon.framework.component.ComponentException; -import org.apache.avalon.framework.component.ComponentManager; -import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.logger.AbstractLogEnabled; +import org.apache.avalon.framework.service.Serviceable; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.ServiceManager; import org.apache.myrmidon.interfaces.deployer.DeploymentException; import org.apache.myrmidon.interfaces.extensions.ExtensionManager; @@ -37,7 +37,7 @@ import org.apache.myrmidon.interfaces.extensions.ExtensionManager; */ public class DefaultClassLoaderManager extends AbstractLogEnabled - implements ClassLoaderManager, Composable, Initializable + implements ClassLoaderManager, Serviceable, Initializable { private final static Resources REZ = ResourceManager.getPackageResources( DefaultClassLoaderManager.class ); @@ -52,7 +52,7 @@ public class DefaultClassLoaderManager public void initialize() throws Exception { - if( m_baseClassLoader == null ) + if( null == m_baseClassLoader ) { m_baseClassLoader = Thread.currentThread().getContextClassLoader(); } @@ -70,11 +70,11 @@ public class DefaultClassLoaderManager /** * Retrieve relevent services needed to deploy. */ - public void compose( final ComponentManager componentManager ) - throws ComponentException + public void service( final ServiceManager serviceManager ) + throws ServiceException { final ExtensionManager extensionManager = - (ExtensionManager)componentManager.lookup( ExtensionManager.ROLE ); + (ExtensionManager)serviceManager.lookup( ExtensionManager.ROLE ); m_packageManager = new PackageManager( extensionManager ); } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultDeployer.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultDeployer.java index 72350d456..f973c4937 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultDeployer.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultDeployer.java @@ -11,13 +11,13 @@ import java.io.File; import java.net.URL; import java.util.HashMap; import java.util.Map; +import org.apache.aut.converter.Converter; import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; -import org.apache.avalon.framework.component.ComponentException; -import org.apache.avalon.framework.component.ComponentManager; -import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.logger.AbstractLogEnabled; -import org.apache.aut.converter.Converter; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.service.Serviceable; import org.apache.myrmidon.interfaces.converter.ConverterRegistry; import org.apache.myrmidon.interfaces.deployer.ConverterDefinition; import org.apache.myrmidon.interfaces.deployer.Deployer; @@ -25,8 +25,8 @@ import org.apache.myrmidon.interfaces.deployer.DeploymentException; import org.apache.myrmidon.interfaces.deployer.TypeDefinition; import org.apache.myrmidon.interfaces.deployer.TypeDeployer; import org.apache.myrmidon.interfaces.role.RoleManager; +import org.apache.myrmidon.interfaces.service.AntServiceManager; import org.apache.myrmidon.interfaces.service.ServiceFactory; -import org.apache.myrmidon.interfaces.service.ServiceManager; import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; import org.apache.myrmidon.interfaces.type.TypeManager; @@ -39,7 +39,7 @@ import org.apache.myrmidon.interfaces.type.TypeManager; */ public class DefaultDeployer extends AbstractLogEnabled - implements Deployer, Composable + implements Deployer, Serviceable { private final static Resources REZ = ResourceManager.getPackageResources( DefaultDeployer.class ); @@ -52,33 +52,33 @@ public class DefaultDeployer /** Map from ClassLoader to the deployer for that class loader. */ private final Map m_classLoaderDeployers = new HashMap(); - private ServiceManager m_ServiceManager; + private AntServiceManager m_serviceManager; /** * Retrieve relevent services needed to deploy. * - * @param componentManager the ComponentManager - * @exception ComponentException if an error occurs + * @param serviceManager the ServiceManager + * @exception ServiceException if an error occurs */ - public void compose( final ComponentManager componentManager ) - throws ComponentException + public void service( final ServiceManager serviceManager ) + throws ServiceException { - m_converterRegistry = (ConverterRegistry)componentManager.lookup( ConverterRegistry.ROLE ); - m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE ); - m_roleManager = (RoleManager)componentManager.lookup( RoleManager.ROLE ); - m_classLoaderManager = (ClassLoaderManager)componentManager.lookup( ClassLoaderManager.ROLE ); - m_ServiceManager = (ServiceManager)componentManager.lookup( ServiceManager.ROLE ); + m_converterRegistry = (ConverterRegistry)serviceManager.lookup( ConverterRegistry.ROLE ); + m_typeManager = (TypeManager)serviceManager.lookup( TypeManager.ROLE ); + m_roleManager = (RoleManager)serviceManager.lookup( RoleManager.ROLE ); + m_classLoaderManager = (ClassLoaderManager)serviceManager.lookup( ClassLoaderManager.ROLE ); + m_serviceManager = (AntServiceManager)serviceManager.lookup( AntServiceManager.ROLE ); } /** * Creates a child deployer. */ - public Deployer createChildDeployer( ComponentManager componentManager ) - throws ComponentException + public Deployer createChildDeployer( final ServiceManager componentManager ) + throws ServiceException { final DefaultDeployer child = new DefaultDeployer(); setupLogger( child ); - child.compose( componentManager ); + child.service( componentManager ); return child; } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java index 4705db242..9555fa0d4 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java @@ -18,12 +18,11 @@ import org.apache.avalon.excalibur.io.ExtensionFileFilter; import org.apache.avalon.excalibur.io.FileUtil; import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.activity.Initializable; -import org.apache.avalon.framework.component.Component; -import org.apache.avalon.framework.component.Composable; -import org.apache.avalon.framework.component.DefaultComponentManager; import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.parameters.Parameterizable; import org.apache.avalon.framework.parameters.Parameters; +import org.apache.avalon.framework.service.DefaultServiceManager; +import org.apache.avalon.framework.service.Serviceable; import org.apache.myrmidon.components.deployer.ClassLoaderManager; import org.apache.myrmidon.interfaces.aspect.AspectManager; import org.apache.myrmidon.interfaces.builder.ProjectBuilder; @@ -38,7 +37,7 @@ import org.apache.myrmidon.interfaces.executor.Executor; import org.apache.myrmidon.interfaces.extensions.ExtensionManager; import org.apache.myrmidon.interfaces.model.Project; import org.apache.myrmidon.interfaces.role.RoleManager; -import org.apache.myrmidon.interfaces.service.ServiceManager; +import org.apache.myrmidon.interfaces.service.AntServiceManager; import org.apache.myrmidon.interfaces.type.TypeFactory; import org.apache.myrmidon.interfaces.type.TypeManager; import org.apache.myrmidon.interfaces.workspace.Workspace; @@ -65,7 +64,7 @@ public class DefaultEmbeddor private TypeManager m_typeManager; private List m_components = new ArrayList(); - private DefaultComponentManager m_componentManager = new DefaultComponentManager(); + private DefaultServiceManager m_serviceManager = new DefaultServiceManager(); private Parameters m_parameters; private Parameters m_defaults; @@ -123,7 +122,7 @@ public class DefaultEmbeddor { final String component = getParameter( Workspace.ROLE ); final Workspace workspace = - (Workspace)createComponent( component, Workspace.class ); + (Workspace)createService( component, Workspace.class ); setupObject( workspace, parameters ); return workspace; } @@ -158,8 +157,8 @@ public class DefaultEmbeddor //setup the components setupComponents(); - m_deployer = (Deployer)m_componentManager.lookup( Deployer.ROLE ); - m_typeManager = (TypeManager)m_componentManager.lookup( TypeManager.ROLE ); + m_deployer = (Deployer)m_serviceManager.lookup( Deployer.ROLE ); + m_typeManager = (TypeManager)m_serviceManager.lookup( TypeManager.ROLE ); setupFiles(); } @@ -193,17 +192,18 @@ public class DefaultEmbeddor // Dispose any disposable components for( Iterator iterator = m_components.iterator(); iterator.hasNext(); ) { - Component component = (Component)iterator.next(); + Object component = iterator.next(); if( component instanceof Disposable ) { - ( (Disposable)component ).dispose(); + final Disposable disposable = (Disposable)component; + disposable.dispose(); } } // Ditch everything m_components = null; m_deployer = null; - m_componentManager = null; + m_serviceManager = null; m_parameters = null; m_defaults = null; m_homeDir = null; @@ -246,7 +246,7 @@ public class DefaultEmbeddor createComponent( Deployer.class, PREFIX + "deployer.DefaultDeployer" ); createComponent( ClassLoaderManager.class, PREFIX + "deployer.DefaultClassLoaderManager" ); createComponent( Executor.class, PREFIX + "executor.AspectAwareExecutor" ); - createComponent( ServiceManager.class, PREFIX + "service.DefaultServiceManager" ); + createComponent( AntServiceManager.class, PREFIX + "service.DefaultAntServiceManager" ); } /** @@ -257,8 +257,8 @@ public class DefaultEmbeddor { final String role = roleType.getName(); final String className = m_parameters.getParameter( role, defaultImpl ); - final Component component = createComponent( className, roleType ); - m_componentManager.put( role, component ); + final Object component = createService( className, roleType ); + m_serviceManager.put( role, component ); m_components.add( component ); } @@ -272,7 +272,7 @@ public class DefaultEmbeddor { for( Iterator iterator = m_components.iterator(); iterator.hasNext(); ) { - final Component component = (Component)iterator.next(); + final Object component = iterator.next(); setupObject( component, m_parameters ); } } @@ -359,7 +359,7 @@ public class DefaultEmbeddor * @return the created object * @exception Exception if an error occurs */ - private Component createComponent( final String component, final Class clazz ) + private Object createService( final String component, final Class clazz ) throws Exception { try @@ -371,13 +371,8 @@ public class DefaultEmbeddor final String message = REZ.getString( "bad-type.error", component, clazz.getName() ); throw new Exception( message ); } - if( !( object instanceof Component ) ) - { - final String message = REZ.getString( "bad-type.error", component, Component.class.getName() ); - throw new Exception( message ); - } - return (Component)object; + return object; } catch( final IllegalAccessException iae ) { @@ -408,9 +403,9 @@ public class DefaultEmbeddor { setupLogger( object ); - if( object instanceof Composable ) + if( object instanceof Serviceable ) { - ( (Composable)object ).compose( m_componentManager ); + ( (Serviceable)object ).service( m_serviceManager ); } if( object instanceof Parameterizable ) diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java index 01aa898b9..7d6e917f2 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java @@ -11,13 +11,13 @@ import java.util.ArrayList; import java.util.HashMap; import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; -import org.apache.avalon.framework.component.ComponentException; -import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.configuration.DefaultConfiguration; import org.apache.avalon.framework.logger.Logger; import org.apache.avalon.framework.parameters.Parameters; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.service.ServiceException; import org.apache.myrmidon.api.Task; import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.interfaces.aspect.AspectManager; @@ -43,15 +43,15 @@ public class AspectAwareExecutor /** * Retrieve relevent services. * - * @param componentManager the ComponentManager - * @exception ComponentException if an error occurs + * @param serviceManager the ServiceManager + * @exception ServiceException if an error occurs */ - public void compose( final ComponentManager componentManager ) - throws ComponentException + public void service( final ServiceManager serviceManager ) + throws ServiceException { - super.compose( componentManager ); + super.service( serviceManager ); - m_aspectManager = (AspectManager)componentManager.lookup( AspectManager.ROLE ); + m_aspectManager = (AspectManager)serviceManager.lookup( AspectManager.ROLE ); } public void execute( final Configuration taskModel, final ExecutionFrame frame ) diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutor.java index 880612205..23c80f910 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutor.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutor.java @@ -9,13 +9,13 @@ package org.apache.myrmidon.components.executor; import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; -import org.apache.avalon.framework.component.ComponentException; -import org.apache.avalon.framework.component.ComponentManager; -import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; +import org.apache.avalon.framework.service.Serviceable; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.ServiceManager; import org.apache.myrmidon.api.Task; import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskException; @@ -34,7 +34,7 @@ import org.apache.myrmidon.interfaces.configurer.TaskContextAdapter; */ public class DefaultExecutor extends AbstractLogEnabled - implements Executor, Composable + implements Executor, Serviceable { private final static Resources REZ = ResourceManager.getPackageResources( DefaultExecutor.class ); @@ -44,13 +44,13 @@ public class DefaultExecutor /** * Retrieve relevent services needed to deploy. * - * @param componentManager the ComponentManager - * @exception ComponentException if an error occurs + * @param serviceManager the ServiceManager + * @exception ServiceException if an error occurs */ - public void compose( final ComponentManager componentManager ) - throws ComponentException + public void service( final ServiceManager serviceManager ) + throws ServiceException { - m_configurer = (Configurer)componentManager.lookup( Configurer.ROLE ); + m_configurer = (Configurer)serviceManager.lookup( Configurer.ROLE ); } public void execute( final Configuration taskModel, final ExecutionFrame frame ) diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/service/DefaultServiceManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/service/DefaultAntServiceManager.java similarity index 73% rename from proposal/myrmidon/src/java/org/apache/myrmidon/components/service/DefaultServiceManager.java rename to proposal/myrmidon/src/java/org/apache/myrmidon/components/service/DefaultAntServiceManager.java index 5a479b87d..7d2f063e3 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/service/DefaultServiceManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/service/DefaultAntServiceManager.java @@ -13,12 +13,12 @@ import java.util.Map; import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.framework.activity.Disposable; -import org.apache.avalon.framework.component.ComponentException; -import org.apache.avalon.framework.component.ComponentManager; -import org.apache.avalon.framework.component.Composable; -import org.apache.myrmidon.interfaces.service.ServiceException; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.service.Serviceable; +import org.apache.myrmidon.interfaces.service.AntServiceException; +import org.apache.myrmidon.interfaces.service.AntServiceManager; import org.apache.myrmidon.interfaces.service.ServiceFactory; -import org.apache.myrmidon.interfaces.service.ServiceManager; import org.apache.myrmidon.interfaces.type.TypeException; import org.apache.myrmidon.interfaces.type.TypeFactory; import org.apache.myrmidon.interfaces.type.TypeManager; @@ -34,11 +34,11 @@ import org.apache.myrmidon.interfaces.type.TypeManager; * @author Adam Murdoch * @version $Revision$ $Date$ */ -public class DefaultServiceManager - implements ServiceManager, Composable, Disposable +public class DefaultAntServiceManager + implements AntServiceManager, Serviceable, Disposable { - private final static Resources REZ - = ResourceManager.getPackageResources( DefaultServiceManager.class ); + private final static Resources REZ = + ResourceManager.getPackageResources( DefaultAntServiceManager.class ); /** Map from service class -> service object. */ private Map m_services = new HashMap(); @@ -46,18 +46,25 @@ public class DefaultServiceManager private TypeFactory m_typeFactory; /** - * Locate the components used by this service manager. + * Pass the ServiceManager to the servicable. + * The Servicable implementation should use the specified + * ServiceManager to acquire the components it needs for + * execution. + * + * @param manager The ServiceManager which this + * Servicable uses. */ - public void compose( final ComponentManager componentManager ) throws ComponentException + public void service( ServiceManager manager ) + throws ServiceException { - final TypeManager typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE ); + final TypeManager typeManager = (TypeManager)manager.lookup( TypeManager.ROLE ); try { m_typeFactory = typeManager.getFactory( ServiceFactory.class ); } catch( final TypeException e ) { - throw new ComponentException( e.getMessage(), e ); + throw new ServiceException( e.getMessage(), e ); } } @@ -104,7 +111,7 @@ public class DefaultServiceManager * Locates a service instance. */ public Object getService( Class serviceType ) - throws ServiceException + throws AntServiceException { Object service = m_services.get( serviceType ); if( service == null ) @@ -120,7 +127,7 @@ public class DefaultServiceManager /** * Creates the service object for a service class. */ - private Object createService( Class serviceType ) throws ServiceException + private Object createService( Class serviceType ) throws AntServiceException { try { @@ -131,14 +138,14 @@ public class DefaultServiceManager if( !serviceType.isInstance( service ) ) { final String message = REZ.getString( "mismatched-service-type.error", serviceType.getName(), service.getClass().getName() ); - throw new ServiceException( message ); + throw new AntServiceException( message ); } return service; } - catch( Exception e ) + catch( final Exception e ) { final String message = REZ.getString( "create-service.error", serviceType.getName() ); - throw new ServiceException( message, e ); + throw new AntServiceException( message, e ); } } } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/ComponentManagerAdaptor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/ComponentManagerAdaptor.java deleted file mode 100644 index 2d8cce445..000000000 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/ComponentManagerAdaptor.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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.myrmidon.components.workspace; - -import org.apache.avalon.framework.component.ComponentException; -import org.apache.avalon.framework.component.ComponentManager; -import org.apache.myrmidon.interfaces.service.ServiceException; -import org.apache.myrmidon.interfaces.service.ServiceManager; - -/** - * An adaptor from {@link ComponentManager} to {@link ServiceManager}. - * - * @author Adam Murdoch - * @version $Revision$ $Date$ - */ -class ComponentManagerAdaptor - implements ServiceManager -{ - private final ComponentManager m_componentManager; - - public ComponentManagerAdaptor( final ComponentManager componentManager ) - { - m_componentManager = componentManager; - } - - /** - * Determines if this service manager contains a particular service. - */ - public boolean hasService( Class serviceType ) - { - return m_componentManager.hasComponent( serviceType.getName() ); - } - - /** - * Locates a service instance. - */ - public Object getService( Class serviceType ) - throws ServiceException - { - try - { - return m_componentManager.lookup( serviceType.getName() ); - } - catch( ComponentException e ) - { - throw new ServiceException( e.getMessage(), e ); - } - } -} 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 bc4dd6ad8..500f4c96a 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 @@ -7,7 +7,6 @@ */ package org.apache.myrmidon.components.workspace; -import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.logger.Logger; import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.interfaces.executor.ExecutionFrame; @@ -20,7 +19,7 @@ import org.apache.myrmidon.interfaces.type.TypeManager; * @version $Revision$ $Date$ */ class DefaultExecutionFrame - implements ExecutionFrame, Component + implements ExecutionFrame { private final Logger m_logger; private final TaskContext m_context; 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 8cd42e335..12eafb7b8 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 @@ -19,8 +19,8 @@ import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.components.configurer.PropertyUtil; import org.apache.myrmidon.components.configurer.PropertyException; import org.apache.myrmidon.interfaces.configurer.TaskContextAdapter; -import org.apache.myrmidon.interfaces.service.ServiceException; -import org.apache.myrmidon.interfaces.service.ServiceManager; +import org.apache.myrmidon.interfaces.service.AntServiceException; +import org.apache.myrmidon.interfaces.service.AntServiceManager; /** * Default implementation of TaskContext. @@ -36,7 +36,7 @@ public class DefaultTaskContext private final Map m_contextData = new Hashtable(); private final TaskContext m_parent; - private ServiceManager m_serviceManager; + private AntServiceManager m_serviceManager; /** * Constructor for Context with no parent contexts. @@ -57,7 +57,7 @@ public class DefaultTaskContext /** * Constructor that specifies the service directory for context. */ - public DefaultTaskContext( final ServiceManager serviceManager ) + public DefaultTaskContext( final AntServiceManager serviceManager ) { this( null, serviceManager ); } @@ -66,7 +66,7 @@ public class DefaultTaskContext * Constructor that takes both parent context and a service directory. */ public DefaultTaskContext( final TaskContext parent, - final ServiceManager serviceManager ) + final AntServiceManager serviceManager ) { m_parent = parent; m_serviceManager = serviceManager; @@ -159,7 +159,7 @@ public class DefaultTaskContext { return m_serviceManager.getService( serviceClass ); } - catch( final ServiceException se ) + catch( final AntServiceException se ) { throw new TaskException( se.getMessage(), se ); } 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 fca511ba5..8d0f92cca 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 @@ -14,10 +14,6 @@ import java.util.Map; import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.framework.activity.Initializable; -import org.apache.avalon.framework.component.ComponentException; -import org.apache.avalon.framework.component.ComponentManager; -import org.apache.avalon.framework.component.Composable; -import org.apache.avalon.framework.component.DefaultComponentManager; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.logger.LogKitLogger; @@ -25,6 +21,10 @@ import org.apache.avalon.framework.logger.Logger; import org.apache.avalon.framework.parameters.ParameterException; import org.apache.avalon.framework.parameters.Parameterizable; import org.apache.avalon.framework.parameters.Parameters; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.service.Serviceable; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.DefaultServiceManager; import org.apache.log.Hierarchy; import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskException; @@ -38,7 +38,7 @@ 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.MultiSourceServiceManager; -import org.apache.myrmidon.interfaces.service.ServiceManager; +import org.apache.myrmidon.interfaces.service.AntServiceManager; import org.apache.myrmidon.interfaces.type.TypeManager; import org.apache.myrmidon.interfaces.workspace.Workspace; import org.apache.myrmidon.listeners.ProjectListener; @@ -51,14 +51,14 @@ import org.apache.myrmidon.listeners.ProjectListener; */ public class DefaultWorkspace extends AbstractLogEnabled - implements Workspace, Composable, Parameterizable, Initializable + implements Workspace, Serviceable, Parameterizable, Initializable { private final static Resources REZ = ResourceManager.getPackageResources( DefaultWorkspace.class ); private Executor m_executor; private ProjectListenerSupport m_listenerSupport = new ProjectListenerSupport(); - private ComponentManager m_componentManager; + private ServiceManager m_serviceManager; private Parameters m_parameters; private TaskContext m_baseContext; private HashMap m_entrys = new HashMap(); @@ -90,16 +90,16 @@ public class DefaultWorkspace /** * Retrieve relevent services needed for engine. * - * @param componentManager the ComponentManager - * @exception ComponentException if an error occurs + * @param serviceManager the ServiceManager + * @exception ServiceException if an error occurs */ - public void compose( final ComponentManager componentManager ) - throws ComponentException + public void service( final ServiceManager serviceManager ) + throws ServiceException { - m_componentManager = componentManager; - m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE ); - m_executor = (Executor)componentManager.lookup( Executor.ROLE ); - m_deployer = (Deployer)componentManager.lookup( Deployer.ROLE ); + m_serviceManager = serviceManager; + m_typeManager = (TypeManager)serviceManager.lookup( TypeManager.ROLE ); + m_executor = (Executor)serviceManager.lookup( Executor.ROLE ); + m_deployer = (Deployer)serviceManager.lookup( Deployer.ROLE ); } public void parameterize( final Parameters parameters ) @@ -226,48 +226,47 @@ public class DefaultWorkspace * Creates an execution frame for a project. */ private ExecutionFrame createExecutionFrame( final Project project ) - throws TaskException, ComponentException + throws TaskException, ServiceException { //Create per frame ComponentManager - final DefaultComponentManager componentManager = - new DefaultComponentManager( m_componentManager ); + final DefaultServiceManager serviceManager = + new DefaultServiceManager( m_serviceManager ); //Add in child type manager so each frame can register different //sets of tasks etc final TypeManager typeManager = m_typeManager.createChildTypeManager(); - componentManager.put( TypeManager.ROLE, typeManager ); + serviceManager.put( TypeManager.ROLE, typeManager ); //We need to create a new deployer so that it deploys //to project specific TypeManager - final Deployer deployer; - deployer = m_deployer.createChildDeployer( componentManager ); - componentManager.put( Deployer.ROLE, deployer ); + final Deployer deployer = m_deployer.createChildDeployer( serviceManager ); + serviceManager.put( Deployer.ROLE, deployer ); // Deploy the imported typelibs deployTypeLib( deployer, project ); //We need to place projects and ProjectManager //in ComponentManager so as to support project-local call() - componentManager.put( Workspace.ROLE, this ); - componentManager.put( Project.ROLE, project ); + serviceManager.put( Workspace.ROLE, this ); + serviceManager.put( Project.ROLE, project ); final String[] names = project.getProjectNames(); for( int i = 0; i < names.length; i++ ) { final String name = names[ i ]; final Project other = project.getProject( name ); - componentManager.put( Project.ROLE + "/" + name, other ); + serviceManager.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 ) ); + final MultiSourceServiceManager msServiceManager = new MultiSourceServiceManager(); + msServiceManager.add( (AntServiceManager)serviceManager.lookup( AntServiceManager.ROLE ) ); + msServiceManager.add( new ServiceManagerAdaptor( serviceManager ) ); // Create and configure the context final DefaultTaskContext context = - new DefaultTaskContext( m_baseContext, serviceManager ); + new DefaultTaskContext( m_baseContext, msServiceManager ); context.setProperty( TaskContext.BASE_DIRECTORY, project.getBaseDirectory() ); // Create a logger @@ -280,7 +279,7 @@ public class DefaultWorkspace /** * @todo Should no occur but done for the time being to simplify evolution. */ - componentManager.put( ExecutionFrame.ROLE, frame ); + serviceManager.put( ExecutionFrame.ROLE, frame ); return frame; } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/ServiceManagerAdaptor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/ServiceManagerAdaptor.java new file mode 100644 index 000000000..c5f6a7507 --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/ServiceManagerAdaptor.java @@ -0,0 +1,54 @@ +/* + * 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.myrmidon.components.workspace; + +import org.apache.myrmidon.interfaces.service.AntServiceException; +import org.apache.myrmidon.interfaces.service.AntServiceManager; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.service.ServiceException; + +/** + * An adaptor from {@link ServiceManager} to {@link AntServiceManager}. + * + * @author Adam Murdoch + * @version $Revision$ $Date$ + */ +class ServiceManagerAdaptor + implements AntServiceManager +{ + private final ServiceManager m_serviceManager; + + public ServiceManagerAdaptor( final ServiceManager componentManager ) + { + m_serviceManager = componentManager; + } + + /** + * Determines if this service manager contains a particular service. + */ + public boolean hasService( Class serviceType ) + { + return m_serviceManager.hasService( serviceType.getName() ); + } + + /** + * Locates a service instance. + */ + public Object getService( Class serviceType ) + throws AntServiceException + { + try + { + return m_serviceManager.lookup( serviceType.getName() ); + } + catch( final ServiceException se ) + { + throw new AntServiceException( se.getMessage(), se ); + } + } +} diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Condition.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Condition.java index 189d2e9c4..6a60580bb 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Condition.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Condition.java @@ -7,7 +7,6 @@ */ package org.apache.myrmidon.framework; -import org.apache.avalon.framework.component.Component; import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskException; @@ -18,7 +17,6 @@ import org.apache.myrmidon.api.TaskException; * @version $Revision$ $Date$ */ public class Condition - implements Component { private String m_condition; private boolean m_isIfCondition; diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/factorys/ExecManagerFactory.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/factorys/ExecManagerFactory.java index 0b6d3a189..29a3eb75e 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/factorys/ExecManagerFactory.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/factorys/ExecManagerFactory.java @@ -12,7 +12,7 @@ import org.apache.aut.nativelib.ExecException; import org.apache.aut.nativelib.impl.DefaultExecManager; import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; -import org.apache.myrmidon.interfaces.service.ServiceException; +import org.apache.myrmidon.interfaces.service.AntServiceException; import org.apache.myrmidon.interfaces.service.ServiceFactory; /** @@ -31,7 +31,7 @@ public class ExecManagerFactory * Create the ExecManager Service. */ public Object createService() - throws ServiceException + throws AntServiceException { final File home = getHomeDirectory(); try @@ -40,7 +40,7 @@ public class ExecManagerFactory } catch( final ExecException ee ) { - throw new ServiceException( ee.getMessage(), ee ); + throw new AntServiceException( ee.getMessage(), ee ); } } @@ -48,13 +48,13 @@ public class ExecManagerFactory * Utility method to retrieve home directory. */ private static File getHomeDirectory() - throws ServiceException + throws AntServiceException { final String home = System.getProperty( "myrmidon.home" ); if( null == home ) { final String message = REZ.getString( "missing-home-dir.error" ); - throw new ServiceException( message ); + throw new AntServiceException( message ); } return new File( home ); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/factorys/VfsManagerFactory.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/factorys/VfsManagerFactory.java index 164ec76ed..fdc39cb90 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/factorys/VfsManagerFactory.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/factorys/VfsManagerFactory.java @@ -11,7 +11,7 @@ import org.apache.aut.vfs.FileSystemManager; import org.apache.aut.vfs.impl.DefaultFileSystemManager; import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; -import org.apache.myrmidon.interfaces.service.ServiceException; +import org.apache.myrmidon.interfaces.service.AntServiceException; import org.apache.myrmidon.interfaces.service.ServiceFactory; /** @@ -30,7 +30,7 @@ public class VfsManagerFactory * Create a service that coresponds to this factory. */ public Object createService() - throws ServiceException + throws AntServiceException { try { @@ -39,7 +39,7 @@ public class VfsManagerFactory catch( Exception e ) { final String message = REZ.getString( "create-vfs-manager.error" ); - throw new ServiceException( message ); + throw new AntServiceException( message ); } } } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/aspect/AspectManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/aspect/AspectManager.java index 23b64d787..9937e1a78 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/aspect/AspectManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/aspect/AspectManager.java @@ -7,7 +7,6 @@ */ package org.apache.myrmidon.interfaces.aspect; -import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.parameters.Parameters; import org.apache.myrmidon.api.TaskException; @@ -20,7 +19,7 @@ import org.apache.myrmidon.aspects.AspectHandler; * @version $Revision$ $Date$ */ public interface AspectManager - extends Component, AspectHandler + extends AspectHandler { String ROLE = AspectManager.class.getName(); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/builder/ProjectBuilder.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/builder/ProjectBuilder.java index ff0b4b53a..9fa3bf6c8 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/builder/ProjectBuilder.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/builder/ProjectBuilder.java @@ -7,7 +7,6 @@ */ package org.apache.myrmidon.interfaces.builder; -import org.apache.avalon.framework.component.Component; import org.apache.myrmidon.interfaces.model.Project; /** @@ -18,7 +17,6 @@ import org.apache.myrmidon.interfaces.model.Project; * @ant:role shorthand="project-builder" */ public interface ProjectBuilder - extends Component { String ROLE = ProjectBuilder.class.getName(); @@ -27,8 +25,7 @@ public interface ProjectBuilder * * @param source the source * @return the constructed Project - * @exception IOException if an error occurs - * @exception AntException if an error occurs + * @exception Exception if an error occurs */ Project build( String source ) throws Exception; diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/configurer/Configurer.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/configurer/Configurer.java index 81e8f6bbb..24dc1d34f 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/configurer/Configurer.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/configurer/Configurer.java @@ -7,7 +7,6 @@ */ package org.apache.myrmidon.interfaces.configurer; -import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.context.Context; @@ -19,7 +18,6 @@ import org.apache.avalon.framework.context.Context; * @version $Revision$ $Date$ */ public interface Configurer - extends Component { String ROLE = Configurer.class.getName(); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/converter/ConverterRegistry.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/converter/ConverterRegistry.java index dd5c97eeb..961771d4e 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/converter/ConverterRegistry.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/converter/ConverterRegistry.java @@ -7,8 +7,6 @@ */ package org.apache.myrmidon.interfaces.converter; -import org.apache.avalon.framework.component.Component; - /** * Interface for registry for ConverterInfos. * @@ -16,7 +14,6 @@ import org.apache.avalon.framework.component.Component; * @version $Revision$ $Date$ */ public interface ConverterRegistry - extends Component { String ROLE = ConverterRegistry.class.getName(); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/converter/MasterConverter.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/converter/MasterConverter.java index ca72f0c1f..f6478337d 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/converter/MasterConverter.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/converter/MasterConverter.java @@ -7,7 +7,6 @@ */ package org.apache.myrmidon.interfaces.converter; -import org.apache.avalon.framework.component.Component; import org.apache.aut.converter.Converter; /** @@ -17,7 +16,7 @@ import org.apache.aut.converter.Converter; * @version $Revision$ $Date$ */ public interface MasterConverter - extends Component, Converter + extends Converter { String ROLE = MasterConverter.class.getName(); } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/deployer/Deployer.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/deployer/Deployer.java index 21e6429c7..2532e8aab 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/deployer/Deployer.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/deployer/Deployer.java @@ -8,9 +8,8 @@ package org.apache.myrmidon.interfaces.deployer; import java.io.File; -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.service.ServiceException; +import org.apache.avalon.framework.service.ServiceManager; /** * This class deploys type libraries into a registry. @@ -19,7 +18,6 @@ import org.apache.avalon.framework.component.ComponentManager; * @version $Revision$ $Date$ */ public interface Deployer - extends Component { String ROLE = Deployer.class.getName(); @@ -46,6 +44,6 @@ public interface Deployer /** * Creates a child deployer. */ - Deployer createChildDeployer( ComponentManager componentManager ) - throws ComponentException; + Deployer createChildDeployer( ServiceManager componentManager ) + throws ServiceException; } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/embeddor/Embeddor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/embeddor/Embeddor.java index 763307d38..28328fc5f 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/embeddor/Embeddor.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/embeddor/Embeddor.java @@ -10,7 +10,6 @@ package org.apache.myrmidon.interfaces.embeddor; import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.activity.Initializable; import org.apache.avalon.framework.activity.Startable; -import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.parameters.Parameterizable; import org.apache.avalon.framework.parameters.Parameters; import org.apache.myrmidon.interfaces.model.Project; @@ -24,7 +23,7 @@ import org.apache.myrmidon.listeners.ProjectListener; * @version $Revision$ $Date$ */ public interface Embeddor - extends Component, Parameterizable, Initializable, Startable, Disposable + extends Parameterizable, Initializable, Startable, Disposable { String ROLE = Embeddor.class.getName(); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/executor/Executor.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/executor/Executor.java index 9b2f89749..81f3499e0 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/executor/Executor.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/executor/Executor.java @@ -7,7 +7,6 @@ */ package org.apache.myrmidon.interfaces.executor; -import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.configuration.Configuration; import org.apache.myrmidon.api.TaskException; @@ -18,7 +17,6 @@ import org.apache.myrmidon.api.TaskException; * @version $Revision$ $Date$ */ public interface Executor - extends Component { String ROLE = Executor.class.getName(); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/extensions/ExtensionManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/extensions/ExtensionManager.java index f06a850f6..a1d4ddf58 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/extensions/ExtensionManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/extensions/ExtensionManager.java @@ -8,7 +8,6 @@ package org.apache.myrmidon.interfaces.extensions; import org.apache.avalon.excalibur.extension.PackageRepository; -import org.apache.avalon.framework.component.Component; /** * PackageRepository @@ -17,7 +16,7 @@ import org.apache.avalon.framework.component.Component; * @version $Revision$ $Date$ */ public interface ExtensionManager - extends PackageRepository, Component + extends PackageRepository { String ROLE = ExtensionManager.class.getName(); } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/model/Project.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/model/Project.java index 46c51f8d6..a42bb428b 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/model/Project.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/model/Project.java @@ -8,7 +8,6 @@ package org.apache.myrmidon.interfaces.model; import java.io.File; -import org.apache.avalon.framework.component.Component; /** * Abstraction used to interact with projects. @@ -18,7 +17,6 @@ import org.apache.avalon.framework.component.Component; * @version $Revision$ $Date$ */ public interface Project - extends Component { String ROLE = Project.class.getName(); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/role/RoleManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/role/RoleManager.java index 6663c4e89..f9b82ff72 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/role/RoleManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/role/RoleManager.java @@ -7,8 +7,6 @@ */ package org.apache.myrmidon.interfaces.role; -import org.apache.avalon.framework.component.Component; - /** * Interface to manage roles and mapping to shorthand names. * @@ -19,7 +17,6 @@ import org.apache.avalon.framework.component.Component; * @version CVS $Revision$ $Date$ */ public interface RoleManager - extends Component { String ROLE = RoleManager.class.getName(); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/ServiceException.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/AntServiceException.java similarity index 84% rename from proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/ServiceException.java rename to proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/AntServiceException.java index c5f4f620d..aa2132185 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/ServiceException.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/AntServiceException.java @@ -16,13 +16,13 @@ import org.apache.avalon.framework.CascadingException; * @author Peter Donald * @version $Revision$ $Date$ */ -public class ServiceException +public class AntServiceException extends CascadingException { /** * Basic constructor for exception that does not specify a message */ - public ServiceException() + public AntServiceException() { this( "", null ); } @@ -32,7 +32,7 @@ public class ServiceException * * @param message the message */ - public ServiceException( final String message ) + public AntServiceException( final String message ) { this( message, null ); } @@ -43,7 +43,7 @@ public class ServiceException * @param message the message * @param throwable the throwable */ - public ServiceException( final String message, final Throwable throwable ) + public AntServiceException( final String message, final Throwable throwable ) { super( message, throwable ); } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/ServiceManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/AntServiceManager.java similarity index 78% rename from proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/ServiceManager.java rename to proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/AntServiceManager.java index 394c7aa4c..ea138ef75 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/ServiceManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/AntServiceManager.java @@ -7,18 +7,15 @@ */ package org.apache.myrmidon.interfaces.service; -import org.apache.avalon.framework.component.Component; - /** * Manages a set of services. * * @author Adam Murdoch * @version $Revision$ $Date$ */ -public interface ServiceManager - extends Component +public interface AntServiceManager { - String ROLE = ServiceManager.class.getName(); + String ROLE = AntServiceManager.class.getName(); /** * Determines if this service manager contains a particular service. @@ -33,8 +30,8 @@ public interface ServiceManager * @param serviceType The service interface. * @return The service instance. The returned object is guaranteed to * implement the service interface. - * @throws ServiceException If the service does not exist. + * @throws AntServiceException If the service does not exist. */ Object getService( Class serviceType ) - throws ServiceException; + throws AntServiceException; } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/MultiSourceServiceManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/MultiSourceServiceManager.java index 042463400..5968b99b4 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/MultiSourceServiceManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/MultiSourceServiceManager.java @@ -13,13 +13,13 @@ import org.apache.avalon.excalibur.i18n.Resources; /** * A service manager that aggregates services from several - * {@link ServiceManager} objects. + * {@link AntServiceManager} objects. * * @author Adam Murdoch * @version $Revision$ $Date$ */ public class MultiSourceServiceManager - implements ServiceManager + implements AntServiceManager { private final static Resources REZ = ResourceManager.getPackageResources( MultiSourceServiceManager.class ); @@ -30,7 +30,7 @@ public class MultiSourceServiceManager /** * Adds a service manager to the end of the source list. */ - public void add( final ServiceManager mgr ) + public void add( final AntServiceManager mgr ) { m_sources.add( mgr ); } @@ -45,7 +45,7 @@ public class MultiSourceServiceManager final int size = m_sources.size(); for( int i = 0; i < size; i++ ) { - final ServiceManager serviceManager = (ServiceManager)m_sources.get( i ); + final AntServiceManager serviceManager = (AntServiceManager)m_sources.get( i ); if( serviceManager.hasService( serviceType ) ) { return true; @@ -60,15 +60,15 @@ public class MultiSourceServiceManager * @param serviceType The service interface. * @return The service instance. The returned object is guaranteed to * implement the service interface. - * @throws ServiceException If the service does not exist. + * @throws AntServiceException If the service does not exist. */ public Object getService( final Class serviceType ) - throws ServiceException + throws AntServiceException { final int size = m_sources.size(); for( int i = 0; i < size; i++ ) { - final ServiceManager serviceManager = (ServiceManager)m_sources.get( i ); + final AntServiceManager serviceManager = (AntServiceManager)m_sources.get( i ); if( serviceManager.hasService( serviceType ) ) { return serviceManager.getService( serviceType ); @@ -76,6 +76,6 @@ public class MultiSourceServiceManager } final String message = REZ.getString( "unknown-service.error", serviceType.getName() ); - throw new ServiceException( message ); + throw new AntServiceException( message ); } } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/ServiceFactory.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/ServiceFactory.java index c5453b448..72b938fda 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/ServiceFactory.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/service/ServiceFactory.java @@ -25,5 +25,5 @@ public interface ServiceFactory * prepared and configured as appropriate. */ Object createService() - throws ServiceException; + throws AntServiceException; } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/type/TypeManager.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/type/TypeManager.java index 5ae30e062..b5f82d7ac 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/type/TypeManager.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/type/TypeManager.java @@ -7,8 +7,6 @@ */ package org.apache.myrmidon.interfaces.type; -import org.apache.avalon.framework.component.Component; - /** * The interface that is used to manage types. * @@ -16,7 +14,6 @@ import org.apache.avalon.framework.component.Component; * @version $Revision$ $Date$ */ public interface TypeManager - extends Component { String ROLE = TypeManager.class.getName(); diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/workspace/Workspace.java b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/workspace/Workspace.java index 39ef851a6..a49fcc02c 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/workspace/Workspace.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/workspace/Workspace.java @@ -7,7 +7,6 @@ */ package org.apache.myrmidon.interfaces.workspace; -import org.apache.avalon.framework.component.Component; import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.interfaces.model.Project; import org.apache.myrmidon.listeners.ProjectListener; @@ -19,7 +18,6 @@ import org.apache.myrmidon.listeners.ProjectListener; * @version $Revision$ $Date$ */ public interface Workspace - extends Component { String ROLE = Workspace.class.getName(); 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 5d3f77018..a1fb95b3d 100644 --- a/proposal/myrmidon/src/test/org/apache/myrmidon/components/AbstractComponentTest.java +++ b/proposal/myrmidon/src/test/org/apache/myrmidon/components/AbstractComponentTest.java @@ -10,13 +10,12 @@ package org.apache.myrmidon.components; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -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.component.Composable; -import org.apache.avalon.framework.component.DefaultComponentManager; import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; +import org.apache.avalon.framework.service.DefaultServiceManager; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.Serviceable; import org.apache.myrmidon.AbstractMyrmidonTest; import org.apache.myrmidon.components.configurer.DefaultConfigurer; import org.apache.myrmidon.components.converter.DefaultConverterRegistry; @@ -26,7 +25,6 @@ import org.apache.myrmidon.components.deployer.DefaultClassLoaderManager; import org.apache.myrmidon.components.deployer.DefaultDeployer; import org.apache.myrmidon.components.extensions.DefaultExtensionManager; import org.apache.myrmidon.components.role.DefaultRoleManager; -import org.apache.myrmidon.components.service.DefaultServiceManager; import org.apache.myrmidon.components.type.DefaultTypeManager; import org.apache.aut.converter.Converter; import org.apache.myrmidon.interfaces.configurer.Configurer; @@ -35,7 +33,6 @@ import org.apache.myrmidon.interfaces.converter.MasterConverter; import org.apache.myrmidon.interfaces.deployer.Deployer; import org.apache.myrmidon.interfaces.extensions.ExtensionManager; import org.apache.myrmidon.interfaces.role.RoleManager; -import org.apache.myrmidon.interfaces.service.ServiceManager; import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; import org.apache.myrmidon.interfaces.type.TypeException; import org.apache.myrmidon.interfaces.type.TypeManager; @@ -48,7 +45,7 @@ import org.apache.myrmidon.interfaces.type.TypeManager; public abstract class AbstractComponentTest extends AbstractMyrmidonTest { - private DefaultComponentManager m_componentManager; + private DefaultServiceManager m_serviceManager; private Logger m_logger; public AbstractComponentTest( final String name ) @@ -59,17 +56,18 @@ public abstract class AbstractComponentTest /** * Returns the component manager containing the components to test. */ - protected ComponentManager getComponentManager() + protected ServiceManager getServiceManager() { - return m_componentManager; + return m_serviceManager; } /** * Returns the type manager. */ - protected TypeManager getTypeManager() throws ComponentException + protected TypeManager getTypeManager() + throws ServiceException { - return (TypeManager)getComponentManager().lookup( TypeManager.ROLE ); + return (TypeManager)getServiceManager().lookup( TypeManager.ROLE ); } /** @@ -81,44 +79,44 @@ public abstract class AbstractComponentTest m_logger = createLogger(); // Create the components - m_componentManager = new DefaultComponentManager(); + m_serviceManager = new DefaultServiceManager(); List components = new ArrayList(); - Component component = new DefaultMasterConverter(); - m_componentManager.put( MasterConverter.ROLE, component ); + Object component = new DefaultMasterConverter(); + m_serviceManager.put( MasterConverter.ROLE, component ); components.add( component ); component = new DefaultConverterRegistry(); - m_componentManager.put( ConverterRegistry.ROLE, component ); + m_serviceManager.put( ConverterRegistry.ROLE, component ); components.add( component ); component = new DefaultTypeManager(); - m_componentManager.put( TypeManager.ROLE, component ); + m_serviceManager.put( TypeManager.ROLE, component ); components.add( component ); component = new DefaultConfigurer(); - m_componentManager.put( Configurer.ROLE, component ); + m_serviceManager.put( Configurer.ROLE, component ); components.add( component ); component = new DefaultDeployer(); - m_componentManager.put( Deployer.ROLE, component ); + m_serviceManager.put( Deployer.ROLE, component ); components.add( component ); final DefaultClassLoaderManager classLoaderMgr = new DefaultClassLoaderManager(); classLoaderMgr.setBaseClassLoader( getClass().getClassLoader() ); - m_componentManager.put( ClassLoaderManager.ROLE, classLoaderMgr ); + m_serviceManager.put( ClassLoaderManager.ROLE, classLoaderMgr ); components.add( classLoaderMgr ); component = new DefaultExtensionManager(); - m_componentManager.put( ExtensionManager.ROLE, component ); + m_serviceManager.put( ExtensionManager.ROLE, component ); components.add( component ); component = new DefaultRoleManager(); - m_componentManager.put( RoleManager.ROLE, component ); + m_serviceManager.put( RoleManager.ROLE, component ); components.add( component ); component = new DefaultServiceManager(); - m_componentManager.put( ServiceManager.ROLE, component ); + m_serviceManager.put( ServiceManager.ROLE, component ); components.add( component ); // Log enable the components @@ -136,10 +134,10 @@ public abstract class AbstractComponentTest for( Iterator iterator = components.iterator(); iterator.hasNext(); ) { Object obj = iterator.next(); - if( obj instanceof Composable ) + if( obj instanceof Serviceable ) { - final Composable composable = (Composable)obj; - composable.compose( m_componentManager ); + final Serviceable serviceable = (Serviceable)obj; + serviceable.service( m_serviceManager ); } } } @@ -151,9 +149,9 @@ public abstract class AbstractComponentTest protected void registerConverter( final Class converterClass, final Class sourceClass, final Class destClass ) - throws ComponentException, TypeException + throws ServiceException, TypeException { - ConverterRegistry converterRegistry = (ConverterRegistry)getComponentManager().lookup( ConverterRegistry.ROLE ); + ConverterRegistry converterRegistry = (ConverterRegistry)getServiceManager().lookup( ConverterRegistry.ROLE ); converterRegistry.registerConverter( converterClass.getName(), sourceClass.getName(), destClass.getName() ); DefaultTypeFactory factory = new DefaultTypeFactory( getClass().getClassLoader() ); factory.addNameClassMapping( converterClass.getName(), converterClass.getName() ); 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 199f09725..53329a2d8 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 @@ -49,7 +49,7 @@ public class DefaultConfigurerTest super.setUp(); // Find the configurer - m_configurer = (Configurer)getComponentManager().lookup( Configurer.ROLE ); + m_configurer = (Configurer)getServiceManager().lookup( Configurer.ROLE ); // Setup a context m_context = new DefaultTaskContext(); @@ -434,7 +434,7 @@ public class DefaultConfigurerTest config.setAttribute( "my-role1", "some value" ); // Set up the converter and role - RoleManager roleMgr = (RoleManager)getComponentManager().lookup( RoleManager.ROLE ); + RoleManager roleMgr = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); roleMgr.addNameRoleMapping( "my-role1", MyRole1.ROLE ); registerConverter( StringToMyRole1Converter.class, String.class, MyRole1.class ); @@ -611,7 +611,7 @@ public class DefaultConfigurerTest config.addChild( child ); // Add role mapping, and add to reference to context - final RoleManager roleMgr = (RoleManager)getComponentManager().lookup( RoleManager.ROLE ); + final RoleManager roleMgr = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); roleMgr.addNameRoleMapping( "my-role1", MyRole1.class.getName() ); m_context.setProperty( "id", new MyType1() ); m_context.setProperty( "id2", new MyType2() ); diff --git a/proposal/myrmidon/src/test/org/apache/myrmidon/components/deployer/DefaultDeployerTest.java b/proposal/myrmidon/src/test/org/apache/myrmidon/components/deployer/DefaultDeployerTest.java index 4ceccb4aa..0b094d8db 100644 --- a/proposal/myrmidon/src/test/org/apache/myrmidon/components/deployer/DefaultDeployerTest.java +++ b/proposal/myrmidon/src/test/org/apache/myrmidon/components/deployer/DefaultDeployerTest.java @@ -49,11 +49,11 @@ public class DefaultDeployerTest protected void setUp() throws Exception { super.setUp(); - m_deployer = (Deployer)getComponentManager().lookup( Deployer.ROLE ); - m_converter = (MasterConverter)getComponentManager().lookup( MasterConverter.ROLE ); + m_deployer = (Deployer)getServiceManager().lookup( Deployer.ROLE ); + m_converter = (MasterConverter)getServiceManager().lookup( MasterConverter.ROLE ); // Add some core roles - m_roleManager = (RoleManager)getComponentManager().lookup( RoleManager.ROLE ); + m_roleManager = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); m_roleManager.addNameRoleMapping( DATA_TYPE_ROLE, DataType.ROLE ); m_roleManager.addNameRoleMapping( "converter", Converter.ROLE ); } 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 5d3f77018..a1fb95b3d 100644 --- a/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/AbstractComponentTest.java +++ b/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/AbstractComponentTest.java @@ -10,13 +10,12 @@ package org.apache.myrmidon.components; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -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.component.Composable; -import org.apache.avalon.framework.component.DefaultComponentManager; import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; +import org.apache.avalon.framework.service.DefaultServiceManager; +import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.service.Serviceable; import org.apache.myrmidon.AbstractMyrmidonTest; import org.apache.myrmidon.components.configurer.DefaultConfigurer; import org.apache.myrmidon.components.converter.DefaultConverterRegistry; @@ -26,7 +25,6 @@ import org.apache.myrmidon.components.deployer.DefaultClassLoaderManager; import org.apache.myrmidon.components.deployer.DefaultDeployer; import org.apache.myrmidon.components.extensions.DefaultExtensionManager; import org.apache.myrmidon.components.role.DefaultRoleManager; -import org.apache.myrmidon.components.service.DefaultServiceManager; import org.apache.myrmidon.components.type.DefaultTypeManager; import org.apache.aut.converter.Converter; import org.apache.myrmidon.interfaces.configurer.Configurer; @@ -35,7 +33,6 @@ import org.apache.myrmidon.interfaces.converter.MasterConverter; import org.apache.myrmidon.interfaces.deployer.Deployer; import org.apache.myrmidon.interfaces.extensions.ExtensionManager; import org.apache.myrmidon.interfaces.role.RoleManager; -import org.apache.myrmidon.interfaces.service.ServiceManager; import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; import org.apache.myrmidon.interfaces.type.TypeException; import org.apache.myrmidon.interfaces.type.TypeManager; @@ -48,7 +45,7 @@ import org.apache.myrmidon.interfaces.type.TypeManager; public abstract class AbstractComponentTest extends AbstractMyrmidonTest { - private DefaultComponentManager m_componentManager; + private DefaultServiceManager m_serviceManager; private Logger m_logger; public AbstractComponentTest( final String name ) @@ -59,17 +56,18 @@ public abstract class AbstractComponentTest /** * Returns the component manager containing the components to test. */ - protected ComponentManager getComponentManager() + protected ServiceManager getServiceManager() { - return m_componentManager; + return m_serviceManager; } /** * Returns the type manager. */ - protected TypeManager getTypeManager() throws ComponentException + protected TypeManager getTypeManager() + throws ServiceException { - return (TypeManager)getComponentManager().lookup( TypeManager.ROLE ); + return (TypeManager)getServiceManager().lookup( TypeManager.ROLE ); } /** @@ -81,44 +79,44 @@ public abstract class AbstractComponentTest m_logger = createLogger(); // Create the components - m_componentManager = new DefaultComponentManager(); + m_serviceManager = new DefaultServiceManager(); List components = new ArrayList(); - Component component = new DefaultMasterConverter(); - m_componentManager.put( MasterConverter.ROLE, component ); + Object component = new DefaultMasterConverter(); + m_serviceManager.put( MasterConverter.ROLE, component ); components.add( component ); component = new DefaultConverterRegistry(); - m_componentManager.put( ConverterRegistry.ROLE, component ); + m_serviceManager.put( ConverterRegistry.ROLE, component ); components.add( component ); component = new DefaultTypeManager(); - m_componentManager.put( TypeManager.ROLE, component ); + m_serviceManager.put( TypeManager.ROLE, component ); components.add( component ); component = new DefaultConfigurer(); - m_componentManager.put( Configurer.ROLE, component ); + m_serviceManager.put( Configurer.ROLE, component ); components.add( component ); component = new DefaultDeployer(); - m_componentManager.put( Deployer.ROLE, component ); + m_serviceManager.put( Deployer.ROLE, component ); components.add( component ); final DefaultClassLoaderManager classLoaderMgr = new DefaultClassLoaderManager(); classLoaderMgr.setBaseClassLoader( getClass().getClassLoader() ); - m_componentManager.put( ClassLoaderManager.ROLE, classLoaderMgr ); + m_serviceManager.put( ClassLoaderManager.ROLE, classLoaderMgr ); components.add( classLoaderMgr ); component = new DefaultExtensionManager(); - m_componentManager.put( ExtensionManager.ROLE, component ); + m_serviceManager.put( ExtensionManager.ROLE, component ); components.add( component ); component = new DefaultRoleManager(); - m_componentManager.put( RoleManager.ROLE, component ); + m_serviceManager.put( RoleManager.ROLE, component ); components.add( component ); component = new DefaultServiceManager(); - m_componentManager.put( ServiceManager.ROLE, component ); + m_serviceManager.put( ServiceManager.ROLE, component ); components.add( component ); // Log enable the components @@ -136,10 +134,10 @@ public abstract class AbstractComponentTest for( Iterator iterator = components.iterator(); iterator.hasNext(); ) { Object obj = iterator.next(); - if( obj instanceof Composable ) + if( obj instanceof Serviceable ) { - final Composable composable = (Composable)obj; - composable.compose( m_componentManager ); + final Serviceable serviceable = (Serviceable)obj; + serviceable.service( m_serviceManager ); } } } @@ -151,9 +149,9 @@ public abstract class AbstractComponentTest protected void registerConverter( final Class converterClass, final Class sourceClass, final Class destClass ) - throws ComponentException, TypeException + throws ServiceException, TypeException { - ConverterRegistry converterRegistry = (ConverterRegistry)getComponentManager().lookup( ConverterRegistry.ROLE ); + ConverterRegistry converterRegistry = (ConverterRegistry)getServiceManager().lookup( ConverterRegistry.ROLE ); converterRegistry.registerConverter( converterClass.getName(), sourceClass.getName(), destClass.getName() ); DefaultTypeFactory factory = new DefaultTypeFactory( getClass().getClassLoader() ); factory.addNameClassMapping( converterClass.getName(), converterClass.getName() ); 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 199f09725..53329a2d8 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 @@ -49,7 +49,7 @@ public class DefaultConfigurerTest super.setUp(); // Find the configurer - m_configurer = (Configurer)getComponentManager().lookup( Configurer.ROLE ); + m_configurer = (Configurer)getServiceManager().lookup( Configurer.ROLE ); // Setup a context m_context = new DefaultTaskContext(); @@ -434,7 +434,7 @@ public class DefaultConfigurerTest config.setAttribute( "my-role1", "some value" ); // Set up the converter and role - RoleManager roleMgr = (RoleManager)getComponentManager().lookup( RoleManager.ROLE ); + RoleManager roleMgr = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); roleMgr.addNameRoleMapping( "my-role1", MyRole1.ROLE ); registerConverter( StringToMyRole1Converter.class, String.class, MyRole1.class ); @@ -611,7 +611,7 @@ public class DefaultConfigurerTest config.addChild( child ); // Add role mapping, and add to reference to context - final RoleManager roleMgr = (RoleManager)getComponentManager().lookup( RoleManager.ROLE ); + final RoleManager roleMgr = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); roleMgr.addNameRoleMapping( "my-role1", MyRole1.class.getName() ); m_context.setProperty( "id", new MyType1() ); m_context.setProperty( "id2", new MyType2() ); diff --git a/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/deployer/DefaultDeployerTest.java b/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/deployer/DefaultDeployerTest.java index 4ceccb4aa..0b094d8db 100644 --- a/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/deployer/DefaultDeployerTest.java +++ b/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/deployer/DefaultDeployerTest.java @@ -49,11 +49,11 @@ public class DefaultDeployerTest protected void setUp() throws Exception { super.setUp(); - m_deployer = (Deployer)getComponentManager().lookup( Deployer.ROLE ); - m_converter = (MasterConverter)getComponentManager().lookup( MasterConverter.ROLE ); + m_deployer = (Deployer)getServiceManager().lookup( Deployer.ROLE ); + m_converter = (MasterConverter)getServiceManager().lookup( MasterConverter.ROLE ); // Add some core roles - m_roleManager = (RoleManager)getComponentManager().lookup( RoleManager.ROLE ); + m_roleManager = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); m_roleManager.addNameRoleMapping( DATA_TYPE_ROLE, DataType.ROLE ); m_roleManager.addNameRoleMapping( "converter", Converter.ROLE ); }