git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269082 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -11,9 +11,9 @@ import java.util.Iterator; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.ant.convert.Converter; | import org.apache.ant.convert.Converter; | ||||
| import org.apache.ant.tasklet.DataType; | import org.apache.ant.tasklet.DataType; | ||||
| import org.apache.ant.tasklet.engine.DataTypeEngine; | |||||
| import org.apache.avalon.framework.component.ComponentException; | import org.apache.avalon.framework.component.ComponentException; | ||||
| import org.apache.avalon.framework.component.ComponentManager; | import org.apache.avalon.framework.component.ComponentManager; | ||||
| import org.apache.avalon.framework.component.ComponentSelector; | |||||
| import org.apache.avalon.framework.component.Composable; | import org.apache.avalon.framework.component.Composable; | ||||
| import org.apache.avalon.framework.configuration.Configurable; | import org.apache.avalon.framework.configuration.Configurable; | ||||
| import org.apache.avalon.framework.configuration.Configuration; | import org.apache.avalon.framework.configuration.Configuration; | ||||
| @@ -22,6 +22,7 @@ import org.apache.avalon.framework.context.Resolvable; | |||||
| import org.apache.myrmidon.api.AbstractTask; | import org.apache.myrmidon.api.AbstractTask; | ||||
| import org.apache.myrmidon.api.TaskContext; | import org.apache.myrmidon.api.TaskContext; | ||||
| import org.apache.myrmidon.components.configurer.Configurer; | import org.apache.myrmidon.components.configurer.Configurer; | ||||
| import org.apache.myrmidon.components.type.TypeManager; | |||||
| /** | /** | ||||
| * This is the property "task" to declare a binding of a datatype to a name. | * This is the property "task" to declare a binding of a datatype to a name. | ||||
| @@ -35,7 +36,7 @@ public class Property | |||||
| protected String m_name; | protected String m_name; | ||||
| protected Object m_value; | protected Object m_value; | ||||
| protected boolean m_localScope = true; | protected boolean m_localScope = true; | ||||
| protected DataTypeEngine m_engine; | |||||
| protected ComponentSelector m_selector; | |||||
| protected Converter m_converter; | protected Converter m_converter; | ||||
| protected Configurer m_configurer; | protected Configurer m_configurer; | ||||
| @@ -43,9 +44,9 @@ public class Property | |||||
| throws ComponentException | throws ComponentException | ||||
| { | { | ||||
| m_configurer = (Configurer)componentManager.lookup( Configurer.ROLE ); | m_configurer = (Configurer)componentManager.lookup( Configurer.ROLE ); | ||||
| m_engine = (DataTypeEngine)componentManager. | |||||
| lookup( "org.apache.ant.tasklet.engine.DataTypeEngine" ); | |||||
| final TypeManager typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE ); | |||||
| m_selector = | |||||
| (ComponentSelector)typeManager.lookup( "org.apache.ant.tasklet.DataTypeSelector" ); | |||||
| m_converter = (Converter)componentManager.lookup( "org.apache.ant.convert.Converter" ); | m_converter = (Converter)componentManager.lookup( "org.apache.ant.convert.Converter" ); | ||||
| } | } | ||||
| @@ -122,7 +123,7 @@ public class Property | |||||
| try | try | ||||
| { | { | ||||
| final DataType value = m_engine.createDataType( child.getName() ); | |||||
| final DataType value = (DataType)m_selector.select( child.getName() ); | |||||
| setValue( value ); | setValue( value ); | ||||
| m_configurer.configure( value, child, getContext() ); | m_configurer.configure( value, child, getContext() ); | ||||
| } | } | ||||
| @@ -8,10 +8,9 @@ | |||||
| package org.apache.ant.modules.core; | package org.apache.ant.modules.core; | ||||
| import java.net.URL; | import java.net.URL; | ||||
| import org.apache.avalon.framework.camelot.DefaultLocator; | |||||
| import org.apache.avalon.framework.camelot.DeploymentException; | import org.apache.avalon.framework.camelot.DeploymentException; | ||||
| import org.apache.avalon.framework.camelot.RegistryException; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.components.type.DefaultComponentFactory; | |||||
| /** | /** | ||||
| * Method to register a single datatype. | * Method to register a single datatype. | ||||
| @@ -19,16 +18,16 @@ import org.apache.myrmidon.api.TaskException; | |||||
| * @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | * @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | ||||
| */ | */ | ||||
| public class RegisterDataType | public class RegisterDataType | ||||
| extends AbstractResourceRegisterer | |||||
| extends AbstractTypeDefinition | |||||
| { | { | ||||
| protected void registerResource( final String name, | protected void registerResource( final String name, | ||||
| final String classname, | |||||
| final String className, | |||||
| final URL url ) | final URL url ) | ||||
| throws TaskException, RegistryException | |||||
| throws TaskException | |||||
| { | { | ||||
| if( null == classname ) | |||||
| if( null == className ) | |||||
| { | { | ||||
| try { m_tskDeployer.deployDataType( name, url.toString(), url ); } | |||||
| try { getDeployer().deployDataType( name, url.toString(), url ); } | |||||
| catch( final DeploymentException de ) | catch( final DeploymentException de ) | ||||
| { | { | ||||
| throw new TaskException( "Failed deploying " + name + " from " + url, de ); | throw new TaskException( "Failed deploying " + name + " from " + url, de ); | ||||
| @@ -36,8 +35,14 @@ public class RegisterDataType | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| final DefaultLocator locator = new DefaultLocator( classname, url ); | |||||
| m_dataTypeEngine.getRegistry().register( name, locator ); | |||||
| final DefaultComponentFactory factory = | |||||
| new DefaultComponentFactory( new URL[] { url } ); | |||||
| factory.addNameClassMapping( name, className ); | |||||
| try { getTypeManager().registerType( "org.apache.ant.tasklet.DataType", name, factory ); } | |||||
| catch( final Exception e ) | |||||
| { | |||||
| throw new TaskException( "Failed registering " + name + " from " + url, e ); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -8,27 +8,27 @@ | |||||
| package org.apache.ant.modules.core; | package org.apache.ant.modules.core; | ||||
| import java.net.URL; | import java.net.URL; | ||||
| import org.apache.myrmidon.api.TaskException; | |||||
| import org.apache.avalon.framework.camelot.DefaultLocator; | |||||
| import org.apache.avalon.framework.camelot.DeploymentException; | import org.apache.avalon.framework.camelot.DeploymentException; | ||||
| import org.apache.avalon.framework.camelot.RegistryException; | |||||
| import org.apache.myrmidon.api.Task; | |||||
| import org.apache.myrmidon.api.TaskException; | |||||
| import org.apache.myrmidon.components.type.DefaultComponentFactory; | |||||
| /** | /** | ||||
| * Method to register a single tasklet. | * Method to register a single tasklet. | ||||
| * | * | ||||
| * @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | * @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | ||||
| */ | */ | ||||
| public class RegisterTasklet | |||||
| extends AbstractResourceRegisterer | |||||
| public class RegisterTasklet | |||||
| extends AbstractTypeDefinition | |||||
| { | { | ||||
| protected void registerResource( final String name, | |||||
| final String classname, | |||||
| protected void registerResource( final String name, | |||||
| final String className, | |||||
| final URL url ) | final URL url ) | ||||
| throws TaskException, RegistryException | |||||
| throws TaskException | |||||
| { | { | ||||
| if( null == classname ) | |||||
| if( null == className ) | |||||
| { | { | ||||
| try { m_tskDeployer.deployTask( name, url.toString(), url ); } | |||||
| try { getDeployer().deployTask( name, url.toString(), url ); } | |||||
| catch( final DeploymentException de ) | catch( final DeploymentException de ) | ||||
| { | { | ||||
| throw new TaskException( "Failed deploying " + name + " from " + url, de ); | throw new TaskException( "Failed deploying " + name + " from " + url, de ); | ||||
| @@ -36,8 +36,14 @@ public class RegisterTasklet | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| final DefaultLocator locator = new DefaultLocator( classname, url ); | |||||
| m_engine.getRegistry().register( name, locator ); | |||||
| final DefaultComponentFactory factory = | |||||
| new DefaultComponentFactory( new URL[] { url } ); | |||||
| factory.addNameClassMapping( name, className ); | |||||
| try { getTypeManager().registerType( Task.ROLE, name, factory ); } | |||||
| catch( final Exception e ) | |||||
| { | |||||
| throw new TaskException( "Failed registering " + name + " from " + url, e ); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -7,6 +7,8 @@ | |||||
| */ | */ | ||||
| package org.apache.myrmidon.api; | package org.apache.myrmidon.api; | ||||
| import org.apache.avalon.framework.component.Component; | |||||
| /** | /** | ||||
| * This is the interface that tasks implement to be executed in Myrmidon runtime. | * This is the interface that tasks implement to be executed in Myrmidon runtime. | ||||
| * | * | ||||
| @@ -24,6 +26,7 @@ package org.apache.myrmidon.api; | |||||
| * @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | * @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | ||||
| */ | */ | ||||
| public interface Task | public interface Task | ||||
| extends Component | |||||
| { | { | ||||
| String ROLE = "org.apache.myrmidon.api.Task"; | String ROLE = "org.apache.myrmidon.api.Task"; | ||||
| @@ -52,8 +52,8 @@ public class DefaultTskDeployer | |||||
| { | { | ||||
| private final static String TSKDEF_FILE = "TASK-LIB/taskdefs.xml"; | private final static String TSKDEF_FILE = "TASK-LIB/taskdefs.xml"; | ||||
| private Registry m_dataTypeRegistry; | |||||
| private Registry m_taskRegistry; | |||||
| //private Registry m_dataTypeRegistry; | |||||
| //private Registry m_taskRegistry; | |||||
| private Registry m_converterRegistry; | private Registry m_converterRegistry; | ||||
| private ConverterRegistry m_converterInfoRegistry; | private ConverterRegistry m_converterInfoRegistry; | ||||
| private TypeManager m_typeManager; | private TypeManager m_typeManager; | ||||
| @@ -77,8 +77,8 @@ public class DefaultTskDeployer | |||||
| throws ComponentException | throws ComponentException | ||||
| { | { | ||||
| //UGLY HACK alert !!! | //UGLY HACK alert !!! | ||||
| final Executor executor = (Executor)componentManager.lookup( Executor.ROLE ); | |||||
| m_taskRegistry = executor.getRegistry(); | |||||
| //final Executor executor = (Executor)componentManager.lookup( Executor.ROLE ); | |||||
| //m_taskRegistry = executor.getRegistry(); | |||||
| final ConverterEngine converterEngine = (ConverterEngine)componentManager. | final ConverterEngine converterEngine = (ConverterEngine)componentManager. | ||||
| lookup( "org.apache.ant.convert.engine.ConverterEngine" ); | lookup( "org.apache.ant.convert.engine.ConverterEngine" ); | ||||
| @@ -86,10 +86,9 @@ public class DefaultTskDeployer | |||||
| m_converterInfoRegistry = converterEngine.getInfoRegistry(); | m_converterInfoRegistry = converterEngine.getInfoRegistry(); | ||||
| m_converterRegistry = converterEngine.getRegistry(); | m_converterRegistry = converterEngine.getRegistry(); | ||||
| final DataTypeEngine dataTypeEngine = (DataTypeEngine)componentManager. | |||||
| lookup( "org.apache.ant.tasklet.engine.DataTypeEngine" ); | |||||
| m_dataTypeRegistry = dataTypeEngine.getRegistry(); | |||||
| //final DataTypeEngine dataTypeEngine = (DataTypeEngine)componentManager. | |||||
| //lookup( "org.apache.ant.tasklet.engine.DataTypeEngine" ); | |||||
| //m_dataTypeRegistry = dataTypeEngine.getRegistry(); | |||||
| m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE ); | m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE ); | ||||
| } | } | ||||
| @@ -277,7 +276,7 @@ public class DefaultTskDeployer | |||||
| { | { | ||||
| final String name = task.getAttribute( "name" ); | final String name = task.getAttribute( "name" ); | ||||
| final String className = task.getAttribute( "classname" ); | final String className = task.getAttribute( "classname" ); | ||||
| /* | |||||
| final DefaultLocator info = new DefaultLocator( className, url ); | final DefaultLocator info = new DefaultLocator( className, url ); | ||||
| try { m_taskRegistry.register( name, info ); } | try { m_taskRegistry.register( name, info ); } | ||||
| @@ -286,7 +285,7 @@ public class DefaultTskDeployer | |||||
| throw new DeploymentException( "Error registering " + name + " due to " + re, | throw new DeploymentException( "Error registering " + name + " due to " + re, | ||||
| re ); | re ); | ||||
| } | } | ||||
| */ | |||||
| factory.addNameClassMapping( name, className ); | factory.addNameClassMapping( name, className ); | ||||
| try { m_typeManager.registerType( Task.ROLE, name, factory ); } | try { m_typeManager.registerType( Task.ROLE, name, factory ); } | ||||
| @@ -305,7 +304,7 @@ public class DefaultTskDeployer | |||||
| { | { | ||||
| final String name = datatype.getAttribute( "name" ); | final String name = datatype.getAttribute( "name" ); | ||||
| final String className = datatype.getAttribute( "classname" ); | final String className = datatype.getAttribute( "classname" ); | ||||
| /* | |||||
| final DefaultLocator info = new DefaultLocator( className, url ); | final DefaultLocator info = new DefaultLocator( className, url ); | ||||
| try { m_dataTypeRegistry.register( name, info ); } | try { m_dataTypeRegistry.register( name, info ); } | ||||
| @@ -314,9 +313,9 @@ public class DefaultTskDeployer | |||||
| throw new DeploymentException( "Error registering " + name + " due to " + re, | throw new DeploymentException( "Error registering " + name + " due to " + re, | ||||
| re ); | re ); | ||||
| } | } | ||||
| */ | |||||
| factory.addNameClassMapping( name, className ); | factory.addNameClassMapping( name, className ); | ||||
| try { m_typeManager.registerType( Task.ROLE, name, factory ); } | |||||
| try { m_typeManager.registerType( "org.apache.ant.tasklet.DataType", name, factory ); } | |||||
| catch( final Exception e ) | catch( final Exception e ) | ||||
| { | { | ||||
| throw new DeploymentException( "Error registering " + name + " due to " + e, e ); | throw new DeploymentException( "Error registering " + name + " due to " + e, e ); | ||||
| @@ -236,12 +236,18 @@ public class MyrmidonEmbeddor | |||||
| component = getParameter( "org.apache.ant.convert.engine.ConverterEngine" ); | component = getParameter( "org.apache.ant.convert.engine.ConverterEngine" ); | ||||
| m_converterEngine = (ConverterEngine)createComponent( component, ConverterEngine.class ); | m_converterEngine = (ConverterEngine)createComponent( component, ConverterEngine.class ); | ||||
| component = getParameter( Configurer.ROLE ); | |||||
| m_configurer = (Configurer)createComponent( component, Configurer.class ); | |||||
| component = getParameter( "org.apache.ant.tasklet.engine.DataTypeEngine" ); | component = getParameter( "org.apache.ant.tasklet.engine.DataTypeEngine" ); | ||||
| m_dataTypeEngine = (DataTypeEngine)createComponent( component, DataTypeEngine.class ); | m_dataTypeEngine = (DataTypeEngine)createComponent( component, DataTypeEngine.class ); | ||||
| component = getParameter( TypeManager.ROLE ); | component = getParameter( TypeManager.ROLE ); | ||||
| m_typeManager = (TypeManager)createComponent( component, TypeManager.class ); | m_typeManager = (TypeManager)createComponent( component, TypeManager.class ); | ||||
| component = getParameter( TskDeployer.ROLE ); | |||||
| m_deployer = (TskDeployer)createComponent( component, TskDeployer.class ); | |||||
| component = getParameter( Executor.ROLE ); | component = getParameter( Executor.ROLE ); | ||||
| m_executor = (Executor)createComponent( component, Executor.class ); | m_executor = (Executor)createComponent( component, Executor.class ); | ||||
| @@ -250,12 +256,6 @@ public class MyrmidonEmbeddor | |||||
| component = getParameter( ProjectBuilder.ROLE ); | component = getParameter( ProjectBuilder.ROLE ); | ||||
| m_builder =(ProjectBuilder)createComponent( component, ProjectBuilder.class ); | m_builder =(ProjectBuilder)createComponent( component, ProjectBuilder.class ); | ||||
| component = getParameter( TskDeployer.ROLE ); | |||||
| m_deployer = (TskDeployer)createComponent( component, TskDeployer.class ); | |||||
| component = getParameter( Configurer.ROLE ); | |||||
| m_configurer = (Configurer)createComponent( component, Configurer.class ); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -20,6 +20,7 @@ import org.apache.avalon.framework.camelot.RegistryException; | |||||
| import org.apache.avalon.framework.component.Component; | import org.apache.avalon.framework.component.Component; | ||||
| import org.apache.avalon.framework.component.ComponentException; | import org.apache.avalon.framework.component.ComponentException; | ||||
| import org.apache.avalon.framework.component.ComponentManager; | import org.apache.avalon.framework.component.ComponentManager; | ||||
| import org.apache.avalon.framework.component.ComponentSelector; | |||||
| import org.apache.avalon.framework.component.Composable; | import org.apache.avalon.framework.component.Composable; | ||||
| import org.apache.avalon.framework.component.DefaultComponentManager; | import org.apache.avalon.framework.component.DefaultComponentManager; | ||||
| import org.apache.avalon.framework.configuration.Configurable; | import org.apache.avalon.framework.configuration.Configurable; | ||||
| @@ -34,20 +35,22 @@ import org.apache.myrmidon.api.TaskContext; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.components.configurer.Configurer; | import org.apache.myrmidon.components.configurer.Configurer; | ||||
| import org.apache.myrmidon.components.type.TypeManager; | |||||
| public class DefaultExecutor | public class DefaultExecutor | ||||
| extends AbstractLoggable | extends AbstractLoggable | ||||
| implements Executor, Composable | implements Executor, Composable | ||||
| { | { | ||||
| private Factory m_factory; | |||||
| private Registry m_registry = new DefaultRegistry( Locator.class ); | |||||
| //private Factory m_factory; | |||||
| //private Registry m_registry = new DefaultRegistry( Locator.class ); | |||||
| private Configurer m_configurer; | private Configurer m_configurer; | ||||
| private ComponentSelector m_selector; | |||||
| private ComponentManager m_componentManager; | private ComponentManager m_componentManager; | ||||
| public Registry getRegistry() | public Registry getRegistry() | ||||
| { | { | ||||
| return m_registry; | |||||
| return null;//m_registry; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -61,10 +64,12 @@ public class DefaultExecutor | |||||
| { | { | ||||
| //cache CM so it can be used while executing tasks | //cache CM so it can be used while executing tasks | ||||
| m_componentManager = componentManager; | m_componentManager = componentManager; | ||||
| m_factory = (Factory)componentManager.lookup( "org.apache.avalon.framework.camelot.Factory" ); | |||||
| //m_factory = (Factory)componentManager.lookup( "org.apache.avalon.framework.camelot.Factory" ); | |||||
| m_configurer = (Configurer)componentManager.lookup( Configurer.ROLE ); | m_configurer = (Configurer)componentManager.lookup( Configurer.ROLE ); | ||||
| final TypeManager typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE ); | |||||
| m_selector = (ComponentSelector)typeManager.lookup( Task.ROLE + "Selector" ); | |||||
| } | } | ||||
| public void execute( final Configuration taskData, final TaskContext context ) | public void execute( final Configuration taskData, final TaskContext context ) | ||||
| @@ -99,17 +104,20 @@ public class DefaultExecutor | |||||
| { | { | ||||
| try | try | ||||
| { | { | ||||
| final Locator locator = (Locator)m_registry.getInfo( name, Locator.class ); | |||||
| return (Task)m_factory.create( locator, Task.class ); | |||||
| return (Task)m_selector.select( name ); | |||||
| //final Locator locator = (Locator)m_registry.getInfo( name, Locator.class ); | |||||
| //return (Task)m_factory.create( locator, Task.class ); | |||||
| } | } | ||||
| catch( final RegistryException re ) | |||||
| catch( final ComponentException ce ) | |||||
| { | { | ||||
| throw new TaskException( "Unable to locate task " + name, re ); | |||||
| throw new TaskException( "Unable to create task " + name, ce ); | |||||
| } | } | ||||
| catch( final FactoryException fe ) | |||||
| /* catch( final RegistryException re ) | |||||
| { | { | ||||
| throw new TaskException( "Unable to create task " + name, fe ); | |||||
| throw new TaskException( "Unable to locate task " + name, re ); | |||||
| } | } | ||||
| catch( final FactoryException fe ) | |||||
| */ | |||||
| } | } | ||||
| private void doConfigure( final Task task, | private void doConfigure( final Task task, | ||||
| @@ -36,7 +36,7 @@ public class DefaultComponentFactory | |||||
| public DefaultComponentFactory( final URL[] urls ) | public DefaultComponentFactory( final URL[] urls ) | ||||
| { | { | ||||
| this( urls, null ); | |||||
| this( urls, Thread.currentThread().getContextClassLoader() ); | |||||
| } | } | ||||
| public DefaultComponentFactory( final URL[] urls, final ClassLoader parent ) | public DefaultComponentFactory( final URL[] urls, final ClassLoader parent ) | ||||
| @@ -39,10 +39,9 @@ public class DefaultTypeManager | |||||
| public Component lookup( final String role ) | public Component lookup( final String role ) | ||||
| throws ComponentException | throws ComponentException | ||||
| { | { | ||||
| final ComponentSelector selector = (ComponentSelector)m_roleMap.get( role ); | |||||
| if( null != selector ) | |||||
| if( role.endsWith( "Selector" ) ) | |||||
| { | { | ||||
| return selector; | |||||
| return createSelector( role ); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -60,7 +59,7 @@ public class DefaultTypeManager | |||||
| final ComponentFactory factory ) | final ComponentFactory factory ) | ||||
| throws Exception | throws Exception | ||||
| { | { | ||||
| final TypedComponentSelector selector = createSelector( role ); | |||||
| final TypedComponentSelector selector = createSelector( role + "Selector" ); | |||||
| selector.register( shorthandName, factory ); | selector.register( shorthandName, factory ); | ||||
| } | } | ||||
| @@ -77,7 +76,10 @@ public class DefaultTypeManager | |||||
| throws ComponentException | throws ComponentException | ||||
| { | { | ||||
| TypedComponentSelector selector = (TypedComponentSelector)m_roleMap.get( role ); | TypedComponentSelector selector = (TypedComponentSelector)m_roleMap.get( role ); | ||||
| if( null != selector ) return selector; | |||||
| if( null != selector ) | |||||
| { | |||||
| return selector; | |||||
| } | |||||
| if( null != m_parent ) | if( null != m_parent ) | ||||
| { | { | ||||
| @@ -92,10 +94,14 @@ public class DefaultTypeManager | |||||
| ///If we haven't goa selector try to create a new one | ///If we haven't goa selector try to create a new one | ||||
| if( null == selector ) | if( null == selector ) | ||||
| { | { | ||||
| //Precondition that role.endsWith( "Selector" ) | |||||
| final int length = role.length() - 8; | |||||
| final String workInterface = role.substring( 0, length ); | |||||
| try | try | ||||
| { | { | ||||
| //TODO: Should we use ContextClassLoader here ??? Or perhaps try that on failure?? | //TODO: Should we use ContextClassLoader here ??? Or perhaps try that on failure?? | ||||
| final Class clazz = Class.forName( role ); | |||||
| final Class clazz = Class.forName( workInterface ); | |||||
| selector = new TypedComponentSelector( clazz ); | selector = new TypedComponentSelector( clazz ); | ||||
| } | } | ||||
| catch( final Exception e ) | catch( final Exception e ) | ||||
| @@ -64,7 +64,7 @@ public class TypedComponentSelector | |||||
| if( null != component ) | if( null != component ) | ||||
| { | { | ||||
| if( m_type.isInstance( component ) ) | |||||
| if( !m_type.isInstance( component ) ) | |||||
| { | { | ||||
| throw new ComponentException( "Implementation of " + name + " is not of " + | throw new ComponentException( "Implementation of " + name + " is not of " + | ||||
| "correct type (" + m_type.getClass().getName() + ")" ); | "correct type (" + m_type.getClass().getName() + ")" ); | ||||