summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleAsyncResponseInvoker.java6
-rw-r--r--sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java13
-rw-r--r--sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLProxy.java14
-rw-r--r--sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/test/java/sample/UpperSampleAsyncReferenceImpl.java14
4 files changed, 33 insertions, 14 deletions
diff --git a/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleAsyncResponseInvoker.java b/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleAsyncResponseInvoker.java
index 2366deeb33..aed21ecc4e 100644
--- a/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleAsyncResponseInvoker.java
+++ b/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleAsyncResponseInvoker.java
@@ -49,7 +49,11 @@ class SampleAsyncResponseInvoker implements InvokerAsyncResponse {
public void invokeAsyncResponse(final Message msg) {
try {
- String messageID = (String) msg.getHeaders().get(Constants.MESSAGE_ID);
+ String messageID = (String) msg.getHeaders().get("RELATES_TO");
+ if (messageID == null ) {
+ messageID = (String) msg.getHeaders().get(Constants.MESSAGE_ID);
+ } // end if
+
String forwardOpName = (String)asyncMessageMap.get(messageID);
// process the async response
diff --git a/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java b/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java
index 4d33a956a8..6758c1fc1f 100644
--- a/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java
+++ b/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLInvoker.java
@@ -21,11 +21,13 @@ package sample.impl;
import java.lang.reflect.Method;
+import org.apache.tuscany.sca.core.invocation.AsyncResponseInvoker;
import org.apache.tuscany.sca.core.invocation.InterceptorAsyncImpl;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLOperation;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.invocation.Message;
import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+import org.oasisopen.sca.ServiceRuntimeException;
import org.w3c.dom.Element;
/**
@@ -55,6 +57,10 @@ class SampleWSDLInvoker extends InterceptorAsyncImpl {
}
public void invokeAsyncRequest(Message msg) {
+ // Retrieve the async callback information
+ AsyncResponseInvoker respInvoker = (AsyncResponseInvoker)msg.getHeaders().get("ASYNC_RESPONSE_INVOKER");
+ if( respInvoker == null ) throw new ServiceRuntimeException("Async Implementation invoked with no response invoker");
+
Message responseMsg = processRequest(msg);
// in this sample programming model we make the async
@@ -62,11 +68,12 @@ class SampleWSDLInvoker extends InterceptorAsyncImpl {
// component implementation itself doesn't get a chance to
// do async responses.
- // At this point we could serialize the ??? and pick it up again
+ // At this point we could serialize the AsyncResponseInvoker and pick it up again
// later to send the async response
- ((RuntimeEndpoint)msg.getTo()).invokeAsyncResponse(responseMsg);
- }
+ //((RuntimeEndpoint)msg.getTo()).invokeAsyncResponse(responseMsg);
+ respInvoker.invokeAsyncResponse(responseMsg);
+ } // end method invokeAsyncRequest
public Message processRequest(Message msg) {
try {
diff --git a/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLProxy.java b/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLProxy.java
index 0fc8403cf1..176dac6b15 100644
--- a/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLProxy.java
+++ b/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/main/java/sample/impl/SampleWSDLProxy.java
@@ -22,6 +22,8 @@ package sample.impl;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.tuscany.sca.assembly.EndpointReference;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
@@ -50,7 +52,7 @@ class SampleWSDLProxy implements WSDLReference {
this.ep = ep;
mf = ep.getExtensionPoint(MessageFactory.class);
repr = (RuntimeEndpointReference)epr;
- ops = new HashMap<String, Operation>();
+ ops = new ConcurrentHashMap<String, Operation>();
for(Operation o: wi.getOperations())
ops.put(o.getName(), o);
}
@@ -71,9 +73,9 @@ class SampleWSDLProxy implements WSDLReference {
Message message = mf.createMessage();
message.setBody(new Object[]{e});
- // We could MESSAGE_ID here if required. If not the infrastructure
- // will generate a UUID
- String messageID = "myuniqueid";
+ // Generate MESSAGE_ID here.
+ // String messageID = "myuniqueid";
+ String messageID = UUID.randomUUID().toString();
message.getHeaders().put(Constants.MESSAGE_ID, messageID);
// save the message id ready for when we process the response
@@ -88,9 +90,5 @@ class SampleWSDLProxy implements WSDLReference {
ex.printStackTrace();
}
- // if we don't provide a message id we can get the one the
- // infrastructure generates
- //String messageID = (String) message.getHeaders().get(Constants.MESSAGE_ID);
- //asyncMessageMap.put(messageID, op);
}
}
diff --git a/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/test/java/sample/UpperSampleAsyncReferenceImpl.java b/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/test/java/sample/UpperSampleAsyncReferenceImpl.java
index b6f59515cc..7a86d68043 100644
--- a/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/test/java/sample/UpperSampleAsyncReferenceImpl.java
+++ b/sca-java-2.x/trunk/samples/extending-tuscany/implementation-sample/src/test/java/sample/UpperSampleAsyncReferenceImpl.java
@@ -24,8 +24,12 @@ import static sample.Xutil.elem;
import static sample.Xutil.text;
import static sample.Xutil.xdom;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
import org.w3c.dom.Element;
+import sample.Xutil.NodeBuilder;
import sample.api.Java;
import sample.api.WSDL;
import sample.api.WSDLReference;
@@ -42,6 +46,7 @@ public class UpperSampleAsyncReferenceImpl {
WSDLReference upper;
Element response;
+ CountDownLatch latch = new CountDownLatch( 1 );
public String upper(String s) {
out.println("UpperSampleAsyncReferenceImpl.upper(" + s + ")");
@@ -49,16 +54,20 @@ public class UpperSampleAsyncReferenceImpl {
// TODO - I'm passing in the non-wrapped version of the parameter
// here which doesn't seem right. Need to test that databinding
// wraps it correctly
- final Element ureq = xdom("http://sample/upper-async", "s", text(s));
+ //final Element ureq = xdom("http://sample/upper-async", "s", text(s));
+ NodeBuilder node1 = elem("s", text(s));
+ final Element ureq = xdom("http://sample/upper-async", "upper", node1);
upper.callAsync("upper", ureq);
try {
Thread.sleep(500);
+ latch.await(500, TimeUnit.SECONDS);
} catch (Exception ex) {
// do nothing
}
- return response.getTextContent();
+ if( response != null ) return response.getTextContent();
+ else return "upper did not get called back";
}
/**
@@ -69,5 +78,6 @@ public class UpperSampleAsyncReferenceImpl {
public void upperCallback(Element response) {
out.println("UpperSampleAsyncReferenceImpl.upperCallback(" + response.getTextContent() + ")");
this.response = response;
+ latch.countDown();
}
}