Newsgroup: it.comp.java
Titolo: Mantenere stato tra Webservice differenti

Avendo due webservice, che usano le API JAX-WS 2.1 (e
l'implementazione è jbossws), come faccio a condividere la sessione
HTTP?


potresti spiegare quale obiettivo devi raggiungere con l'eventuale
soluzione?



Ad esempio se mi loggo sul webservice1, voglio che le informazioni utente 
siano disponibili sul webservice2. 
Questo considerando che l'utente loggato è stato salvato in sessione.


Di solito i web service nascono per essere utilizzati secondo il
modello "domanda - risposta".
Un web service dovrebbe offrire un servizio riutilizzabile all'interno
dell'architettura del progetto a prescindere da legami come quello di
una sessione http.
Ad ogni modo per far si che in generale 2 webservice condividano le
stesse informazione(e secondo me questo ha già più senso) puo rendere
persistenti(ad es. su un db) le informazioni necessarie.
Oppure potresti provare ad utilizzare dei session bean stateful(non
sono sicuro se sia possibile con quelli stateful)
esponendo la sua interfaccia come @WebMethod.
Quindi fare 1 webmethod per ogni webservice di cui parli su cui
condividere la sessione
Articoli ed Esempi su
[Java EE, EJB, Servlet, JSP, WebService, Glassfish, Java ME etc]
http://programmaremobile.blogspot.com

 di cui parli su cui condividere la sessione
Credo anche io che un session bean stateful non possa essere anche un 
webserice secondo la corrente specifica EJB. Ma se anche fosse possibile 
non cambierebbe molto.


Io preferisco usare un webservice come un interfaccia per un
componente software in grado di funzionare a prescindere dalla sua
implementazione, il suo container e da tutto quello che ci stà dietro.
Mettiamola così è un mio modo di vedere questo tipo di tecnologia.
Riguardo il paradigma che volgarmente ho chiamato "domanda-risposta",
anche qui si tratta di una mia preferenza:
Se il webservice funziona su protocollo http, preferisco usarlo a
prescindere dallo stato di una sessione http.
Riguardo la proposta db, hai senz'altro ragione tu: un "piccolo" dato
in sessione è sicuramente la scelta 1000 volte migliore(performance,
architettura, complessità etc) di un "piccolo" dato su db.
Ma mi sono spiegato male, intendevo dire, visto la mia visione, che
qualora due webservice devono lavorare sugli stessi dati preferirei
che lo facessero su un db in modo da mantenere disaccoppiate il +
possibile le interfacce. (Es. webservice getSaldoConto usa i dati del
webservice prelevaDalConto).
Se il dato è piccolo come ad esempio username e password di un utente
manterrei i dati nella sessione(all'esterno del webservice) e
richiamando i webservice passerei i dati ad ogni chiamata.
(es. webservice getSaldoConto(user, pwd) , webservice
prelevaDalConto(user,pwd,cifra).)
Sulla soluzione ejb stateful ho dato uno sguardo alle specifiche e in
effetti è possibile realizzare ciò di cui ti parlavo solo con gli
stateless bean.
Spero che questo sia solo un sano scambio di opinioni su modi diversi
di vedere la stessa cosa.
Inoltre volevo segnalarti questo link, dove forse c'è la soluzione che
cercavi.
http://weblogs.java.net/blog/ramapulavarthi/archive/2006/06/maintaining_ses.html
------


 
http://weblogs.java.net/blog/ramapulavarthi/archive/2006/06/maintaini.
..
Grazie, ma sto già usando quel "trucco" per mantere la sessione. Il
problema è che la sessione viene aperta e manutenuta solo per quanto
riguarda la coppia interfaccia sul client -> webservice.
Ad esempio
webservice1 = getService1();
webservice2 = getService2();
usando SESSION_MANTAIN ho due sessioni e non una!