You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2007/02/10 08:36:20 UTC

svn commit: r505648 - in /incubator/tuscany/java/sca/kernel: core/src/main/java/org/apache/tuscany/core/bootstrap/ core/src/main/java/org/apache/tuscany/core/component/ core/src/main/java/org/apache/tuscany/core/deployer/ core/src/main/java/org/apache/...

Author: jmarino
Date: Fri Feb  9 23:36:19 2007
New Revision: 505648

URL: http://svn.apache.org/viewvc?view=rev&rev=505648
Log:
integrate autowire resolver into kernel

Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemSingletonAtomicComponent.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/AutowireResolver.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/DefaultAutowireResolver.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/extension/AbstractExtensionDeployer.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot2.scdl
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/Bootstrapper.java Fri Feb  9 23:36:19 2007
@@ -18,7 +18,6 @@
  */
 package org.apache.tuscany.core.bootstrap;
 
-import org.apache.tuscany.host.MonitorFactory;
 import org.apache.tuscany.spi.bootstrap.RuntimeComponent;
 import org.apache.tuscany.spi.builder.Connector;
 import org.apache.tuscany.spi.component.ScopeRegistry;
@@ -28,6 +27,9 @@
 import org.apache.tuscany.spi.loader.Loader;
 import org.apache.tuscany.spi.loader.PropertyObjectFactory;
 
+import org.apache.tuscany.core.resolver.AutowireResolver;
+import org.apache.tuscany.host.MonitorFactory;
+
 /**
  * Interface that abstracts the process used to create a running Tuscany system. Implementation of this may provide
  * different mechanisms for creating the primoridal system components used to boot the core to the level where it can
@@ -85,4 +87,12 @@
      * @return a new primordial Connector
      */
     Connector createConnector();
+
+    /**
+     * Returns the AutowireResolver that resolves autowire targets
+     *
+     * @return the AutowireResolver that resolves autowire targets
+     */
+    AutowireResolver getAutowireResolver();
+
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/bootstrap/DefaultBootstrapper.java Fri Feb  9 23:36:19 2007
@@ -79,6 +79,7 @@
 import org.apache.tuscany.core.loader.ReferenceLoader;
 import org.apache.tuscany.core.loader.ServiceLoader;
 import org.apache.tuscany.core.property.PropertyObjectFactoryImpl;
+import org.apache.tuscany.core.resolver.AutowireResolver;
 import org.apache.tuscany.core.wire.jdk.JDKWireService;
 import org.apache.tuscany.host.MonitorFactory;
 
@@ -93,23 +94,27 @@
     private final XMLInputFactory xmlFactory;
     private final ComponentManager componentManager;
     private final TuscanyManagementService managementService;
+    private AutowireResolver resolver;
 
     /**
      * Create a default bootstrapper.
      *
      * @param monitorFactory    the MonitorFactory to be used to create monitors for the primordial components
      * @param xmlFactory        the XMLInputFactory to be used by the components to load XML artifacts
-     * @param componentManager  the component manager for the runtime isntance
+     * @param componentManager  the component manager for the runtime instance
+     * @param resolver          the autowire resolver for the runtime instance
      * @param managementService management service used by the runtime.
      */
     public DefaultBootstrapper(MonitorFactory monitorFactory,
                                XMLInputFactory xmlFactory,
                                ComponentManager componentManager,
+                               AutowireResolver resolver,
                                TuscanyManagementService managementService) {
         this.monitorFactory = monitorFactory;
         this.xmlFactory = xmlFactory;
         this.componentManager = componentManager;
         this.managementService = managementService;
+        this.resolver = resolver;
     }
 
     /**
@@ -149,7 +154,7 @@
         JavaInterfaceProcessorRegistry interfaceIntrospector = new JavaInterfaceProcessorRegistryImpl();
         Introspector introspector = createIntrospector(interfaceIntrospector);
         LoaderRegistry loader = createLoader(new PropertyObjectFactoryImpl(), introspector);
-        DeployerImpl deployer = new DeployerImpl(xmlFactory, loader, builder);
+        DeployerImpl deployer = new DeployerImpl(xmlFactory, loader, builder, resolver);
         deployer.setMonitor(getMonitorFactory().getMonitor(ScopeContainerMonitor.class));
         return deployer;
     }
@@ -233,6 +238,11 @@
      */
     public Connector createConnector() {
         return new ConnectorImpl(componentManager);
+    }
+
+
+    public AutowireResolver getAutowireResolver() {
+        return resolver;
     }
 
     /**

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/ComponentManagerImpl.java Fri Feb  9 23:36:19 2007
@@ -30,12 +30,14 @@
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.DuplicateNameException;
 import org.apache.tuscany.spi.event.Event;
+import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.services.management.TuscanyManagementService;
 import org.apache.tuscany.spi.util.UriHelper;
 
 import org.apache.tuscany.core.component.event.ComponentStart;
 import org.apache.tuscany.core.component.event.ComponentStop;
 import org.apache.tuscany.core.implementation.composite.SystemSingletonAtomicComponent;
+import org.apache.tuscany.core.resolver.AutowireResolver;
 
 /**
  * Default implementation of the component manager
@@ -44,6 +46,7 @@
  */
 public class ComponentManagerImpl implements ComponentManager {
     private TuscanyManagementService managementService;
+    private AutowireResolver resolver;
     private Map<URI, Component> components;
     private Map<URI, List<URI>> parentToChildren;
 
@@ -52,9 +55,10 @@
         parentToChildren = new ConcurrentHashMap<URI, List<URI>>();
     }
 
-    public ComponentManagerImpl(TuscanyManagementService managementService) {
+    public ComponentManagerImpl(TuscanyManagementService managementService, AutowireResolver resolver) {
         this();
         this.managementService = managementService;
+        this.resolver = resolver;
     }
 
     public void register(Component component) throws ComponentRegistrationException {
@@ -85,12 +89,26 @@
 
     public <S, I extends S> void registerJavaObject(URI uri, Class<S> service, I instance)
         throws ComponentRegistrationException {
-        register(new SystemSingletonAtomicComponent<S, I>(uri, null, service, instance));
+        SystemSingletonAtomicComponent<S, I> component =
+            new SystemSingletonAtomicComponent<S, I>(uri, null, service, instance);
+        register(component);
+        if (resolver != null) {
+            for (ServiceContract contract : component.getServiceContracts()) {
+                resolver.addPrimordialUri(contract, uri);
+            }
+        }
     }
 
     public <S, I extends S> void registerJavaObject(URI uri, List<Class<?>> services, I instance)
         throws ComponentRegistrationException {
-        register(new SystemSingletonAtomicComponent<S, I>(uri, null, services, instance));
+        SystemSingletonAtomicComponent<S, I> component =
+            new SystemSingletonAtomicComponent<S, I>(uri, null, services, instance);
+        register(component);
+        if (resolver != null) {
+            for (ServiceContract contract : component.getServiceContracts()) {
+                resolver.addPrimordialUri(contract, uri);
+            }
+        }
     }
 
     public void unregister(Component component) throws ComponentRegistrationException {

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java Fri Feb  9 23:36:19 2007
@@ -41,10 +41,12 @@
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.model.ComponentDefinition;
 import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.resolver.ResolutionException;
 
 import org.apache.tuscany.api.annotation.Monitor;
 import org.apache.tuscany.core.component.event.ComponentStop;
 import org.apache.tuscany.core.component.scope.CompositeScopeContainer;
+import org.apache.tuscany.core.resolver.AutowireResolver;
 
 /**
  * Default implementation of Deployer.
@@ -52,15 +54,17 @@
  * @version $Rev$ $Date$
  */
 public class DeployerImpl implements Deployer {
-    protected XMLInputFactory xmlFactory;
-    protected Builder builder;
-    protected ScopeContainerMonitor monitor;
+    private XMLInputFactory xmlFactory;
+    private Builder builder;
+    private ScopeContainerMonitor monitor;
     private Loader loader;
+    private AutowireResolver resolver;
 
-    public DeployerImpl(XMLInputFactory xmlFactory, Loader loader, Builder builder) {
+    public DeployerImpl(XMLInputFactory xmlFactory, Loader loader, Builder builder, AutowireResolver resolver) {
         this.xmlFactory = xmlFactory;
         this.loader = loader;
         this.builder = builder;
+        this.resolver = resolver;
     }
 
     public DeployerImpl() {
@@ -82,19 +86,26 @@
         this.monitor = monitor;
     }
 
+    @Autowire
+    public void setResolver(AutowireResolver resolver) {
+        this.resolver = resolver;
+    }
+
     public <I extends Implementation<?>> Component deploy(CompositeComponent parent,
                                                           ComponentDefinition<I> componentDefinition)
-        throws LoaderException, BuilderException, PrepareException {
+        throws LoaderException, BuilderException, PrepareException, ResolutionException {
         final ScopeContainer scopeContainer = new CompositeScopeContainer(monitor);
         scopeContainer.start();
         DeploymentContext deploymentContext = new RootDeploymentContext(null, xmlFactory, scopeContainer, null);
         deploymentContext.getPathNames().add(componentDefinition.getUri().toString());
-         try {
+        try {
             load(parent, componentDefinition, deploymentContext);
         } catch (LoaderException e) {
             e.addContextName(componentDefinition.getUri().toString());
             throw e;
         }
+        // resolve autowires
+        resolver.resolve(null, componentDefinition);
         Component component = (Component) build(parent, componentDefinition, deploymentContext);
         // create a listener so the scope container is shutdown when the top-level composite stops
         RuntimeEventListener listener = new RuntimeEventListener() {

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemSingletonAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemSingletonAtomicComponent.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemSingletonAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/SystemSingletonAtomicComponent.java Fri Feb  9 23:36:19 2007
@@ -19,6 +19,7 @@
 package org.apache.tuscany.core.implementation.composite;
 
 import java.net.URI;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -35,6 +36,7 @@
 import org.apache.tuscany.spi.idl.java.JavaServiceContract;
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.model.ServiceDefinition;
 import org.apache.tuscany.spi.wire.InboundWire;
 import org.apache.tuscany.spi.wire.OutboundWire;
@@ -53,6 +55,7 @@
     private T instance;
     private Map<String, InboundWire> inboundWires;
     private WireService wireService = new JDKWireService();
+    private List<ServiceContract> serviceContracts = new ArrayList<ServiceContract>();
 
     public SystemSingletonAtomicComponent(URI name, CompositeComponent parent, Class<S> interfaze, T instance) {
         super(name, parent);
@@ -152,6 +155,10 @@
         return null;
     }
 
+    public List<ServiceContract> getServiceContracts() {
+        return serviceContracts;
+    }
+
     private void initWire(Class<?> interfaze) {
         JavaServiceContract serviceContract = new JavaServiceContract(interfaze);
         // create a relative URI
@@ -160,6 +167,7 @@
         InboundWire wire = wireService.createWire(def);
         wire.setContainer(this);
         inboundWires.put(wire.getUri().getFragment(), wire);
+        serviceContracts.add(serviceContract);
     }
 
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/AutowireResolver.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/AutowireResolver.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/AutowireResolver.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/AutowireResolver.java Fri Feb  9 23:36:19 2007
@@ -18,9 +18,12 @@
  */
 package org.apache.tuscany.core.resolver;
 
+import java.net.URI;
+
 import org.apache.tuscany.spi.model.ComponentDefinition;
 import org.apache.tuscany.spi.model.CompositeComponentType;
 import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.resolver.ResolutionException;
 
 /**
@@ -40,4 +43,12 @@
      */
     void resolve(ComponentDefinition<Implementation<CompositeComponentType<?, ?, ?>>> parentDefinition,
                  ComponentDefinition<? extends Implementation<?>> definition) throws ResolutionException;
+
+    /**
+     * Adds the uri of a primordial system service that can be an autowire target
+     *
+     * @param contract the service contract of the system service
+     * @param uri      the component uri
+     */
+    void addPrimordialUri(ServiceContract contract, URI uri);
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/DefaultAutowireResolver.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/DefaultAutowireResolver.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/DefaultAutowireResolver.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/resolver/DefaultAutowireResolver.java Fri Feb  9 23:36:19 2007
@@ -19,6 +19,8 @@
 package org.apache.tuscany.core.resolver;
 
 import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.tuscany.spi.model.ComponentDefinition;
 import org.apache.tuscany.spi.model.ComponentType;
@@ -36,6 +38,8 @@
  * @version $Rev$ $Date$
  */
 public class DefaultAutowireResolver implements AutowireResolver {
+    private Map<ServiceContract, URI> primordialAutowire = new HashMap<ServiceContract, URI>();
+
 
     @SuppressWarnings({"unchecked"})
     public void resolve(ComponentDefinition<Implementation<CompositeComponentType<?, ?, ?>>> parentDefinition,
@@ -77,6 +81,10 @@
         }
     }
 
+    public void addPrimordialUri(ServiceContract contract, URI uri) {
+        primordialAutowire.put(contract, uri);
+    }
+
     /**
      * Performs the actual resolution against a composite TODO this should be extensible allowing for path
      * optimizations
@@ -117,12 +125,25 @@
         }
         if (targetUri == null) {
             if (candidateUri == null) {
-                String refName = target.getReferenceName().toString();
-                throw new AutowireTargetNotFoundException("No matching target found", refName);
+                candidateUri = resolvePrimordial(requiredContract);
+                if (candidateUri == null) {
+                    String refName = target.getReferenceName().toString();
+                    throw new AutowireTargetNotFoundException("No matching target found", refName);
+                }
             }
             target.addTarget(candidateUri);
         } else {
             target.addTarget(targetUri);
         }
+    }
+
+    private URI resolvePrimordial(ServiceContract contract) {
+        Class<?> requiredClass = contract.getInterfaceClass();
+        for (Map.Entry<ServiceContract, URI> entry : primordialAutowire.entrySet()) {
+            if (requiredClass.isAssignableFrom(contract.getInterfaceClass())) {
+                return entry.getValue();
+            }
+        }
+        return null;
     }
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/runtime/AbstractRuntime.java Fri Feb  9 23:36:19 2007
@@ -34,6 +34,7 @@
 import org.apache.tuscany.spi.deployer.Deployer;
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.resolver.ResolutionException;
 import org.apache.tuscany.spi.services.management.TuscanyManagementService;
 
 import org.apache.tuscany.core.bootstrap.Bootstrapper;
@@ -42,6 +43,8 @@
 import org.apache.tuscany.core.component.ComponentManagerImpl;
 import org.apache.tuscany.core.implementation.system.model.SystemCompositeImplementation;
 import org.apache.tuscany.core.monitor.NullMonitorFactory;
+import org.apache.tuscany.core.resolver.AutowireResolver;
+import org.apache.tuscany.core.resolver.DefaultAutowireResolver;
 import org.apache.tuscany.host.MonitorFactory;
 import org.apache.tuscany.host.RuntimeInfo;
 import org.apache.tuscany.host.management.ManagementService;
@@ -52,6 +55,14 @@
  * @version $Rev$ $Date$
  */
 public abstract class AbstractRuntime implements TuscanyRuntime {
+    private static final URI MONITOR_URI =
+        URI.create(ComponentNames.TUSCANY_SYSTEM_ROOT.toString() + "/MonitorFactory");
+    private static final URI COMPONENT_MGR_URI =
+        URI.create(ComponentNames.TUSCANY_SYSTEM_ROOT.toString() + "/ComponentManager");
+
+    private static final URI AUTOWIRE_RESOLVER_URI =
+        URI.create(ComponentNames.TUSCANY_SYSTEM_ROOT.toString() + "/AutowireResolver");
+
     private final XMLInputFactory xmlFactory;
     private URL systemScdl;
     private String applicationName;
@@ -66,6 +77,7 @@
     private RuntimeComponent runtime;
     private CompositeComponent systemComponent;
     private CompositeComponent tuscanySystem;
+    private AutowireResolver resolver;
 
     protected AbstractRuntime() {
         this(new NullMonitorFactory());
@@ -168,6 +180,8 @@
             throw new InitializationException(e);
         } catch (ComponentException e) {
             throw new InitializationException(e);
+        } catch (ResolutionException e) {
+            throw new InitializationException(e);
         }
         tuscanySystem.start();
     }
@@ -198,17 +212,18 @@
 
     protected Bootstrapper createBootstrapper() {
         TuscanyManagementService tms = (TuscanyManagementService) getManagementService();
-        componentManager = new ComponentManagerImpl(tms);
-        return new DefaultBootstrapper(getMonitorFactory(), xmlFactory, componentManager, tms);
+        resolver = new DefaultAutowireResolver();
+        componentManager = new ComponentManagerImpl(tms, resolver);
+        return new DefaultBootstrapper(getMonitorFactory(), xmlFactory, componentManager, resolver, tms);
     }
 
     protected void registerSystemComponents() throws InitializationException {
         try {
             componentManager.registerJavaObject(RuntimeInfo.COMPONENT_URI, RuntimeInfo.class, runtimeInfo);
-            URI uri = URI.create("MonitorFactory");
-            componentManager.registerJavaObject(uri, MonitorFactory.class, getMonitorFactory());
-            //JFM TODO need autowire to deal with returning a component manager 
-            //systemComponent.registerJavaObject("ComponentManager", ComponentManager.class, componentManager);
+            componentManager.registerJavaObject(MONITOR_URI, MonitorFactory.class, getMonitorFactory());
+            // register the component manager with itself so it can be autowired
+            componentManager.registerJavaObject(COMPONENT_MGR_URI, ComponentManager.class, componentManager);
+            componentManager.registerJavaObject(AUTOWIRE_RESOLVER_URI, AutowireResolver.class, resolver);
         } catch (ComponentRegistrationException e) {
             throw new InitializationException(e);
         }
@@ -219,7 +234,7 @@
                                                   URI name,
                                                   URL systemScdl,
                                                   ClassLoader systemClassLoader)
-        throws LoaderException, BuilderException, ComponentException {
+        throws LoaderException, BuilderException, ComponentException, ResolutionException {
 
         SystemCompositeImplementation impl = new SystemCompositeImplementation();
         impl.setScdlLocation(systemScdl);

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/extension/AbstractExtensionDeployer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/extension/AbstractExtensionDeployer.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/extension/AbstractExtensionDeployer.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/services/extension/AbstractExtensionDeployer.java Fri Feb  9 23:36:19 2007
@@ -34,6 +34,7 @@
 import org.apache.tuscany.spi.deployer.Deployer;
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.resolver.ResolutionException;
 
 import org.apache.tuscany.core.implementation.system.model.SystemCompositeImplementation;
 
@@ -115,6 +116,9 @@
                 // FIXME JFM handle the exception
                 e.printStackTrace();
             } catch (ComponentException e) {
+                // FIXME handle the exception
+                e.printStackTrace();
+            } catch (ResolutionException e) {
                 // FIXME handle the exception
                 e.printStackTrace();
             }

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/bootstrap/BootstrapperTestCase.java Fri Feb  9 23:36:19 2007
@@ -37,6 +37,6 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        bootstrapper = new DefaultBootstrapper(new NullMonitorFactory(), null, null, null);
+        bootstrapper = new DefaultBootstrapper(new NullMonitorFactory(), null, null, null, null);
     }
 }

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/deployer/BootstrapDeployerTestCase.java Fri Feb  9 23:36:19 2007
@@ -49,6 +49,7 @@
 import org.apache.tuscany.core.implementation.system.model.SystemCompositeImplementation;
 import org.apache.tuscany.core.mock.component.BasicInterface;
 import org.apache.tuscany.core.monitor.NullMonitorFactory;
+import org.apache.tuscany.core.resolver.DefaultAutowireResolver;
 import org.easymock.EasyMock;
 import static org.easymock.EasyMock.createNiceMock;
 import static org.easymock.EasyMock.isA;
@@ -151,8 +152,11 @@
     protected void setUp() throws Exception {
         super.setUp();
         XMLInputFactory xmlFactory = XMLInputFactory.newInstance();
-        ComponentManager manager = new ComponentManagerImpl();
-        Bootstrapper bootstrapper = new DefaultBootstrapper(new NullMonitorFactory(), xmlFactory, manager, null);
+        DefaultAutowireResolver resolver = new DefaultAutowireResolver();
+        ComponentManager manager = new ComponentManagerImpl(null, resolver);
+        manager.registerJavaObject(URI.create("ComponentManager"), ComponentManager.class, manager);
+        NullMonitorFactory monitorFactory = new NullMonitorFactory();
+        Bootstrapper bootstrapper = new DefaultBootstrapper(monitorFactory, xmlFactory, manager, resolver, null);
         deployer = (DeployerImpl) bootstrapper.createDeployer();
         deploymentContext = new RootDeploymentContext(null, xmlFactory, null, null);
         implementation = new SystemCompositeImplementation();

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/loader/ComponentLoaderTestCase.java Fri Feb  9 23:36:19 2007
@@ -19,9 +19,8 @@
 package org.apache.tuscany.core.loader;
 
 import java.net.URI;
-import java.util.Collections;
-import java.util.List;
 import java.util.ArrayList;
+import java.util.List;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;

Modified: incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot2.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot2.scdl?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot2.scdl (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/resources/org/apache/tuscany/core/deployer/boot2.scdl Fri Feb  9 23:36:19 2007
@@ -26,7 +26,7 @@
            name="boot2">
 
     <!-- expose Deployer API as a service -->
-    <service name="deployer" >
+    <service name="deployer">
         <interface.java interface="org.apache.tuscany.spi.deployer.Deployer"/>
         <reference>deployerImpl</reference>
     </service>
@@ -36,11 +36,25 @@
         <system:implementation.system class="org.apache.tuscany.core.deployer.DeployerImpl"/>
     </component>
 
+    <!-- Component that provides the Autowire resolver service -->
+    <component name="autowireResolver">
+        <system:implementation.system class="org.apache.tuscany.core.resolver.DefaultAutowireResolver"/>
+    </component>
+
     <!-- Work management -->
     <component name="workContext">
         <system:implementation.system class="org.apache.tuscany.core.component.WorkContextImpl"/>
     </component>
 
+    <component name="workScheduler">
+        <system:implementation.system class="org.apache.tuscany.core.services.work.jsr237.Jsr237WorkScheduler"/>
+    </component>
+
+    <component name="workManager">
+        <system:implementation.system
+            class="org.apache.tuscany.core.services.work.jsr237.workmanager.ThreadPoolWorkManager"/>
+    </component>
+
     <!-- Scope infrastructure -->
     <component name="scopeRegistry">
         <system:implementation.system class="org.apache.tuscany.core.component.scope.ScopeRegistryImpl"/>
@@ -66,11 +80,15 @@
         <system:implementation.system class="org.apache.tuscany.core.builder.ConnectorImpl"/>
     </component>
 
+    <component name="wirePostProcess">
+        <system:implementation.system class="org.apache.tuscany.core.builder.WirePostProcessorRegistryImpl"/>
+    </component>
+
     <!-- Resource host registry -->
     <component name="resourceHostRegistry">
         <system:implementation.system class="org.apache.tuscany.core.services.host.DelegatingResourceHostRegistry"/>
     </component>
-    
+
     <!-- Foundation element loader implementations -->
     <component name="elementLoader.component">
         <system:implementation.system class="org.apache.tuscany.core.loader.ComponentLoader"/>
@@ -92,7 +110,7 @@
     </component>
 
     <component name="wireService">
-            <system:implementation.system class="org.apache.tuscany.core.wire.jdk.JDKWireService"/>
+        <system:implementation.system class="org.apache.tuscany.core.wire.jdk.JDKWireService"/>
     </component>
 
     <!-- Composite implementation type -->
@@ -111,17 +129,17 @@
 
     <!-- DataBinding registry -->
     <component name="databinding.registry">
-        <system:implementation.system class="org.apache.tuscany.core.databinding.impl.DataBindingRegistryImpl" />
+        <system:implementation.system class="org.apache.tuscany.core.databinding.impl.DataBindingRegistryImpl"/>
     </component>
 
     <!-- DataBinding registry -->
     <component name="databinding.mediator">
-        <system:implementation.system class="org.apache.tuscany.core.databinding.impl.MediatorImpl" />
-    </component>    
+        <system:implementation.system class="org.apache.tuscany.core.databinding.impl.MediatorImpl"/>
+    </component>
 
     <!-- Transformer registry -->
     <component name="databinding.transformerRegistry" initLevel="90">
-        <system:implementation.system class="org.apache.tuscany.core.databinding.impl.TransformerRegistryImpl" />
+        <system:implementation.system class="org.apache.tuscany.core.databinding.impl.TransformerRegistryImpl"/>
     </component>
 
     <component name="propertyFactory">

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java?view=diff&rev=505648&r1=505647&r2=505648
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/deployer/Deployer.java Fri Feb  9 23:36:19 2007
@@ -25,6 +25,7 @@
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.model.ComponentDefinition;
 import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.resolver.ResolutionException;
 
 /**
  * Interface that can be used to deploy SCA bundles to a runtime.
@@ -44,5 +45,5 @@
      */
     <I extends Implementation<?>> Component deploy(CompositeComponent parent,
                                                    ComponentDefinition<I> componentDefinition)
-        throws LoaderException, BuilderException, ComponentException;
+        throws LoaderException, BuilderException, ComponentException, ResolutionException;
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org