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 2006/02/08 22:23:22 UTC

svn commit: r376070 [1/2] - in /incubator/tuscany/java/sca: container.java/src/main/java/org/apache/tuscany/container/java/assembly/pojo/ container.java/src/main/java/org/apache/tuscany/container/java/builder/ container.java/src/main/java/org/apache/tu...

Author: jmarino
Date: Wed Feb  8 13:23:16 2006
New Revision: 376070

URL: http://svn.apache.org/viewcvs?rev=376070&view=rev
Log:
early work on revised proxy creation for new aggregate context restructure

Added:
    incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/assembly/pojo/PojoJavaOperationType.java
    incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder2.java
    incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockConfigContext.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ProxyObjectFactory.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ReferenceBuilder.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKProxyFactoryFactory.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/spi/ProxyFactoryFactory.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/message/impl/PojoMessageFactory.java
Modified:
    incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/config/JavaComponentRuntimeConfiguration.java
    incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/handler/AbstractJavaComponentInvoker.java
    incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/jdk/JDKInvocationHandlerTestCase.java
    incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockHandler.java
    incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockScopeContext.java
    incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockSyncInterceptor.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/RuntimeConfiguration.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/PortRuntimeConfigurationBuilderImpl.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/impl/AbstractAggregateContext.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/InvocationConfiguration.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/ProxyConfiguration.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/TargetInvoker.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/impl/RequestResponseInterceptor.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKInvocationHandler.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKProxyFactory.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/NullProxyFactory.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/spi/ProxyFactory.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/ProxyFactoryBuilder.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemComponentRuntimeConfiguration.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemEntryPointRuntimeConfiguration.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemExternalServiceRuntimeConfiguration.java

Added: incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/assembly/pojo/PojoJavaOperationType.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/assembly/pojo/PojoJavaOperationType.java?rev=376070&view=auto
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/assembly/pojo/PojoJavaOperationType.java (added)
+++ incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/assembly/pojo/PojoJavaOperationType.java Wed Feb  8 13:23:16 2006
@@ -0,0 +1,41 @@
+/**
+ * 
+ * Copyright 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.
+ */
+package org.apache.tuscany.container.java.assembly.pojo;
+
+import java.lang.reflect.Method;
+
+import org.apache.tuscany.model.assembly.pojo.PojoOperationType;
+import org.apache.tuscany.model.types.java.JavaOperationType;
+
+/**
+ * 
+ * 
+ * @version $Rev$ $Date$
+ */
+public class PojoJavaOperationType extends PojoOperationType implements JavaOperationType {
+
+    public PojoJavaOperationType() {
+    }
+
+    private Method m;
+
+    public Method getJavaMethod() {
+        return m;
+    }
+
+    public void setJavaMethod(Method m) {
+        this.m = m;
+    }
+
+}

Added: incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder2.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder2.java?rev=376070&view=auto
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder2.java (added)
+++ incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/builder/JavaComponentContextBuilder2.java Wed Feb  8 13:23:16 2006
@@ -0,0 +1,331 @@
+package org.apache.tuscany.container.java.builder;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.tuscany.container.java.assembly.JavaImplementation;
+import org.apache.tuscany.container.java.config.JavaComponentRuntimeConfiguration;
+import org.apache.tuscany.core.builder.BuilderConfigException;
+import org.apache.tuscany.core.builder.BuilderException;
+import org.apache.tuscany.core.builder.NoAccessorException;
+import org.apache.tuscany.core.builder.ProxyObjectFactory;
+import org.apache.tuscany.core.builder.RuntimeConfigurationBuilder;
+import org.apache.tuscany.core.config.JavaIntrospectionHelper;
+import org.apache.tuscany.core.context.AggregateContext;
+import org.apache.tuscany.core.context.QualifiedName;
+import org.apache.tuscany.core.injection.EventInvoker;
+import org.apache.tuscany.core.injection.FactoryInitException;
+import org.apache.tuscany.core.injection.FieldInjector;
+import org.apache.tuscany.core.injection.Injector;
+import org.apache.tuscany.core.injection.MethodEventInvoker;
+import org.apache.tuscany.core.injection.MethodInjector;
+import org.apache.tuscany.core.injection.SDOObjectFactory;
+import org.apache.tuscany.core.injection.SingletonObjectFactory;
+import org.apache.tuscany.core.invocation.InvocationConfiguration;
+import org.apache.tuscany.core.invocation.ProxyConfiguration;
+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.system.annotation.Autowire;
+import org.apache.tuscany.model.assembly.AssemblyModelObject;
+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.Interface;
+import org.apache.tuscany.model.assembly.ScopeEnum;
+import org.apache.tuscany.model.assembly.Service;
+import org.apache.tuscany.model.assembly.SimpleComponent;
+import org.apache.tuscany.model.types.OperationType;
+import org.osoa.sca.annotations.ComponentName;
+import org.osoa.sca.annotations.Context;
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.Init;
+
+import commonj.sdo.DataObject;
+
+/**
+ * Decorates components whose implementation type is a
+ * {@link org.apache.tuscany.container.java.assembly.JavaImplementation} with the appropriate runtime configuration
+ * 
+ * @version $Rev: 368822 $ $Date: 2006-01-13 10:54:38 -0800 (Fri, 13 Jan 2006) $
+ */
+public class JavaComponentContextBuilder2 implements RuntimeConfigurationBuilder<AggregateContext> {
+
+    private String name;
+
+    private final List<Injector> setters = new ArrayList();
+
+    private AggregateContext parentContext;
+
+    private AssemblyModelObject modelObject;
+
+    private ProxyFactoryFactory factory;
+
+    @Autowire
+    public void setProxyFactoryFactory(ProxyFactoryFactory factory) {
+        this.factory = factory;
+    }
+
+    private MessageFactory msgFactory;
+
+    @Autowire
+    public void setMessageFactory(MessageFactory msgFactory) {
+        this.msgFactory = msgFactory;
+    }
+
+    private RuntimeConfigurationBuilder referenceBuilder;
+
+    @Autowire
+    public void setReferenceBuilder(RuntimeConfigurationBuilder builder) {
+        this.referenceBuilder = builder;
+    }
+
+    // ----------------------------------
+    // Constructors
+    // ----------------------------------
+
+    public JavaComponentContextBuilder2() {
+    }
+
+    // ----------------------------------
+    // Methods
+    // ----------------------------------
+
+    public void setModelObject(AssemblyModelObject modelObject) {
+        this.modelObject = modelObject;
+    }
+
+    public void setParentContext(AggregateContext context) {
+        parentContext = context;
+    }
+
+    public void build() throws BuilderException {
+        if (!(modelObject instanceof SimpleComponent)) {
+            return;
+        }
+        SimpleComponent component = (SimpleComponent) modelObject;
+        if (component.getComponentImplementation() instanceof JavaImplementation) {
+            JavaImplementation javaImpl = (JavaImplementation) component.getComponentImplementation();
+            // FIXME scope
+            ScopeEnum scope = component.getComponentImplementation().getServices().get(0).getInterfaceContract().getScope();
+            Class implClass = null;
+            Set<Field> fields;
+            Set<Method> methods;
+            try {
+                implClass = JavaIntrospectionHelper.loadClass(javaImpl.getClass_());
+                fields = JavaIntrospectionHelper.getAllFields(implClass);
+                methods = JavaIntrospectionHelper.getAllUniqueMethods(implClass);
+                name = component.getName();
+                Constructor ctr = implClass.getConstructor((Class[]) null);
+
+                List<Injector> injectors = new ArrayList();
+
+                EventInvoker initInvoker = null;
+                boolean eagerInit = false;
+                EventInvoker destroyInvoker = null;
+                // FIXME this should be run as part of the LCM load
+                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);
+                    }
+                }
+                for (Method method : methods) {
+                    // FIXME Java5
+                    Init init = method.getAnnotation(Init.class);
+                    if (init != null && initInvoker == null) {
+                        initInvoker = new MethodEventInvoker(method);
+                        eagerInit = init.eager();
+                        continue;
+                    }
+                    // @spec - should we allow the same method to have @init and
+                    // @destroy?
+                    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);
+                    }
+                }
+                // handle properties
+                List<ConfiguredProperty> configuredProperties = component.getConfiguredProperties();
+                // FIXME should return empty properties - does it?
+                if (configuredProperties != null) {
+                    for (ConfiguredProperty property : configuredProperties) {
+                        Injector injector = createPropertyInjector(property, fields, methods);
+                        injectors.add(injector);
+                    }
+                }
+                JavaComponentRuntimeConfiguration config = new JavaComponentRuntimeConfiguration(name, JavaIntrospectionHelper
+                        .getDefaultConstructor(implClass), eagerInit, initInvoker, destroyInvoker, scope.getValue());
+                component.getComponentImplementation().setRuntimeConfiguration(config);
+
+                // create chains for handling incoming requests
+                for (ConfiguredService configuredService : component.getConfiguredServices()) {
+                    Service service = configuredService.getService();
+                    Interface interfaze = service.getInterfaceContract();
+                    Map<OperationType, InvocationConfiguration> iConfigMap = new HashMap();
+                    ProxyFactory proxyFactory = factory.createProxyFactory();
+                    // FIXME we pass null for scopes since ProxyConfiguration requires scopes - this should be removed
+                    for (OperationType type : interfaze.getInterfaceType().getOperationTypes()) {
+                        InvocationConfiguration iConfig = new InvocationConfiguration(type);
+                        iConfigMap.put(type, iConfig);
+                    }
+                    //@FIXME hardcode separator
+                    QualifiedName qName = new QualifiedName(configuredService.getPart().getName()+"/"+configuredService.getPort().getName());
+                    ProxyConfiguration pConfiguration = new ProxyConfiguration(qName,iConfigMap, null, null, msgFactory);
+                    proxyFactory.setBusinessInterface(interfaze.getInterfaceType().getInstanceClass());
+                    proxyFactory.setProxyConfiguration(pConfiguration);
+                    config.addTargetProxyFactory(service.getName(), proxyFactory);
+                    configuredService.setProxyFactory(proxyFactory);
+                    // invoke another builder to add interceptors, etc.
+                    referenceBuilder.setParentContext(parentContext);
+                    referenceBuilder.setModelObject(configuredService);
+                    referenceBuilder.build();
+                }
+
+                // handle references
+                List<ConfiguredReference> configuredReferences = component.getConfiguredReferences();
+                if (configuredReferences != null) {
+                    for (ConfiguredReference reference : configuredReferences) {
+                        ProxyFactory proxyFactory = factory.createProxyFactory();
+                        Interface interfaze = reference.getReference().getInterfaceContract();
+                        Map<OperationType, InvocationConfiguration> iConfigMap = new HashMap();
+                        for (OperationType type : interfaze.getInterfaceType().getOperationTypes()) {
+                            InvocationConfiguration iConfig = new InvocationConfiguration(type);
+                            iConfigMap.put(type, iConfig);
+                        }
+
+                        /*
+                         * FIXME we pass null for scopes since ProxyConfiguration requires scopes - this should be
+                         * removed from the constructor
+                         */
+                        QualifiedName qName = new QualifiedName(reference.getPart().getName() +"/"+reference.getPort().getName());
+                        ProxyConfiguration pConfiguration = new ProxyConfiguration(qName,iConfigMap, null, null, msgFactory);
+                        proxyFactory.setBusinessInterface(interfaze.getInterfaceType().getInstanceClass());
+                        proxyFactory.setProxyConfiguration(pConfiguration);
+                        config.addSourceProxyFactory(reference.getReference().getName(), proxyFactory);
+                        reference.setProxyFactory(proxyFactory);
+                        // invoke another builder to add interceptors, etc.
+                        referenceBuilder.setParentContext(parentContext);
+                        referenceBuilder.setModelObject(reference);
+                        referenceBuilder.build();
+                        Injector injector = createReferenceInjector(reference.getReference().getName(), proxyFactory, fields,
+                                methods);
+                        injectors.add(injector);
+                    }
+                }
+                config.setSetters(injectors);
+            } catch (BuilderException e) {
+                e.addContextName(component.getName());
+                e.addContextName(parentContext.getName());
+                throw e;
+            } catch (ClassNotFoundException e) {
+                BuilderException be = new BuilderConfigException(e);
+                be.addContextName(component.getName());
+                be.addContextName(parentContext.getName());
+                throw be;
+            } catch (NoSuchMethodException e) {
+                BuilderConfigException ce = new BuilderConfigException("Class does not have a no-arg constructor", e);
+                ce.setIdentifier(implClass.getName());
+                ce.addContextName(component.getName());
+                ce.addContextName(parentContext.getName());
+                throw ce;
+            }
+        }
+    }
+
+    // ----------------------------------
+    // Private methods
+    // ----------------------------------
+
+    /**
+     * Creates an <code>Injector</code> for component properties
+     */
+    private Injector createPropertyInjector(ConfiguredProperty property, Set<Field> fields, Set<Method> methods)
+            throws NoAccessorException {
+        Object value = property.getValue();
+        String propName = property.getProperty().getName();
+        // @FIXME is this how to get property type of object
+        Class type = value.getClass();
+
+        // There is no efficient way to do this
+        Method method = null;
+        Field field = JavaIntrospectionHelper.findClosestMatchingField(propName, type, fields);
+        if (field == null) {
+            method = JavaIntrospectionHelper.findClosestMatchingMethod(propName, new Class[] { type }, methods);
+            if (method == null) {
+                throw new NoAccessorException(propName);
+            }
+        }
+        Injector injector = null;
+        // FIXME support types other than String
+        if (value instanceof DataObject) {
+            if (field != null) {
+                injector = new FieldInjector(field, new SDOObjectFactory((DataObject) value));
+            } else {
+                injector = new MethodInjector(method, new SDOObjectFactory((DataObject) value));
+            }
+        } else if (JavaIntrospectionHelper.isImmutable(type)) {
+            if (field != null) {
+                injector = new FieldInjector(field, new SingletonObjectFactory(value));
+            } else {
+                injector = new MethodInjector(method, new SingletonObjectFactory(value));
+            }
+        }
+        return injector;
+
+    }
+
+    /**
+     * Creates an <code>Injector</code> for service references
+     */
+    private Injector createReferenceInjector(String refName, ProxyFactory proxyFactory, Set<Field> fields, Set<Method> methods)
+            throws NoAccessorException, BuilderConfigException {
+        Method method = null;
+        Field field = JavaIntrospectionHelper.findClosestMatchingField(refName, proxyFactory.getBusinessInterface(), fields);
+        if (field == null) {
+            method = JavaIntrospectionHelper.findClosestMatchingMethod(refName,
+                    new Class[] { proxyFactory.getBusinessInterface() }, methods);
+            if (method == null) {
+                throw new NoAccessorException(refName);
+            }
+        }
+        Injector injector;
+        try {
+            if (field != null) {
+                injector = new FieldInjector(field, new ProxyObjectFactory(proxyFactory));
+            } else {
+                injector = new MethodInjector(method, new ProxyObjectFactory(proxyFactory));
+            }
+        } catch (FactoryInitException e) {
+            BuilderConfigException ce = new BuilderConfigException("Error configuring reference", e);
+            ce.setIdentifier(refName);
+            throw ce;
+        }
+        return injector;
+
+    }
+
+}

Modified: incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/config/JavaComponentRuntimeConfiguration.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/config/JavaComponentRuntimeConfiguration.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/config/JavaComponentRuntimeConfiguration.java (original)
+++ incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/config/JavaComponentRuntimeConfiguration.java Wed Feb  8 13:23:16 2006
@@ -14,15 +14,30 @@
 package org.apache.tuscany.container.java.config;
 
 import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.tuscany.container.java.context.JavaComponentContext;
+import org.apache.tuscany.container.java.injection.ReferenceProxyTargetFactory;
+import org.apache.tuscany.core.builder.BuilderConfigException;
 import org.apache.tuscany.core.builder.ContextCreationException;
+import org.apache.tuscany.core.builder.NoAccessorException;
 import org.apache.tuscany.core.builder.RuntimeConfiguration;
+import org.apache.tuscany.core.config.JavaIntrospectionHelper;
 import org.apache.tuscany.core.context.SimpleComponentContext;
 import org.apache.tuscany.core.injection.EventInvoker;
+import org.apache.tuscany.core.injection.FactoryInitException;
+import org.apache.tuscany.core.injection.FieldInjector;
 import org.apache.tuscany.core.injection.Injector;
+import org.apache.tuscany.core.injection.MethodInjector;
 import org.apache.tuscany.core.injection.PojoObjectFactory;
+import org.apache.tuscany.core.invocation.spi.ProxyFactory;
+import org.apache.tuscany.model.assembly.ConfiguredReference;
+import org.apache.tuscany.model.assembly.ConfiguredService;
 import org.apache.tuscany.model.assembly.ScopeEnum;
 
 /**
@@ -53,7 +68,7 @@
 
     // the scope of the implementation instance
     private int scope;
-    
+
     private boolean stateless;
 
     // ----------------------------------
@@ -65,10 +80,11 @@
      * 
      * @param name the SCDL name of the component the context refers to
      * @param ctr the implementation type constructor
-     * @param setters a collection of <code>Injectors</code> used to configure properties, references and other meta data values
-     *        on implementation instances
+     * @param setters a collection of <code>Injectors</code> used to configure properties, references and other meta
+     *        data values on implementation instances
      * @param eagerInit whether the component should be eagerly initialized
-     * @param init an <code>Invoker</code> pointing to a method on the implementation type decorated with <code>@Init</code>
+     * @param init an <code>Invoker</code> pointing to a method on the implementation type decorated with
+     *        <code>@Init</code>
      * @param destroy an <code>Invoker</code> pointing to a method on the implementation type decorated with
      *        <code>@Destroy</code>
      * @param scope the scope of the component implementation type
@@ -77,8 +93,6 @@
             EventInvoker init, EventInvoker destroy, int scope) {
         assert (name != null) : "Name was null";
         assert (ctr != null) : "Constructor was null";
-        assert (setters != null) : "Setters were null";
-        //assert (scope != null) : "Scope was null";
         this.name = name;
         this.ctr = ctr;
         this.setters = setters;
@@ -89,21 +103,104 @@
         stateless = (scope == ScopeEnum.INSTANCE);
     }
 
+    public JavaComponentRuntimeConfiguration(String name, Constructor ctr, boolean eagerInit, EventInvoker init,
+            EventInvoker destroy, int scope) {
+        this(name, ctr, null, eagerInit, init, destroy, scope);
+    }
+
     // ----------------------------------
     // Methods
     // ----------------------------------
-    
-    public String getName(){
+
+    public String getName() {
         return name;
     }
-    
-    public int getScope(){
+
+    public int getScope() {
         return scope;
     }
-    
+
     public SimpleComponentContext createInstanceContext() throws ContextCreationException {
         PojoObjectFactory objectFactory = new PojoObjectFactory(ctr, null, setters);
         return new JavaComponentContext(name, objectFactory, eagerInit, init, destroy, stateless);
     }
 
+    // //
+
+    private Map<String, ProxyFactory> targetProxyFactories = new HashMap();
+
+    public void addTargetProxyFactory(String serviceName, ProxyFactory factory) {
+        targetProxyFactories.put(serviceName, factory);
+    }
+
+    public ProxyFactory getTargetProxyFactory(String serviceName) {
+        return targetProxyFactories.get(serviceName);
+    }
+
+    public Map<String, ProxyFactory> getTargetProxyFactories() {
+        return targetProxyFactories;
+    }
+
+    private Map<String, ProxyFactory> sourceProxyFactories = new HashMap();
+
+    public void addSourceProxyFactory(String referenceName, ProxyFactory factory) {
+        sourceProxyFactories.put(referenceName, factory);
+    }
+
+    public ProxyFactory getSourceProxyFactory(String referenceName) {
+        return sourceProxyFactories.get(referenceName);
+    }
+
+    public Map<String, ProxyFactory> getSourceProxyFactories() {
+        return sourceProxyFactories;
+    }
+
+    public void setSetters(List<Injector> setters) {
+        this.setters = setters;
+    }
+
+    public void prepare(){
+        
+    }
+    
+    
+//    
+//    private Injector createReferenceInjector(ProxyFactory factory,
+//            Set<Field> fields, Set<Method> methods) throws NoAccessorException, BuilderConfigException {
+//        String refName = reference.getReference().getName();
+//        List<ConfiguredService> services = reference.getConfiguredServices();
+//        Class type;
+//        // FIXME added the size check - do we need to do this?
+//        if (services.size() == 1) {
+//            // get the interface
+//            type = reference.getReference().getInterfaceContract().getInterfaceType().getInstanceClass();
+//        } else {
+//            // FIXME do we support arrays?
+//            type = List.class;
+//        }
+//
+//        Method method = null;
+//
+//        Field field = JavaIntrospectionHelper.findClosestMatchingField(refName, type, fields);
+//        if (field == null) {
+//            method = JavaIntrospectionHelper.findClosestMatchingMethod(refName, new Class[] { type }, methods);
+//            if (method == null) {
+//                throw new NoAccessorException(refName);
+//            }
+//        }
+//        Injector injector;
+//        try {
+//            if (field != null) {
+//                injector = new FieldInjector(field, new ReferenceProxyTargetFactory(reference));
+//            } else {
+//                injector = new MethodInjector(method, new ReferenceProxyTargetFactory(reference));
+//            }
+//        } catch (FactoryInitException e) {
+//            BuilderConfigException ce = new BuilderConfigException("Error configuring reference", e);
+//            ce.setIdentifier(refName);
+//            throw ce;
+//        }
+//        return injector;
+//    }
+    
 }

Modified: incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/handler/AbstractJavaComponentInvoker.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/handler/AbstractJavaComponentInvoker.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/handler/AbstractJavaComponentInvoker.java (original)
+++ incubator/tuscany/java/sca/container.java/src/main/java/org/apache/tuscany/container/java/handler/AbstractJavaComponentInvoker.java Wed Feb  8 13:23:16 2006
@@ -31,7 +31,7 @@
  * 
  * @version $Rev$ $Date$
  */
-public abstract class AbstractJavaComponentInvoker implements TargetInvoker, Interceptor {
+public abstract class AbstractJavaComponentInvoker implements TargetInvoker {
 
     protected Method operation;
 

Modified: incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/jdk/JDKInvocationHandlerTestCase.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/jdk/JDKInvocationHandlerTestCase.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/jdk/JDKInvocationHandlerTestCase.java (original)
+++ incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/jdk/JDKInvocationHandlerTestCase.java Wed Feb  8 13:23:16 2006
@@ -61,6 +61,72 @@
         Assert.assertEquals("hello", proxy.hello("hello"));
     }
 
+    public void testInterceptorsOnly() throws Exception {
+        Map<Method, InvocationConfiguration> config = new HashMap();
+        OperationType operation = new MockJavaOperationType(hello);
+        StaticJavaComponentTargetInvoker invoker = new StaticJavaComponentTargetInvoker(hello, new SimpleTargetImpl());
+        InvocationConfiguration invocationConfiguration = new InvocationConfiguration(operation);
+        invocationConfiguration.addSourceInterceptor(new MockSyncInterceptor());
+        invocationConfiguration.addTargetInterceptor(new MockSyncInterceptor());
+        invocationConfiguration.setTargetInvoker(invoker);
+        invocationConfiguration.build();
+        InvocationConfiguration helloConfig = invocationConfiguration;
+        config.put(hello, helloConfig);
+        InvocationHandler handler = new JDKInvocationHandler(new MessageFactoryImpl(), config);
+        SimpleTarget proxy = (SimpleTarget) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
+                new Class[]{SimpleTarget.class}, handler);
+        Assert.assertEquals("hello", proxy.hello("hello"));
+    }
+
+    public void testSourceInterceptoOnly() throws Exception {
+        Map<Method, InvocationConfiguration> config = new HashMap();
+        OperationType operation = new MockJavaOperationType(hello);
+        StaticJavaComponentTargetInvoker invoker = new StaticJavaComponentTargetInvoker(hello, new SimpleTargetImpl());
+        InvocationConfiguration invocationConfiguration = new InvocationConfiguration(operation);
+        invocationConfiguration.addSourceInterceptor(new MockSyncInterceptor());
+        invocationConfiguration.setTargetInvoker(invoker);
+        invocationConfiguration.build();
+        InvocationConfiguration helloConfig = invocationConfiguration;
+        config.put(hello, helloConfig);
+        InvocationHandler handler = new JDKInvocationHandler(new MessageFactoryImpl(), config);
+        SimpleTarget proxy = (SimpleTarget) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
+                new Class[]{SimpleTarget.class}, handler);
+        Assert.assertEquals("hello", proxy.hello("hello"));
+    }
+
+    public void testTargetInterceptorOnly() throws Exception {
+        Map<Method, InvocationConfiguration> config = new HashMap();
+        OperationType operation = new MockJavaOperationType(hello);
+        StaticJavaComponentTargetInvoker invoker = new StaticJavaComponentTargetInvoker(hello, new SimpleTargetImpl());
+        InvocationConfiguration invocationConfiguration = new InvocationConfiguration(operation);
+        invocationConfiguration.addTargetInterceptor(new MockSyncInterceptor());
+        invocationConfiguration.setTargetInvoker(invoker);
+        invocationConfiguration.build();
+        InvocationConfiguration helloConfig = invocationConfiguration;
+        config.put(hello, helloConfig);
+        InvocationHandler handler = new JDKInvocationHandler(new MessageFactoryImpl(), config);
+        SimpleTarget proxy = (SimpleTarget) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
+                new Class[]{SimpleTarget.class}, handler);
+        Assert.assertEquals("hello", proxy.hello("hello"));
+    }
+
+    public void testHandlerAndTargetInterceptor() throws Exception {
+        Map<Method, InvocationConfiguration> config = new HashMap();
+        OperationType operation = new MockJavaOperationType(hello);
+        StaticJavaComponentTargetInvoker invoker = new StaticJavaComponentTargetInvoker(hello, new SimpleTargetImpl());
+        InvocationConfiguration invocationConfiguration = new InvocationConfiguration(operation);
+        invocationConfiguration.addRequestHandler(new MockHandler());
+        invocationConfiguration.addTargetInterceptor(new MockSyncInterceptor());
+        invocationConfiguration.setTargetInvoker(invoker);
+        invocationConfiguration.build();
+        InvocationConfiguration helloConfig = invocationConfiguration;
+        config.put(hello, helloConfig);
+        InvocationHandler handler = new JDKInvocationHandler(new MessageFactoryImpl(), config);
+        SimpleTarget proxy = (SimpleTarget) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
+                new Class[]{SimpleTarget.class}, handler);
+        Assert.assertEquals("hello", proxy.hello("hello"));
+    }
+
     private InvocationConfiguration getConfiguration(Method m) {
         OperationType operation = new MockJavaOperationType(m);
         StaticJavaComponentTargetInvoker invoker = new StaticJavaComponentTargetInvoker(m, new SimpleTargetImpl());

Modified: incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockHandler.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockHandler.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockHandler.java (original)
+++ incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockHandler.java Wed Feb  8 13:23:16 2006
@@ -12,7 +12,7 @@
 public class MockHandler implements MessageHandler {
 
     public boolean processMessage(Message message) {
-        System.out.println("Invoking handler");
+        //System.out.println("Invoking handler");
         return true;
     }
 }

Modified: incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockScopeContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockScopeContext.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockScopeContext.java (original)
+++ incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockScopeContext.java Wed Feb  8 13:23:16 2006
@@ -41,6 +41,10 @@
         components.put("bar", new SimpleTargetImpl());
     }
 
+    public MockScopeContext(Map<String,Object> instances) {
+        components = instances;
+    }
+
     
     public void start() {
     }

Modified: incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockSyncInterceptor.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockSyncInterceptor.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockSyncInterceptor.java (original)
+++ incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/invocation/mock/MockSyncInterceptor.java Wed Feb  8 13:23:16 2006
@@ -30,7 +30,7 @@
 
     public Message invoke(Message msg) {
         ++count;
-        System.out.println("Invoking interceptor");
+        //System.out.println("Invoking interceptor");
         return next.invoke(msg);
     }
 

Added: incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockConfigContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockConfigContext.java?rev=376070&view=auto
==============================================================================
--- incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockConfigContext.java (added)
+++ incubator/tuscany/java/sca/container.java/src/test/java/org/apache/tuscany/container/java/mock/MockConfigContext.java Wed Feb  8 13:23:16 2006
@@ -0,0 +1,48 @@
+/**
+ * 
+ * Copyright 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.
+ */
+package org.apache.tuscany.container.java.mock;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.core.builder.BuilderConfigException;
+import org.apache.tuscany.core.builder.RuntimeConfigurationBuilder;
+import org.apache.tuscany.core.builder.impl.AssemblyVisitor;
+import org.apache.tuscany.core.config.ConfigurationException;
+import org.apache.tuscany.core.context.AggregateContext;
+import org.apache.tuscany.core.context.ConfigurationContext;
+import org.apache.tuscany.model.assembly.ExtensibleModelObject;
+
+/**
+ *  A mock configuration context
+ * 
+ * @version $Rev: 368822 $ $Date: 2006-01-13 10:54:38 -0800 (Fri, 13 Jan 2006) $
+ */
+public class MockConfigContext implements ConfigurationContext {
+
+    private List<RuntimeConfigurationBuilder> builders = new ArrayList();
+
+    public MockConfigContext(List<RuntimeConfigurationBuilder> builders) {
+        this.builders=builders;
+    }
+
+    public void configure(ExtensibleModelObject model) throws ConfigurationException {
+    }
+
+    public void build(AggregateContext parent, ExtensibleModelObject model) throws BuilderConfigException {
+        AssemblyVisitor visitor = new AssemblyVisitor(parent, builders);
+        visitor.start(model);
+    }
+
+}

Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ProxyObjectFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ProxyObjectFactory.java?rev=376070&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ProxyObjectFactory.java (added)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ProxyObjectFactory.java Wed Feb  8 13:23:16 2006
@@ -0,0 +1,24 @@
+package org.apache.tuscany.core.builder;
+
+import org.apache.tuscany.core.injection.ObjectCreationException;
+import org.apache.tuscany.core.injection.ObjectFactory;
+import org.apache.tuscany.core.invocation.spi.ProxyCreationException;
+import org.apache.tuscany.core.invocation.spi.ProxyFactory;
+
+public class ProxyObjectFactory implements ObjectFactory {
+
+    private ProxyFactory factory;
+
+    public ProxyObjectFactory(ProxyFactory factory) {
+        this.factory = factory;
+    }
+
+    public Object getInstance() throws ObjectCreationException {
+        try {
+            return factory.createProxy();
+        } catch (ProxyCreationException e) {
+            throw new ObjectCreationException(e);
+        }
+    }
+
+}

Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ReferenceBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ReferenceBuilder.java?rev=376070&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ReferenceBuilder.java (added)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/ReferenceBuilder.java Wed Feb  8 13:23:16 2006
@@ -0,0 +1,89 @@
+/**
+ * 
+ * Copyright 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.
+ */
+package org.apache.tuscany.core.builder;
+
+import org.apache.tuscany.core.context.AggregateContext;
+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.system.annotation.Autowire;
+import org.apache.tuscany.core.system.context.RuntimeContext;
+import org.apache.tuscany.model.assembly.AssemblyModelObject;
+import org.apache.tuscany.model.assembly.ConfiguredReference;
+import org.apache.tuscany.model.assembly.ConfiguredService;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Scope;
+
+/**
+ * Builds the source and target sides of wires for a component
+ * 
+ * @version $Rev$ $Date$
+ */
+@Scope("MODULE")
+public class ReferenceBuilder implements RuntimeConfigurationBuilder<AggregateContext> {
+
+    private ProxyFactoryFactory factory;
+
+    private RuntimeContext runtimeContext;
+
+    private AggregateContext parentContext;
+
+    private AssemblyModelObject modelObject;
+
+    private MessageFactory msgFactory;
+
+    // ----------------------------------
+    // Constructors
+    // ----------------------------------
+
+    public ReferenceBuilder() {
+    }
+
+    // ----------------------------------
+    // Methods
+    // ----------------------------------
+
+    @Autowire
+    public void setRuntimeContext(RuntimeContext ctx) {
+        runtimeContext = ctx;
+    }
+
+    @Init(eager = true)
+    public void init() {
+        runtimeContext.addBuilder(this);
+    }
+
+    public void setModelObject(AssemblyModelObject modelObject) {
+        this.modelObject = modelObject;
+    }
+
+    public void setParentContext(AggregateContext context) {
+        parentContext = context;
+    }
+
+    public void build() throws BuilderException {
+        if (!(modelObject instanceof ConfiguredReference) && (!(modelObject instanceof ConfiguredService))) {
+            return; // FIXME support external service
+        }
+        if (modelObject instanceof ConfiguredReference) {
+            ConfiguredReference configuredReference = (ConfiguredReference) modelObject;
+            ProxyFactory proxyFactory = (ProxyFactory) configuredReference.getProxyFactory();
+            // Do some magic here
+        } else {
+            ConfiguredService configuredService = (ConfiguredService) modelObject;
+            ProxyFactory proxyFactory = (ProxyFactory) configuredService.getProxyFactory();
+            // Do some magic here
+        }
+    }
+}

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/RuntimeConfiguration.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/RuntimeConfiguration.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/RuntimeConfiguration.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/RuntimeConfiguration.java Wed Feb  8 13:23:16 2006
@@ -1,6 +1,9 @@
 package org.apache.tuscany.core.builder;
 
+import java.util.Map;
+
 import org.apache.tuscany.core.context.Context;
+import org.apache.tuscany.core.invocation.spi.ProxyFactory;
 
 /**
  * Implementations create instance contexts based on a compiled runtime
@@ -17,9 +20,31 @@
      * @return a new instance context
      * @throws ContextCreationException if an error occurs creating the context
      */
-    T createInstanceContext() throws ContextCreationException;
+    public T createInstanceContext() throws ContextCreationException;
+    
+    public int getScope();
+    
+    public String getName();
+    
+    /////////////
+    public void prepare();
     
-    int getScope();
+    /**
+     * Adds a poxy factory for the given service name
+     */
+    public void addTargetProxyFactory(String serviceName, ProxyFactory factory);
+
+    public ProxyFactory getTargetProxyFactory(String serviceName);
     
-    String getName();
+    public Map<String, ProxyFactory> getTargetProxyFactories();
+
+    /**
+     * Adds a poxy factory for the given reference
+     */
+    public void addSourceProxyFactory(String referenceName, ProxyFactory factory);
+
+    public ProxyFactory getSourceProxyFactory(String referenceName);
+    
+    public Map<String,ProxyFactory> getSourceProxyFactories();
+
 }

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/PortRuntimeConfigurationBuilderImpl.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/PortRuntimeConfigurationBuilderImpl.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/PortRuntimeConfigurationBuilderImpl.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/PortRuntimeConfigurationBuilderImpl.java Wed Feb  8 13:23:16 2006
@@ -24,6 +24,7 @@
 
 import org.apache.tuscany.core.addressing.AddressingFactory;
 import org.apache.tuscany.core.addressing.EndpointReference;
+import org.apache.tuscany.core.context.QualifiedName;
 import org.apache.tuscany.core.context.ScopeContext;
 import org.apache.tuscany.core.invocation.InvocationConfiguration;
 import org.apache.tuscany.core.invocation.ProxyConfiguration;
@@ -106,7 +107,8 @@
         // Create Proxy configuration
         Map<OperationType, InvocationConfiguration> invocationConfigurations = new HashMap<OperationType, InvocationConfiguration>();
         Class javaInterface=interfaceType.getInstanceClass();
-        ProxyConfiguration proxyConfiguration = new ProxyConfiguration(invocationConfigurations, javaInterface.getClassLoader(), scopeContainers, messageFactory);
+        //@FIXME Proxy this will break
+        ProxyConfiguration proxyConfiguration = new ProxyConfiguration(null,invocationConfigurations, javaInterface.getClassLoader(), scopeContainers, messageFactory);
         
         // Create invocation configurations for all the operations on the business interface
         for (OperationType operationType : interfaceType.getOperationTypes()) {
@@ -125,7 +127,9 @@
         // Create a proxy factory
         ProxyFactory proxyFactory = new JDKProxyFactory();
         try {
-            proxyFactory.initialize(javaInterface, proxyConfiguration);
+            proxyFactory.initialize();
+            proxyFactory.setBusinessInterface(javaInterface);
+            proxyFactory.setProxyConfiguration(proxyConfiguration);
         } catch (ProxyInitializationException e) {
             throw new ServiceRuntimeException(e);
         }
@@ -140,7 +144,8 @@
         // Create Proxy configuration
         Map<OperationType, InvocationConfiguration> invocationConfigurations = new HashMap<OperationType, InvocationConfiguration>();
         Class javaInterface=interfaceType.getInstanceClass();
-        ProxyConfiguration proxyConfiguration = new ProxyConfiguration(invocationConfigurations, javaInterface.getClassLoader(), scopeContainers, messageFactory);
+        QualifiedName qName = new QualifiedName(configuredService.getPart().getName() +"/"+configuredService.getPort().getName());
+        ProxyConfiguration proxyConfiguration = new ProxyConfiguration(qName, invocationConfigurations, javaInterface.getClassLoader(), scopeContainers, messageFactory);
         
         // Create invocation configurations for all the operations on the business interface
         for (OperationType operationType : interfaceType.getOperationTypes()) {
@@ -168,7 +173,9 @@
         // Create a proxy factory
         ProxyFactory proxyFactory = new JDKProxyFactory();
         try {
-            proxyFactory.initialize(javaInterface, proxyConfiguration);
+            proxyFactory.initialize();
+            proxyFactory.setBusinessInterface(javaInterface);
+            proxyFactory.setProxyConfiguration(proxyConfiguration);
         } catch (ProxyInitializationException e) {
             throw new ServiceRuntimeException(e);
         }

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/impl/AbstractAggregateContext.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/impl/AbstractAggregateContext.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/impl/AbstractAggregateContext.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/context/impl/AbstractAggregateContext.java Wed Feb  8 13:23:16 2006
@@ -38,6 +38,8 @@
 import org.apache.tuscany.core.context.SimpleComponentContext;
 import org.apache.tuscany.core.context.TargetException;
 import org.apache.tuscany.core.context.scope.DefaultScopeStrategy;
+import org.apache.tuscany.core.invocation.InvocationConfiguration;
+import org.apache.tuscany.core.invocation.spi.ProxyFactory;
 import org.apache.tuscany.core.system.annotation.Autowire;
 import org.apache.tuscany.core.system.annotation.ParentContext;
 import org.apache.tuscany.model.assembly.Component;
@@ -47,6 +49,7 @@
 import org.apache.tuscany.model.assembly.Module;
 import org.apache.tuscany.model.assembly.Part;
 import org.apache.tuscany.model.assembly.pojo.PojoModule;
+import org.apache.tuscany.model.types.OperationType;
 
 /**
  * The base implementation of an aggregate context
@@ -77,7 +80,7 @@
     // protected ModuleComponent moduleComponent;
     protected Module module;
 
-    protected List<RuntimeConfiguration<InstanceContext>> configurations = new ArrayList();
+    protected Map<String, RuntimeConfiguration<InstanceContext>> configurations = new HashMap();
 
     // Factory for scope contexts
     @Autowire(required = false)
@@ -89,8 +92,8 @@
     // The scopes for this context
     protected Map<Integer, ScopeContext> scopeContexts;
 
-    protected  Map<Integer, ScopeContext> immutableScopeContexts;
-    
+    protected Map<Integer, ScopeContext> immutableScopeContexts;
+
     // A component context name to scope context index
     protected Map<String, ScopeContext> scopeIndex;
 
@@ -131,7 +134,7 @@
     public void start() {
         synchronized (initializeLatch) {
             try {
-                if(lifecycleState != UNINITIALIZED){
+                if (lifecycleState != UNINITIALIZED) {
                     throw new IllegalStateException("Context not in UNINITIALIZED state");
                 }
                 lifecycleState = INITIALIZING;
@@ -139,13 +142,47 @@
 
                 Map<Integer, List<RuntimeConfiguration<SimpleComponentContext>>> configurationsByScope = new HashMap();
                 if (configurations != null) {
-                    for (RuntimeConfiguration config : configurations) {
+                    for (RuntimeConfiguration config : configurations.values()) {
                         // FIXME scopes are defined at the interface level
                         int scope = config.getScope();
                         // ensure duplicate names were not added before the context was started
-                        if (scopeIndex.get(config.getName()) != null) {
-                            throw new DuplicateNameException(config.getName());
+                        // if (scopeIndex.get(config.getName()) != null) {
+                        // throw new DuplicateNameException(config.getName());
+                        // }
+                        // /----------------
+                        if (config.getSourceProxyFactories() != null) {
+                            for (ProxyFactory sourceFactory : ((Map<String, ProxyFactory>) config.getSourceProxyFactories())
+                                    .values()) {
+                                QualifiedName targetName = sourceFactory.getProxyConfiguration().getTargetName();
+                                RuntimeConfiguration target = configurations.get(targetName.getPartName());
+                                if (target == null) {
+                                    ContextInitException e = new ContextInitException("Target not found");
+                                    e.setIdentifier(targetName.getPartName());
+                                    e.addContextName(name);
+                                    throw e;
+                                }
+                                // get the proxy chain for the target
+                                ProxyFactory targetFactory = target.getTargetProxyFactory(sourceFactory.getProxyConfiguration()
+                                        .getTargetName().getPortName());
+                                Map<OperationType, InvocationConfiguration> targetInvocationConfigs = targetFactory
+                                        .getProxyConfiguration().getInvocationConfigurations();
+                                for (InvocationConfiguration sourceInvocationConfig : sourceFactory.getProxyConfiguration()
+                                        .getInvocationConfigurations().values()) {
+                                    // match invocation chains
+                                    InvocationConfiguration targetInvocationConfig = targetInvocationConfigs
+                                            .get(sourceInvocationConfig.getOperationType());
+                                    // if handler is configured, add that
+                                    if (targetInvocationConfig.getHeadHandler() != null) {
+                                        sourceInvocationConfig.addRequestHandler(targetInvocationConfig.getHeadHandler());
+                                    } else {
+                                        // no handlers, just conntect interceptors
+                                        sourceInvocationConfig.addTargetInterceptor(targetInvocationConfig.getInterceptor());
+                                    }
+                                }
+                            }
                         }
+                        config.prepare();
+                        // /---------------
                         scopeIndex.put(config.getName(), scopeContexts.get(scope));
                         List<RuntimeConfiguration<SimpleComponentContext>> list = configurationsByScope.get(scope);
                         if (list == null) {
@@ -356,7 +393,10 @@
             scope.registerConfiguration(configuration);
             scopeIndex.put(configuration.getName(), scope);
         } else {
-            configurations.add(configuration);
+            if (configurations.get(configuration.getName()) != null) {
+                throw new DuplicateNameException(configuration.getName());
+            }
+            configurations.put(configuration.getName(), configuration);
         }
 
     }
@@ -430,8 +470,8 @@
             throw e;
         }
     }
-    
-    public Map<Integer,ScopeContext> getScopeContexts(){
+
+    public Map<Integer, ScopeContext> getScopeContexts() {
         initializeScopes();
         return immutableScopeContexts;
     }
@@ -470,7 +510,7 @@
 
     protected void initializeScopes() {
         if (scopeContexts == null) {
-            if(scopeStrategy == null){
+            if (scopeStrategy == null) {
                 scopeStrategy = new DefaultScopeStrategy();
             }
             scopeContexts = scopeStrategy.createScopes(eventContext);

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/InvocationConfiguration.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/InvocationConfiguration.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/InvocationConfiguration.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/InvocationConfiguration.java Wed Feb  8 13:23:16 2006
@@ -59,30 +59,34 @@
     }
 
     public void addSourceInterceptor(Interceptor interceptor) {
-        if (sourceInterceptorChainHead == null)
+        if (sourceInterceptorChainHead == null) {
             sourceInterceptorChainHead = interceptor;
-        else
+        } else {
             sourceInterceptorChainTail.setNext(interceptor);
+        }
         sourceInterceptorChainTail = interceptor;
     }
 
     public void addTargetInterceptor(Interceptor interceptor) {
-        if (targetInterceptorChainHead == null)
+        if (targetInterceptorChainHead == null){
             targetInterceptorChainHead = interceptor;
-        else
+        }else{
             targetInterceptorChainTail.setNext(interceptor);
+        }
         targetInterceptorChainTail = interceptor;
     }
 
     public void addRequestHandler(MessageHandler handler) {
-        if (requestHandlers == null)
+        if (requestHandlers == null){
             requestHandlers = new ArrayList<MessageHandler>();
+        }
         requestHandlers.add(handler);
     }
 
     public void addResponseHandler(MessageHandler handler) {
-        if (responseHandlers == null)
+        if (responseHandlers == null){
             responseHandlers = new ArrayList<MessageHandler>();
+        }
         responseHandlers.add(handler);
     }
 
@@ -98,6 +102,14 @@
         return sourceInterceptorChainHead;
     }
 
+    public MessageHandler getHeadHandler() {
+        if (responseHandlers != null && responseHandlers.size() > 0) {
+            return responseHandlers.get(0);
+        } else {
+            return null;
+        }
+    }
+
     /**
      * Build the configuration, link the interceptors and handlers together
      */
@@ -106,9 +118,9 @@
         // Build target interceptor chain
         if (targetInvoker != null) {
             if (targetInterceptorChainHead != null) {
-                targetInterceptorChainTail.setNext((Interceptor) targetInvoker);
+                targetInterceptorChainTail.setNext(targetInvoker);
             } else {
-                targetInterceptorChainHead = (Interceptor) targetInvoker;
+                targetInterceptorChainHead = targetInvoker;
             }
         }
 

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/ProxyConfiguration.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/ProxyConfiguration.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/ProxyConfiguration.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/ProxyConfiguration.java Wed Feb  8 13:23:16 2006
@@ -18,32 +18,41 @@
 
 import java.util.Map;
 
+import org.apache.tuscany.core.context.QualifiedName;
 import org.apache.tuscany.core.context.ScopeContext;
 import org.apache.tuscany.core.message.MessageFactory;
 import org.apache.tuscany.model.types.OperationType;
 
 /**
  * Represents configuration information for creating a service reference proxy
- *
+ * 
  * @version $Rev$ $Date$
  */
 public class ProxyConfiguration {
 
     private Map<OperationType, InvocationConfiguration> configurations;
+
     private ClassLoader proxyClassLoader;
+
     private MessageFactory messageFactory;
-    private Map<Integer,ScopeContext> scopeContainers;
+
+    private Map<Integer, ScopeContext> scopeContainers;
+
+    private QualifiedName targetName;
 
     // ----------------------------------
     // Constructors
     // ----------------------------------
 
-    //TODO add "from"
-    public ProxyConfiguration(Map<OperationType, InvocationConfiguration> invocationConfigs, ClassLoader proxyClassLoader, Map<Integer,ScopeContext> scopeContainers, MessageFactory messageFactory) {
+    // TODO add "from"
+    public ProxyConfiguration(QualifiedName targetName, Map<OperationType, InvocationConfiguration> invocationConfigs,
+            ClassLoader proxyClassLoader, Map<Integer, ScopeContext> scopeContainers, MessageFactory messageFactory) {
         assert (invocationConfigs != null) : "No invocation configuration map specified";
+        assert (targetName != null) : "No target name specified";
+        this.targetName = targetName;
         configurations = invocationConfigs;
-        this.scopeContainers=scopeContainers;
-        this.messageFactory=messageFactory;
+        this.scopeContainers = scopeContainers;
+        this.messageFactory = messageFactory;
         if (proxyClassLoader == null) {
             this.proxyClassLoader = Thread.currentThread().getContextClassLoader();
         } else {
@@ -55,10 +64,13 @@
     // Methods
     // ----------------------------------
 
+    public QualifiedName getTargetName() {
+        return targetName;
+    }
+
     /**
-     * Returns a collection of operation types to {@link InvocationConfiguration}
-     * mappings that represent the specific proxy configuration information for
-     * particular operations
+     * Returns a collection of operation types to {@link InvocationConfiguration} mappings that represent the specific
+     * proxy configuration information for particular operations
      */
     public Map<OperationType, InvocationConfiguration> getInvocationConfigurations() {
         return configurations;
@@ -78,8 +90,8 @@
     /**
      * @return Returns the scopeContainers.
      */
-    public Map<Integer,ScopeContext> getScopeContainers() {
+    public Map<Integer, ScopeContext> getScopeContainers() {
         return scopeContainers;
     }
-    
+
 }

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/TargetInvoker.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/TargetInvoker.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/TargetInvoker.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/TargetInvoker.java Wed Feb  8 13:23:16 2006
@@ -24,7 +24,7 @@
  * 
  * @version $Rev$ $Date$
  */
-public interface TargetInvoker {
+public interface TargetInvoker extends Interceptor{
 
     /**
      * Responsible for invoking an operation on a target with the given payload

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/impl/RequestResponseInterceptor.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/impl/RequestResponseInterceptor.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/impl/RequestResponseInterceptor.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/impl/RequestResponseInterceptor.java Wed Feb  8 13:23:16 2006
@@ -22,7 +22,7 @@
 
 /**
  * An interceptor that first sends the invocation Message down its request channel then extracts the response from the message and
- * sends it down the response channel before returning it the up the interceptor stack.
+ * sends it down the response channel before returning it up the interceptor stack.
  * 
  * @version $Rev$ $Date$
  */

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKInvocationHandler.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKInvocationHandler.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKInvocationHandler.java Wed Feb  8 13:23:16 2006
@@ -55,8 +55,8 @@
      * Dispatches a client request made on a proxy
      */
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-        InvocationConfiguration config = configuration.get(method);
         Interceptor headInterceptor = null;
+        InvocationConfiguration config = configuration.get(method);
         if (config != null) {
             headInterceptor = config.getInterceptor();
         }

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKProxyFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKProxyFactory.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKProxyFactory.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKProxyFactory.java Wed Feb  8 13:23:16 2006
@@ -32,7 +32,7 @@
 
 /**
  * Creates proxies for handling invocations using JDK dynamic proxies
- *
+ * 
  * @version $Rev$ $Date$
  */
 public class JDKProxyFactory implements ProxyFactory {
@@ -40,14 +40,11 @@
     private Class[] businessInterfaceArray;
 
     private Map<Method, InvocationConfiguration> methodToInvocationConfig;
+
     private ProxyConfiguration configuration;
 
-    public void initialize(Class businessInterface, ProxyConfiguration config) throws ProxyInitializationException {
-        assert (businessInterface != null) : "No business interface specified";
-        assert (config != null) : "No proxy configuration specified";
-        configuration = config;
-        businessInterfaceArray = new Class[]{businessInterface};
-        Map<OperationType, InvocationConfiguration> invocationConfigs = config.getInvocationConfigurations();
+    public void initialize() throws ProxyInitializationException {
+        Map<OperationType, InvocationConfiguration> invocationConfigs = configuration.getInvocationConfigurations();
         methodToInvocationConfig = new HashMap(invocationConfigs.size());
         for (Map.Entry entry : invocationConfigs.entrySet()) {
             OperationType operation = (OperationType) entry.getKey();
@@ -55,11 +52,9 @@
                 JavaOperationType javaOperation = (JavaOperationType) operation;
                 Method method = javaOperation.getJavaMethod();
                 methodToInvocationConfig.put(method, (InvocationConfiguration) entry.getValue());
-//				throw new ProxyInitializationException("Operation [" + operation.getName()
-//						+ "] not a Java type on interface [" + businessInterface.getName() + "]");
             } else {
                 WSDLOperationType wsdlOperation = (WSDLOperationType) operation;
-                Method[] methods = businessInterface.getMethods();
+                Method[] methods = businessInterfaceArray[0].getMethods();
                 for (int i = 0; i < methods.length; i++) {
                     if (methods[i].getName().equals(wsdlOperation.getName())) {
                         methodToInvocationConfig.put(methods[i], (InvocationConfiguration) entry.getValue());
@@ -72,9 +67,32 @@
     }
 
     public Object createProxy() {
-        // TODO pass from part of proxyconfig
         InvocationHandler handler = new JDKInvocationHandler(configuration.getMessageFactory(), methodToInvocationConfig);
         return Proxy.newProxyInstance(configuration.getProxyClassLoader(), businessInterfaceArray, handler);
+    }
+
+    public ProxyConfiguration getProxyConfiguration() {
+        return configuration;
+    }
+
+    public void setProxyConfiguration(ProxyConfiguration config) {
+        configuration = config;
+    }
+
+    public void setBusinessInterface(Class interfaze) {
+        businessInterfaceArray = new Class[] { interfaze };
+    }
+
+    public Class getBusinessInterface() {
+        return businessInterfaceArray[0];
+    }
+
+    public void addInterface(Class claz) {
+        throw new UnsupportedOperationException("Additional proxy interfaces not yet supported");
+    }
+
+    public Class[] getImplementatedInterfaces() {
+        return businessInterfaceArray;
     }
 
 }

Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKProxyFactoryFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKProxyFactoryFactory.java?rev=376070&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKProxyFactoryFactory.java (added)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/JDKProxyFactoryFactory.java Wed Feb  8 13:23:16 2006
@@ -0,0 +1,34 @@
+/**
+ * 
+ * Copyright 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.
+ */
+package org.apache.tuscany.core.invocation.jdk;
+
+import org.apache.tuscany.core.invocation.spi.ProxyFactory;
+import org.apache.tuscany.core.invocation.spi.ProxyFactoryFactory;
+
+/**
+ * 
+ * 
+ * @version $Rev$ $Date$
+ */
+public class JDKProxyFactoryFactory implements ProxyFactoryFactory {
+
+    public JDKProxyFactoryFactory() {
+    }
+
+    public ProxyFactory createProxyFactory() {
+        return new JDKProxyFactory();
+    }
+
+}
+

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/NullProxyFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/NullProxyFactory.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/NullProxyFactory.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/jdk/NullProxyFactory.java Wed Feb  8 13:23:16 2006
@@ -32,4 +32,28 @@
         return ctx.locateService(serviceName);
     }
 
+    public void initialize() throws ProxyInitializationException {
+    }
+
+    public ProxyConfiguration getProxyConfiguration() {
+        return null;
+    }
+
+    public void setProxyConfiguration(ProxyConfiguration config) {
+    }
+
+    public void setBusinessInterface(Class interfaze) {
+    }
+
+    public Class getBusinessInterface() {
+        return null;
+    }
+
+    public void addInterface(Class claz) {
+    }
+
+    public Class[] getImplementatedInterfaces() {
+        return null;
+    }
+
 }

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/spi/ProxyFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/spi/ProxyFactory.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/spi/ProxyFactory.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/spi/ProxyFactory.java Wed Feb  8 13:23:16 2006
@@ -36,11 +36,23 @@
      * @throws ProxyInitializationException if an error generating a proxy is
      *                                      encountered
      */
-    public void initialize(Class businessInterface, ProxyConfiguration config) throws ProxyInitializationException;
+    public void initialize() throws ProxyInitializationException;
 
     /**
      * Returns a proxy for a service reference
      */
     public T createProxy() throws ProxyCreationException;
 
+    public ProxyConfiguration getProxyConfiguration();
+    
+    public void setProxyConfiguration(ProxyConfiguration config);
+
+    public void setBusinessInterface(Class interfaze);
+    
+    public Class getBusinessInterface();
+    
+    public void addInterface(Class claz);
+    
+    public Class[] getImplementatedInterfaces();
+    
 }

Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/spi/ProxyFactoryFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/spi/ProxyFactoryFactory.java?rev=376070&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/spi/ProxyFactoryFactory.java (added)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/invocation/spi/ProxyFactoryFactory.java Wed Feb  8 13:23:16 2006
@@ -0,0 +1,8 @@
+package org.apache.tuscany.core.invocation.spi;
+
+public interface ProxyFactoryFactory {
+
+    public ProxyFactory createProxyFactory();
+    
+}
+

Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/message/impl/PojoMessageFactory.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/message/impl/PojoMessageFactory.java?rev=376070&view=auto
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/message/impl/PojoMessageFactory.java (added)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/message/impl/PojoMessageFactory.java Wed Feb  8 13:23:16 2006
@@ -0,0 +1,34 @@
+/**
+ * 
+ * Copyright 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.
+ */
+package org.apache.tuscany.core.message.impl;
+
+import org.apache.tuscany.core.message.Message;
+import org.apache.tuscany.core.message.MessageFactory;
+
+/**
+ * 
+ * 
+ * @version $Rev$ $Date$
+ */
+public class PojoMessageFactory implements MessageFactory {
+
+    public PojoMessageFactory() {
+    }
+
+    public Message createMessage() {
+        return new PojoMessageImpl();
+    }
+
+}
+

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/ProxyFactoryBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/ProxyFactoryBuilder.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/ProxyFactoryBuilder.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/ProxyFactoryBuilder.java Wed Feb  8 13:23:16 2006
@@ -30,6 +30,7 @@
 import org.apache.tuscany.core.builder.RuntimeConfigurationBuilder;
 import org.apache.tuscany.core.config.JavaIntrospectionHelper;
 import org.apache.tuscany.core.context.AggregateContext;
+import org.apache.tuscany.core.context.QualifiedName;
 import org.apache.tuscany.core.context.ScopeAwareContext;
 import org.apache.tuscany.core.context.ScopeContext;
 import org.apache.tuscany.core.invocation.InvocationConfiguration;
@@ -59,6 +60,7 @@
  * A system component that configures proxy factories for references
  * <p>
  * FIXME integrate back with {@link org.apache.tuscany.core.builder.impl.PortRuntimeConfigurationBuilderImpl}
+ * @deprecated
  */
 
 @Scope("MODULE")
@@ -178,7 +180,7 @@
         // Create Proxy configuration
         Map<OperationType, InvocationConfiguration> invocationConfigurations = new HashMap<OperationType, InvocationConfiguration>();
         Class javaInterface = interfaceType.getInstanceClass();
-        ProxyConfiguration proxyConfiguration = new ProxyConfiguration(invocationConfigurations, javaInterface.getClassLoader(),
+        ProxyConfiguration proxyConfiguration = new ProxyConfiguration(null,invocationConfigurations, javaInterface.getClassLoader(),
                 scopeContexts, messageFactory);
 
         // Create invocation configurations for all the operations on the business interface
@@ -205,7 +207,8 @@
         // Create Proxy configuration
         Map<OperationType, InvocationConfiguration> invocationConfigurations = new HashMap<OperationType, InvocationConfiguration>();
         Class javaInterface = interfaceType.getInstanceClass();
-        ProxyConfiguration proxyConfiguration = new ProxyConfiguration(invocationConfigurations, javaInterface.getClassLoader(),
+        QualifiedName qName = new QualifiedName(configuredService.getPart().getName()+"/"+configuredService.getPort().getName());
+        ProxyConfiguration proxyConfiguration = new ProxyConfiguration(qName, invocationConfigurations, javaInterface.getClassLoader(),
                 scopeContexts, messageFactory);
 
         // Create invocation configurations for all the operations on the business interface
@@ -243,7 +246,9 @@
         try {
             // Create a proxy factory
             ProxyFactory proxyFactory = (ProxyFactory) proxyFactoryConstructor.newInstance((Object[]) null);
-            proxyFactory.initialize(javaInterface, proxyConfiguration);
+            proxyFactory.setBusinessInterface(javaInterface);
+            proxyFactory.setProxyConfiguration(proxyConfiguration);
+            proxyFactory.initialize();
             return proxyFactory;
         } catch (ProxyInitializationException e) {
             e.addContextName(name);

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemComponentRuntimeConfiguration.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemComponentRuntimeConfiguration.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemComponentRuntimeConfiguration.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemComponentRuntimeConfiguration.java Wed Feb  8 13:23:16 2006
@@ -2,6 +2,7 @@
 
 import java.lang.reflect.Constructor;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.tuscany.core.builder.ContextCreationException;
 import org.apache.tuscany.core.builder.RuntimeConfiguration;
@@ -10,6 +11,7 @@
 import org.apache.tuscany.core.injection.EventInvoker;
 import org.apache.tuscany.core.injection.Injector;
 import org.apache.tuscany.core.injection.PojoObjectFactory;
+import org.apache.tuscany.core.invocation.spi.ProxyFactory;
 import org.apache.tuscany.core.system.context.SystemComponentContext;
 import org.apache.tuscany.model.assembly.ScopeEnum;
 
@@ -104,6 +106,35 @@
             PojoObjectFactory objectFactory = new PojoObjectFactory(ctr, null, setters);
             return new SystemComponentContext(name, objectFactory, eagerInit, init, destroy, stateless);
         }
+    }
+    
+    // -- Proxy
+
+    public void prepare() {
+    }
+
+    public void addTargetProxyFactory(String serviceName, ProxyFactory factory) {
+        throw new UnsupportedOperationException();
+    }
+
+    public ProxyFactory getTargetProxyFactory(String serviceName) {
+        return null;
+    }
+
+    public Map<String, ProxyFactory> getTargetProxyFactories() {
+        throw new UnsupportedOperationException();
+    }
+
+    public void addSourceProxyFactory(String referenceName, ProxyFactory factory) {
+        throw new UnsupportedOperationException();
+    }
+
+    public ProxyFactory getSourceProxyFactory(String referenceName) {
+        return null;
+    }
+
+    public Map<String, ProxyFactory> getSourceProxyFactories() {
+        return null;
     }
 
 }

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemEntryPointRuntimeConfiguration.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemEntryPointRuntimeConfiguration.java?rev=376070&r1=376069&r2=376070&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemEntryPointRuntimeConfiguration.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemEntryPointRuntimeConfiguration.java Wed Feb  8 13:23:16 2006
@@ -13,10 +13,13 @@
  */
 package org.apache.tuscany.core.system.config;
 
+import java.util.Map;
+
 import org.apache.tuscany.core.builder.ContextCreationException;
 import org.apache.tuscany.core.builder.RuntimeConfiguration;
 import org.apache.tuscany.core.context.EntryPointContext;
 import org.apache.tuscany.core.injection.ObjectFactory;
+import org.apache.tuscany.core.invocation.spi.ProxyFactory;
 import org.apache.tuscany.core.system.context.SystemEntryPointContext;
 import org.apache.tuscany.model.assembly.ScopeEnum;
 
@@ -56,6 +59,34 @@
 
     public String getName() {
         return name;
+    }
+
+    // -- Proxy
+    public void prepare() {
+    }
+
+    public void addTargetProxyFactory(String serviceName, ProxyFactory pFactory) {
+        throw new UnsupportedOperationException();
+ }
+
+    public ProxyFactory getTargetProxyFactory(String serviceName) {
+        return null;
+    }
+
+    public Map<String, ProxyFactory> getTargetProxyFactories() {
+        return null;
+    }
+
+    public void addSourceProxyFactory(String referenceName, ProxyFactory pFactory) {
+        throw new UnsupportedOperationException();
+    }
+
+    public ProxyFactory getSourceProxyFactory(String referenceName) {
+        return null;
+    }
+
+    public Map<String, ProxyFactory> getSourceProxyFactories() {
+        return null;
     }
 
 }