Date: 2004-12-15T03:22:24
Editor: DeepalJayasinghe <[EMAIL PROTECTED]>
Wiki: Apache Web Services Wiki
Page: FrontPage/Architecture/Client
URL: http://wiki.apache.org/ws/FrontPage/Architecture/Client
no comment
Change Log:
------------------------------------------------------------------------------
@@ -1,18 +1,127 @@
= Client Side API =
-== Requirements ==
+== Client Side Architecture ==
-== Wish List ==
+=== What we provide ===
+ * Synchronous Invocation
+ * Asynchronous Invocation using callbacks, still the transport is synchronous
+ * Asynchronous Invocation using callbacks, transport is also asynchronous
-addressing information is required.
-== Sub Components ==
- * Client API
- * Sync programming model
- * Async Programming model
-
-== Client API ==
-TODO
-== Sync programming model ==
-TODO
-== Async Programming model ==
-TODO
+=== API for the Client ===
+The API provided for the client is mainly by the Call. Followings are the
methods that the call will provide initially.
+
+{{{
+public class Call{
+
+public void setTargetURL(URL);
+public void setAction(String);
+public void setListenerTransport(String);
+public invokeInOnly(SOAPEnvelope);
+public SOAPEnvelope invokeInOutSync(SOAPEnvelope);
+public void inovkeInOutAsync(SOAPEnvelope, Callback);
+}
+
+}}}
+
+{{{
+public interface Callback{
+void onComplete(AsyncResult);
+}
+}}}
+
+{{{
+public class AyncResult{
+SOAPEnvelope getResponseEnvelope()
+}
+}}}
+
+
+== Possible Message Paths ==
+
+=== One-Way Invocation ===
+The service invocation is a void invocation. No return value.
+{{{
+a -> call.invokeInOnly(SOAPEnvelope)
+b -> engine.send( ..)
+c -> Send the SOAP message
+}}}
+//Asume that the transport is one way e.g. SMTP
+
+
+Code Snippet:
+{{{
+call.setTargetURL(URL)
+call.setAction(String)
+call.invokeInOnly(SOAPEnvelope)
+}}}
+
+=== InOutSynchronous Invocation ===
+The service method has a response and the communication happens synchronously
using a bi-directional protocol. Client hangs until the response (or fault) is
returned.
+
+{{{
+a -> call.invokeInOutSync(SOAPEnvelope)
+b- > engine.send (..)
+c -> Send the SOAP message
+d -> Receive the response over the synchronous transport
+w -> ProviderX will be called as the last step in engine.receive(..)
+e -> provider returns
+f -> Call hand over the response to the client
+
+}}}
+Code Snippet:
+
+{{{
+call.setTargetURL(URL)
+call.setAction(String)
+SOAPEnvelope env=call.invokeInOutSync(SOAPEnvelope)
+}}}
+
+
+=== InOutAynchronous Invocation ===
+The service method has a response and the communication happens synchronously
using a bi-directional protocol. Client DOES NOT hang until the response (or
fault) is returned. Client uses callback mechanism to retrieve the response.
Call API uses threads from a thread pool for each invocation.
+
+{{{
+a -> call.invokeInOutAsync(SOAPEnvelope, callbackObj)
+p -> correlator.addCorrelationInfor(msgID,allbackObjRef)
+b- > engine.send (..)
+c -> Send the SOAP message
+d -> Receive the response over the synchronous transport
+w -> ProviderX will be called as the last step in engine.receive(..)
+q -> correlator.getCorrelationInfo(msgID)
+g -> callbackObj.onComplet()
+}}}
+
+Code Snippet:
+{{{
+call.setTargetURL(URL)
+call.setAction(String)
+call.invokeInOutAsync(SOAPEnvelope, Callback)
+}}}
+
+=== InOutAynchronous Invocation with One way transport ===
+The service method has a response and the communication happens Aynchronously
using a uni-directional protocol. Client DOES NOT hang until the response (or
fault) is returned. Client uses callback mechanism to retrieve the response.
Call API uses threads from a thread pool for each invocation.
+{{{
+a -> call.invokeInOutAsync(SOAPEnvelope, callbackObj)
+p -> correlator.addCorrelationInfor(msgID,allbackObjRef)
+b- > engine.send (..)
+c -> Send the SOAP message
+r -> Receive the response by the listener
+s -> engine.receive(..)
+w -> ProviderX will be called as the last step in engine.receive(..)
+q -> correlator.getCorrelationInfo(msgID)
+g -> callbackObj.onComplet()
+}}}
+
+Code Snippet:
+{{{
+call.setTargetURL(URL)
+call.setAction(String)
+call.setListenerTransport(�http�)
+call.invokeInOutAsync(SOAPEnvelope, Callback)
+}}}
+
+
+== Sequence Diagrams ==
+
+