Browse Source

* 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
master
adammurdoch 23 years ago
parent
commit
be938b1e8f
5 changed files with 82 additions and 14 deletions
  1. +30
    -12
      proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultDeployer.java
  2. +34
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Deployment.java
  3. +2
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Resources.properties
  4. +14
    -2
      proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/ServiceDescriptorBuilder.java
  5. +2
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java

+ 30
- 12
proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/DefaultDeployer.java View File

@@ -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;
} }

} }

+ 34
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Deployment.java View File

@@ -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 );
}
}
} }

+ 2
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/Resources.properties View File

@@ -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}".


+ 14
- 2
proposal/myrmidon/src/java/org/apache/myrmidon/components/deployer/ServiceDescriptorBuilder.java View File

@@ -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 )
{ {


+ 2
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/components/embeddor/DefaultEmbeddor.java View File

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


/** /**


Loading…
Cancel
Save