Author: jmarino
Date: Tue Oct 31 00:29:57 2006
New Revision: 469411

URL: http://svn.apache.org/viewvc?view=rev&rev=469411
Log:
[PATCH] Tuscany-648 from Ignacio applying 
SimplerCompositeReferenceInvocation5.patch

Modified:
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReference.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceTargetInvoker.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeService.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/OperationCallbackInvocationHandler.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/OperationOutboundInvocationHandler.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemInboundWireImpl.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java
    
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerInvocationExceptionTestCase.java
    
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerTestCase.java
    
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerThrowableTestCase.java
    
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java
    
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/InboundWire.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java
    
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java
    
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java
    
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Reference.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
    
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceCallbackTargetInvoker.java

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/WorkContextImpl.java
 Tue Oct 31 00:29:57 2006
@@ -20,6 +20,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Stack;
 
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.WorkContext;
@@ -35,6 +36,7 @@
     private static final Object REMOTE_CONTEXT = new Object();
     private static final Object MESSAGE_ID = new Object();
     private static final Object CORRELATION_ID = new Object();
+    private static final Object CALLBACK_ROUTING_CHAIN = new Object();
 
     // TODO implement propagation strategy for creating new threads
 
@@ -85,6 +87,23 @@
         map.put(CORRELATION_ID, correlationId);
     }
 
+    public Stack<Object> getCurrentCallbackRoutingChain() {
+        Map<Object, Object> map = workContext.get();
+        if (map == null) {
+            return null;
+        }
+        return (Stack<Object>)map.get(CALLBACK_ROUTING_CHAIN);
+    }
+    
+    public void setCurrentCallbackRoutingChain(Stack<Object> 
callbackRoutingChain) {
+        Map<Object, Object> map = workContext.get();
+        if (map == null) {
+            map = new HashMap<Object, Object>();
+            workContext.set(map);
+        }
+        map.put(CALLBACK_ROUTING_CHAIN, callbackRoutingChain);
+    }
+    
     public CompositeComponent getRemoteComponent() {
         Map<Object, Object> map = workContext.get();
         if (map == null) {

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReference.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReference.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReference.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReference.java
 Tue Oct 31 00:29:57 2006
@@ -38,7 +38,7 @@
     }
 
     public TargetInvoker createTargetInvoker(ServiceContract contract, 
Operation operation) {
-        return new CompositeReferenceTargetInvoker(operation, inboundWire, 
outboundWire);
+        return new CompositeReferenceTargetInvoker(operation, outboundWire);
     }
 
     public TargetInvoker createCallbackTargetInvoker(ServiceContract contract, 
Operation operation) {

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceTargetInvoker.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceTargetInvoker.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceTargetInvoker.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceTargetInvoker.java
 Tue Oct 31 00:29:57 2006
@@ -19,9 +19,6 @@
 package org.apache.tuscany.core.implementation.composite;
 
 import org.apache.tuscany.spi.model.Operation;
-import org.apache.tuscany.spi.wire.InboundWire;
-import org.apache.tuscany.spi.wire.InvocationRuntimeException;
-import org.apache.tuscany.spi.wire.Message;
 import org.apache.tuscany.spi.wire.OutboundWire;
 
 /**
@@ -29,24 +26,12 @@
  */
 public class CompositeReferenceTargetInvoker extends 
AbstractCompositeReferenceTargetInvoker {
 
-    private InboundWire inboundWire;
     private OutboundWire outboundWire;
 
     public CompositeReferenceTargetInvoker(Operation operation,
-                                           InboundWire inboundWire,
                                            OutboundWire outboundWire) {
         super(operation);
-        this.inboundWire = inboundWire;
         this.outboundWire = outboundWire;
-    }
-
-    public Message invoke(Message msg) throws InvocationRuntimeException {
-        Object messageId = msg.getMessageId();
-        // If there is no callback, there may not be a message id
-        if (messageId != null) {
-            inboundWire.addMapping(messageId, msg.getFromAddress());
-        }
-        return super.invoke(msg);
     }
 
     public CompositeReferenceTargetInvoker clone() throws 
CloneNotSupportedException {

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeService.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeService.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeService.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/CompositeService.java
 Tue Oct 31 00:29:57 2006
@@ -43,7 +43,7 @@
      * FIXME !!! Notice that this method is not defined in the SPI !!!
      */
     public TargetInvoker createTargetInvoker(ServiceContract contract, 
Operation operation) {
-        return new CompositeReferenceTargetInvoker(operation, inboundWire, 
outboundWire);
+        return new CompositeReferenceTargetInvoker(operation, outboundWire);
     }
 
     /**

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/OperationCallbackInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/OperationCallbackInvocationHandler.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/OperationCallbackInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/OperationCallbackInvocationHandler.java
 Tue Oct 31 00:29:57 2006
@@ -38,10 +38,9 @@
     }
 
     public Message invoke(Operation operation, Message msg) throws Throwable {
-        Object correlationId = msg.getCorrelationId();
-        Object targetAddress = inboundWire.retrieveMapping(correlationId);
+        Object targetAddress = msg.popFromAddress();
         if (targetAddress == null) {
-            throw new AssertionError("No from address associated with message 
id [" + correlationId + "]");
+            throw new AssertionError("Popped a null from address from 
message");
         }
         //TODO optimize as this is slow in local invocations
         Map<Operation<?>, OutboundInvocationChain> 
sourceCallbackInvocationChains =

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/OperationOutboundInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/OperationOutboundInvocationHandler.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/OperationOutboundInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/OperationOutboundInvocationHandler.java
 Tue Oct 31 00:29:57 2006
@@ -42,6 +42,7 @@
      */
     private Map<Operation, ChainHolder> chains;
     private Object fromAddress;
+    private boolean contractHasCallback;
 
     public OperationOutboundInvocationHandler(OutboundWire wire) {
         Map<Operation<?>, OutboundInvocationChain> invocationChains = 
wire.getInvocationChains();
@@ -52,6 +53,7 @@
             Operation operation = entry.getKey();
             this.chains.put(operation, new ChainHolder(entry.getValue()));
         }
+        this.contractHasCallback = 
wire.getServiceContract().getCallbackClass() != null;
     }
 
     public Message invoke(Operation operation, Message msg) throws Throwable {
@@ -83,8 +85,10 @@
             invoker = chain.getTargetInvoker();
         }
 
-        // Setting the from address only needs to happen in the outbound 
(forward) direction
-        msg.setFromAddress(fromAddress);
+        // Pushing the from address only needs to happen in the outbound 
(forward) direction for callbacks
+        if (contractHasCallback) {
+            msg.pushFromAddress(fromAddress);
+        }
 
         return invoke(chain, invoker, msg);
     }

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemInboundWireImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemInboundWireImpl.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemInboundWireImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemInboundWireImpl.java
 Tue Oct 31 00:29:57 2006
@@ -144,16 +144,4 @@
     public void setContainer(SCAObject container) {
         this.container = container;
     }
-
-    public void addMapping(Object messageId, Object fromAddress) {
-        throw new UnsupportedOperationException();
-    }
-
-    public Object retrieveMapping(Object messageId) {
-        return null;
-    }
-
-    public void removeMapping(Object messageId) {
-        throw new UnsupportedOperationException();
-    }
 }

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
 Tue Oct 31 00:29:57 2006
@@ -20,7 +20,6 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.tuscany.spi.component.SCAObject;
 import org.apache.tuscany.spi.component.TargetException;
@@ -47,7 +46,6 @@
     private Map<Object, Map<Operation<?>, OutboundInvocationChain>> 
callbackSourceChainMaps =
         new HashMap<Object, Map<Operation<?>, OutboundInvocationChain>>();
     private SCAObject container;
-    private Map<Object, Object> msgIdsToAddrs = new ConcurrentHashMap<Object, 
Object>();
 
     public Object getTargetService() throws TargetException {
         if (targetWire != null) {
@@ -144,17 +142,5 @@
 
     public void setContainer(SCAObject container) {
         this.container = container;
-    }
-
-    public void addMapping(Object messageId, Object fromAddress) {
-        this.msgIdsToAddrs.put(messageId, fromAddress);
-    }
-
-    public Object retrieveMapping(Object messageId) {
-        return this.msgIdsToAddrs.get(messageId);
-    }
-
-    public void removeMapping(Object messageId) {
-        this.msgIdsToAddrs.remove(messageId);
     }
 }

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/NonBlockingBridgingInterceptor.java
 Tue Oct 31 00:29:57 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.core.wire;
 
+import java.util.Stack;
+
 import org.osoa.sca.CompositeContext;
 import org.osoa.sca.CurrentCompositeContext;
 import org.osoa.sca.SCA;
@@ -139,6 +141,22 @@
         }
 
         public void setFromAddress(Object fromAddress) {
+            throw new UnsupportedOperationException();
+        }
+
+        public Object popFromAddress() {
+            return null;
+        }
+
+        public void pushFromAddress(Object fromAddress) {
+            throw new UnsupportedOperationException();
+        }
+        
+        public Stack<Object> getCallbackRoutingChain() {
+            return null;
+        }
+        
+        public void setCallbackRoutingChain(Stack<Object> fromAddresses) {
             throw new UnsupportedOperationException();
         }
 

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
 Tue Oct 31 00:29:57 2006
@@ -21,6 +21,7 @@
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.util.Map;
+import java.util.Stack;
 
 import org.apache.tuscany.spi.component.WorkContext;
 import static org.apache.tuscany.spi.idl.java.JavaIDLUtils.findOperation;
@@ -52,13 +53,16 @@
     }
 
     public Object invoke(Object proxy, Method method, Object[] args) throws 
Throwable {
-        Object messageId = context.getCurrentMessageId();
-        context.setCurrentMessageId(null);
         Object correlationId = context.getCurrentCorrelationId();
         context.setCurrentCorrelationId(null);
-        Object targetAddress = inboundWire.retrieveMapping(correlationId);
+        Stack<Object> callbackRoutingChain = 
context.getCurrentCallbackRoutingChain();
+        context.setCurrentCallbackRoutingChain(null);
+        if (callbackRoutingChain == null) {
+            throw new AssertionError("Missing stack of from addresses");
+        }
+        Object targetAddress = callbackRoutingChain.pop();
         if (targetAddress == null) {
-            throw new AssertionError("No from address associated with message 
id [" + correlationId + "]");
+            throw new AssertionError("Popped a null from address from stack");
         }
         //TODO optimize as this is slow in local invocations
         Map<Operation<?>, OutboundInvocationChain> 
sourceCallbackInvocationChains =
@@ -66,7 +70,7 @@
         Operation operation = findOperation(method, 
sourceCallbackInvocationChains.keySet());
         OutboundInvocationChain chain = 
sourceCallbackInvocationChains.get(operation);
         TargetInvoker invoker = chain.getTargetInvoker();
-        return invoke(chain, invoker, args, messageId, correlationId);
+        return invoke(chain, invoker, args, correlationId, 
callbackRoutingChain);
     }
 
 

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKOutboundInvocationHandler.java
 Tue Oct 31 00:29:57 2006
@@ -27,7 +27,6 @@
 import static org.apache.tuscany.spi.idl.java.JavaIDLUtils.findMethod;
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.wire.AbstractOutboundInvocationHandler;
-import org.apache.tuscany.spi.wire.MessageId;
 import org.apache.tuscany.spi.wire.OutboundInvocationChain;
 import org.apache.tuscany.spi.wire.OutboundWire;
 import org.apache.tuscany.spi.wire.TargetInvoker;
@@ -111,8 +110,7 @@
             assert chain != null;
             invoker = chain.getTargetInvoker();
         }
-        Object messageId = (contractHasCallback ? new MessageId() : null);
-        return invoke(chain, invoker, args, messageId, null);
+        return invoke(chain, invoker, args, null, null);
     }
 
     public Object invoke(Method method, Object[] args) throws Throwable {
@@ -120,7 +118,7 @@
     }
 
     protected Object getFromAddress() {
-        return fromAddress;
+        return (contractHasCallback ? fromAddress : null);
     }
 
     /**

Modified: 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerInvocationExceptionTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerInvocationExceptionTestCase.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerInvocationExceptionTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerInvocationExceptionTestCase.java
 Tue Oct 31 00:29:57 2006
@@ -38,12 +38,9 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        Object id = new Object();
-        Object corrId = new Object();
         Object targetAddress = new Object();
         message = new MessageImpl();
-        message.setMessageId(id);
-        message.setCorrelationId(corrId);
+        message.pushFromAddress(targetAddress);
         message.setBody("foo");
         Message response = new MessageImpl();
         response.setBody("response");
@@ -56,7 +53,6 @@
         Map<Operation<?>, OutboundInvocationChain> chains = new 
HashMap<Operation<?>, OutboundInvocationChain>();
         chains.put(operation, chain);
         wire = EasyMock.createMock(InboundWire.class);
-        EasyMock.expect(wire.retrieveMapping(corrId)).andReturn(targetAddress);
         
EasyMock.expect(wire.getSourceCallbackInvocationChains(targetAddress)).andReturn(chains);
         EasyMock.replay(wire);
         invoker = new CompositeReferenceCallbackTargetInvoker(operation, wire);

Modified: 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerTestCase.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerTestCase.java
 Tue Oct 31 00:29:57 2006
@@ -55,12 +55,9 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        Object id = new Object();
-        Object corrId = new Object();
         Object targetAddress = new Object();
         message = new MessageImpl();
-        message.setMessageId(id);
-        message.setCorrelationId(corrId);
+        message.pushFromAddress(targetAddress);
         message.setBody("foo");
         Message response = new MessageImpl();
         response.setBody("response");
@@ -75,7 +72,6 @@
         Map<Operation<?>, OutboundInvocationChain> chains = new 
HashMap<Operation<?>, OutboundInvocationChain>();
         chains.put(operation, chain);
         wire = EasyMock.createMock(InboundWire.class);
-        EasyMock.expect(wire.retrieveMapping(corrId)).andReturn(targetAddress);
         
EasyMock.expect(wire.getSourceCallbackInvocationChains(targetAddress)).andReturn(chains);
         EasyMock.replay(wire);
         

Modified: 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerThrowableTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerThrowableTestCase.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerThrowableTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/CompositeReferenceCallbackTargetInvokerThrowableTestCase.java
 Tue Oct 31 00:29:57 2006
@@ -64,12 +64,9 @@
     @SuppressWarnings("unchecked")
     protected void setUp() throws Exception {
         super.setUp();
-        Object id = new Object();
-        Object corrId = new Object();
         Object targetAddress = new Object();
         message = new MessageImpl();
-        message.setMessageId(id);
-        message.setCorrelationId(corrId);
+        message.pushFromAddress(targetAddress);
         message.setBody("foo");
         Message response = new MessageImpl();
         response.setBody("response");
@@ -88,7 +85,6 @@
         Map<Operation<?>, OutboundInvocationChain> chains = new 
HashMap<Operation<?>, OutboundInvocationChain>();
         chains.put(operation, chain);
         wire = EasyMock.createMock(InboundWire.class);
-        EasyMock.expect(wire.retrieveMapping(corrId)).andReturn(targetAddress);
         
EasyMock.expect(wire.getSourceCallbackInvocationChains(targetAddress)).andReturn(chains);
         EasyMock.replay(wire);
         invoker = new CompositeReferenceCallbackTargetInvoker(operation, wire);

Modified: 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/integration/component/OutboundWireToJavaTestCase.java
 Tue Oct 31 00:29:57 2006
@@ -184,6 +184,7 @@
         configuration.setInstanceFactory(new 
PojoObjectFactory<TargetImpl>(TargetImpl.class.getConstructor()));
         configuration.addServiceInterface(Target.class);
         configuration.setParent(parent);
+        configuration.setWorkContext(workContext);
 
         JavaAtomicComponent source = new JavaAtomicComponent("source", 
configuration);
         OutboundWire outboundWire = createOutboundWire(new 
QualifiedName("target/Target"), Target.class);

Modified: 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/java/mock/MockFactory.java
 Tue Oct 31 00:29:57 2006
@@ -90,6 +90,7 @@
         }
         configuration.addServiceInterface(DummyImpl.class);
         configuration.setWireService(WIRE_SERVICE);
+        configuration.setWorkContext(new WorkContextImpl());
         return new JavaAtomicComponent(instance.getClass().getName(), 
configuration);
     }
 
@@ -101,6 +102,7 @@
         configuration.setInstanceFactory(new 
PojoObjectFactory(clazz.getConstructor()));
         configuration.addServiceInterface(clazz);
         configuration.setWireService(WIRE_SERVICE);
+        configuration.setWorkContext(new WorkContextImpl());
         return new JavaAtomicComponent(name, configuration);
 
     }
@@ -182,6 +184,7 @@
         for (Map.Entry<String, Member> entry : members.entrySet()) {
             configuration.addReferenceSite(entry.getKey(), entry.getValue());
         }
+        configuration.setWorkContext(new WorkContextImpl());
         JavaAtomicComponent sourceContext = new 
JavaAtomicComponent(sourceName, configuration);
         OutboundWire outboundWire = createReferenceWire(targetName, 
sourceReferenceClass, sourceHeadInterceptor);
         sourceContext.addOutboundWire(outboundWire);
@@ -232,6 +235,7 @@
         for (Map.Entry<String, Member> entry : members.entrySet()) {
             configuration.addReferenceSite(entry.getKey(), entry.getValue());
         }
+        configuration.setWorkContext(new WorkContextImpl());
         JavaAtomicComponent sourceContext = new 
JavaAtomicComponent(sourceName, configuration);
         OutboundWire outboundWire = createReferenceWire(targetName, 
sourceReferenceClass, null);
         List<OutboundWire> factories = new ArrayList<OutboundWire>();
@@ -328,7 +332,7 @@
                 //FIXME should use target method, not 
outboundInvocationConfig.getMethod()
                 Method[] methods = 
outboundWire.getServiceContract().getInterfaceClass().getMethods();
                 Method m = JavaIDLUtils.findMethod(chain.getOperation(), 
methods);
-                TargetInvoker invoker = new JavaTargetInvoker(m, 
targetContext, null, null, null);
+                TargetInvoker invoker = new JavaTargetInvoker(m, 
targetContext, null, new WorkContextImpl(), null);
                 invoker.setCacheable(cacheable);
                 chain.setTargetInvoker(invoker);
             }

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/component/WorkContext.java
 Tue Oct 31 00:29:57 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.spi.component;
 
+import java.util.Stack;
+
 /**
  * Implementations track information associated with a request as it is 
processed by the runtime
  *
@@ -32,6 +34,16 @@
     Object getCurrentCorrelationId();
 
     void setCurrentCorrelationId(Object correlationId);
+    
+    /**
+     * Returns the current stack of SCAObject addresses
+     */
+    Stack<Object> getCurrentCallbackRoutingChain();
+    
+    /**
+     * Sets the current stack of SCAObject addresses
+     */
+    void setCurrentCallbackRoutingChain(Stack<Object> callbackRoutingChain);
 
     /**
      * Returns the composite where a remote request came in

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/TargetInvokerExtension.java
 Tue Oct 31 00:29:57 2006
@@ -19,6 +19,7 @@
 package org.apache.tuscany.spi.extension;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.Stack;
 
 import org.apache.tuscany.spi.wire.InvocationRuntimeException;
 import org.apache.tuscany.spi.wire.Message;
@@ -53,9 +54,12 @@
         try {
             Object messageId = msg.getMessageId();
             if (messageId != null) {
-                wire.addMapping(messageId, msg.getFromAddress());
                 workContext.setCurrentMessageId(null);
                 workContext.setCurrentCorrelationId(messageId);
+            }
+            Stack<Object> callbackRoutingChain = msg.getCallbackRoutingChain();
+            if (callbackRoutingChain != null) {
+                
workContext.setCurrentCallbackRoutingChain(callbackRoutingChain);
             }
             Object resp = invokeTarget(msg.getBody());
             msg.setBody(resp);

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandler.java
 Tue Oct 31 00:29:57 2006
@@ -19,6 +19,7 @@
 package org.apache.tuscany.spi.wire;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.Stack;
 
 
 /**
@@ -32,8 +33,8 @@
     protected Object invoke(OutboundInvocationChain chain,
                             TargetInvoker invoker,
                             Object[] args,
-                            Object messageId,
-                            Object correlationId)
+                            Object correlationId,
+                            Stack<Object> callbackRoutingChain)
         throws Throwable {
         Interceptor headInterceptor = chain.getHeadInterceptor();
         if (headInterceptor == null) {
@@ -53,14 +54,17 @@
             Message msg = new MessageImpl();
             msg.setTargetInvoker(invoker);
             Object fromAddress = getFromAddress();
-            if (fromAddress != null) {
-                msg.setFromAddress(fromAddress);
+            if (fromAddress != null && callbackRoutingChain != null) {
+                throw new AssertionError("Can't use both a from address and 
callback routing chain");
             }
-            if (messageId != null) {
-                msg.setMessageId(messageId);
+            if (fromAddress != null) {
+                msg.pushFromAddress(fromAddress);
             }
             if (correlationId != null) {
                 msg.setCorrelationId(correlationId);
+            }
+            if (callbackRoutingChain != null) {
+                msg.setCallbackRoutingChain(callbackRoutingChain);
             }
             msg.setBody(args);
             // dispatch the wire down the chain and get the response

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/InboundWire.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/InboundWire.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/InboundWire.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/InboundWire.java
 Tue Oct 31 00:29:57 2006
@@ -86,21 +86,4 @@
      * Set when a wire can be optimized; that is when no handlers or 
interceptors exist on either end
      */
     void setTargetWire(OutboundWire wire);
-
-    /**
-     * Creates an association between a message id and the address of the 
SCAObject that the corresponding message
-     * originates from
-     */
-    void addMapping(Object messageId, Object fromAddress);
-
-    /**
-     * Retrieves the SCAObject address that is associated with a message id
-     */
-    Object retrieveMapping(Object messageId);
-
-    /**
-     * Removes an association between a message id and the address of the 
SCAObject that the corresponding message
-     * originates from
-     */
-    void removeMapping(Object messageId);
 }

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/Message.java
 Tue Oct 31 00:29:57 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.spi.wire;
 
+import java.util.Stack;
+
 /**
  * Represents a request, response, or exception flowing through a wire
  *
@@ -45,14 +47,24 @@
     TargetInvoker getTargetInvoker();
 
     /**
-     * Returns the 'address' of the SCAObject where this message originates
+     * Returns the latest 'address' of the SCAObject where this message 
originated
      */
-    Object getFromAddress();
+    Object popFromAddress();
 
     /**
-     * Sets the 'address' of the SCAObject where this message originates
+     * Adds the latest 'address' of the SCAObject where this message originated
+     */
+    void pushFromAddress(Object fromAddress);
+    
+    /**
+     * Returns the stack of SCAObject addresses
+     */
+    Stack<Object> getCallbackRoutingChain();
+    
+    /**
+     * Sets the stack of SCAObject addresses
      */
-    void setFromAddress(Object fromAddress);
+    void setCallbackRoutingChain(Stack<Object> fromAddresses);
 
     /**
      * Returns the id of the message

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/wire/MessageImpl.java
 Tue Oct 31 00:29:57 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.spi.wire;
 
+import java.util.Stack;
+
 /**
  * The default implementation of a message flowed through a wire during an 
invocation
  *
@@ -27,7 +29,7 @@
 
     private Object body;
     private TargetInvoker invoker;
-    private Object fromAddress;
+    private Stack<Object> callbackRoutingChain;
     private Object messageId;
     private Object correlationId;
     private boolean isFault;
@@ -52,14 +54,25 @@
         return invoker;
     }
 
-    public Object getFromAddress() {
-        return fromAddress;
+    public Object popFromAddress() {
+        return callbackRoutingChain.pop();
     }
 
-    public void setFromAddress(Object fromAddress) {
-        this.fromAddress = fromAddress;
+    public void pushFromAddress(Object fromAddress) {
+        if (callbackRoutingChain == null) {
+            callbackRoutingChain = new Stack<Object>();
+        }
+        callbackRoutingChain.push(fromAddress);
     }
 
+    public Stack<Object> getCallbackRoutingChain() {
+        return callbackRoutingChain;
+    }
+    
+    public void setCallbackRoutingChain(Stack<Object> callbackRoutingChain) {
+        this.callbackRoutingChain = callbackRoutingChain;
+    }
+    
     public Object getMessageId() {
         return messageId;
     }

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/extension/TargetInvokerExtensionTestCase.java
 Tue Oct 31 00:29:57 2006
@@ -19,10 +19,10 @@
 package org.apache.tuscany.spi.extension;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.Stack;
 
 import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.wire.InboundWire;
-import org.apache.tuscany.spi.wire.MessageId;
 import org.apache.tuscany.spi.wire.Message;
 import org.apache.tuscany.spi.wire.MessageImpl;
 
@@ -35,15 +35,12 @@
 public class TargetInvokerExtensionTestCase extends TestCase {
 
     public void testNonBlockingDispatch() {
-        MessageId id = new MessageId();
         Object from = new Object();
         InboundWire wire = EasyMock.createMock(InboundWire.class);
-        wire.addMapping(EasyMock.eq(id), EasyMock.eq(from));
         EasyMock.replay(wire);
         WorkContext context;
         context = EasyMock.createMock(WorkContext.class);
-        context.setCurrentMessageId(EasyMock.isNull());
-        context.setCurrentCorrelationId(EasyMock.eq(id));
+        context.setCurrentCallbackRoutingChain(EasyMock.isA(Stack.class));
         EasyMock.replay(context);
         ExecutionMonitor monitor = 
EasyMock.createNiceMock(ExecutionMonitor.class);
         Target target = EasyMock.createMock(Target.class);
@@ -51,8 +48,7 @@
         EasyMock.replay(target);
         Invoker invoker = new Invoker(wire, context, monitor, target);
         Message msg = new MessageImpl();
-        msg.setMessageId(id);
-        msg.setFromAddress(from);
+        msg.pushFromAddress(from);
         msg.setBody("test");
         invoker.invoke(msg);
         EasyMock.verify(wire);

Modified: 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/spi/src/test/java/org/apache/tuscany/spi/wire/AbstractOutboundInvocationHandlerTestCase.java
 Tue Oct 31 00:29:57 2006
@@ -2,6 +2,7 @@
 
 import java.lang.reflect.Array;
 import java.lang.reflect.InvocationTargetException;
+import java.util.Stack;
 
 import junit.framework.TestCase;
 import org.easymock.EasyMock;
@@ -19,7 +20,7 @@
         OutboundInvocationChain chain = 
EasyMock.createMock(OutboundInvocationChain.class);
         EasyMock.expect(chain.getHeadInterceptor()).andReturn(interceptor);
         EasyMock.replay(chain);
-        Object resp = handler.invoke(chain, invoker, new String[]{"foo"}, new 
Object(), new Object());
+        Object resp = handler.invoke(chain, invoker, new String[]{"foo"}, 
null, new Stack<Object>());
         assertEquals("response", resp);
     }
 
@@ -30,7 +31,7 @@
         EasyMock.expect(chain.getHeadInterceptor()).andReturn(null);
         EasyMock.expect(chain.getTargetInvoker()).andReturn(invoker);
         EasyMock.replay(chain);
-        Object resp = handler.invoke(chain, invoker, new String[]{"foo"}, new 
Object(), new Object());
+        Object resp = handler.invoke(chain, invoker, new String[]{"foo"}, 
null, new Stack<Object>());
         assertEquals("response", resp);
     }
 
@@ -77,7 +78,7 @@
             assertNotNull(msg.getCorrelationId());
             assertNotNull(msg.getTargetInvoker());
             assertNotNull(msg.getMessageId());
-            assertNotNull(msg.getFromAddress());
+            assertNotNull(msg.getCallbackRoutingChain());
             assertEquals("foo", Array.get(msg.getBody(), 0));
             msg.setBody("response");
             return msg;

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2AsyncTargetInvoker.java
 Tue Oct 31 00:29:57 2006
@@ -19,6 +19,7 @@
 package org.apache.tuscany.binding.axis2;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.Stack;
 
 import javax.xml.namespace.QName;
 
@@ -28,7 +29,6 @@
 import org.apache.axis2.client.OperationClient;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
-import org.apache.tuscany.spi.wire.InboundWire;
 import org.apache.tuscany.spi.wire.InvocationRuntimeException;
 import org.apache.tuscany.spi.wire.Message;
 
@@ -36,27 +36,24 @@
 
     protected static final OMElement RESPONSE = null;
 
-    private InboundWire wire;
     private Axis2ReferenceCallbackTargetInvoker callbackInvoker;
 
     public Axis2AsyncTargetInvoker(ServiceClient serviceClient,
                                    QName wsdlOperationName,
                                    Options options,
-                                   SOAPFactory soapFactory,
-                                   InboundWire wire) {
+                                   SOAPFactory soapFactory) {
         super(serviceClient, wsdlOperationName, options, soapFactory);
-        this.wire = wire;
     }
 
     public Object invokeTarget(final Object payload) throws 
InvocationTargetException {
         throw new InvocationTargetException(new 
InvocationRuntimeException("Operation not supported"));
     }
 
-    private Object invokeTarget(final Object payload, Object messageId) throws 
InvocationTargetException {
+    private Object invokeTarget(final Object payload, Stack<Object> 
callbackRoutingChain) throws InvocationTargetException {
         try {
             Object[] args = (Object[])payload;
             OperationClient operationClient = createOperationClient(args);
-            callbackInvoker.setCorrelationId(messageId);
+            callbackInvoker.setCallbackRoutingChain(callbackRoutingChain);
             Axis2ReferenceCallback callback = new 
Axis2ReferenceCallback(callbackInvoker);
             operationClient.setCallback(callback);
 
@@ -71,9 +68,7 @@
 
     public Message invoke(Message msg) throws InvocationRuntimeException {
         try {
-            Object messageId = msg.getMessageId();
-            wire.addMapping(messageId, msg.getFromAddress());
-            Object resp = invokeTarget(msg.getBody(), messageId);
+            Object resp = invokeTarget(msg.getBody(), 
msg.getCallbackRoutingChain());
             msg.setBody(resp);
         } catch (Throwable e) {
             msg.setBodyWithFault(e);

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2CallbackInvocationHandler.java
 Tue Oct 31 00:29:57 2006
@@ -19,6 +19,7 @@
 package org.apache.tuscany.binding.axis2;
 
 import java.util.Map;
+import java.util.Stack;
 
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.wire.AbstractOutboundInvocationHandler;
@@ -34,20 +35,16 @@
         this.inboundWire = inboundWire;
     }
 
-    public Object invoke(Operation operation, Object[] args, Object 
correlationId) throws Throwable {
-        Object targetAddress = inboundWire.retrieveMapping(correlationId);
+    public Object invoke(Operation operation, Object[] args, Stack<Object> 
callbackRoutingChain) throws Throwable {
+        Object targetAddress = callbackRoutingChain.pop();
         if (targetAddress == null) {
-            throw new AssertionError("No from address associated with message 
id [" + correlationId + "]");
+            throw new AssertionError("Popped a null from address from stack");
         }
         //TODO optimize as this is slow in local invocations
         Map<Operation<?>, OutboundInvocationChain> 
sourceCallbackInvocationChains =
             inboundWire.getSourceCallbackInvocationChains(targetAddress);
         OutboundInvocationChain chain = 
sourceCallbackInvocationChains.get(operation);
         TargetInvoker invoker = chain.getTargetInvoker();
-        return invoke(chain, invoker, args, null, correlationId);
-    }
-
-    protected Object getFromAddress() {
-        return (inboundWire.getContainer() == null) ? null : 
inboundWire.getContainer().getName();
+        return invoke(chain, invoker, args, null, callbackRoutingChain);
     }
 }

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Reference.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Reference.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Reference.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Reference.java
 Tue Oct 31 00:29:57 2006
@@ -168,8 +168,7 @@
         Axis2TargetInvoker invoker;
         if (hasCallback) {
             invoker =
-                new Axis2AsyncTargetInvoker(serviceClient, wsdlOperationQName, 
options, soapFactory,
-                                            inboundWire);
+                new Axis2AsyncTargetInvoker(serviceClient, wsdlOperationQName, 
options, soapFactory);
         } else if (isOneWay) {
             invoker = new Axis2OneWayTargetInvoker(serviceClient, 
wsdlOperationQName, options, soapFactory);
         } else {

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ReferenceCallbackTargetInvoker.java
 Tue Oct 31 00:29:57 2006
@@ -19,6 +19,7 @@
 package org.apache.tuscany.binding.axis2;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.Stack;
 
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.wire.InboundWire;
@@ -30,7 +31,7 @@
     
     private Operation operation;
     private InboundWire inboundWire;
-    private Object correlationId;
+    private Stack<Object> callbackRoutingChain;
     private boolean cacheable;
     Axis2CallbackInvocationHandler invocationHandler;
     
@@ -51,7 +52,7 @@
             args = (Object[]) payload;
         }
         try {
-            return invocationHandler.invoke(operation, args, correlationId);
+            return invocationHandler.invoke(operation, args, 
callbackRoutingChain);
         } catch(Throwable t) {
             t.printStackTrace();
             throw new InvocationTargetException(t);
@@ -86,13 +87,13 @@
         Axis2ReferenceCallbackTargetInvoker invoker = 
(Axis2ReferenceCallbackTargetInvoker) super.clone();
         invoker.operation = this.operation;
         invoker.inboundWire = this.inboundWire;
-        invoker.correlationId = this.correlationId;
+        invoker.callbackRoutingChain = this.callbackRoutingChain;
         invoker.cacheable = this.cacheable;
         invoker.invocationHandler = this.invocationHandler;
         return invoker;
     }
     
-    public void setCorrelationId(Object correlationId) {
-        this.correlationId = correlationId;
+    public void setCallbackRoutingChain(Stack<Object> callbackRoutingChain) {
+        this.callbackRoutingChain = callbackRoutingChain;
     }
 }

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2Service.java
 Tue Oct 31 00:29:57 2006
@@ -190,7 +190,7 @@
 
             Message msg = new MessageImpl();
             msg.setTargetInvoker(chain.getTargetInvoker());
-            msg.setFromAddress(getFromAddress());
+            msg.pushFromAddress(getFromAddress());
             if (messageId != null) {
                 msg.setMessageId(messageId);
             }

Modified: 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceCallbackTargetInvoker.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceCallbackTargetInvoker.java?view=diff&rev=469411&r1=469410&r2=469411
==============================================================================
--- 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceCallbackTargetInvoker.java
 (original)
+++ 
incubator/tuscany/java/sca/services/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2ServiceCallbackTargetInvoker.java
 Tue Oct 31 00:29:57 2006
@@ -83,7 +83,11 @@
 
     public Message invoke(Message msg) throws InvocationRuntimeException {
         try {
-            Object resp = invokeTarget(msg.getBody(), 
(MessageId)msg.getCorrelationId());
+            MessageId correlationId = (MessageId)msg.getCorrelationId();
+            if (correlationId == null) {
+                throw new InvocationRuntimeException("Missing correlation id");
+            }
+            Object resp = invokeTarget(msg.getBody(), correlationId);
             msg.setBody(resp);
         } catch (Throwable e) {
             msg.setBodyWithFault(e);



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to