That would be a scenario only for the server that has one-to-one
relationship
with clients. Then if a client, e.g., a Web services browser, that needs to
access
multiple Web services with a same API, e,g., "Docment exchangeMessage() {}"
which is a higher API that makes the SOAP specific calls transparent, will
be
a totally different story.
In the second scenario, we do need to spawn a seperate thread so that the
caller is not locked to a one-to-one boundary unless we instantiate the
class
that contains the method that the caller is utilizing.
Pae
> As you see in my sample code, I think the right way is NOT to spawn a
> thread at the calling client, but have the server immediately return after
> buffering the request. In fact, the thread is spawned at the server which
> take the request from the buffer to handle at a later time.
>
> At the same time, the callback address of ws1 is passed as an extra WSDL
> parameter to downstream services (w2, w3). If you want to differentiate
> between different user session, then an extra "sessionId" parameter need
to
> be passed as well.
>
> Rgds, Ricky
>
>
> At 06:50 PM 11/27/2002 +1100, Trond Hjelmaas wrote:
> >Hi,
> >
> >thanks for your answers!
> >
> >I think I've made a mistake...
> >I actually don't need a return value from a web service, the reason is
> >that I want several web services (ws) to execute in a chain manner.
> >1 - Say that a client/user calls ws1, ws1 calls ws2 which calls ws3.
> >2 - I don't want ws1 to hang and wait for answer, but continue to
> >execute (fire and forget invocation)
> >3 - After ws3 is finished it will note ws1 (not by returning a value to
> >ws2 which returns value to ws1) but by calling ws1 directly
> >
> >..in short, every ws on the way will only send message forward to
> >another ws and don't return a reply (never look back)
> >
> >The 2 major issues are
> >-how to get ws1 to continue executing (using thread that waits for
> >reponse is not wanted, I want a peer2peer execution)
> >-in ws1 how to map the 'answer' from ws3 to the correct request (say ws1
> >has 100 users)
> >
> >This problem is hard to communicate with few words.
> >
> >Suggstions/views are appriciated!
> >
> >Thanx again!
> >
> >-----------------------------------
> >
> >I guess the behavior you observe is "implementation dependent". The
> >SOAP
> >server you've used doesn't take advantage of the optimization
> >opportunity
> >where things can be execute in parallel.
> >
> >But you certainly can achieve what you want in the following ways ...
> >
> >public class AsyncService {
> > static Buffer buffer = Buffer.getSingleton();
> >
> > public String submitRequest(Request request) {
> > String trackerId = buffer.save(request); // save in
> >buffer
> > return trackerId;
> > }
> >
> > public Response pollForResponse(String trackerId) {
> > if (buffer.isResponseReady(trackerId)) {
> > return (buffer.getResponse(trackerId));
> > } else {
> > return (null);
> > }
> > }
> >
> > public void submitRequestWithCallback(Request request,
> >ICallback
> >callback) {
> > buffer.save(request, callback);
> > }
> >}
> >
> >public class Execution extends Thread {
> > public void run () {
> > Request request = buffer.takeRequest();
> > Response response = handle(request);
> > if (request.needsCallback()) {
> > ICallback callback =
> >buffer.getCallback(request.getTrackerId());
> > callback.sendResponse(response);
> > } else {
> > buffer.saveResponse(request.getTrackerId(),
> >response)
> > }
> > }
> >}
> >
> >Rgds, Ricky
> >
> >At 02:29 PM 11/27/2002 +1100, Trond Hjelmaas wrote:
> > >Hi,
> > >
> > >I have a problem with finding relevant info regarding asynch Web
Services.
> > >
> > >
> > >For example, I've got this javaclass, all it does is wait 10 seconds
> > >
> > >public class delay{
> > > public void wait10sec(){
> > > /*some code for 10 sec delay*/
> > > }
> > >
> > >}
> > >
> > >it has WSDL like:
> > >......
> > > <message name="wait10sec0Request"/>
> > > <portType name="blahPortType">
> > > <operation name="wait10sec">
> > > <input name="wait10sec0Request"
message="tns:wait10sec0Request"/>
> > > </operation>
> > > </portType>
> > > <binding name="blahBinding" type="tns:blahPortType">
> > > <soap:binding style="rpc"
> > > transport="http://schemas.xmlsoap.org/soap/http"/>
> > > <operation name="wait10sec">
> > > <soap:operation soapAction="" style="rpc"/>
> > > <input name="wait10sec0Request">
> > > <soap:body use="encoded" namespace="blah"
> > >
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
> > > </input>
> > > </operation>
> > > </binding>
> > > <service name="blah">
> > > <port name="blahPort" binding="tns:blahBinding">
> > > <soap:address
> > > location="http://some_URTL:8888/blah_ctx/blah"/>
> > > </port>
> > > </service>
> > >
> > >NOTE: I have change WSDL to have no response, the original has reponse
> > >message listed, but is was empty.....
> > >
> > >According to some mail I read Web Services are async if they don't have
> > >any reponse method.
> > >
> > >I uploaded this and invoke the method using Oracle9ias (9.0.0.3), the
> > >invocation halts for 10 seconds, and does NOT return ASAP (which is
what I
> > >need).
> > >
> > >Any suggestions about how to make asynch Web Services are very
> > >appreciated!
> > >
> > >Regards, Trond
>