axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pae Choi" <paec...@earthlink.net>
Subject Re: Async web services, do they exist?
Date Wed, 27 Nov 2002 18:23:46 GMT
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
>


Mime
View raw message