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 <dee...@opensource.lk>
To: java-user@axis.apache.org
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