Ah, I see now.
So the idea is that either a single instance of a serviceClient is reused 
across 
calls or if new instances must be used it must be directed to the specific 
serviceGroupId. Right?
For soapSession scope as mentioned in the article we use the 

client.getServiceContext().getTargetEPR().getAllReferenceParameters().get(new 
QName("http://ws.apache.org/namespaces/axis2","ServiceGroupId";));for 
transportSession what is the approach? The above method returns null (since 
there is no replyto header I guess) but on transport which is based on cookies, 
I set to client the managesession attribute to true, and still can not re-use 
session across different service clients objects. What is the approach on 
transport?

Thank you!




________________________________
From: Deepal jayasinghe <deep...@gmail.com>
To: java-user@axis.apache.org
Sent: Sun, January 23, 2011 10:51:51 PM
Subject: Re: axis2 session scopes

The problem is not sending the servicegroupID or the session related     
information. When you keep sending request it always create a new     
instances, 
only way to stop is to copy the servicegroupID from the     previous request 
and 
send it alone with the next request.

One another way to get this work is try following, then you will see     the 
expected behavior.

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);
client.invokeBlocking();
client.invokeBlocking();
client.invokeBlocking();

If we do the above, you only get one service instances.

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 <deep...@gmail.com>
>To: java-user@axis.apache.org
>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 <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