* Embeddor now creates a ServiceManager component. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271312 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -25,6 +25,8 @@ import org.apache.myrmidon.interfaces.deployer.DeploymentException; | |||||
| import org.apache.myrmidon.interfaces.deployer.TypeDefinition; | import org.apache.myrmidon.interfaces.deployer.TypeDefinition; | ||||
| import org.apache.myrmidon.interfaces.deployer.TypeDeployer; | import org.apache.myrmidon.interfaces.deployer.TypeDeployer; | ||||
| import org.apache.myrmidon.interfaces.role.RoleManager; | 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.DefaultTypeFactory; | ||||
| import org.apache.myrmidon.interfaces.type.TypeManager; | import org.apache.myrmidon.interfaces.type.TypeManager; | ||||
| @@ -50,6 +52,7 @@ public class DefaultDeployer | |||||
| /** Map from ClassLoader to the deployer for that class loader. */ | /** Map from ClassLoader to the deployer for that class loader. */ | ||||
| private final Map m_classLoaderDeployers = new HashMap(); | private final Map m_classLoaderDeployers = new HashMap(); | ||||
| private ServiceManager m_ServiceManager; | |||||
| /** | /** | ||||
| * Retrieve relevent services needed to deploy. | * Retrieve relevent services needed to deploy. | ||||
| @@ -64,6 +67,7 @@ public class DefaultDeployer | |||||
| m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE ); | m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE ); | ||||
| m_roleManager = (RoleManager)componentManager.lookup( RoleManager.ROLE ); | m_roleManager = (RoleManager)componentManager.lookup( RoleManager.ROLE ); | ||||
| m_classLoaderManager = (ClassLoaderManager)componentManager.lookup( ClassLoaderManager.ROLE ); | m_classLoaderManager = (ClassLoaderManager)componentManager.lookup( ClassLoaderManager.ROLE ); | ||||
| m_ServiceManager = (ServiceManager)componentManager.lookup( ServiceManager.ROLE ); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -135,6 +139,21 @@ public class DefaultDeployer | |||||
| return deployment; | 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. | * Handles a type definition. | ||||
| */ | */ | ||||
| @@ -187,7 +206,16 @@ public class DefaultDeployer | |||||
| } | } | ||||
| // Deploy general-purpose type | // 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. | * Handles a type definition. | ||||
| */ | */ | ||||
| private void handleType( final Deployment deployment, | private void handleType( final Deployment deployment, | ||||
| final String roleShorthand, | |||||
| final Class roleType, | |||||
| final String typeName, | final String typeName, | ||||
| final String className ) | final String className ) | ||||
| throws Exception | throws Exception | ||||
| { | { | ||||
| // TODO - detect duplicates | // TODO - detect duplicates | ||||
| final String role = getRoleForName( roleShorthand ); | |||||
| final Class roleType = deployment.getClassLoader().loadClass( role ); | |||||
| final DefaultTypeFactory factory = deployment.getFactory( roleType ); | final DefaultTypeFactory factory = deployment.getFactory( roleType ); | ||||
| factory.addNameClassMapping( typeName, className ); | factory.addNameClassMapping( typeName, className ); | ||||
| m_typeManager.registerType( roleType, typeName, factory ); | 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; | return role; | ||||
| } | } | ||||
| } | } | ||||
| @@ -136,11 +136,19 @@ class Deployment | |||||
| public void deployAll() | public void deployAll() | ||||
| throws DeploymentException | throws DeploymentException | ||||
| { | { | ||||
| // Deploy types | |||||
| for( int i = 0; i < m_descriptors.length; i++ ) | for( int i = 0; i < m_descriptors.length; i++ ) | ||||
| { | { | ||||
| TypeDescriptor descriptor = m_descriptors[ i ]; | TypeDescriptor descriptor = m_descriptors[ i ]; | ||||
| deployTypes( descriptor ); | 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 ); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -3,10 +3,12 @@ register-type.notice=Registered type {0}/{1}. | |||||
| register-role.notice=Registered role {0} with shorthand name {1}. | register-role.notice=Registered role {0} with shorthand name {1}. | ||||
| url-deploy-types.notice=Registering types from "{0}". | url-deploy-types.notice=Registering types from "{0}". | ||||
| url-deploy-roles.notice=Registering roles 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-classloader.error=Could not register types from ClassLoader. | ||||
| deploy-from-file.error=Could not register types from type library "{0}". | deploy-from-file.error=Could not register types from type library "{0}". | ||||
| deploy-types.error=Could not register types from "{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-converter.error=Could not register converter that converts from {0} to {1}. | ||||
| deploy-type.error=Could not register type {0}/{1}. | deploy-type.error=Could not register type {0}/{1}. | ||||
| unknown-role4name.error=Unknown role "{0}". | unknown-role4name.error=Unknown role "{0}". | ||||
| @@ -45,9 +45,21 @@ class ServiceDescriptorBuilder | |||||
| throw new DeploymentException( message ); | 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 ) | catch( Exception e ) | ||||
| { | { | ||||
| @@ -38,6 +38,7 @@ import org.apache.myrmidon.interfaces.executor.Executor; | |||||
| import org.apache.myrmidon.interfaces.extensions.ExtensionManager; | import org.apache.myrmidon.interfaces.extensions.ExtensionManager; | ||||
| import org.apache.myrmidon.interfaces.model.Project; | import org.apache.myrmidon.interfaces.model.Project; | ||||
| import org.apache.myrmidon.interfaces.role.RoleManager; | 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.TypeFactory; | ||||
| import org.apache.myrmidon.interfaces.type.TypeManager; | import org.apache.myrmidon.interfaces.type.TypeManager; | ||||
| import org.apache.myrmidon.interfaces.workspace.Workspace; | import org.apache.myrmidon.interfaces.workspace.Workspace; | ||||
| @@ -245,6 +246,7 @@ public class DefaultEmbeddor | |||||
| createComponent( Deployer.class, PREFIX + "deployer.DefaultDeployer" ); | createComponent( Deployer.class, PREFIX + "deployer.DefaultDeployer" ); | ||||
| createComponent( ClassLoaderManager.class, PREFIX + "deployer.DefaultClassLoaderManager" ); | createComponent( ClassLoaderManager.class, PREFIX + "deployer.DefaultClassLoaderManager" ); | ||||
| createComponent( Executor.class, PREFIX + "executor.AspectAwareExecutor" ); | createComponent( Executor.class, PREFIX + "executor.AspectAwareExecutor" ); | ||||
| createComponent( ServiceManager.class, PREFIX + "service.DefaultServiceManager" ); | |||||
| } | } | ||||
| /** | /** | ||||