Hi Christophe,

I believe you'd need to create a separate stub instance for each thread,
and also a separate Callback instance. AFAIK the stubs are not threadsafe.

  - Dennis

Dennis M. Sosnoski
Java SOA and Web Services Consulting <http://www.sosnoski.com/consult.html>
Axis2/CXF/Metro SOA and Web Services Training
<http://www.sosnoski.com/training.html>
Web Services Jump-Start <http://www.sosnoski.com/jumpstart.html>


On 03/05/2011 07:16 AM, Christophe Noël wrote:
> Hello Martin,
>
> This is the exact example which I'm starting from, but this example is
> used in a single client thread context.
>
> Therefore, what happens if two threads tries to send() : I suppose
> that the second one gets an error because a MessageReceiver is already
> bound on a listening port ?
> Or is it handled correctly by axis2 and the MessageReceiver is a
> static single instance used by the threads ?
>
> I cannot find any answer to this.
> Anyway, thanks for your help.
>
> Kind regards,
>
> 2011/3/4 Martin Gainty <[email protected] <mailto:[email protected]>>
>
>     //client classes declared static obviates multi-threaded activity on 
> client side
>
>     //options.setuseSeparateListener(true) will apprise the engine to use 2 
> separate channels
>     //one for send and one for receive
>
>     //try this first create a callback object which will receive envelope in 
> onComplete
>     class MyCallback extends Callback {
>
>       public void onComplete(AsyncResult result) {
>          // Get the response SOAP envelope from the result.
>
>          SOAPEnvelope envelope = result.getResponseEnvelope();
>          log.debug("OnComplete has received the envelope from Axis2 Engine 
> envelope="+envelope);           
>          // Process SOAP envelope. 
>        }
>
>
>        public void onError(Exception e) {
>          // Write here what you want to do in case of an error.
>         log.debug("AXIS2 Engine has produced an error 
> message="+e.getMessage());
>        }
>     }
>
>     //client code informs client to use 2 separate channels one for send and 
> for receive
>
>     //with client.setUseSeparateListener(true)
>     try {
>       // first create the payload of the message
>       OMElement payload = getPayload(); // add your payload here
>
>       // create an instance of service client
>       ServiceClient serviceClient = new ServiceClient();
>
>
>       // create an options object to pass parameters to service client
>       Options options = new Options();
>                 
>       // set EPR of the web service
>       options.setTo(new EndpointReference
>         ("http://www.sample-web-service.com/StockQuote/getQuote";));
>
>                 
>       // inform Axis2 engine that you need to use a different channel for the 
> response
>       options.setUseSeparateListener(true);
>
>     // Create a callback object which will receive response in onComplete or 
> exception in onError
>
>       Callback callback = new MyCallback();
>
>     //But for the 2 channel approach to work, there
>     //  should be a message correlation mechanism. Apache Axis2 uses the 
> WS-Addressing
>     //  specification for message correlation so lets engage addressing 
> module here            
>
>       serviceClient.engageModule(Constants.MODULE_ADDRESSING);
>
>     //set the options for the client (useSeparateListener)            
>       serviceClient.setOptions(options);
>
>       // invoke service apprising callback object when transport has 
> completed (or errored out)
>
>       serviceClient.sendReceiveNonBlocking(payload, callback);
>
>     //use callback.isComplete to determine when the callback has completed 
> processing e.g.
>     |  while(callback.isComplete()==false|) ; //tarry here until the 
> transport has received its envelope
>
>      
>     } catch (AxisFault axisFault) {
>       axisFault.printStackTrace();
>      }
>         
>
>
>     does this help?
>     Martin Gainty
>     ______________________________________________
>     Verzicht und Vertraulichkeitanmerkung/Note de déni et de
>     confidentialité
>      
>     Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene
>     Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede
>     unbefugte Weiterleitung oder Fertigung einer Kopie ist
>     unzulaessig. Diese Nachricht dient lediglich dem Austausch von
>     Informationen und entfaltet keine rechtliche Bindungswirkung.
>     Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir
>     keine Haftung fuer den Inhalt uebernehmen.
>
>     Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas 
> le destinataire prévu, nous te demandons avec bonté que pour satisfaire 
> informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie 
> de ceci est interdite. Ce message sert à l'information seulement et n'aura 
> pas n'importe quel effet légalement obligatoire. Étant donné que les email 
> peuvent facilement être sujets à la manipulation, nous ne pouvons accepter 
> aucune responsabilité pour le contenu fourni.
>
>
>
>
>
>
>     ------------------------------------------------------------------------
>     Date: Fri, 4 Mar 2011 14:54:21 +0100
>     Subject: Re: Axis2 client multithreaded asynchronous calls
>
>     From: [email protected] <mailto:[email protected]>
>     To: [email protected] <mailto:[email protected]>
>
>     Hello Martin,
>
>     Thanks a lot for your help.
>
>     My Axis2 client will send an HTTP request to a remote asynchronous
>     SOAP Web Service.
>
>     Christophe.
>
>     2011/3/4 Martin Gainty <[email protected]
>     <mailto:[email protected]>>
>
>         which transport will your application be implementing
>         (http/smtp/some_other_transport) ?
>         if you have seelected http-transport which container will you
>         be implementing (TC/GF/WS/WL?)
>
>         thanks,
>         Martin
>         ______________________________________________
>         Verzicht und Vertraulichkeitanmerkung/Note de déni et de
>         confidentialité
>          
>         Diese Nachricht ist vertraulich. Sollten Sie nicht der
>         vorgesehene Empfaenger sein, so bitten wir hoeflich um eine
>         Mitteilung. Jede unbefugte Weiterleitung oder Fertigung einer
>         Kopie ist unzulaessig. Diese Nachricht dient lediglich dem
>         Austausch von Informationen und entfaltet keine rechtliche
>         Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von
>         E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen.
>
>         Ce message est confidentiel et peut être privilégié. Si vous n'êtes 
> pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire 
> informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie 
> de ceci est interdite. Ce message sert à l'information seulement et n'aura 
> pas n'importe quel effet légalement obligatoire. Étant donné que les email 
> peuvent facilement être sujets à la manipulation, nous ne pouvons accepter 
> aucune responsabilité pour le contenu fourni.
>
>
>
>
>
>
>         
> ------------------------------------------------------------------------
>         Date: Fri, 4 Mar 2011 14:31:16 +0100
>
>         Subject: Axis2 client multithreaded asynchronous calls
>         From: [email protected]
>         <mailto:[email protected]>
>
>         To: [email protected] <mailto:[email protected]>
>
>         Hello,
>
>         I'm trying to understand how to develop an Axis2 client that
>         uses asynchronous nonBlocking calls from a number of client
>         threads.
>
>         In the context of a single thread, I suppose that the
>         following method will automatically creates a CallbackReceiver ?
>          serviceClient.sendReceiveNonBlocking(payload, callback);
>
>         But in the context of many thread, do I need to use a single
>         CallbackReceiver for all the threads ? So how can I implement
>         the http://www.ibm.com/developerworks/webservices/library/ws-axis2/ in
>         the case of multi threads ?
>
>         Thank you very much for your help.
>
>         Kind regards,
>         -- 
>         Christophe Noël
>         -------------------------
>
>
>
>
>
>         -- 
>         Christophe Noël
>         -------------------------
>         Please consider the environment before printing this email.
>
>
>
>
>     -- 
>     Christophe Noël
>     -------------------------
>     Please consider the environment before printing this email.
>
>
>
>
> -- 
> Christophe Noël
> -------------------------
> Please consider the environment before printing this email.
>

Reply via email to