* 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" ); | |||||
} | } | ||||
/** | /** | ||||