You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2006/02/24 00:30:12 UTC

svn commit: r380269 - in /incubator/tuscany/java/sca: binding.axis/src/main/java/org/apache/tuscany/binding/axis/loader/ container.java/src/main/java/org/apache/tuscany/container/java/builder/ container.java/src/main/java/org/apache/tuscany/container/j...

Author: jsdelfino
Date: Thu Feb 23 15:30:06 2006
New Revision: 380269

URL: http://svn.apache.org/viewcvs?rev=380269&view=rev
Log:
bring-up changes - helloworld is running again on j2se

Added:
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/loader/
    incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/loader/WebServiceSCDLModelLoader.java   (with props)
    incubator/tuscany/java/sca/container.java/src/main/resources/system.fragment
    incubator/tuscany/java/sca/container.js/src/main/resources/system.fragment.off
    incubator/tuscany/java/sca/core/src/main/resources/system.module
Removed:
    incubator/tuscany/java/sca/container.java/src/main/resources/sca.fragment
    incubator/tuscany/java/sca/container.java/src/main/resources/tuscany-model.config
    incubator/tuscany/java/sca/container.js/src/main/resources/sca.fragment
    incubator/tuscany/java/sca/container.js/src/main/resources/tuscany-model.config
    incubator/tuscany/java/sca/core/src/main/resources/sca.fragment
    incubator/tuscany/java/sca/core/src/main/resources/tuscany-model.config
Modified:
    incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder.java
    incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/config/Java5ComponentTypeIntrospector.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/client/TuscanyRuntime.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/ModuleComponentConfigurationLoader.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/ModuleComponentConfigurationLoaderImpl.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/scope/StatelessScopeContext.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/runtime/RuntimeContextImpl.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentContextBuilder.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ModuleImpl.java
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java
    incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/util/ModelTransformerImpl.java

Added: incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/loader/WebServiceSCDLModelLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/loader/WebServiceSCDLModelLoader.java?rev=380269&view=auto
==============================================================================
--- incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/loader/WebServiceSCDLModelLoader.java (added)
+++ incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/loader/WebServiceSCDLModelLoader.java Thu Feb 23 15:30:06 2006
@@ -0,0 +1,80 @@
+package org.apache.tuscany.binding.axis.loader;
+
+import java.util.Collection;
+
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.Service;
+import javax.wsdl.WSDLException;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
+
+import org.apache.tuscany.binding.axis.assembly.WebServiceAssemblyFactory;
+import org.apache.tuscany.binding.axis.assembly.WebServiceBinding;
+import org.apache.tuscany.binding.axis.assembly.impl.WebServiceAssemblyFactoryImpl;
+import org.apache.tuscany.common.resource.ResourceLoader;
+import org.apache.tuscany.model.assembly.AssemblyModelContext;
+import org.apache.tuscany.model.assembly.AssemblyModelObject;
+import org.apache.tuscany.model.scdl.loader.SCDLModelLoader;
+import org.apache.tuscany.model.util.XMLNameUtil;
+
+/**
+ * Populates the assembly model from an SCDL model
+ */
+public class WebServiceSCDLModelLoader implements SCDLModelLoader {
+    
+    private AssemblyModelContext modelContext;
+    private ResourceLoader resourceLoader;
+    private WebServiceAssemblyFactory wsFactory;
+
+    /**
+     * Constructs a new WebServiceSCDLModelLoader.
+     */
+    public WebServiceSCDLModelLoader(AssemblyModelContext modelContext) {
+        this.modelContext=modelContext;
+        this.resourceLoader=this.modelContext.getResourceLoader();
+        this.wsFactory=new WebServiceAssemblyFactoryImpl();
+    }
+
+    /**
+     * @see org.apache.tuscany.model.scdl.loader.SCDLModelLoader#load(java.lang.Object)
+     */
+    public AssemblyModelObject load(Object object) {
+        if (object instanceof org.apache.tuscany.model.scdl.WebServiceBinding) {
+            org.apache.tuscany.model.scdl.WebServiceBinding scdlBinding=(org.apache.tuscany.model.scdl.WebServiceBinding)object;
+            WebServiceBinding binding=wsFactory.createWebServiceBinding();
+            binding.setURI(scdlBinding.getUri());
+            
+            // Get the WSDL port namespace and name
+            String portURI=scdlBinding.getPort();
+            int h=portURI.indexOf('#');
+            String portNamespace=portURI.substring(0,h);
+            String portName=portURI.substring(h+1);
+            
+            // Load the WSDL file
+            String packageName=XMLNameUtil.getPackageNameFromNamespace(portNamespace);
+            String fileName=XMLNameUtil.getValidNameFromXMLName(portName, false);
+            String wsdlURI=packageName+'/'+fileName+".wsdl";
+            Definition definition;
+            try {
+                WSDLReader reader=WSDLFactory.newInstance().newWSDLReader();
+                definition = reader.readWSDL(wsdlURI);
+            } catch (WSDLException e) {
+                throw new IllegalArgumentException(e);
+            }
+            binding.setWSDLDefinition(definition);
+
+            // Find the specified port
+            for (Service service : (Collection<Service>)definition.getServices().values()) {
+                Port port=service.getPort(portName);
+                if (port!=null) {
+                    binding.setWSDLPort(port);
+                    break;
+                }
+            }
+            
+            return binding;
+        } else
+            return null;
+    }
+}

Propchange: incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/loader/WebServiceSCDLModelLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/binding.axis/src/main/java/org/apache/tuscany/binding/axis/loader/WebServiceSCDLModelLoader.java
------------------------------------------------------------------------------
    svn:keywords = Rev,Date

Modified: incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder.java (original)
+++ incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder.java Thu Feb 23 15:30:06 2006
@@ -34,6 +34,7 @@
 import org.apache.tuscany.core.invocation.spi.ProxyFactory;
 import org.apache.tuscany.core.invocation.spi.ProxyFactoryFactory;
 import org.apache.tuscany.core.message.MessageFactory;
+import org.apache.tuscany.core.runtime.RuntimeContext;
 import org.apache.tuscany.core.system.annotation.Autowire;
 import org.apache.tuscany.model.assembly.AssemblyModelObject;
 import org.apache.tuscany.model.assembly.ConfiguredProperty;
@@ -59,10 +60,25 @@
  * 
  * @version $Rev: 368822 $ $Date: 2006-01-13 10:54:38 -0800 (Fri, 13 Jan 2006) $
  */
+@org.osoa.sca.annotations.Scope("MODULE")
 public class JavaComponentContextBuilder implements RuntimeConfigurationBuilder<AggregateContext> {
-
+    
+    private RuntimeContext runtimeContext;
     private ProxyFactoryFactory factory;
 
+    @Init(eager=true)
+    public void init() {
+        runtimeContext.addBuilder(this);
+    }
+
+    /**
+     * @param runtimeContext The runtimeContext to set.
+     */
+    @Autowire
+    public void setRuntimeContext(RuntimeContext runtimeContext) {
+        this.runtimeContext = runtimeContext;
+    }
+    
     /**
      * Sets the factory used to construct proxies implmementing the business interface required by a reference
      */
@@ -71,7 +87,7 @@
         this.factory = factory;
     }
 
-    private MessageFactory msgFactory;
+    private MessageFactory messageFactory;
 
     /**
      * Sets the factory used to construct invocation messages
@@ -80,7 +96,7 @@
      */
     @Autowire
     public void setMessageFactory(MessageFactory msgFactory) {
-        this.msgFactory = msgFactory;
+        this.messageFactory = msgFactory;
     }
 
     private RuntimeConfigurationBuilder referenceBuilder;
@@ -196,7 +212,7 @@
                         iConfigMap.put(method, iConfig);
                     }
                     QualifiedName qName = new QualifiedName(component.getName() + "/" + service.getName());
-                    ProxyConfiguration pConfiguration = new ProxyConfiguration(qName, iConfigMap, null, msgFactory);
+                    ProxyConfiguration pConfiguration = new ProxyConfiguration(qName, iConfigMap, null, messageFactory);
                     proxyFactory.setBusinessInterface(serviceContract.getInterface());
                     proxyFactory.setProxyConfiguration(pConfiguration);
                     config.addTargetProxyFactory(service.getName(), proxyFactory);
@@ -230,7 +246,7 @@
                         QualifiedName qName = new QualifiedName(targetCompName + "/" + targetSerivceName);
                         // QualifiedName qName = new QualifiedName(reference.getAggregatePart().getName() + "/"
                         // + reference.getPort().getName());
-                        ProxyConfiguration pConfiguration = new ProxyConfiguration(qName, iConfigMap, null, msgFactory);
+                        ProxyConfiguration pConfiguration = new ProxyConfiguration(qName, iConfigMap, null, messageFactory);
                         proxyFactory.setBusinessInterface(serviceContract.getInterface());
                         proxyFactory.setProxyConfiguration(pConfiguration);
                         config.addSourceProxyFactory(reference.getReference().getName(), proxyFactory);

Modified: incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/config/Java5ComponentTypeIntrospector.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/config/Java5ComponentTypeIntrospector.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/config/Java5ComponentTypeIntrospector.java (original)
+++ incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/config/Java5ComponentTypeIntrospector.java Thu Feb 23 15:30:06 2006
@@ -94,7 +94,7 @@
             }
         }
         if (scope == null) {
-            return null;
+            return Scope.INSTANCE;
         }
 
         if ("MODULE".equalsIgnoreCase(scope.value())) {

Added: incubator/tuscany/java/sca/container.java/src/main/resources/system.fragment
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/main/resources/system.fragment?rev=380269&view=auto
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/main/resources/system.fragment (added)
+++ incubator/tuscany/java/sca/container.java/src/main/resources/system.fragment Thu Feb 23 15:30:06 2006
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+  Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ -->
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+        xmlns:system="http://org.apache.tuscany/xmlns/system/0.9"
+		name="org.apache.tuscany.container.java">
+
+    <component name="org.apache.tuscany.container.java.builder.JavaComponentContextBuilder">
+        <system:implementation.system class="org.apache.tuscany.container.java.builder.JavaComponentContextBuilder"/>
+    </component>
+
+</moduleFragment>

Added: incubator/tuscany/java/sca/container.js/src/main/resources/system.fragment.off
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.js/src/main/resources/system.fragment.off?rev=380269&view=auto
==============================================================================
--- incubator/tuscany/java/sca/container.js/src/main/resources/system.fragment.off (added)
+++ incubator/tuscany/java/sca/container.js/src/main/resources/system.fragment.off Thu Feb 23 15:30:06 2006
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+  Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ -->
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+                name="org.apache.tuscany.container.js">
+
+    <component name="org.apache.tuscany.container.js.handler.JavaScriptComponentConfigurationHandler">
+        <implementation.system class="org.apache.tuscany.container.js.handler.JavaScriptComponentConfigurationHandler"/>
+    </component>
+
+    <wire>
+        <source.uri>org.apache.tuscany.core.pipeline.ImplementationExtensionPoint/extensions</source.uri>
+        <target.uri>org.apache.tuscany.container.js.handler.JavaScriptComponentConfigurationHandler</target.uri>
+    </wire>
+
+</moduleFragment>

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/client/TuscanyRuntime.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/client/TuscanyRuntime.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/client/TuscanyRuntime.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/client/TuscanyRuntime.java Thu Feb 23 15:30:06 2006
@@ -16,6 +16,7 @@
  */
 package org.apache.tuscany.core.client;
 
+import java.lang.reflect.Constructor;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -24,7 +25,6 @@
 import org.apache.tuscany.common.resource.ResourceLoader;
 import org.apache.tuscany.common.resource.impl.ResourceLoaderImpl;
 import org.apache.tuscany.core.builder.RuntimeConfigurationBuilder;
-import org.apache.tuscany.core.builder.WireBuilder;
 import org.apache.tuscany.core.config.ConfigurationException;
 import org.apache.tuscany.core.config.ModuleComponentConfigurationLoader;
 import org.apache.tuscany.core.config.impl.ModuleComponentConfigurationLoaderImpl;
@@ -36,12 +36,14 @@
 import org.apache.tuscany.core.system.builder.SystemComponentContextBuilder;
 import org.apache.tuscany.core.system.builder.SystemEntryPointBuilder;
 import org.apache.tuscany.core.system.builder.SystemExternalServiceBuilder;
+import org.apache.tuscany.core.system.loader.SystemSCDLModelLoader;
 import org.apache.tuscany.model.assembly.AssemblyFactory;
 import org.apache.tuscany.model.assembly.AssemblyModelContext;
 import org.apache.tuscany.model.assembly.ModuleComponent;
 import org.apache.tuscany.model.assembly.impl.AssemblyFactoryImpl;
 import org.apache.tuscany.model.assembly.impl.AssemblyModelContextImpl;
-import org.apache.tuscany.model.assembly.loader.AssemblyModelLoader;
+import org.apache.tuscany.model.scdl.loader.SCDLAssemblyModelLoader;
+import org.apache.tuscany.model.scdl.loader.SCDLModelLoader;
 import org.apache.tuscany.model.scdl.loader.impl.SCDLAssemblyModelLoaderImpl;
 import org.osoa.sca.ModuleContext;
 import org.osoa.sca.SCA;
@@ -56,9 +58,11 @@
     private final Monitor monitor;
     private final Object sessionKey = new Object();
     
-    private final RuntimeContext runtime;
-    private AggregateContext ctx;
+    private final RuntimeContext runtimeContext;
+    private AggregateContext systemModuleComponentContext;
+    private AggregateContext moduleContext;
     
+    private final static String SYSTEM_MODULE_COMPONENT = "org.apache.tuscany.core.system";
 
     /**
      * Construct a runtime using a null MonitorFactory.
@@ -89,24 +93,49 @@
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         ResourceLoader resourceLoader = new ResourceLoaderImpl(classLoader);
         AssemblyFactory modelFactory=new AssemblyFactoryImpl();
-        AssemblyModelLoader modelLoader=new SCDLAssemblyModelLoaderImpl();
+        SCDLAssemblyModelLoader modelLoader=new SCDLAssemblyModelLoaderImpl();
         AssemblyModelContext modelContext = new AssemblyModelContextImpl(modelFactory, modelLoader, resourceLoader);
-
-        // Load the SCDL configuration
-        ModuleComponentConfigurationLoader loader = new ModuleComponentConfigurationLoaderImpl(modelContext);
-        ModuleComponent moduleComponent = loader.loadModuleComponent(name, uri);
+        modelLoader.getSCDLModelLoaders().add(new SystemSCDLModelLoader(modelContext));
+        try {
+            Class clazz=classLoader.loadClass("org.apache.tuscany.container.java.loader.JavaSCDLModelLoader");
+            Constructor constructor=clazz.getConstructor(new Class[]{AssemblyModelContext.class});
+            modelLoader.getSCDLModelLoaders().add((SCDLModelLoader)constructor.newInstance(new Object[]{modelContext}));
+        } catch (Exception e) {
+            System.out.println(e);
+        }
 
         List<RuntimeConfigurationBuilder> configBuilders = new ArrayList();
         configBuilders.add((new SystemComponentContextBuilder()));
         configBuilders.add(new SystemEntryPointBuilder());
         configBuilders.add(new SystemExternalServiceBuilder());
 
-        List<WireBuilder> wireBuilders = new ArrayList();
+        runtimeContext = new RuntimeContextImpl(monitorFactory,configBuilders,null);
+        runtimeContext.start();
+        monitor.started(runtimeContext);
+
+        // Get the system context
+        AggregateContext systemContext = runtimeContext.getSystemContext();
         
-        runtime = new RuntimeContextImpl(monitorFactory,configBuilders,wireBuilders);
-        //TODO Come up with a configuration mechanism for registering Java builders
-        //TODO register an aggregate context under the root
-        //runtime.getRootContext().registerModelObject()
+        // Load the system module component
+        ModuleComponentConfigurationLoader loader = new ModuleComponentConfigurationLoaderImpl(modelContext);
+        ModuleComponent systemModuleComponent = loader.loadSystemModuleComponent(SYSTEM_MODULE_COMPONENT, SYSTEM_MODULE_COMPONENT);
+        
+        // Register it with the system context
+        systemContext.registerModelObject(systemModuleComponent);
+
+        // Get the aggregate context representing the system module component
+        systemModuleComponentContext = (AggregateContext) systemContext.getContext(SYSTEM_MODULE_COMPONENT);
+        systemModuleComponentContext.registerModelObject(systemModuleComponent.getComponentImplementation());
+        systemModuleComponentContext.fireEvent(EventContext.MODULE_START, null);
+        
+        // Load the SCDL configuration of the application module
+        ModuleComponent moduleComponent = loader.loadModuleComponent(name, uri);
+        
+        // Register it under the root application context
+        runtimeContext.getRootContext().registerModelObject(moduleComponent);
+        moduleContext=(AggregateContext)runtimeContext.getContext(moduleComponent.getName());
+        moduleContext.registerModelObject(moduleComponent.getComponentImplementation());
+
     }
 
     /**
@@ -114,19 +143,16 @@
      */
     @Override
     public void start() {
-        setModuleContext((ModuleContext)ctx);
+        setModuleContext((ModuleContext)moduleContext);
         try {
-            runtime.start();
-            monitor.started(runtime);
-            ctx = null;
-            ctx.start();
-            ctx.fireEvent(EventContext.MODULE_START, null);
-            ctx.fireEvent(EventContext.REQUEST_START, null);
-            ctx.fireEvent(EventContext.SESSION_NOTIFY, sessionKey);
-            monitor.started(ctx);
+            //moduleContext.start();
+            moduleContext.fireEvent(EventContext.MODULE_START, null);
+            moduleContext.fireEvent(EventContext.REQUEST_START, null);
+            moduleContext.fireEvent(EventContext.SESSION_NOTIFY, sessionKey);
+            monitor.started(moduleContext);
         } catch (CoreRuntimeException e) {
             setModuleContext(null);
-            monitor.startFailed(ctx, e);
+            monitor.startFailed(moduleContext, e);
             //FIXME throw a better exception
             throw new ServiceRuntimeException(e);
         }
@@ -138,13 +164,13 @@
     @Override
     public void stop() {
         setModuleContext(null);
-        ctx.fireEvent(EventContext.REQUEST_END, null);
-        ctx.fireEvent(EventContext.SESSION_END, sessionKey);
-        ctx.fireEvent(EventContext.MODULE_STOP, null);
-        ctx.stop();
-        monitor.stopped(ctx);
-        runtime.stop();
-        monitor.stopped(runtime);
+        moduleContext.fireEvent(EventContext.REQUEST_END, null);
+        moduleContext.fireEvent(EventContext.SESSION_END, sessionKey);
+        moduleContext.fireEvent(EventContext.MODULE_STOP, null);
+        moduleContext.stop();
+        monitor.stopped(moduleContext);
+        runtimeContext.stop();
+        monitor.stopped(runtimeContext);
     }
 
     /**

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/ModuleComponentConfigurationLoader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/ModuleComponentConfigurationLoader.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/ModuleComponentConfigurationLoader.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/ModuleComponentConfigurationLoader.java Thu Feb 23 15:30:06 2006
@@ -39,6 +39,16 @@
     ModuleComponent loadModuleComponent(String name, String uri) throws ConfigurationLoadException;
     
     /**
+     * Load a System SCDL module component.
+     *
+     * @param name      the name of the module component
+     * @param uri
+     * @return a new module component definition
+     * @throws ConfigurationException if there was a problem loading the module component.
+     */
+    ModuleComponent loadSystemModuleComponent(String name, String uri) throws ConfigurationLoadException;
+    
+    /**
      * Load a SCDL module component.
      *
      * @param name      the name of the module component

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/ModuleComponentConfigurationLoaderImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/ModuleComponentConfigurationLoaderImpl.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/ModuleComponentConfigurationLoaderImpl.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/config/impl/ModuleComponentConfigurationLoaderImpl.java Thu Feb 23 15:30:06 2006
@@ -40,6 +40,9 @@
     private static final String SCA_MODULE_FILE_NAME = "sca.module";
     //FIXME can fragments have a variable prefix name?
     private static final String SCA_FRAGMENT_FILE_NAME = "sca.fragment";
+    private static final String SYSTEM_MODULE_FILE_NAME = "system.module";
+    //FIXME can fragments have a variable prefix name?
+    private static final String SYSTEM_FRAGMENT_FILE_NAME = "system.fragment";
     
     private AssemblyModelContext modelContext;
     private ResourceLoader resourceLoader;
@@ -59,26 +62,40 @@
     /**
      * @see org.apache.tuscany.model.assembly.loader.AssemblyModelLoader#loadModuleComponent(java.lang.String, java.lang.String)
      */
+    public ModuleComponent loadSystemModuleComponent(String name, String uri) throws ConfigurationLoadException {
+        return loadModuleComponent(SYSTEM_MODULE_FILE_NAME, SYSTEM_FRAGMENT_FILE_NAME, name, uri);
+    }
+
+    /**
+     * @see org.apache.tuscany.model.assembly.loader.AssemblyModelLoader#loadModuleComponent(java.lang.String, java.lang.String)
+     */
     public ModuleComponent loadModuleComponent(String name, String uri) throws ConfigurationLoadException {
+        return loadModuleComponent(SCA_MODULE_FILE_NAME, SCA_FRAGMENT_FILE_NAME, name, uri);
+    }
+
+    /**
+     * Load a module component.
+     */
+    private ModuleComponent loadModuleComponent(String moduleFileName, String fragmentFileName, String name, String uri) throws ConfigurationLoadException {
 
         // Load the sca.module file
         URL moduleUrl;
         try {
-            moduleUrl = resourceLoader.getResource(SCA_MODULE_FILE_NAME);
+            moduleUrl = resourceLoader.getResource(moduleFileName);
         } catch (IOException e) {
-            throw new ConfigurationLoadException(SCA_MODULE_FILE_NAME, e);
+            throw new ConfigurationLoadException(moduleFileName, e);
         }
         if (moduleUrl == null) {
-            throw new ConfigurationLoadException(SCA_MODULE_FILE_NAME);
+            throw new ConfigurationLoadException(moduleFileName);
         }
         String moduleUri=moduleUrl.toString();
 
         // Load the sca.fragment files
         Iterator<URL> i;
         try {
-            i = resourceLoader.getAllResources(SCA_FRAGMENT_FILE_NAME);
+            i = resourceLoader.getAllResources(fragmentFileName);
         } catch (IOException e) {
-            throw new ConfigurationLoadException(SCA_FRAGMENT_FILE_NAME, e);
+            throw new ConfigurationLoadException(fragmentFileName, e);
         }
         List<String> moduleFragmentUris=new ArrayList<String>();
         for (; i.hasNext(); ) {
@@ -93,7 +110,7 @@
      * @see org.apache.tuscany.core.config.ModuleComponentConfigurationLoader#loadModuleComponent(java.lang.String, java.lang.String, java.lang.String)
      */
     public ModuleComponent loadModuleComponent(String name, String uri, String url) throws ConfigurationLoadException {
-        return loadModuleComponent(name, uri, url, null);
+        return loadModuleComponent( name, uri, url, (Collection)null);
     }
     
     /**

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/scope/StatelessScopeContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/scope/StatelessScopeContext.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/scope/StatelessScopeContext.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/scope/StatelessScopeContext.java Thu Feb 23 15:30:06 2006
@@ -60,6 +60,7 @@
         }
         super.start();
         lifecycleState = RUNNING;
+        prepare();
     }
 
     public synchronized void stop() {
@@ -92,22 +93,18 @@
     }
 
     public InstanceContext getContext(String ctxName) {
-        prepare();
         return contextMap.get(ctxName);
     }
 
     public InstanceContext getContextByKey(String ctxName, Object key) {
-        prepare();
         return getContext(ctxName);
     }
 
     public void removeContext(String ctxName) {
-        prepare();
         removeContextByKey(ctxName, null);
     }
 
     public void removeContextByKey(String ctxName, Object key) {
-        prepare();
         contextMap.remove(ctxName);
     }
 

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/runtime/RuntimeContextImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/runtime/RuntimeContextImpl.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/runtime/RuntimeContextImpl.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/runtime/RuntimeContextImpl.java Thu Feb 23 15:30:06 2006
@@ -37,7 +37,11 @@
 import org.apache.tuscany.core.context.TargetException;
 import org.apache.tuscany.core.context.impl.AggregateContextImpl;
 import org.apache.tuscany.core.context.impl.EventContextImpl;
+import org.apache.tuscany.core.invocation.jdk.JDKProxyFactoryFactory;
 import org.apache.tuscany.core.invocation.spi.ProxyFactory;
+import org.apache.tuscany.core.invocation.spi.ProxyFactoryFactory;
+import org.apache.tuscany.core.message.MessageFactory;
+import org.apache.tuscany.core.message.impl.MessageFactoryImpl;
 import org.apache.tuscany.core.system.context.SystemAggregateContextImpl;
 import org.apache.tuscany.core.system.context.SystemScopeStrategy;
 import org.apache.tuscany.model.assembly.Extensible;
@@ -226,7 +230,7 @@
     // ----------------------------------
     // AutowireContext methods
     // ----------------------------------
-
+    
     public <T> T resolveInstance(Class<T> instanceInterface) throws AutowireResolutionException {
         if (MonitorFactory.class.equals(instanceInterface)) {
             return instanceInterface.cast(monitorFactory);

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemImplementationImpl.java Thu Feb 23 15:30:06 2006
@@ -19,8 +19,12 @@
 import java.net.URL;
 
 import org.apache.tuscany.core.system.assembly.SystemImplementation;
+import org.apache.tuscany.model.assembly.AssemblyFactory;
 import org.apache.tuscany.model.assembly.AssemblyModelContext;
 import org.apache.tuscany.model.assembly.ComponentType;
+import org.apache.tuscany.model.assembly.Scope;
+import org.apache.tuscany.model.assembly.Service;
+import org.apache.tuscany.model.assembly.ServiceContract;
 import org.apache.tuscany.model.assembly.impl.ComponentImplementationImpl;
 
 /**
@@ -67,8 +71,19 @@
         URL componentTypeFile = implClass.getResource(baseName + ".componentType");
         if (componentTypeFile != null) {
             return modelContext.getAssemblyLoader().getComponentType(componentTypeFile.toString());
-        } else
-            return null;
+        } else {
+            //FIXME Return a made-up component type for now
+            // We need to introspect the component implementation class, support a subset of what
+            // we support for java components.
+            AssemblyFactory factory=modelContext.getAssemblyFactory();
+            ComponentType componentType=factory.createComponentType();
+            Service service=factory.createService();
+            ServiceContract serviceContract=factory.createJavaServiceContract();
+            serviceContract.setScope(Scope.MODULE);
+            service.setServiceContract(serviceContract);
+            componentType.getServices().add(service);
+            return componentType;
+        }
     }
 
     /**

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentContextBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentContextBuilder.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentContextBuilder.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemComponentContextBuilder.java Thu Feb 23 15:30:06 2006
@@ -31,6 +31,7 @@
 import org.apache.tuscany.core.context.AutowireContext;
 import org.apache.tuscany.core.context.ConfigurationContext;
 import org.apache.tuscany.core.context.SystemAggregateContext;
+import org.apache.tuscany.core.context.impl.AggregateContextImpl;
 import org.apache.tuscany.core.injection.EventInvoker;
 import org.apache.tuscany.core.injection.FieldInjector;
 import org.apache.tuscany.core.injection.Injector;
@@ -45,11 +46,14 @@
 import org.apache.tuscany.core.system.annotation.ParentContext;
 import org.apache.tuscany.core.system.assembly.SystemImplementation;
 import org.apache.tuscany.core.system.config.SystemComponentRuntimeConfiguration;
+import org.apache.tuscany.core.system.context.SystemAggregateContextImpl;
 import org.apache.tuscany.model.assembly.AssemblyModelObject;
 import org.apache.tuscany.model.assembly.Component;
+import org.apache.tuscany.model.assembly.ComponentImplementation;
 import org.apache.tuscany.model.assembly.ConfiguredProperty;
 import org.apache.tuscany.model.assembly.ConfiguredReference;
 import org.apache.tuscany.model.assembly.ConfiguredService;
+import org.apache.tuscany.model.assembly.Module;
 import org.apache.tuscany.model.assembly.Scope;
 import org.osoa.sca.annotations.ComponentName;
 import org.osoa.sca.annotations.Context;
@@ -82,179 +86,206 @@
             return;
         }
         Component component = (Component) modelObject;
-        if (component.getComponentImplementation() instanceof SystemImplementation
-                && component.getComponentImplementation().getRuntimeConfiguration() == null) {
-            SystemImplementation javaImpl = (SystemImplementation) component.getComponentImplementation();
-            // FIXME scope
-            Scope scope = component.getComponentImplementation().getComponentType().getServices().get(0).getServiceContract()
-                    .getScope();
-            Class implClass = null;
-            Set<Field> fields;
-            Set<Method> methods;
-            try {
-                implClass = javaImpl.getImplementationClass();
-                fields = JavaIntrospectionHelper.getAllFields(implClass);
-                methods = JavaIntrospectionHelper.getAllUniqueMethods(implClass);
-                String name = component.getName();
-                Constructor ctr = implClass.getConstructor((Class[]) null);
-
-                List<Injector> injectors = new ArrayList();
-
-                // handle properties
-                List<ConfiguredProperty> configuredProperties = component.getConfiguredProperties();
-                if (configuredProperties != null) {
-                    for (ConfiguredProperty property : configuredProperties) {
-                        Injector injector = createPropertyInjector(property, fields, methods);
-                        injectors.add(injector);
-                    }
-                }
-
-                // handle references
-                List<ConfiguredReference> configuredReferences = component.getConfiguredReferences();
-                if (configuredReferences != null) {
-                    for (ConfiguredReference reference : configuredReferences) {
-                        Injector injector = createReferenceInjector(parentContext.getName(), component.getName(), parentContext,
-                                reference, fields, methods);
-                        injectors.add(injector);
-                    }
-                }
-
-                // create factory for the component implementation type
-                EventInvoker initInvoker = null;
-                boolean eagerInit = false;
-                EventInvoker destroyInvoker = null;
-                for (Field field : fields) {
-                    ComponentName compName = field.getAnnotation(ComponentName.class);
-                    if (compName != null) {
-                        Injector injector = new FieldInjector(field, new SingletonObjectFactory(name));
-                        injectors.add(injector);
-                    }
-                    Context context = field.getAnnotation(Context.class);
-                    if (context != null) {
-                        Injector injector = new FieldInjector(field, new SingletonObjectFactory(parentContext));
-                        injectors.add(injector);
-                    }
-                    ParentContext parentField = field.getAnnotation(ParentContext.class);
-                    if (parentField != null) {
-                        if (!(parentContext instanceof AggregateContext)) {
-                            BuilderConfigException e = new BuilderConfigException("Component must be a child of");
-                            e.setIdentifier(AggregateContext.class.getName());
-                            throw e;
-                        }
-                        Injector injector = new FieldInjector(field, new SingletonObjectFactory((parentContext)));
-                        injectors.add(injector);
-                    }
-                    Autowire autowire = field.getAnnotation(Autowire.class);
-                    if (autowire != null) {
-                        if (!(parentContext instanceof AutowireContext)) {
-                            BuilderConfigException e = new BuilderConfigException("Parent context must implement");
-                            e.setIdentifier(AutowireContext.class.getName());
-                            throw e;
-                        }
-                        AutowireContext ctx = (AutowireContext) parentContext;
-                        // for system aggregate context types, only allow autowire of certain types, otherwise we have a
-                        // chicken-and-egg problem
-                        if (SystemAggregateContext.class.isAssignableFrom(implClass)
-                                && !(field.getType().equals(ConfigurationContext.class)
-                                        || field.getType().equals(MonitorFactory.class)
-                                        || field.getType().equals(RuntimeContext.class) || field.getType().equals(
-                                        AutowireContext.class))) {
-                            BuilderConfigException e = new BuilderConfigException("Illegal autowire type for system context");
-                            e.setIdentifier(field.getType().getName());
-                            throw e;
-                        }
-
-                        Object o = ctx.resolveInstance(field.getType());
-                        if (autowire.required() && o == null) {
-                            BuilderConfigException e = new BuilderConfigException("No autowire found for field");
-                            e.setIdentifier(field.getName());
-                            throw e;
-                        }
-                        Injector injector = new FieldInjector(field, new SingletonObjectFactory(o));
-                        injectors.add(injector);
-                    }
-                }
-                for (Method method : methods) {
-                    Init init = method.getAnnotation(Init.class);
-                    if (init != null && initInvoker == null) {
-                        initInvoker = new MethodEventInvoker(method);
-                        eagerInit = init.eager();
-                        continue;
-                    }
-                    Destroy destroy = method.getAnnotation(Destroy.class);
-                    if (destroy != null && destroyInvoker == null) {
-                        destroyInvoker = new MethodEventInvoker(method);
-                        continue;
-                    }
-                    ComponentName compName = method.getAnnotation(ComponentName.class);
-                    if (compName != null) {
-                        Injector injector = new MethodInjector(method, new SingletonObjectFactory(name));
-                        injectors.add(injector);
-                    }
-                    Context context = method.getAnnotation(Context.class);
-                    if (context != null) {
-                        Injector injector = new MethodInjector(method, new SingletonObjectFactory(parentContext));
-                        injectors.add(injector);
-                    }
-                    ParentContext parentMethod = method.getAnnotation(ParentContext.class);
-                    if (parentMethod != null) {
-                        if (!(parentContext instanceof AggregateContext)) {
-                            BuilderConfigException e = new BuilderConfigException("Component must be a child of ");
-                            e.setIdentifier(AggregateContext.class.getName());
-                            throw e;
-                        }
-                        Injector injector = new MethodInjector(method, new SingletonObjectFactory((parentContext)));
-                        injectors.add(injector);
-                    }
-                    Autowire autowire = method.getAnnotation(Autowire.class);
-                    if (autowire != null) {
-                        if (!(parentContext instanceof AutowireContext)) {
-                            BuilderConfigException e = new BuilderConfigException("Parent context must implement)");
-                            e.setIdentifier(AutowireContext.class.getName());
-                            throw e;
-                        }
-                        if (method.getParameterTypes() == null || method.getParameterTypes().length != 1) {
-                            BuilderConfigException e = new BuilderConfigException(
-                                    "Autowire setter methods must take one parameter");
-                            e.setIdentifier(method.getName());
-                            throw e;
-                        }
-                        AutowireContext ctx = (AutowireContext) parentContext;
-                        Class paramType = method.getParameterTypes()[0];
-                        // for system aggregate context types, only allow autowire of certain types, otherwise we have a
-                        // chicken-and-egg problem
-                        if (SystemAggregateContext.class.isAssignableFrom(implClass)
-                                && !(paramType.equals(ConfigurationContext.class) || paramType.equals(MonitorFactory.class)
-                                        || paramType.equals(RuntimeContext.class) || paramType.equals(AutowireContext.class))) {
-                            BuilderConfigException e = new BuilderConfigException("Illegal autowire type for system context");
-                            e.setIdentifier(paramType.getName());
-                            throw e;
-                        }
-                        Object o = ctx.resolveInstance(paramType);
-                        if (autowire.required() && o == null) {
-                            BuilderConfigException e = new BuilderConfigException("No autowire found for method ");
-                            e.setIdentifier(method.getName());
-                            throw e;
-                        }
-
-                        Injector injector = new MethodInjector(method, new SingletonObjectFactory(o));
-                        injectors.add(injector);
-                    }
-                }
-                // decorate the logical model
-                SystemComponentRuntimeConfiguration config = new SystemComponentRuntimeConfiguration(name,
-                        JavaIntrospectionHelper.getDefaultConstructor(implClass), injectors, eagerInit, initInvoker,
-                        destroyInvoker, scope);
-                component.getComponentImplementation().setRuntimeConfiguration(config);
-            } catch (BuilderConfigException e) {
-                e.addContextName(component.getName());
-                e.addContextName(parentContext.getName());
-                throw e;
-            } catch (NoSuchMethodException e) {
-                BuilderConfigException ce = new BuilderConfigException("Class does not have a no-arg constructor", e);
-                ce.setIdentifier(implClass.getName());
-                throw ce;
+        
+        Class implClass = null;
+        Scope scope = null;
+        
+        // Get the component implementation
+        ComponentImplementation componentImplementation = component.getComponentImplementation();
+        if (componentImplementation instanceof SystemImplementation
+                && componentImplementation.getRuntimeConfiguration() == null) {
+            
+            // The component is a system component, implemented by a Java class
+            SystemImplementation javaImpl = (SystemImplementation) componentImplementation;
+            scope = componentImplementation.getComponentType().getServices().get(0).getServiceContract().getScope();
+            implClass = javaImpl.getImplementationClass();
+            
+        } else if (componentImplementation instanceof Module) { 
+            if (((Module)componentImplementation).getName().startsWith("org.apache.tuscany.core.system")) {
+                
+                // The component is a system module component, fix the implementation class to our implementation
+                // of system module component context
+               implClass=SystemAggregateContextImpl.class;
+               scope = Scope.AGGREGATE;
+               
+            } else {
+                
+                // The component is an app module component, fix the implementation class to our implementation
+                // of app module component context
+               implClass=AggregateContextImpl.class;
+               scope = Scope.AGGREGATE;
+               
             }
+            
+        } else {
+            return;
+        }
+
+        // FIXME scope
+        Set<Field> fields;
+        Set<Method> methods;
+        try {
+            fields = JavaIntrospectionHelper.getAllFields(implClass);
+            methods = JavaIntrospectionHelper.getAllUniqueMethods(implClass);
+            String name = component.getName();
+            Constructor ctr = implClass.getConstructor((Class[]) null);
+
+            List<Injector> injectors = new ArrayList();
+
+            // handle properties
+            List<ConfiguredProperty> configuredProperties = component.getConfiguredProperties();
+            if (configuredProperties != null) {
+                for (ConfiguredProperty property : configuredProperties) {
+                    Injector injector = createPropertyInjector(property, fields, methods);
+                    injectors.add(injector);
+                }
+            }
+
+            // handle references
+            List<ConfiguredReference> configuredReferences = component.getConfiguredReferences();
+            if (configuredReferences != null) {
+                for (ConfiguredReference reference : configuredReferences) {
+                    Injector injector = createReferenceInjector(parentContext.getName(), component.getName(), parentContext,
+                            reference, fields, methods);
+                    injectors.add(injector);
+                }
+            }
+
+            // create factory for the component implementation type
+            EventInvoker initInvoker = null;
+            boolean eagerInit = false;
+            EventInvoker destroyInvoker = null;
+            for (Field field : fields) {
+                ComponentName compName = field.getAnnotation(ComponentName.class);
+                if (compName != null) {
+                    Injector injector = new FieldInjector(field, new SingletonObjectFactory(name));
+                    injectors.add(injector);
+                }
+                Context context = field.getAnnotation(Context.class);
+                if (context != null) {
+                    Injector injector = new FieldInjector(field, new SingletonObjectFactory(parentContext));
+                    injectors.add(injector);
+                }
+                ParentContext parentField = field.getAnnotation(ParentContext.class);
+                if (parentField != null) {
+                    if (!(parentContext instanceof AggregateContext)) {
+                        BuilderConfigException e = new BuilderConfigException("Component must be a child of");
+                        e.setIdentifier(AggregateContext.class.getName());
+                        throw e;
+                    }
+                    Injector injector = new FieldInjector(field, new SingletonObjectFactory((parentContext)));
+                    injectors.add(injector);
+                }
+                Autowire autowire = field.getAnnotation(Autowire.class);
+                if (autowire != null) {
+                    if (!(parentContext instanceof AutowireContext)) {
+                        BuilderConfigException e = new BuilderConfigException("Parent context must implement");
+                        e.setIdentifier(AutowireContext.class.getName());
+                        throw e;
+                    }
+                    AutowireContext ctx = (AutowireContext) parentContext;
+                    // for system aggregate context types, only allow autowire of certain types, otherwise we have a
+                    // chicken-and-egg problem
+                    if (SystemAggregateContext.class.isAssignableFrom(implClass)
+                            && !(field.getType().equals(ConfigurationContext.class)
+                                    || field.getType().equals(MonitorFactory.class)
+                                    || field.getType().equals(RuntimeContext.class) || field.getType().equals(
+                                    AutowireContext.class))) {
+                        BuilderConfigException e = new BuilderConfigException("Illegal autowire type for system context");
+                        e.setIdentifier(field.getType().getName());
+                        throw e;
+                    }
+
+                    Object o = ctx.resolveInstance(field.getType());
+                    if (autowire.required() && o == null) {
+                        BuilderConfigException e = new BuilderConfigException("No autowire found for field");
+                        e.setIdentifier(field.getName());
+                        throw e;
+                    }
+                    Injector injector = new FieldInjector(field, new SingletonObjectFactory(o));
+                    injectors.add(injector);
+                }
+            }
+            for (Method method : methods) {
+                Init init = method.getAnnotation(Init.class);
+                if (init != null && initInvoker == null) {
+                    initInvoker = new MethodEventInvoker(method);
+                    eagerInit = init.eager();
+                    continue;
+                }
+                Destroy destroy = method.getAnnotation(Destroy.class);
+                if (destroy != null && destroyInvoker == null) {
+                    destroyInvoker = new MethodEventInvoker(method);
+                    continue;
+                }
+                ComponentName compName = method.getAnnotation(ComponentName.class);
+                if (compName != null) {
+                    Injector injector = new MethodInjector(method, new SingletonObjectFactory(name));
+                    injectors.add(injector);
+                }
+                Context context = method.getAnnotation(Context.class);
+                if (context != null) {
+                    Injector injector = new MethodInjector(method, new SingletonObjectFactory(parentContext));
+                    injectors.add(injector);
+                }
+                ParentContext parentMethod = method.getAnnotation(ParentContext.class);
+                if (parentMethod != null) {
+                    if (!(parentContext instanceof AggregateContext)) {
+                        BuilderConfigException e = new BuilderConfigException("Component must be a child of ");
+                        e.setIdentifier(AggregateContext.class.getName());
+                        throw e;
+                    }
+                    Injector injector = new MethodInjector(method, new SingletonObjectFactory((parentContext)));
+                    injectors.add(injector);
+                }
+                Autowire autowire = method.getAnnotation(Autowire.class);
+                if (autowire != null) {
+                    if (!(parentContext instanceof AutowireContext)) {
+                        BuilderConfigException e = new BuilderConfigException("Parent context must implement)");
+                        e.setIdentifier(AutowireContext.class.getName());
+                        throw e;
+                    }
+                    if (method.getParameterTypes() == null || method.getParameterTypes().length != 1) {
+                        BuilderConfigException e = new BuilderConfigException(
+                                "Autowire setter methods must take one parameter");
+                        e.setIdentifier(method.getName());
+                        throw e;
+                    }
+                    AutowireContext ctx = (AutowireContext) parentContext;
+                    Class paramType = method.getParameterTypes()[0];
+                    // for system aggregate context types, only allow autowire of certain types, otherwise we have a
+                    // chicken-and-egg problem
+                    if (SystemAggregateContext.class.isAssignableFrom(implClass)
+                            && !(paramType.equals(ConfigurationContext.class) || paramType.equals(MonitorFactory.class)
+                                    || paramType.equals(RuntimeContext.class) || paramType.equals(AutowireContext.class))) {
+                        BuilderConfigException e = new BuilderConfigException("Illegal autowire type for system context");
+                        e.setIdentifier(paramType.getName());
+                        throw e;
+                    }
+                    Object o = ctx.resolveInstance(paramType);
+                    if (autowire.required() && o == null) {
+                        BuilderConfigException e = new BuilderConfigException("No autowire found for method ");
+                        e.setIdentifier(method.getName());
+                        throw e;
+                    }
+
+                    Injector injector = new MethodInjector(method, new SingletonObjectFactory(o));
+                    injectors.add(injector);
+                }
+            }
+            // decorate the logical model
+            SystemComponentRuntimeConfiguration config = new SystemComponentRuntimeConfiguration(name,
+                    JavaIntrospectionHelper.getDefaultConstructor(implClass), injectors, eagerInit, initInvoker,
+                    destroyInvoker, scope);
+            componentImplementation.setRuntimeConfiguration(config);
+        } catch (BuilderConfigException e) {
+            e.addContextName(component.getName());
+            e.addContextName(parentContext.getName());
+            throw e;
+        } catch (NoSuchMethodException e) {
+            BuilderConfigException ce = new BuilderConfigException("Class does not have a no-arg constructor", e);
+            ce.setIdentifier(implClass.getName());
+            throw ce;
         }
     }
 

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java Thu Feb 23 15:30:06 2006
@@ -56,7 +56,11 @@
 import org.apache.tuscany.core.context.SystemAggregateContext;
 import org.apache.tuscany.core.context.TargetException;
 import org.apache.tuscany.core.context.impl.EventContextImpl;
+import org.apache.tuscany.core.invocation.jdk.JDKProxyFactoryFactory;
 import org.apache.tuscany.core.invocation.spi.ProxyFactory;
+import org.apache.tuscany.core.invocation.spi.ProxyFactoryFactory;
+import org.apache.tuscany.core.message.MessageFactory;
+import org.apache.tuscany.core.message.impl.MessageFactoryImpl;
 import org.apache.tuscany.core.runtime.RuntimeContext;
 import org.apache.tuscany.core.system.annotation.Autowire;
 import org.apache.tuscany.core.system.annotation.ParentContext;
@@ -524,6 +528,10 @@
     // ----------------------------------
     // AutowireContext methods
     // ----------------------------------
+    
+    //FIXME These should be removed and configured
+    private static final MessageFactory messageFactory=new MessageFactoryImpl();
+    private static final ProxyFactoryFactory proxyFactoryFactory=new JDKProxyFactoryFactory(); 
 
     public <T> T resolveInstance(Class<T> instanceInterface) throws AutowireResolutionException {
         if (RuntimeContext.class.equals(instanceInterface)) {
@@ -534,7 +542,12 @@
             return instanceInterface.cast(this);
         } else if (AggregateContext.class.equals(instanceInterface)) {
             return instanceInterface.cast(this);
+        } else if (MessageFactory.class.equals(instanceInterface)) {
+            return instanceInterface.cast(messageFactory);
+        } else if (ProxyFactoryFactory.class.equals(instanceInterface)) {
+            return instanceInterface.cast(proxyFactoryFactory);
         }
+
         NameToScope mapping = autowireIndex.get(instanceInterface);
         if (mapping != null) {
             try {

Added: incubator/tuscany/java/sca/core/src/main/resources/system.module
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/resources/system.module?rev=380269&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/resources/system.module (added)
+++ incubator/tuscany/java/sca/core/src/main/resources/system.module Thu Feb 23 15:30:06 2006
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+  Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ -->
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+               name="org.apache.tuscany.core.system">
+
+</module>

Modified: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ModuleImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ModuleImpl.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ModuleImpl.java (original)
+++ incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/assembly/impl/ModuleImpl.java Thu Feb 23 15:30:06 2006
@@ -97,6 +97,8 @@
             getComponents().addAll(moduleFragment.getComponents());
             getEntryPoints().addAll(moduleFragment.getEntryPoints());
             getExternalServices().addAll(moduleFragment.getExternalServices());
+            
+            moduleFragment.initialize(modelContext);
         }
         
         // Initialize the aggregate

Modified: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java (original)
+++ incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLContentHandlerImpl.java Thu Feb 23 15:30:06 2006
@@ -27,6 +27,7 @@
 import org.apache.tuscany.model.assembly.ConfiguredReference;
 import org.apache.tuscany.model.assembly.ConfiguredService;
 import org.apache.tuscany.model.assembly.OverrideOption;
+import org.apache.tuscany.model.assembly.Scope;
 import org.apache.tuscany.model.assembly.ServiceContract;
 import org.apache.tuscany.model.assembly.SimpleComponent;
 import org.apache.tuscany.model.scdl.Binding;
@@ -232,6 +233,7 @@
         final JavaServiceContract serviceContract=factory.createJavaServiceContract();
         serviceContract.setInterface(null);
         serviceContract.setCallbackInterface(null);
+        serviceContract.setScope(Scope.INSTANCE);
         
         linkServiceContract(object, serviceContract);
         
@@ -245,6 +247,7 @@
         final WSDLServiceContract serviceContract=factory.createWSDLServiceContract();
         serviceContract.setInterface(null);
         serviceContract.setCallbackInterface(null);
+        serviceContract.setScope(Scope.INSTANCE);
         
         linkServiceContract(object, serviceContract);
 

Modified: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java (original)
+++ incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/scdl/loader/impl/SCDLXMLReader.java Thu Feb 23 15:30:06 2006
@@ -102,9 +102,9 @@
             try {
                 XMLDocument document=XMLHelper.INSTANCE.load(new URL(uri).openStream());
                 return document.getRootObject();
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
+           } catch (IOException e) {
+               throw new RuntimeException(e);
+           }
         }
         return object;
     }

Modified: incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/util/ModelTransformerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/util/ModelTransformerImpl.java?rev=380269&r1=380268&r2=380269&view=diff
==============================================================================
--- incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/util/ModelTransformerImpl.java (original)
+++ incubator/tuscany/java/sca/model/src/main/java/org/apache/tuscany/model/util/ModelTransformerImpl.java Thu Feb 23 15:30:06 2006
@@ -77,6 +77,8 @@
 			// Pass 1: compile, visit the source model and create target model objects
 			for (; iterator.hasNext(); ) {
 				Object source=iterator.next();
+                if (source==null)
+                    System.out.println("Ooops");
 				Object target=handler.doSwitch(source);
 
 				// Record source to target associations