Dear axis2 ServiceGroupId and scope="sopasession" community
In absence of support for this my hot hot topic ....
In mode scope="soapsession"
be aware that the ConfigContextTimeoutInterval in axis2.xml is set to a
value high enougth
as shown i.e. 3600000 = 1h
<!-- This will give out the timout of the configuration contexts, in
milliseconds -->
<parameter name="ConfigContextTimeoutInterval">3600000</parameter>
If this value is set to only 30000 that means, the user has a maximum
of 30 seconds
in a long-lasting session to have its client application send the next
request to the
axis2 server. Even the next request is sent with a a proper
ServiceGroupId after this time,
it would not prevent that destroy() is triggered by this time-out; this
however makes the
used ServiceGroupId invalid and this is then sent as an exception back
to the client;
but the ServiceGroupId is valid only the time-out has occured.
So the falt raised should potentially inform about the true cause, not
letting users in the dark.
Since I have adjusted this time out to 1 hour, a client can suspend a next
request for that
time and still reach the waiting instance of a service-object and through
this object potentially
a long waiting process.
Josef.Stadelmann
@axa-winterthur.ch
-----Ursprüngliche Nachricht-----
Von: Stadelmann Josef [mailto:[email protected]]
Gesendet: Mittwoch, 18. März 2009 10:39
An: [email protected]
Betreff: AW: scope="soapsession" what causes destroy() to be called
Hi all
It seams that no-one of the axis2 developers, mainly the one introducing
scope="soapsession" are able
to deliver me an answer to my questions below. a while ago, two years ago in
fact I run still axis2-1.2 on
OpenVMS, I was 100% confident that I have a thread/session safe configuration
when I run in
scope="soapsession"; mode
however this is only true for java axis2 based service clients; this is the
out-come of the past months!
The various stories say - that one has to return the ServicegroupId's with each
request, in a soap-header.
OK I beleaved this. And I garantee you, all my wcf clients do it.
Meanwhile, I am 100% confident, as I am currently struggle arroun to make Vista
clients using .NET,
C#, WCF work toward an axis2 server running in scope="soapsession";
THAT THIS IS SIMPLY NOT TRUE!
what I learned and have detected so far using tcpmon is
Every axis2 java service client accepts cookies and hence the server returns on
its initial request
(when the sessiion is new) a
Set-Cookie; JSESSIONID=< id > ; Path=/axis2
This as a web http header in its reply when a first request is made, which
calls init() and then my own login()
(when the session is new:)
and with this first response, as said in documentation; I get the awaited
ServiceGroupId back.
This ServicegroupId is said to be the identifier one has to return with each
follow-request to the
server to reach the same instance of a service, to talk to the same object; to
have in fact sessions
/threads implemented; however - that is not true - without the coockie it does
not work.
The quite reader might have assumed that I run via HttpTransport not via
TcpTransports; We do so.
Now; I have 3 Java axis2 service clients running; and each is reaching its own
object/service, each sends
its own garanteed unique JSESSIONID at the http-request-header-level and its
own garanteed unique
ServiceGroupId at the soap-request-header-level
And it works;
I start my first wcf client and well it works;
This wcf client sends garanteed unique its JSESSION and its garanteed unique
ServicveGroupId
with each request; see below; we have init() login() fktmap() fktmap() fktmap()
init() login() ...
and please take notice the when the ServiceContext ID changes;
And it works;
I start my second wcf client an well it receives with its initial request (it
calls init() ( it's garanteed unique JSESSIONID and its
garanteed unique ServicegroupId;
But when I look at my log in
AXP1>ty APACHE$SPECIFIC:[000000]APACHE$JAKARTA_SERVER_OUTPUT.LOG/out=x.x
I can find the following sequence of calls; and as you can see, when my third
vista wcf client starts destroy() gets called twice for my
two previous still in use ServiceContext, and that is the deadly end of the
unique services serving wcf client 1 and 2
AXP1>search x.x "- init()","- login()","- fktmap","- logout()","-
destroy()"
- init() called at : Wed Mar 18 08:38:40 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe418d28>
org.apache.axis2.context.servicecont...@fe418d28 i=0
- login() called at : Wed Mar 18 08:38:40 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe418d28>
org.apache.axis2.context.servicecont...@fe418d28 i=1 and session is NEW
- fktmap() called at : Wed Mar 18 08:38:48 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe418d28>
org.apache.axis2.context.servicecont...@fe418d28 i=2
- fktmap() called at : Wed Mar 18 08:38:50 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe418d28>
org.apache.axis2.context.servicecont...@fe418d28 i=3
- fktmap() called at : Wed Mar 18 08:38:57 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe418d28>
org.apache.axis2.context.servicecont...@fe418d28 i=4
- init() called at : Wed Mar 18 08:39:24 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3c1573>
org.apache.axis2.context.servicecont...@fe3c1573 i=0
- login() called at : Wed Mar 18 08:39:24 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3c1573>
org.apache.axis2.context.servicecont...@fe3c1573 i=1 and session is NEW
- fktmap() called at : Wed Mar 18 08:39:32 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3c1573>
org.apache.axis2.context.servicecont...@fe3c1573 i=2
- fktmap() called at : Wed Mar 18 08:39:35 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3c1573>
org.apache.axis2.context.servicecont...@fe3c1573 i=3
- fktmap() called at : Wed Mar 18 08:39:41 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3c1573>
org.apache.axis2.context.servicecont...@fe3c1573 i=4
- destroy() called at : Wed Mar 18 08:41:05 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe418d28>
org.apache.axis2.context.servicecont...@fe418d28 i=5
- destroy() called at : Wed Mar 18 08:41:05 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3c1573>
org.apache.axis2.context.servicecont...@fe3c1573 i=5
- init() called at : Wed Mar 18 08:41:05 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3a6bc4>
org.apache.axis2.context.servicecont...@fe3a6bc4 i=0
- login() called at : Wed Mar 18 08:41:05 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3a6bc4>
org.apache.axis2.context.servicecont...@fe3a6bc4 i=1 and session is NEW
- fktmap() called at : Wed Mar 18 08:41:14 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3a6bc4>
org.apache.axis2.context.servicecont...@fe3a6bc4 i=2
- fktmap() called at : Wed Mar 18 08:41:16 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3a6bc4>
org.apache.axis2.context.servicecont...@fe3a6bc4 i=3
- fktmap() called at : Wed Mar 18 08:41:23 MET 2009 using
<mailto:org.apache.axis2.context.servicecont...@fe3a6bc4>
org.apache.axis2.context.servicecont...@fe3a6bc4 i=4
AXP1>ty APACHE$SPECIFIC:[000000]APACHE$JAKARTA_SERVER_OUTPUT.LOG/out=x.x
My question is still: what makes axis2 server calling destroy() twice in this
condition?
As nobody from the axis2 developers community seems to be able to tell me the
circumstances under which "destroy()" gets called
that forces me to do something I did 2 years ago; I have to debug axis2 server
engine / disptachers and try to find myself the
answer and the conditions responsible to send me to destroy(); I did it two
years agoe and I had to draw 18 A3 sheets of
UML sequence-diagrams until I could see how a request is delivered to then
service instance. Well, I have to do it again now.
Thank you very much for your attention.
Josef.Stadelmann
@axa-winterthur.ch
-----Ursprüngliche Nachricht-----
Von: Stadelmann Josef [mailto:[email protected]]
Gesendet: Donnerstag, 12. März 2009 18:48
An: axis-user (E-Mail)
Betreff: scope="soapsession" what causes destroy() to be called
Hi,
my web service runs in scope="soapsession"
up on a client request, call it session 1, the following functions are called
in sequence for my login cycle
init(), login(), fktmap(), fktmap(), fktmap(),
then I start the next client, calle it session 2) and the following functions
should becalled
init(), login(), fktmap(), fktmap(), fktmap(),
but the following functions are called in sequence
destroy(), init(), login(), fktmap(), fktmap(), fktmap(),
in bold the axis2 requierd functions one needs to implement for
scope="soapsession"
destroy() is the bad guy which deletes me the previous created instance;
hence thereafter client 1 / session 1 is inoperable and returns a fault to the
client telling me that ServicegroupId is invalid
but that is not true, as TcpMonitor proves the opposit for every more session 1
calls to fktmap()
Question:
under which conditions, httpMessageRequestHeader issue, http protocol
dependent, is destroy() called?
Note: with the primary call action="urn:login" the server responses with a
setCooky and passes me the cooky=JSnnnnn...
what httpRequestMessageHeader must be there or absent that a first request from
a new session does not call destry()
Only then will consecutive requests with the same ServiceGroupId in fact reach
the old service instance to which it belongs;
So a request with action="urn:login" shall hit init(), then login(), in absence
of a ServicegroupId, but at no time destroy()
Josef