From be938b1e8fe6d68aec358cb6982c7d70fe827886 Mon Sep 17 00:00:00 2001 From: adammurdoch Date: Thu, 14 Feb 2002 02:07:02 +0000 Subject: [PATCH] * Deployer now deploys services from META-INF/ant-services.xml * Embeddor now creates a ServiceManager component. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271312 13f79535-47bb-0310-9956-ffa450edef68 --- .../components/deployer/DefaultDeployer.java | 42 +++++++++++++------ .../components/deployer/Deployment.java | 34 +++++++++++++++ .../components/deployer/Resources.properties | 2 + .../deployer/ServiceDescriptorBuilder.java | 16 ++++++- .../components/embeddor/DefaultEmbeddor.java | 2 + 5 files changed, 82 insertions(+), 14 deletions(-) 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 590b0610a..2258e5784 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 @@ -25,6 +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.ServiceFactory; +import org.apache.myrmidon.interfaces.service.ServiceManager; import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; import org.apache.myrmidon.interfaces.type.TypeManager; @@ -50,6 +52,7 @@ public class DefaultDeployer /** Map from ClassLoader to the deployer for that class loader. */ private final Map m_classLoaderDeployers = new HashMap(); + private ServiceManager m_ServiceManager; /** * Retrieve relevent services needed to deploy. @@ -64,6 +67,7 @@ public class DefaultDeployer 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 ); } /** @@ -135,6 +139,21 @@ public class DefaultDeployer return deployment; } + /** + * Deploys a service. + */ + public void deployService( final Deployment deployment, + final ServiceDefinition definition ) + throws Exception + { + // Determine the service interface class name + String serviceTypeName = getRoleForName( definition.getRoleShorthand() ); + + // Register the service factory + final String factoryClassName = definition.getFactoryClass(); + handleType( deployment, ServiceFactory.class, serviceTypeName, factoryClassName ); + } + /** * Handles a type definition. */ @@ -187,7 +206,16 @@ public class DefaultDeployer } // Deploy general-purpose type - handleType( deployment, roleShorthand, typeName, className ); + final String role = getRoleForName( roleShorthand ); + final Class roleType = deployment.getClassLoader().loadClass( role ); + handleType( deployment, roleType, typeName, className ); + + if( getLogger().isDebugEnabled() ) + { + final String message = + REZ.getString( "register-type.notice", roleShorthand, typeName ); + getLogger().debug( message ); + } } } @@ -195,24 +223,15 @@ public class DefaultDeployer * Handles a type definition. */ private void handleType( final Deployment deployment, - final String roleShorthand, + final Class roleType, final String typeName, final String className ) throws Exception { // TODO - detect duplicates - final String role = getRoleForName( roleShorthand ); - final Class roleType = deployment.getClassLoader().loadClass( role ); final DefaultTypeFactory factory = deployment.getFactory( roleType ); factory.addNameClassMapping( typeName, className ); m_typeManager.registerType( roleType, typeName, factory ); - - if( getLogger().isDebugEnabled() ) - { - final String message = - REZ.getString( "register-type.notice", roleShorthand, typeName ); - getLogger().debug( message ); - } } /** @@ -270,5 +289,4 @@ public class DefaultDeployer return role; } - } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Deployment.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Deployment.java index 9f8fde92f..ae617c65e 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Deployment.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Deployment.java @@ -136,11 +136,19 @@ class Deployment public void deployAll() throws DeploymentException { + // Deploy types for( int i = 0; i < m_descriptors.length; i++ ) { TypeDescriptor descriptor = m_descriptors[ i ]; deployTypes( descriptor ); } + + // Deploy services + for( int i = 0; i < m_services.length; i++ ) + { + final ServiceDescriptor descriptor = m_services[ i ]; + deployServices( descriptor ); + } } /** @@ -295,4 +303,30 @@ class Deployment } } + /** + * Deploys all services from a typelib descriptor. + */ + private void deployServices( final ServiceDescriptor descriptor ) + throws DeploymentException + { + + try + { + final String message = REZ.getString( "url-deploy-services.notice", descriptor.getUrl() ); + getLogger().info( message ); + + // Deploy the services + final ServiceDefinition[] definitions = descriptor.getDefinitions(); + for( int i = 0; i < definitions.length; i++ ) + { + final ServiceDefinition definition = definitions[ i ]; + m_deployer.deployService( this, definition ); + } + } + catch( Exception e ) + { + final String message = REZ.getString( "deploy-services.error", descriptor.getUrl() ); + throw new DeploymentException( message, e ); + } + } } diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Resources.properties b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Resources.properties index 91bf043c5..5fee6d8af 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Resources.properties +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Resources.properties @@ -3,10 +3,12 @@ register-type.notice=Registered type {0}/{1}. register-role.notice=Registered role {0} with shorthand name {1}. url-deploy-types.notice=Registering types from "{0}". url-deploy-roles.notice=Registering roles from "{0}". +url-deploy-services.notice=Registering services from "{0}". deploy-from-classloader.error=Could not register types from ClassLoader. deploy-from-file.error=Could not register types from type library "{0}". deploy-types.error=Could not register types from "{0}". +deploy-services.error=Could not register services from "{0}". deploy-converter.error=Could not register converter that converts from {0} to {1}. deploy-type.error=Could not register type {0}/{1}. unknown-role4name.error=Unknown role "{0}". diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/ServiceDescriptorBuilder.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/ServiceDescriptorBuilder.java index a7972e62b..c0c2cffc0 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/ServiceDescriptorBuilder.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/ServiceDescriptorBuilder.java @@ -45,9 +45,21 @@ class ServiceDescriptorBuilder throw new DeploymentException( message ); } - // TODO - populate the descriptor + // Build the descriptor + final ServiceDescriptor descriptor = new ServiceDescriptor( url ); - return new ServiceDescriptor( url ); + // Add the service definitions + final Configuration[] elements = config.getChildren(); + for( int i = 0; i < elements.length; i++ ) + { + final Configuration element = elements[ i ]; + final String roleShorthand = element.getName(); + final String factoryClassName = element.getAttribute( "factory" ); + final ServiceDefinition definition = new ServiceDefinition( roleShorthand, factoryClassName, config ); + descriptor.addDefinition( definition ); + } + + return descriptor; } catch( Exception e ) { 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 99de9073d..06de483bf 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 @@ -38,6 +38,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.type.TypeFactory; import org.apache.myrmidon.interfaces.type.TypeManager; import org.apache.myrmidon.interfaces.workspace.Workspace; @@ -245,6 +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" ); } /**