Hi Jaliya,

I am working on integrating support for WSRM into an existing application. 
In a simple case I have a web service "A" that receives a SOAP request,
invokes web service "B", which is potentially deployed on the same axis
instance, and ultimately provides a response back to the caller
(synchronously in this case).  Furthermore, web service "A" may invoke web
service "B" multiple times (perhaps simultaneously).

In addition, I have deployed a no-op service (similar to the RMService in
the interop tests) to act as my WSRM client.  It is also deployed on the
same Axis instance (as opposed to staring up a separate SimpleAxisServer).

In my case, I require the WSRM client to be long lived and thread safe (as
there may be many web services that utilize it).  My requirements dictate
that I cannot start up a new client on a new port for each potential invoke
of web service "B" that web service "A" needs to make.

I have deployed web service "B" to support WSRM functionality.  I can call
web service "B" from a test driver (same as interop tests) with no problem.

However, if I modify the driver (see attached) to send multiple sequences
(send msg1, msg2, msg3 as last, send msg 1 as last), the test fails. 

The issue appears to be that the key that the WSRM client is using for its
incoming sequences is not unique.  In the attached test driver, it will
always be "urn:wsrm:echoString".  When the second sequence of messages is
sent, the client queue (SandeshaQueue) still has an IncomingSequence object
(with a different message identifier) stored internally.  I believe that
this IncomingSequence object is no longer needed (as the prior sequence of
messages have been successfully delivered) and should be discarded (but the
id would still need to be unique).

Regards,

Patrick


Attachment: EchoClientAsyncAck.java
Description: Binary data

Reply via email to