Hi Deepal,
The article describes how to keep session, without needing to reuse the same 
ServiceClient object. I.e. keep session using different ServiceClient objects.
My question was, why is the web service class being re-instantiated for each 
web 
service invocation for ALL scopes except application.
I have configured client to manage session (and engaged addressing for 
soapsession) and the web service class keeps-on re-instantiated for each web 
service call. So, I am not having a problem on keeping/using session (I am 
using 
messageContext and serviceContext for session related data).
I can not understand why the web service class is re-instantiated.
Is this a bug in Axis2? If not, what is the logic for this? I think that for 
enterprise level application this is too costly.
Is some sample code needed for this?

Thank you







________________________________
From: Deepal jayasinghe <[email protected]>
To: [email protected]
Sent: Sun, January 23, 2011 10:25:50 PM
Subject: Re: axis2 session scopes

Now, I got the point. For that you need to try the following.

http://wso2.org/library/3184

Deepal

Hi Deepal,
>
>I have tried all scopes. In client side I have set manage           session to 
>true.
>For instance. I set the session scope in services.xml to           
>"transportsession".
>In the web service I use 
>MessageContext messageContext =           
>MessageContext.getCurrentMessageContext();
>ServiceContext scontext = messageContext.getServiceContext();
>To store values to last per session. e.g. 
>scontext.setProperty("SUM","" + sum); and I re-use sum across           
>invocations. 
>
>Also in client I do:
>ServiceClient client = new ServiceClient();
>Options options = new Options();
>options.setTo(new 
>EndpointReference("http://127.0.0.1:8080/axis2/services/MyLittleWebService";));
>options.setManageSession(true);
>client.setOptions(opts);
>I can see that the data I place in MessageContext persist           across 
>invocations but I also see that a new web service           instance is 
>created 
>per invocation.  
>
>So my question is, that the session data will persist but I           should 
>expect the web service to be re-instantiated per           invocation?  
>
>In the example of transport session I have in the web service:
>public class MyLittleWebService{
>    
>    publicMyLittleWebService(){
>        System.out.println("MyLittleService constructor           called! New 
>Instance created!");
>    }
>
>And the constructor is being called across all invocations for           all 
>types of session except application.  
>
>So I understand I must use session data, but this is the           expected 
>behavior as well? Re-instantiate the WS per           invocation? Isn't it 
>expensive for enterprise level web           services?
>If I am confused on this, please help me out understand what           am I 
>doing wrong here.
>
>Thank you
>
>
>
>
________________________________
From: Deepal Jayasinghe <[email protected]>
>To: [email protected]
>Sent: Sun,               January 23, 2011 4:08:04 PM
>Subject: Re: axis2 session scopes
>
>
>
>On 1/23/2011 7:11 AM, am am wrote: 
>I am starting on                 axis2 (1.5.4).
>>I am looking into the various session scopes for web                 services 
>>(request, soapsession etc).
>>By experimenting, I notice that in all scopes except the                 
>>application scope, there is a new instance of my web                 service 
>>being created per service call.
>>Only by setting the scope to "application" in the                 
>>services.xml, 
>>the web service is instantiated only once,                 and being re-used 
>>across all web service calls.
>>My testing for this, was actually a print statement in                 the 
>>web 
>>service constructor. The constructor was called                 for 
>>scope="request" or scope="soapsession" or                 
>>scope="transportsession" for each ws call.
>>So my question is the following: Is this the case in                 axis2? 
>>And 
>>if yes, for non-trivial web services, isn't                 it very costly 
>>(to 
>>re-instantiate per service call)?
>>Is the recommended approach to use application scope                 
>>services? 
>>Or my understanding is wrong here?
>>
Nope, this is not the way Axis2 does the session. As I can             see you 
have not send session related information to manage             the session. 
For 
example, when you use soapsession you need             to send the session ID, 
which you can  do simply by engaging             addressing module to both 
client and server side and setting             the setManageSession(true) in 
the 
option object. Similarly,             when you use transport session you are 
required to send the             cookies, which can also done by setting the 
above property.             For the request session, it creates service 
instance 
for             each invocation. 


Deepal


>Thank you!
>
>
>
>
>
>



      

Reply via email to