Rgds, Ricky
At 10:23 AM 11/27/2002 -0800, Pae Choi wrote:
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 >
