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

svn commit: r517573 - in /incubator/tuscany/java/sca/kernel: core/src/main/java/org/apache/tuscany/core/builder/ core/src/main/java/org/apache/tuscany/core/component/ core/src/main/java/org/apache/tuscany/core/deployer/federation/ core/src/main/java/or...

Author: jmarino
Date: Tue Mar 13 00:31:12 2007
New Revision: 517573

URL: http://svn.apache.org/viewvc?view=rev&rev=517573
Log:
initial work to start transition away from TargetInvokers

Added:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptor.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorBasicTestCase.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorSequenceTestCase.java   (with props)
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorStatelessDestroyTestCase.java   (with props)
Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/SystemSingletonAtomicComponent.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/federation/FederatedDeployer.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponent.java
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentImpl.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorImplWireTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/PassByValueWirePostProcessorTestCase.java
    incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerBasicInvocationTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Component.java
    incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/AbstractComponentExtensionTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/AtomicComponentExtensionTestCase.java
    incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/CompositeComponentExtensionTestCase.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/builder/ConnectorImpl.java Tue Mar 13 00:31:12 2007
@@ -126,7 +126,7 @@
         } catch (TargetInvokerCreationException e) {
             throw new WireCreationException("Error creating invoker", sourceUri, targetUri, e);
         }
-        source.attachWire(wire);
+        source.attachWire(wire, definition.getSource());
     }
 
     public void connect(ComponentDefinition<? extends Implementation<?>> definition) throws WiringException {

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/SystemSingletonAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/SystemSingletonAtomicComponent.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/SystemSingletonAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/SystemSingletonAtomicComponent.java Tue Mar 13 00:31:12 2007
@@ -33,6 +33,8 @@
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.model.physical.PhysicalOperationDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireSourceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireTargetDefinition;
 import org.apache.tuscany.spi.wire.TargetInvoker;
 import org.apache.tuscany.spi.wire.Wire;
 
@@ -112,6 +114,13 @@
         throw new UnsupportedOperationException();
     }
 
+    public void attachWire(Wire wire, PhysicalWireSourceDefinition defintion) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void attachWire(Wire wire, PhysicalWireTargetDefinition defintion) {
+        throw new UnsupportedOperationException();
+    }
 
     public List<Wire> getWires(String name) {
         throw new UnsupportedOperationException();

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/federation/FederatedDeployer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/federation/FederatedDeployer.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/federation/FederatedDeployer.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/deployer/federation/FederatedDeployer.java Tue Mar 13 00:31:12 2007
@@ -76,7 +76,6 @@
         try {
 
             final PhysicalChangeSet changeSet = (PhysicalChangeSet) marshallerRegistry.unmarshall(content);
-            
             for (PhysicalComponentDefinition pcd : changeSet.getComponentDefinitions()) {
                 final Component component = builderRegistry.build(pcd);
                 componentManager.register(component);

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoAtomicComponent.java Tue Mar 13 00:31:12 2007
@@ -39,6 +39,8 @@
 import org.apache.tuscany.spi.component.InstanceWrapper;
 import org.apache.tuscany.spi.extension.AtomicComponentExtension;
 import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.model.physical.PhysicalWireSourceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireTargetDefinition;
 import org.apache.tuscany.spi.wire.Wire;
 
 import org.apache.tuscany.core.component.ComponentContextImpl;
@@ -225,6 +227,14 @@
             callBackwires.put(callbackName, wireList);
         }
         wireList.add(wire);
+    }
+
+    public void attachWire(Wire wire, PhysicalWireSourceDefinition defintion) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void attachWire(Wire wire, PhysicalWireTargetDefinition defintion) {
+        throw new UnsupportedOperationException();
     }
 
     public void start() throws CoreRuntimeException {

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponent.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/PojoComponent.java Tue Mar 13 00:31:12 2007
@@ -24,25 +24,28 @@
 
 import org.osoa.sca.ComponentContext;
 
-import org.apache.tuscany.core.component.InstanceFactory;
-import org.apache.tuscany.core.component.InstanceFactoryProvider;
+import org.apache.tuscany.spi.ObjectCreationException;
 import org.apache.tuscany.spi.component.AbstractSCAObject;
 import org.apache.tuscany.spi.component.AtomicComponent;
-import org.apache.tuscany.spi.component.InstanceWrapper;
-import org.apache.tuscany.spi.component.TargetInvokerCreationException;
 import org.apache.tuscany.spi.component.ComponentException;
-import org.apache.tuscany.spi.component.TargetResolutionException;
+import org.apache.tuscany.spi.component.InstanceWrapper;
+import org.apache.tuscany.spi.component.Reference;
+import org.apache.tuscany.spi.component.RegistrationException;
 import org.apache.tuscany.spi.component.ScopeContainer;
 import org.apache.tuscany.spi.component.Service;
-import org.apache.tuscany.spi.component.RegistrationException;
-import org.apache.tuscany.spi.component.Reference;
+import org.apache.tuscany.spi.component.TargetInvokerCreationException;
+import org.apache.tuscany.spi.component.TargetResolutionException;
+import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.model.PropertyValue;
 import org.apache.tuscany.spi.model.Scope;
-import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.model.physical.PhysicalOperationDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireSourceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireTargetDefinition;
 import org.apache.tuscany.spi.wire.TargetInvoker;
 import org.apache.tuscany.spi.wire.Wire;
-import org.apache.tuscany.spi.ObjectCreationException;
+
+import org.apache.tuscany.core.component.InstanceFactory;
+import org.apache.tuscany.core.component.InstanceFactoryProvider;
 
 /**
  * Base class for Component implementations based on Java objects.
@@ -97,6 +100,12 @@
     public void attachCallbackWire(Wire wire) {
     }
 
+    public void attachWire(Wire wire, PhysicalWireSourceDefinition defintion) {
+    }
+
+    public void attachWire(Wire wire, PhysicalWireTargetDefinition defintion) {
+    }
+
     public void start() {
         super.start();
         scopeContainer.register(this);
@@ -189,7 +198,7 @@
     }
 
     @Deprecated
-    public TargetInvoker createTargetInvoker(String targetName, Operation operation) 
+    public TargetInvoker createTargetInvoker(String targetName, Operation operation)
         throws TargetInvokerCreationException {
         throw new UnsupportedOperationException();
     }

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentImpl.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeComponentImpl.java Tue Mar 13 00:31:12 2007
@@ -26,6 +26,8 @@
 import org.apache.tuscany.spi.event.Event;
 import org.apache.tuscany.spi.extension.CompositeComponentExtension;
 import org.apache.tuscany.spi.wire.Wire;
+import org.apache.tuscany.spi.model.physical.PhysicalWireSourceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireTargetDefinition;
 
 import org.apache.tuscany.core.component.event.ComponentStop;
 
@@ -56,6 +58,14 @@
     }
 
     public void attachWires(List<Wire> wires) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void attachWire(Wire wire, PhysicalWireSourceDefinition defintion) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void attachWire(Wire wire, PhysicalWireTargetDefinition defintion) {
         throw new UnsupportedOperationException();
     }
 

Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptor.java?view=auto&rev=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptor.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptor.java Tue Mar 13 00:31:12 2007
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.implementation.java;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URI;
+import java.util.LinkedList;
+
+import org.apache.tuscany.spi.component.AtomicComponent;
+import org.apache.tuscany.spi.component.ComponentException;
+import org.apache.tuscany.spi.component.InstanceWrapper;
+import org.apache.tuscany.spi.component.InvalidConversationSequenceException;
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.component.TargetException;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.Message;
+
+/**
+ * Responsible for dispatching an invocation to a Java component implementation instance.
+ *
+ * @version $Rev$ $Date$
+ */
+public class JavaInvokerInterceptor implements Interceptor {
+    /* indicates that no conversational sequence is associated with the message */
+    public final static short NONE = 0;
+    /* indicates that the message initiates a conversation */
+    public final static short START = 1;
+    /* indicates that the message continues a conversation */
+    public final static short CONTINUE = 2;
+    /* indicates that the message ends a conversation */
+    public final static short END = 3;
+
+    private Method operation;
+    private AtomicComponent component;
+    private WorkContext workContext;
+    private ScopeContainer scopeContainer;
+
+    /**
+     * Creates a new interceptor instance.
+     *
+     * @param operation      the method to invoke on the target instance
+     * @param component      the target component
+     * @param workContext    the work context
+     * @param scopeContainer the ScopeContainer that manages implementation instances for the target component
+     */
+    public JavaInvokerInterceptor(Method operation,
+                                  AtomicComponent component,
+                                  ScopeContainer scopeContainer,
+                                  WorkContext workContext) {
+        this.operation = operation;
+        this.component = component;
+        this.workContext = workContext;
+        this.scopeContainer = scopeContainer;
+    }
+
+    public void setNext(Interceptor next) {
+        throw new IllegalStateException("This interceptor must be the last one in an target interceptor chain");
+    }
+
+    public Interceptor getNext() {
+        return null;
+    }
+
+    public boolean isOptimizable() {
+        return true;
+    }
+
+    public Message invoke(Message msg) {
+        try {
+            Object messageId = msg.getMessageId();
+            if (messageId != null) {
+                workContext.setCorrelationId(messageId);
+            }
+            LinkedList<URI> callbackRoutingChain = msg.getCallbackUris();
+            if (callbackRoutingChain != null) {
+                workContext.setCallbackUris(callbackRoutingChain);
+            }
+            Object resp = invokeTarget(msg.getBody(), msg.getConversationSequence());
+            msg.setBody(resp);
+        } catch (InvocationTargetException e) {
+            msg.setBodyWithFault(e.getCause());
+        }
+        return msg;
+    }
+
+    @SuppressWarnings({"unchecked"})
+    private Object invokeTarget(final Object payload, final short sequence) throws InvocationTargetException {
+        try {
+            InstanceWrapper<?> wrapper = getInstance(sequence);
+            Object instance = wrapper.getInstance();
+            Object ret;
+            if (payload != null && !payload.getClass().isArray()) {
+                ret = operation.invoke(instance, payload);
+            } else {
+                ret = operation.invoke(instance, (Object[]) payload);
+            }
+            scopeContainer.returnWrapper(component, wrapper);
+            if (sequence == END) {
+                // if end conversation, remove resource
+                scopeContainer.remove(component);
+            }
+            return ret;
+        } catch (IllegalAccessException e) {
+            throw new InvocationTargetException(e);
+        } catch (ComponentException e) {
+            throw new InvocationTargetException(e);
+        }
+    }
+
+    /**
+     * Resolves the target service instance or returns a cached one
+     *
+     * @param sequence the conversational sequence
+     * @return the InstanceWrapper
+     * @throws TargetException if an exception getting the wrapper is encountered
+     */
+    private InstanceWrapper<?> getInstance(short sequence) throws TargetException {
+        switch (sequence) {
+            case NONE:
+                return scopeContainer.getWrapper(component);
+            case START:
+                return scopeContainer.getWrapper(component);
+            case CONTINUE:
+            case END:
+                return scopeContainer.getAssociatedWrapper(component);
+            default:
+                throw new InvalidConversationSequenceException("Unknown sequence type", String.valueOf(sequence));
+        }
+    }
+
+
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorImplWireTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorImplWireTestCase.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorImplWireTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/ConnectorImplWireTestCase.java Tue Mar 13 00:31:12 2007
@@ -50,13 +50,11 @@
 
         AtomicComponent source = EasyMock.createMock(AtomicComponent.class);
         EasyMock.expect(source.getUri()).andReturn(SOURCE_URI).atLeastOnce();
-        source.attachWire(EasyMock.isA(Wire.class));
+        source.attachWire(EasyMock.isA(Wire.class), (PhysicalWireSourceDefinition)EasyMock.anyObject());
         EasyMock.replay(source);
         manager.register(source);
 
         AtomicComponent target = EasyMock.createMock(AtomicComponent.class);
-        //EasyMock.expect(target.getScope()).andReturn(Scope.COMPOSITE);
-        //EasyMock.expect(target.isOptimizable()).andReturn(false);
         EasyMock.expect(target.getUri()).andReturn(TARGET_URI).atLeastOnce();
         target.createTargetInvoker((String) EasyMock.isNull(), EasyMock.isA(PhysicalOperationDefinition.class));
         EasyMock.expectLastCall().andReturn(null);

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/PassByValueWirePostProcessorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/PassByValueWirePostProcessorTestCase.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/PassByValueWirePostProcessorTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/databinding/impl/PassByValueWirePostProcessorTestCase.java Tue Mar 13 00:31:12 2007
@@ -30,6 +30,8 @@
 import org.apache.tuscany.spi.extension.AtomicComponentExtension;
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.model.physical.PhysicalOperationDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireSourceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireTargetDefinition;
 import org.apache.tuscany.spi.wire.TargetInvoker;
 import org.apache.tuscany.spi.wire.Wire;
 
@@ -159,6 +161,14 @@
 
         public void attachWires(List<Wire> wires) {
 
+        }
+
+        public void attachWire(Wire wire, PhysicalWireSourceDefinition defintion) {
+            throw new UnsupportedOperationException();
+        }
+
+        public void attachWire(Wire wire, PhysicalWireTargetDefinition defintion) {
+            throw new UnsupportedOperationException();
         }
 
         public Object createInstance() throws ObjectCreationException {

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorBasicTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorBasicTestCase.java?view=auto&rev=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorBasicTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorBasicTestCase.java Tue Mar 13 00:31:12 2007
@@ -0,0 +1,171 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.implementation.java;
+
+import java.lang.reflect.Method;
+
+import org.apache.tuscany.spi.component.InstanceWrapper;
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+
+import junit.framework.TestCase;
+import org.easymock.classextension.EasyMock;
+
+public class JavaInvokerInterceptorBasicTestCase extends TestCase {
+    private Method echoMethod;
+    private Method arrayMethod;
+    private Method nullParamMethod;
+    private Method primitiveMethod;
+    private Method checkedMethod;
+    private Method runtimeMethod;
+    private WorkContext context;
+    private ScopeContainer scopeContainer;
+    private InstanceWrapper wrapper;
+    private TestBean bean;
+    private JavaAtomicComponent component;
+
+    public JavaInvokerInterceptorBasicTestCase(String arg0) {
+        super(arg0);
+    }
+
+    public void testObjectInvoke() throws Throwable {
+        JavaInvokerInterceptor invoker = new JavaInvokerInterceptor(echoMethod, component, scopeContainer, context);
+        Message message = new MessageImpl();
+        message.setBody("foo");
+        Message ret = invoker.invoke(message);
+        assertEquals("foo", ret.getBody());
+    }
+
+    public void testArrayInvoke() throws Throwable {
+        JavaInvokerInterceptor invoker = new JavaInvokerInterceptor(arrayMethod, component, scopeContainer, context);
+        String[] args = new String[]{"foo", "bar"};
+        Message message = new MessageImpl();
+        message.setBody(new Object[]{args});
+
+        Message ret = invoker.invoke(message);
+        String[] retA = (String[]) ret.getBody();
+        assertNotNull(retA);
+        assertEquals(2, retA.length);
+        assertEquals("foo", retA[0]);
+        assertEquals("bar", retA[1]);
+    }
+
+    public void testNullInvoke() throws Throwable {
+        JavaInvokerInterceptor invoker =
+            new JavaInvokerInterceptor(nullParamMethod, component, scopeContainer, context);
+        Message message = new MessageImpl();
+        Message ret = invoker.invoke(message);
+        String retS = (String) ret.getBody();
+        assertEquals("foo", retS);
+    }
+
+    public void testPrimitiveInvoke() throws Throwable {
+        JavaInvokerInterceptor invoker =
+            new JavaInvokerInterceptor(primitiveMethod, component, scopeContainer, context);
+        Message message = new MessageImpl();
+        message.setBody(new Integer[]{1});
+        Message ret = invoker.invoke(message);
+        Integer retI = (Integer) ret.getBody();
+        assertEquals(1, retI.intValue());
+    }
+
+    public void testInvokeCheckedException() throws Throwable {
+        JavaInvokerInterceptor invoker = new JavaInvokerInterceptor(checkedMethod, component, scopeContainer, context);
+        Message message = new MessageImpl();
+        Message ret = invoker.invoke(message);
+        assertTrue(ret.isFault());
+    }
+
+    public void testInvokeRuntimeException() throws Throwable {
+        JavaInvokerInterceptor invoker = new JavaInvokerInterceptor(runtimeMethod, component, scopeContainer, context);
+        Message message = new MessageImpl();
+        Message ret = invoker.invoke(message);
+        assertTrue(ret.isFault());
+    }
+
+    public void setUp() throws Exception {
+        echoMethod = TestBean.class.getDeclaredMethod("echo", String.class);
+        arrayMethod = TestBean.class.getDeclaredMethod("arrayEcho", String[].class);
+        nullParamMethod = TestBean.class.getDeclaredMethod("nullParam", (Class[]) null);
+        primitiveMethod = TestBean.class.getDeclaredMethod("primitiveEcho", Integer.TYPE);
+        checkedMethod = TestBean.class.getDeclaredMethod("checkedException", (Class[]) null);
+        runtimeMethod = TestBean.class.getDeclaredMethod("runtimeException", (Class[]) null);
+        assertNotNull(echoMethod);
+        assertNotNull(checkedMethod);
+        assertNotNull(runtimeMethod);
+
+        context = EasyMock.createNiceMock(WorkContext.class);
+        component = EasyMock.createMock(JavaAtomicComponent.class);
+        scopeContainer = EasyMock.createNiceMock(ScopeContainer.class);
+        wrapper = EasyMock.createNiceMock(InstanceWrapper.class);
+        bean = new TestBean();
+        EasyMock.replay(component);
+        EasyMock.expect(scopeContainer.getScope()).andReturn(Scope.COMPOSITE);
+        EasyMock.expect(scopeContainer.getWrapper(component)).andReturn(wrapper);
+        EasyMock.replay(scopeContainer);
+        EasyMock.expect(wrapper.getInstance()).andReturn(bean);
+        EasyMock.replay(wrapper);
+    }
+
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    private class TestBean {
+
+        public String echo(String msg) throws Exception {
+            assertEquals("foo", msg);
+            return msg;
+        }
+
+        public String[] arrayEcho(String[] msg) throws Exception {
+            assertNotNull(msg);
+            assertEquals(2, msg.length);
+            assertEquals("foo", msg[0]);
+            assertEquals("bar", msg[1]);
+            return msg;
+        }
+
+        public String nullParam() throws Exception {
+            return "foo";
+        }
+
+        public int primitiveEcho(int i) throws Exception {
+            return i;
+        }
+
+        public void checkedException() throws TestException {
+            throw new TestException();
+        }
+
+        public void runtimeException() throws TestRuntimeException {
+            throw new TestRuntimeException();
+        }
+    }
+
+    public class TestException extends Exception {
+    }
+
+    public class TestRuntimeException extends RuntimeException {
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorBasicTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorBasicTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorSequenceTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorSequenceTestCase.java?view=auto&rev=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorSequenceTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorSequenceTestCase.java Tue Mar 13 00:31:12 2007
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.implementation.java;
+
+import java.lang.reflect.Method;
+
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.component.InstanceWrapper;
+import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
+import junit.framework.TestCase;
+import org.easymock.classextension.EasyMock;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JavaInvokerInterceptorSequenceTestCase extends TestCase {
+    private Method method;
+    private Foo foo;
+    private JavaAtomicComponent component;
+    private ScopeContainer scopeContainer;
+    private InstanceWrapper wrapper;
+
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        method = Foo.class.getMethod("invoke");
+        foo = EasyMock.createMock(Foo.class);
+        foo.invoke();
+        EasyMock.replay(foo);
+
+        component = EasyMock.createMock(JavaAtomicComponent.class);
+        scopeContainer = EasyMock.createMock(ScopeContainer.class);
+        wrapper = EasyMock.createMock(InstanceWrapper.class);
+        EasyMock.expect(wrapper.getInstance()).andReturn(foo);
+        EasyMock.replay(wrapper);
+    }
+
+    /**
+     * Verifies an invocation marked as non-conversational has an existing or new instance returned
+     */
+    public void testNoSequence() throws Exception {
+        EasyMock.expect(scopeContainer.getWrapper(component)).andReturn(wrapper);
+        scopeContainer.returnWrapper(component, wrapper);
+        EasyMock.replay(component);
+        EasyMock.replay(scopeContainer);
+        JavaInvokerInterceptor invoker = new JavaInvokerInterceptor(method, component, scopeContainer, null);
+        Message msg = new MessageImpl();
+        msg.setConversationSequence(TargetInvoker.NONE);
+        invoker.invoke(msg);
+        EasyMock.verify(foo);
+        EasyMock.verify(component);
+        EasyMock.verify(wrapper);
+    }
+
+    /**
+     * Verifies that an invocation marked as starting a conversation has a new instance returned
+     */
+    public void testStartSequence() throws Exception {
+        EasyMock.replay(component);
+        EasyMock.expect(scopeContainer.getWrapper(component)).andReturn(wrapper);
+        scopeContainer.returnWrapper(component, wrapper);
+        EasyMock.replay(scopeContainer);
+        JavaInvokerInterceptor invoker = new JavaInvokerInterceptor(method, component, scopeContainer, null);
+        Message msg = new MessageImpl();
+        msg.setConversationSequence(TargetInvoker.START);
+        invoker.invoke(msg);
+        EasyMock.verify(foo);
+        EasyMock.verify(component);
+        EasyMock.verify(scopeContainer);
+        EasyMock.verify(wrapper);
+    }
+
+    /**
+     * Verifies that an invocation marked as continuing a conversation has an associated instance returned
+     */
+    public void testContinueSequence() throws Exception {
+        EasyMock.replay(component);
+        EasyMock.expect(scopeContainer.getAssociatedWrapper(component)).andReturn(wrapper);
+        scopeContainer.returnWrapper(component, wrapper);
+        EasyMock.replay(scopeContainer);
+        JavaInvokerInterceptor invoker = new JavaInvokerInterceptor(method, component, scopeContainer, null);
+        Message msg = new MessageImpl();
+        msg.setConversationSequence(TargetInvoker.CONTINUE);
+        invoker.invoke(msg);
+        EasyMock.verify(foo);
+        EasyMock.verify(component);
+        EasyMock.verify(scopeContainer);
+        EasyMock.verify(wrapper);
+    }
+
+    /**
+     * Verifies that an invocation marked as ending a conversation has an associated instance returned and it is removed
+     * following the dispatch to the instance
+     */
+    public void testEndSequence() throws Exception {
+        EasyMock.replay(component);
+        EasyMock.expect(scopeContainer.getAssociatedWrapper(component)).andReturn(wrapper);
+        scopeContainer.returnWrapper(component, wrapper);
+        scopeContainer.remove(component);
+        EasyMock.replay(scopeContainer);
+        JavaInvokerInterceptor invoker = new JavaInvokerInterceptor(method, component, scopeContainer, null);
+        Message msg = new MessageImpl();
+        msg.setConversationSequence(TargetInvoker.END);
+        invoker.invoke(msg);
+        EasyMock.verify(foo);
+        EasyMock.verify(component);
+        EasyMock.verify(scopeContainer);
+        EasyMock.verify(wrapper);
+    }
+
+
+    private interface Foo {
+        void invoke();
+    }
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorSequenceTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorSequenceTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorStatelessDestroyTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorStatelessDestroyTestCase.java?view=auto&rev=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorStatelessDestroyTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorStatelessDestroyTestCase.java Tue Mar 13 00:31:12 2007
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.implementation.java;
+
+import java.lang.reflect.Method;
+
+import org.apache.tuscany.spi.component.InstanceWrapper;
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+
+import junit.framework.TestCase;
+import org.easymock.classextension.EasyMock;
+
+public class JavaInvokerInterceptorStatelessDestroyTestCase extends TestCase {
+    private JavaAtomicComponent component;
+    private ScopeContainer scopeContainer;
+    private InstanceWrapper wrapper;
+    private Method echoMethod;
+
+    @SuppressWarnings({"unchecked"})
+    public void testDestroy() throws Exception {
+        EasyMock.expect(scopeContainer.getWrapper(component)).andReturn(wrapper);
+        EasyMock.expect(wrapper.getInstance()).andReturn(new Echo());
+        scopeContainer.returnWrapper(component, wrapper);
+        EasyMock.replay(component);
+        EasyMock.replay(scopeContainer);
+        EasyMock.replay(wrapper);
+        JavaInvokerInterceptor invoker = new JavaInvokerInterceptor(echoMethod, component, scopeContainer, null);
+        Message message = new MessageImpl();
+        message.setBody("foo");
+        Message ret = invoker.invoke(message);
+        assertEquals("foo", ret.getBody());
+        EasyMock.verify(component);
+        EasyMock.verify(scopeContainer);
+        EasyMock.verify(wrapper);
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        echoMethod = Echo.class.getDeclaredMethod("echo", String.class);
+        component = EasyMock.createMock(JavaAtomicComponent.class);
+        scopeContainer = EasyMock.createNiceMock(ScopeContainer.class);
+        wrapper = EasyMock.createNiceMock(InstanceWrapper.class);
+    }
+
+    public static class Echo {
+        public String echo(String message) throws Exception {
+            return message;
+        }
+
+    }
+
+}

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorStatelessDestroyTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaInvokerInterceptorStatelessDestroyTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerBasicInvocationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerBasicInvocationTestCase.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerBasicInvocationTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/JavaTargetInvokerBasicInvocationTestCase.java Tue Mar 13 00:31:12 2007
@@ -21,10 +21,9 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
-import org.apache.tuscany.spi.component.WorkContext;
-import org.apache.tuscany.spi.component.ScopeContainer;
 import org.apache.tuscany.spi.component.InstanceWrapper;
-import org.apache.tuscany.spi.extension.ExecutionMonitor;
+import org.apache.tuscany.spi.component.ScopeContainer;
+import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.model.Scope;
 import static org.apache.tuscany.spi.wire.TargetInvoker.NONE;
 import org.apache.tuscany.spi.wire.Wire;

Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Component.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Component.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Component.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/Component.java Tue Mar 13 00:31:12 2007
@@ -25,6 +25,8 @@
 
 import org.apache.tuscany.spi.model.PropertyValue;
 import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.model.physical.PhysicalWireSourceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireTargetDefinition;
 import org.apache.tuscany.spi.wire.Wire;
 
 /**
@@ -143,5 +145,21 @@
      * @param wires the wire to attach
      */
     void attachWires(List<Wire> wires);
+
+    /**
+     * Attaches a wire to the component acting as a source
+     *
+     * @param wire      the wire to attach
+     * @param defintion metadata for attaching the wire
+     */
+    void attachWire(Wire wire, PhysicalWireSourceDefinition defintion);
+
+    /**
+     * Attaches a wire to the component acting as a target
+     *
+     * @param wire      the wire to attach
+     * @param defintion metadata for attaching the wire
+     */
+    void attachWire(Wire wire, PhysicalWireTargetDefinition defintion);
 
 }

Modified: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/AbstractComponentExtensionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/AbstractComponentExtensionTestCase.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/AbstractComponentExtensionTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/AbstractComponentExtensionTestCase.java Tue Mar 13 00:31:12 2007
@@ -28,6 +28,8 @@
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.model.physical.PhysicalOperationDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireSourceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireTargetDefinition;
 import org.apache.tuscany.spi.wire.TargetInvoker;
 import org.apache.tuscany.spi.wire.Wire;
 
@@ -89,6 +91,14 @@
             }
 
             public void attachWires(List<Wire> wires) {
+                throw new UnsupportedOperationException();
+            }
+
+            public void attachWire(Wire wire, PhysicalWireSourceDefinition defintion) {
+                throw new UnsupportedOperationException();
+            }
+
+            public void attachWire(Wire wire, PhysicalWireTargetDefinition defintion) {
                 throw new UnsupportedOperationException();
             }
 

Modified: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/AtomicComponentExtensionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/AtomicComponentExtensionTestCase.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/AtomicComponentExtensionTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/AtomicComponentExtensionTestCase.java Tue Mar 13 00:31:12 2007
@@ -29,6 +29,8 @@
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.model.Scope;
 import org.apache.tuscany.spi.model.physical.PhysicalOperationDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireSourceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireTargetDefinition;
 import org.apache.tuscany.spi.wire.TargetInvoker;
 import org.apache.tuscany.spi.wire.Wire;
 
@@ -92,6 +94,14 @@
         }
 
         public void attachCallbackWire(Wire wire) {
+            throw new AssertionFailedError();
+        }
+
+        public void attachWire(Wire wire, PhysicalWireSourceDefinition defintion) {
+            throw new AssertionFailedError();
+        }
+
+        public void attachWire(Wire wire, PhysicalWireTargetDefinition defintion) {
             throw new AssertionFailedError();
         }
 

Modified: incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/CompositeComponentExtensionTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/CompositeComponentExtensionTestCase.java?view=diff&rev=517573&r1=517572&r2=517573
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/CompositeComponentExtensionTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/CompositeComponentExtensionTestCase.java Tue Mar 13 00:31:12 2007
@@ -23,10 +23,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.component.Service;
 import org.apache.tuscany.spi.component.ServiceBinding;
-import org.apache.tuscany.spi.component.Component;
 import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.physical.PhysicalWireSourceDefinition;
+import org.apache.tuscany.spi.model.physical.PhysicalWireTargetDefinition;
 import org.apache.tuscany.spi.wire.Wire;
 
 import junit.framework.TestCase;
@@ -74,6 +76,14 @@
             }
 
             public void attachCallbackWire(Wire wire) {
+                throw new UnsupportedOperationException();
+            }
+
+            public void attachWire(Wire wire, PhysicalWireSourceDefinition defintion) {
+                throw new UnsupportedOperationException();
+            }
+
+            public void attachWire(Wire wire, PhysicalWireTargetDefinition defintion) {
                 throw new UnsupportedOperationException();
             }
         };



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