summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2010-10-21 20:17:35 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2010-10-21 20:17:35 +0000
commitf1cfee1a017758d7fccd80b5e9cfc3a12906e73b (patch)
tree29911a967a3e5fe65c5a117f807e775c639a97b8 /sca-java-2.x/trunk
parent71a33d534ba3a9efdfa9cd537bca01fdda07d3b9 (diff)
Add sync version of the bi-directional interaction
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1026125 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk')
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardClient.java9
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallback.java7
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallbackSync.java30
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentClientImpl.java51
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClient.java5
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClientSync.java35
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentImpl.java25
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServer.java5
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServerSync.java37
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/main/resources/test/client/creditcard-client.composite1
-rw-r--r--sca-java-2.x/trunk/testing/itest/async-interactions/src/test/java/itest/CreditCardTestCase.java6
11 files changed, 193 insertions, 18 deletions
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardClient.java b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardClient.java
index 6142f815af..31a9bc3f9c 100644
--- a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardClient.java
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardClient.java
@@ -57,4 +57,13 @@ public interface CreditCardClient {
* @return
*/
String authorizeSCAAsyncWithCallback(String creditCardNumber, String holder, float amount);
+
+ /**
+ * Invoke the service using request/response and the target component will make a callback upon the request has been processed
+ * @param creditCardNumber
+ * @param holder
+ * @param amount
+ * @return
+ */
+ String authorizeSCAWithCallback(String creditCardNumber, String holder, float amount);
}
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallback.java b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallback.java
index 18cd13e671..648f30d804 100644
--- a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallback.java
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallback.java
@@ -18,12 +18,15 @@
*/
package test.client;
+import org.oasisopen.sca.annotation.OneWay;
import org.oasisopen.sca.annotation.Remotable;
/**
- * The callback interface
+ * The oneway callback interface
*/
@Remotable
public interface CreditCardPaymentCallback {
- void authorizeResponse(String creditCardNumber, String status);
+ // Makes a callback
+ @OneWay
+ void authorizeResponseOneway(String creditCardNumber, String status);
}
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallbackSync.java b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallbackSync.java
new file mode 100644
index 0000000000..801effa734
--- /dev/null
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentCallbackSync.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package test.client;
+
+import org.oasisopen.sca.annotation.Remotable;
+
+/**
+ * The synchronous callback interface
+ */
+@Remotable
+public interface CreditCardPaymentCallbackSync {
+ // Makes a callback
+ String authorizeResponse(String creditCardNumber, String status);
+}
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentClientImpl.java b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentClientImpl.java
index 0ff4dcce4b..69a6203045 100644
--- a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentClientImpl.java
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentClientImpl.java
@@ -39,7 +39,8 @@ import com.example.test.jaxws.client.CreditCardPayment;
* Mocked implementation of CreditCardPaymentClient
*/
@Service(CreditCardClient.class)
-public class CreditCardPaymentClientImpl implements CreditCardClient, CreditCardPaymentCallback {
+public class CreditCardPaymentClientImpl implements CreditCardClient, CreditCardPaymentCallback,
+ CreditCardPaymentCallbackSync {
@Reference
private CreditCardPayment proxy;
@@ -47,6 +48,9 @@ public class CreditCardPaymentClientImpl implements CreditCardClient, CreditCard
@Reference
private CreditCardPaymentRequestClient asyncProxy;
+ @Reference
+ private CreditCardPaymentRequestClientSync syncProxy;
+
@Override
public String authorize(String creditCardNumber, String holder, float amount) {
CreditCardDetailsType creditCard = createCreditCard(creditCardNumber, holder);
@@ -122,10 +126,40 @@ public class CreditCardPaymentClientImpl implements CreditCardClient, CreditCard
public String authorizeSCAAsyncWithCallback(String creditCardNumber, String holder, float amount) {
CreditCardDetailsType creditCard = createCreditCard(creditCardNumber, holder);
- asyncProxy.authorizeRequest(creditCard, amount);
- while (true) {
- synchronized (statusMap) {
- String status = statusMap.remove(creditCardNumber);
+ asyncProxy.authorizeRequestOneway(creditCard, amount);
+ synchronized (statusMap) {
+ while (true) {
+ String status = statusMap.remove("ASYNC:" + creditCardNumber);
+ if (status != null) {
+ System.out.println("Response found for " + creditCardNumber + " :" + status);
+ return status;
+ } else {
+ try {
+ statusMap.wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ return "FAIL: " + e.getMessage();
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void authorizeResponseOneway(String creditCardNumber, String status) {
+ System.out.println("SCA one callback: CreditCard: " + creditCardNumber + " Status: " + status);
+ synchronized (statusMap) {
+ statusMap.put("ASYNC:" + creditCardNumber, status);
+ statusMap.notifyAll();
+ }
+ }
+
+ public String authorizeSCAWithCallback(String creditCardNumber, String holder, float amount) {
+ CreditCardDetailsType creditCard = createCreditCard(creditCardNumber, holder);
+ syncProxy.authorizeRequest(creditCard, amount);
+ synchronized (statusMap) {
+ while (true) {
+ String status = statusMap.remove("SYNC:" + creditCardNumber);
if (status != null) {
System.out.println("Response found for " + creditCardNumber + " :" + status);
return status;
@@ -142,12 +176,13 @@ public class CreditCardPaymentClientImpl implements CreditCardClient, CreditCard
}
@Override
- public void authorizeResponse(String creditCardNumber, String status) {
- System.out.println("SCA Callback: CreditCard: " + creditCardNumber + " Status: " + status);
+ public String authorizeResponse(String creditCardNumber, String status) {
+ System.out.println("SCA synchronous callback: CreditCard: " + creditCardNumber + " Status: " + status);
synchronized (statusMap) {
- statusMap.put(creditCardNumber, status);
+ statusMap.put("SYNC:" + creditCardNumber, status);
statusMap.notifyAll();
}
+ return "ACK";
}
}
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClient.java b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClient.java
index 1a1395a252..fe0e99cd50 100644
--- a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClient.java
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClient.java
@@ -26,11 +26,12 @@ import org.oasisopen.sca.annotation.Remotable;
import com.example.test.jaxb.client.CreditCardDetailsType;
/**
- * The bi-direction interface
+ * The bi-direction interface for the client side (we need separate classes for the client and server so that they can take different CreditCardDetailsType)
*/
@Remotable
@Callback(CreditCardPaymentCallback.class)
public interface CreditCardPaymentRequestClient {
+ // Send out the request
@OneWay
- void authorizeRequest(CreditCardDetailsType creditCard, float amount);
+ void authorizeRequestOneway(CreditCardDetailsType creditCard, float amount);
}
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClientSync.java b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClientSync.java
new file mode 100644
index 0000000000..52f5014af0
--- /dev/null
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/client/CreditCardPaymentRequestClientSync.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package test.client;
+
+import org.oasisopen.sca.annotation.Callback;
+import org.oasisopen.sca.annotation.Remotable;
+
+import com.example.test.jaxb.client.CreditCardDetailsType;
+
+/**
+ * The synchronous bi-direction interface for the client side (we need separate classes for the client and server so that they can take different CreditCardDetailsType)
+ */
+@Remotable
+@Callback(CreditCardPaymentCallbackSync.class)
+public interface CreditCardPaymentRequestClientSync {
+ // Send out the request
+ String authorizeRequest(CreditCardDetailsType creditCard, float amount);
+}
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentImpl.java b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentImpl.java
index 07d0e03ecb..8d946b5723 100644
--- a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentImpl.java
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentImpl.java
@@ -23,6 +23,7 @@ import org.oasisopen.sca.annotation.Callback;
import org.oasisopen.sca.annotation.Service;
import test.client.CreditCardPaymentCallback;
+import test.client.CreditCardPaymentCallbackSync;
import com.example.test.jaxb.server.CreditCardDetailsType;
import com.example.test.jaxws.server.AuthorizeFault;
@@ -31,20 +32,36 @@ import com.example.test.jaxws.server.CreditCardPayment;
/**
* Mocked implementation of CreditCardPayment
*/
-@Service({CreditCardPayment.class, CreditCardPaymentRequestServer.class})
-public class CreditCardPaymentImpl implements CreditCardPayment, CreditCardPaymentRequestServer {
+@Service({CreditCardPayment.class, CreditCardPaymentRequestServer.class, CreditCardPaymentRequestServerSync.class})
+public class CreditCardPaymentImpl implements CreditCardPayment, CreditCardPaymentRequestServer,
+ CreditCardPaymentRequestServerSync {
@Callback
protected CreditCardPaymentCallback callback;
+
+ @Callback
+ protected CreditCardPaymentCallbackSync callbackSync;
@Override
- public void authorizeRequest(CreditCardDetailsType creditCard, float amount) {
+ public void authorizeRequestOneway(CreditCardDetailsType creditCard, float amount) {
+ String status;
+ try {
+ status = authorize(creditCard, amount);
+ } catch (AuthorizeFault e) {
+ status = "FAIL: " + e.getFaultInfo().getErrorCode();
+ }
+ callback.authorizeResponseOneway(creditCard.getCreditCardNumber(), status);
+ }
+
+ @Override
+ public String authorizeRequest(CreditCardDetailsType creditCard, float amount) {
String status;
try {
status = authorize(creditCard, amount);
} catch (AuthorizeFault e) {
status = "FAIL: " + e.getFaultInfo().getErrorCode();
}
- callback.authorizeResponse(creditCard.getCreditCardNumber(), status);
+ callbackSync.authorizeResponse(creditCard.getCreditCardNumber(), status);
+ return "ACK";
}
@Override
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServer.java b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServer.java
index 4741c6b8e7..f257e5a0ee 100644
--- a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServer.java
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServer.java
@@ -28,11 +28,12 @@ import test.client.CreditCardPaymentCallback;
import com.example.test.jaxb.server.CreditCardDetailsType;
/**
- * The bi-direction interface
+ * The bi-direction interface for the server side
*/
@Remotable
@Callback(CreditCardPaymentCallback.class)
public interface CreditCardPaymentRequestServer {
+ // Send out the request
@OneWay
- void authorizeRequest(CreditCardDetailsType creditCard, float amount);
+ void authorizeRequestOneway(CreditCardDetailsType creditCard, float amount);
}
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServerSync.java b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServerSync.java
new file mode 100644
index 0000000000..93351c0f89
--- /dev/null
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/java/test/server/CreditCardPaymentRequestServerSync.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package test.server;
+
+import org.oasisopen.sca.annotation.Callback;
+import org.oasisopen.sca.annotation.Remotable;
+
+import test.client.CreditCardPaymentCallbackSync;
+
+import com.example.test.jaxb.server.CreditCardDetailsType;
+
+/**
+ * The synchronous bi-direction interface for the client side (we need separate classes for the client and server so that they can take different CreditCardDetailsType)
+ */
+@Remotable
+@Callback(CreditCardPaymentCallbackSync.class)
+public interface CreditCardPaymentRequestServerSync {
+ // Send out the request
+ String authorizeRequest(CreditCardDetailsType creditCard, float amount);
+}
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/resources/test/client/creditcard-client.composite b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/resources/test/client/creditcard-client.composite
index 48fe1894be..92a802fff3 100644
--- a/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/resources/test/client/creditcard-client.composite
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/main/resources/test/client/creditcard-client.composite
@@ -41,6 +41,7 @@
<implementation.java class="test.client.CreditCardPaymentClientImpl" />
<reference name="proxy" target="CreditCardPaymentComponent/CreditCardPayment" />
<reference name="asyncProxy" target="CreditCardPaymentComponent/CreditCardPaymentRequestServer" />
+ <reference name="syncProxy" target="CreditCardPaymentComponent/CreditCardPaymentRequestServerSync" />
</component>
</composite>
diff --git a/sca-java-2.x/trunk/testing/itest/async-interactions/src/test/java/itest/CreditCardTestCase.java b/sca-java-2.x/trunk/testing/itest/async-interactions/src/test/java/itest/CreditCardTestCase.java
index c4a01bf144..d9b82175cc 100644
--- a/sca-java-2.x/trunk/testing/itest/async-interactions/src/test/java/itest/CreditCardTestCase.java
+++ b/sca-java-2.x/trunk/testing/itest/async-interactions/src/test/java/itest/CreditCardTestCase.java
@@ -80,4 +80,10 @@ public class CreditCardTestCase {
String result = client.authorizeSCAAsyncWithCallback("888", "Jane", 110.0f);
Assert.assertEquals("OK", result);
}
+
+ @Test
+ public void testCreditCardSCAWithCallback() throws InterruptedException, ExecutionException {
+ String result = client.authorizeSCAWithCallback("999", "Steve", 210.0f);
+ Assert.assertEquals("OK", result);
+ }
}