ws-sandesha-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Parsons1 <PARSO...@uk.ibm.com>
Subject Re: Sandesha2 In Only services.
Date Tue, 07 Oct 2008 10:18:48 GMT
Amila,

Sandesha takes it's mark off what addressing does.  If addressing has 
added a replyTo, sandesha will set the acksTo to match.  A way round this 
is to set a property 'SandeshaClientConstants.AcksTo' on your 
serviceClient.  Sandesha will then no matter what set the acksTo to that 
value.  Another way would be to use the SandeshaClient to explicitliy 
create the sequence.  That way I believe the setUseSeparateListener 
property is considered also using this you can explicitly say whether to 
offer or not.

Regards,

Dave


Dave Parsons
Web Services Test
INTERNAL:  David Parsons1/UK/IBM@IBMGB :: DE3F20 :: 246930
EXTERNAL:  ParsonsD@uk.ibm.com :: (01962) 816930
Mail Point 211, IBM Hursley Park, Winchester. SO21 2JN




From:
"Amila Suriarachchi" <amilasuriarachchi@gmail.com>
To:
David Parsons1/UK/IBM@IBMGB
Cc:
sandesha-dev@ws.apache.org
Date:
07/10/2008 08:43
Subject:
Re: Sandesha2 In Only services.





On Mon, Oct 6, 2008 at 8:11 PM, David Parsons1 <PARSONSD@uk.ibm.com> 
wrote:

Hi, 

In answer to your questions: 

Why not sending ack back on new connection? 

If you want the Ack to come back on a separate connection you'll need to 
setUseSeparateListener(true) and call sendRecieve() and not 
fireAndForget().
 
This is my scenario.  I have an in Only operation and I want to invoke 
that using WS-RM or Sandesha2. Since my operation is in only I can not use 
the sendReceive(). So it should be fireAndForget().

As I understood WS-RM 1.0 [1] describes a two channel protocol. So the 
CreateSequenceResponse and Acknowledgments should come in separate 
channels. Here it assumes a addressable client and server sends responds 
to that end point. 

The way now it operates is the way it describes in the Replay Model [2]. 
So my question is how can I make
this invocation compatible with WS-RM 1.0 spec. IMHO if 
isUseSeperateListner is set Sandesha2 should set those reply to address 
correctly.


[1] http://specs.xmlsoap.org/ws/2005/02/rm/ws-reliablemessaging.pdf
[2] http://wso2.org/files/ws-rm-replay-model-1.0.3.pdf


 This will make WSAddressing add a replyTo header and from this sandesha 
will know to set the acksTo to the same address.  If you want to set the 
replyTo to a specific predetermined endpoint you need to explicitly set 
the replyTo on the ServiceClient and then cal fireAndForget(). 
yes this is correct. Even in this case I believe the operation at the 
server side should be in out. 



Sandesha2 not recovering 

'Then I start the client without starting the sequence and the server 
started after some time. In this case it
could not recover messages.'  I'm not sure what you mean by this.  Are you 
restarting the server hosting your client?  What do you mean by restarting 
your sequence? 

This is what I did.
1. Start the client. so that initial create sequence fails.
2. After some time  Start the server.

Further I noticed if I start the server with a little gap still Sandesha2 
client can send the sequence correctly. So this may be an issue with 
Retransmission count. I'll have another look.


Two storage Managers in Sandesha2 module.xml 

I believe this is fine.  Only one storage manager will ever get used. 
Nevertheless i'm not sure why they both exist like that in the module.xml. 



Why offering for one way request? 

Sandesha2 will offer if RM 1.0 is requested and it finds the operation 
being called is twoway or axis has defined that an outIn MEP is being 
used.  I'd have thought that by calling fireAndForget() axis wouldn't set 
the MEP constant to outIn and therefore you wouldn't see the offer.  I 
wonder if because you have setUseSeparateListener(true) it has set this. 

Nope. Even I remove this line it does not change any thing. As I saw for 
fireAndForget Operations this variable is not relavent in Sansesha2.

thanks,
Amila. 




Regards, 

Dave 

Dave Parsons
Web Services Test
INTERNAL:  David Parsons1/UK/IBM@IBMGB :: DE3F20 :: 246930
EXTERNAL:  ParsonsD@uk.ibm.com :: (01962) 816930
Mail Point 211, IBM Hursley Park, Winchester. SO21 2JN



From: 
"Amila Suriarachchi" <amilasuriarachchi@gmail.com> 
To: 
"sandesha-dev@ws.apache.org" <sandesha-dev@ws.apache.org> 
Date: 
06/10/2008 10:31 
Subject: 
Sandesha2 In Only services.





hi,

I wrote an InOnly service and tried to invoke it using the following 
client.

ConfigurationContext configurationContext =
 ConfigurationContextFactory.createConfigurationContextFromFileSystem(
                           AXIS2_REPOSITORY_LOCATION, 
AXIS2_CLIENT_CONFIG_FILE);
           ServiceClient serviceClient = new 
ServiceClient(configurationContext, null);
           serviceClient.setTargetEPR(new EndpointReference("
http://localhost:8088/axis2/services/TestInService"));
           serviceClient.getOptions().setAction("urn:TestInOperation");
           serviceClient.engageModule("sandesha2");
           serviceClient.getOptions().setUseSeparateListener(true);
 
serviceClient.getOptions().setProperty(SandeshaClientConstants.INTERNAL_SEQUENCE_ID, 
"key1");
           System.out.println("Invoke client using thread ==> " + 
Thread.currentThread().getName());
           for (int i = 1; i < 100; i++) {
               serviceClient.fireAndForget(getTestOMElement(i));
               try {
                   Thread.sleep(1000);
               } catch (InterruptedException e) {
               }
           }
 
serviceClient.getOptions().setProperty(SandeshaClientConstants.LAST_MESSAGE, 
Constants.VALUE_TRUE);
           serviceClient.fireAndForget(getTestOMElement(11));

The sequence went fine. But although I have set 
serviceClient.getOptions().setUseSeparateListener(true); Sandesha2 send 
and receive messages in same channel. 

So how can I set it to work in dual channel (i.e with addressing reply 
to)?

Then I do the above test randomly starting and stopping the tcp channel 
using the Tcp mon. Sandesha2 could recover messages and 
every thing worked fine. Then I start the client without starting the 
sequence and the server started after some time. In this case it
could not recover messages. I did not make any changes to module.xml so I 
believe  it uses default value. 
Has any one face this problem?

Finally I saw this in sandesha2 module.xml this,

<sandesha2:StorageManagers>
 
                   <sandesha2:InMemoryStorageManager>
 org.apache.sandesha2.storage.inmemory.InMemoryStorageManager
                   </sandesha2:InMemoryStorageManager>
 
                   <sandesha2:PermanentStorageManager>
 org.apache.sandesha2.storage.inmemory.InMemoryStorageManager
                   </sandesha2:PermanentStorageManager>
 
               </sandesha2:StorageManagers>

What is the purpose of having two storage managers? Isn't this cause 
problems in handling transactions?

Can someone please help me figuring out these issues?

thanks,
Amila.


-- 
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/ 






Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU 









-- 
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/







Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU






Mime
View raw message