Newsgroup: it.comp.java
Titolo: Condivisione oggetti tra due servlet

Ho risolto il problema che mi assillava (e con il quale vi ho
assillato) per due settimane: semplicemente non avevo capito come
funziona http :P
Naturalmente ora ho un altro quesito, ma fortunatamente è molto più
interessante :)
Per andare avanti con il mio lavoro ho scritto due servlet (anche se
continuo a provare a fare tutto con un solo servlet, ma per ora non mi
riesce) che devono condividere delle informazioni. Ho visto che un
modo per farlo è incapsulare le informazioni da condividere in un
oggetto istanziato di una classe singleton. In pratica di questa
classe esiste solo un'istanza (quindi static) a cui è possibile
accedere con il classico metodo getInstance(). Tutto ciò per evitare
che tra una chiamata e l'altra dei servlet l'oggetto venga rimosso dal
garbage collector.
La cosa funziona egregiamente, se non fosse che ho la necessità di
mantenere i dati dell'oggetto condiviso tra due chiamate in sequenza
delle due servlet: un'applet o una form html postano dei dati al primo
servlet, che imposta l'oggetto condiviso. Subito dopo posto altri dati
al secondo servlet, che però deve tener presente i dati già impostati
dal primo per rispondere adeguatamente. Quello che voglio evitare è
che una nuova istanza del primo servlet, chiamato quando sta girando
il secondo servlet, vada a modificare il contenuto dell'oggetto
condiviso che in quel momento serve al secondo servlet!
Non so se l'application server si occupa di fare questo in automatico,
e non ho trovato documentazione a riguardo, quindi ho pensato di
aggiungere un campo boolean all'oggetto condiviso e impostarlo a true
ogni volta che l'oggetto viene "bloccato". Successivamante, quando il
secondo servlet ha finito di elaborare (ma anche quando ci sono errori
sul lato client), l'oggetto condiviso viene "rilasciato" impostando il
campo boolean a false. Il servlet che vuole leggere l'oggetto ciclerà
a vuoto finchè non troverà il campo true, e poi proseguirà.
Ora questa mi sembra un'implementazione un po' rozza del classico
semaforo, e la prima cosa che mi è venuta in mente è che forse sarebbe
possibile ricorrere al multithread di java. Ma non so da dove
cominciare, per due motivi: innanzitutto non ho mai fatto un utilizzo
molto avanzato del multithread, e poi non so se potrebbe essere la
strada giusta, in quanto (correggetemi se sbaglio) impostare un blocco
synchronised vuol dire solo limitare l'accesso ad un solo oggetto alla
volta, e questa è solo una delle cose che voglio, l'altra è che prima
di rilasciare il blocco devono partire due servlet che operano sugli
stessi dati, e non so come si potrebbe fare. Tuttavia la semplice
variabile booleana ha un'altra serie di problemi legati al suo accesso
tramite metodi pubblici che non mi sembra il massimo dal punto di
vista sia della sicurezza che della flessibilità.
Qualcuno ha qualche suggerimento?
Grazie per l'attenzione!
Ciao, GePs.

 Grazie per l'attenzione!
Potresti usare la Session per mantenere le info che ti servono. La prima 
servlet imposta la tua classe e la memorizza nella Session e la seconda 
la recupera dalla Session e legge i dati che gli servono.
Non vorrei dire una boiata è un pezzo che non uso + servlet ma la 
session dovrebbe essere "unica" per ogni client collegato quindi 
risolveresti anche il tuo problema di "concorrenza".
Cmq dai un occhio alla doc che è meglio ;)

 Cmq dai un occhio alla doc che è meglio ;)
Grazie! :)