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]