You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Glen Daniels <gd...@macromedia.com> on 2002/02/19 14:25:50 UTC

RE: How to write a web service which updates the servlet session object ?

Hi Thierry!

Check out the SimpleSessionTest in test/session.  That demonstrates using the SimpleSessionHandler to acheive session dynamics with SOAP headers.

Axis is already all set up to let you use sessions in two ways.  First, by specifying the scope="session" parameter on your service deployment, you can automatically get a new target object for each client (the addressbook example does this to keep a separate address database per user).  Second, you can access an org.apache.axis.session.Session object by using MessageContext.getSession(), and then use that to store custom user data with set() and get().  If you want to do this from your target object, you can get access to the current MessageContext with the static method MessageContext.getCurrentContext().

So implementing your "B" type services is actually pretty easy in Axis, you just need to know what to look for.  We support both sessions and authentication, and you are welcome to combine them in any way you choose, or write new Handlers which implement other patterns (and contribute them back to Axis, one hopes! :)).

Hope this helps,
--Glen

> -----Original Message-----
> From: Thierry Dupont [mailto:tdupo@yahoo.com]
> Sent: Tuesday, February 19, 2002 7:12 AM
> To: axis-user@xml.apache.org
> Subject: RE: How to write a web service which updates the servlet
> session object ?
> 
> 
> OK, I undestand that Axis can manage sessions and pass
> the ID in SOAP headers.
> 
> But I don't see from a programmer point of view how I
> can read / write from/to the session.
> 
> None of the provided examples saves any user
> information in the session object.  I don't see how
> they could easily do it, cause Axis does not pass to
> the service any session or message handler.
> 
> My idea is to have 2 kinds of services :
> 
> A - User independant services, which do not need to
> read/write in any session object. For example (stock
> quotation consultation)
> 
> B - User dependant service, here are examples of 2
> services which require user session management :
>     1 - an application level authentification service,
> which stores user information (first name, last name,
> bank account number, specific rights) in a session
> object
>     2 - an bank statement consultation service which
> gets the bank account number from the user session
> object
> 
> 'A' types services are easy to implement with Axis.
> My feeling for 'B' type services is that it is not
> trivial with Axis. 
> 
> I have the feeling that there is some Axis extensions
> to developp, like extendedRPCprovider or
> extendedJavaProvider with session management
> capabilities.
> 
> We could imagine that services which want to use the
> Session object are required to implement a
> SessionAccess interface (setSession, getSession). The
> generic extendedRPCProvider or extendedJavaProvider
> would successively invoke the setSession method, then
> the service methode requested by the client.
> 
> I guess there are much nicer solutions from a
> conceptual point of view.
> 
> I don't know if I am being clear.
> 
> Apart from getting an answer to this problem, I would
> like to kown if anybody has the same need ? or has
> another way seeing things.
> 
> Thanks in advance,
> 
> Thierry.
> 
> 
> 
> 
> --- "Adam.Leggett" <Ad...@upco.co.uk> wrote:
> > You can always use the SOAP Header to maintain
> > state. Check out
> > org.apache.axis.handlers.SimpleSessionHandler
> > 
> > Cheers
> > 
> > Adam
> > 
> > -----Original Message-----
> > From: Thierry Dupont [mailto:tdupo@yahoo.com] 
> > Sent: Monday, February 18, 2002 8:34 PM
> > To: axis-user@xml.apache.org
> > Subject: How to write a web service which updates
> > the servlet session object
> > ?
> > 
> > 
> > Hello,
> > 
> > I find Axis very interesting. 
> > Amazing how easy it is to publish a web service,
> > especially stateless service, like getting stock
> > quotation as show in the example.
> > 
> > However, I think that web applications very often
> > have
> > to handle user session information.
> > 
> > Axis can run on top of a servlet engine, and most
> > servlet engines handle efficently sessions objects
> > (fetch, expiration)
> > 
> > My question is : how can write an Axis web service
> > which can update the servlet session object ?
> > 
> > Does anybody have a sample source code ?
> > 
> > Thanks in advance,
> > 
> > Thierry.
> > 
> > 
> > 
> > __________________________________________________
> > Do You Yahoo!?
> > Yahoo! Sports - Coverage of the 2002 Olympic Games
> http://sports.yahoo.com
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Sports - Coverage of the 2002 Olympic Games
> http://sports.yahoo.com
> 

samples.stock.GetInfo bug

Posted by Richard Cook <rp...@prismtechnologies.com>.
Running stock samples testit, I noticed this always displays "IBM: null"
unless you add:


      call.setReturnType( XMLType.XSD_STRING );


(18/02/02 nightly download).



RE: How to write a web service which updates the servlet session object ?

Posted by Thierry Dupont <td...@yahoo.com>.
Thank you. I see. So "B" type service are also easy to
implement.

In your answer, doex "second" require "first" ? : Do I
necessarily need to set the scope="session" (have a
dedicated target object for each client) to be able to
use MessageContext.getCurrentContext().getSession()
within my service class ?  

The idea is to have as many session objects as users,
but only one service class intance (thread safe) which
uses the session object to store/retrieve user data.

Thanks in advance,

TD.


--- Glen Daniels <gd...@macromedia.com> wrote:
> 
> Hi Thierry!
> 
> Check out the SimpleSessionTest in test/session. 
> That demonstrates using the SimpleSessionHandler to
> acheive session dynamics with SOAP headers.
> 
> Axis is already all set up to let you use sessions
> in two ways.  First, by specifying the
> scope="session" parameter on your service
> deployment, you can automatically get a new target
> object for each client (the addressbook example does
> this to keep a separate address database per user). 
> Second, you can access an
> org.apache.axis.session.Session object by using
> MessageContext.getSession(), and then use that to
> store custom user data with set() and get().  If you
> want to do this from your target object, you can get
> access to the current MessageContext with the static
> method MessageContext.getCurrentContext().
> 
> So implementing your "B" type services is actually
> pretty easy in Axis, you just need to know what to
> look for.  We support both sessions and
> authentication, and you are welcome to combine them
> in any way you choose, or write new Handlers which
> implement other patterns (and contribute them back
> to Axis, one hopes! :)).
> 
> Hope this helps,
> --Glen
> 
> > -----Original Message-----
> > From: Thierry Dupont [mailto:tdupo@yahoo.com]
> > Sent: Tuesday, February 19, 2002 7:12 AM
> > To: axis-user@xml.apache.org
> > Subject: RE: How to write a web service which
> updates the servlet
> > session object ?
> > 
> > 
> > OK, I undestand that Axis can manage sessions and
> pass
> > the ID in SOAP headers.
> > 
> > But I don't see from a programmer point of view
> how I
> > can read / write from/to the session.
> > 
> > None of the provided examples saves any user
> > information in the session object.  I don't see
> how
> > they could easily do it, cause Axis does not pass
> to
> > the service any session or message handler.
> > 
> > My idea is to have 2 kinds of services :
> > 
> > A - User independant services, which do not need
> to
> > read/write in any session object. For example
> (stock
> > quotation consultation)
> > 
> > B - User dependant service, here are examples of 2
> > services which require user session management :
> >     1 - an application level authentification
> service,
> > which stores user information (first name, last
> name,
> > bank account number, specific rights) in a session
> > object
> >     2 - an bank statement consultation service
> which
> > gets the bank account number from the user session
> > object
> > 
> > 'A' types services are easy to implement with
> Axis.
> > My feeling for 'B' type services is that it is not
> > trivial with Axis. 
> > 
> > I have the feeling that there is some Axis
> extensions
> > to developp, like extendedRPCprovider or
> > extendedJavaProvider with session management
> > capabilities.
> > 
> > We could imagine that services which want to use
> the
> > Session object are required to implement a
> > SessionAccess interface (setSession, getSession).
> The
> > generic extendedRPCProvider or
> extendedJavaProvider
> > would successively invoke the setSession method,
> then
> > the service methode requested by the client.
> > 
> > I guess there are much nicer solutions from a
> > conceptual point of view.
> > 
> > I don't know if I am being clear.
> > 
> > Apart from getting an answer to this problem, I
> would
> > like to kown if anybody has the same need ? or has
> > another way seeing things.
> > 
> > Thanks in advance,
> > 
> > Thierry.
> > 
> > 
> > 
> > 
> > --- "Adam.Leggett" <Ad...@upco.co.uk>
> wrote:
> > > You can always use the SOAP Header to maintain
> > > state. Check out
> > > org.apache.axis.handlers.SimpleSessionHandler
> > > 
> > > Cheers
> > > 
> > > Adam
> > > 
> > > -----Original Message-----
> > > From: Thierry Dupont [mailto:tdupo@yahoo.com] 
> > > Sent: Monday, February 18, 2002 8:34 PM
> > > To: axis-user@xml.apache.org
> > > Subject: How to write a web service which
> updates
> > > the servlet session object
> > > ?
> > > 
> > > 
> > > Hello,
> > > 
> > > I find Axis very interesting. 
> > > Amazing how easy it is to publish a web service,
> > > especially stateless service, like getting stock
> > > quotation as show in the example.
> > > 
> > > However, I think that web applications very
> often
> > > have
> > > to handle user session information.
> > > 
> > > Axis can run on top of a servlet engine, and
> most
> > > servlet engines handle efficently sessions
> objects
> > > (fetch, expiration)
> > > 
> > > My question is : how can write an Axis web
> service
> > > which can update the servlet session object ?
> > > 
> > > Does anybody have a sample source code ?
> > > 
> > > Thanks in advance,
> > > 
> > > Thierry.
> > > 
> > > 
> > > 
> > >
> __________________________________________________
> > > Do You Yahoo!?
> > > Yahoo! Sports - Coverage of the 2002 Olympic
> Games
> > http://sports.yahoo.com
> > 
> > 
> > __________________________________________________
> > Do You Yahoo!?
> > Yahoo! Sports - Coverage of the 2002 Olympic Games
> > http://sports.yahoo.com
> > 


__________________________________________________
Do You Yahoo!?
Yahoo! Sports - Coverage of the 2002 Olympic Games
http://sports.yahoo.com