Newsgroup: it.comp.java
Titolo: Memorizzazzione di oggetti in un aHttpSession

Ciao a tutti !
    programma servle sfruttando l'API javax.servlet di SUN.
Il web server che uso è iPlanet....
Ho rispcontrato il seguente problema.
quando cerco di "salvare" ( usando il metodo setValue() dell'interfaccia
HttpSession )un oggetto nella sessione HTTP tutto va bene se questo oggetto
apartiene alle classi core di Java ( Integer , String, String [] ecc... )
quando invece provo a memorizzare un oggetto creato da me ( che qundi
estende solo Object ) non riesco più a recuperarlo (il metodo getValue
ritorno null ! )
L'oggetto che tento di salvare deve per caso implementare una qualche
particolare interfaccia ?
E' un limite dell'implementazione dell'interfaccia HttpSession di iPlanet ?
Devo aggiungere la classe che intendo memorizzare nel classpath del web
server ?
Che cavolo devo fare per non scrivere un dannato metoto toHttpSession() per
tutti gli oggetti che creo ?
Grazie tante !
Marco G.

 particolare interfaccia ?
Gli oggetti devono essere serializzabili!
ciao
uL

 estende solo Object ) non riesco piů a recuperarlo (il metodo getValue


 ha scritto nel messaggio
news:3C2CECB6...@flashnet.it...

Anche se li rendo serializzabili non mi funziona :-(
X ora ho risolto scrivendo io la funzione che memorizza  a sessione
l'oggetto, scomponendoli in oggetti + semplici ( essenziamlemte è un Vector
che diventa uno String [] ).
Marco G.
P.S.
Ma se per renderlo serializzabile, devo scrivere io i metodi readObject e
writeObject dell'interfaccia Serializable, non vedo il vantaggio.
Secondo me ci deve essere la possibilita' di scrivere l'oggetto a sessione
proprio così come sta.

> Gli oggetti devono essere serializzabili!
Non mi risulta.

 proprio così come sta.
Allora, provo a fare un po' di chiarezza su sessioni e serializzazione:
non e' garantito che i metodi readObject() e writeObject() vengano 
invocati, la specifica 2.3 dice che il container potrebbe anche 
utilizzare un altro meccanismo di persistenza, ma che comunque sara' 
garantita la semantica della serializzazione (se l'oggetto e' tale, 
cioe' serializzabile). Quindi non implementarli, basta che l'oggetto sia 
Serializable.
Fra l'altro il Container potrebbe (ma non e' detto) anche lanciare 
un'eccezione IllegalArgumentException se l'oggetto non e' serializzabile 
ma viene 'aggiunto' nella Session.
Tutto questo da specifica nel caso che l'applicazione sia distribuibile, 
quindi vale per qualsiasi web container 2.3.
C'e' anche da dire che alcuni Web Container potrebbero implementare dei 
meccanismi alla EJB per serializzare le sessioni quando vanno giu' di 
memoria o per qualsiasi altro motivo, ed in questo caso anche se 
l'applicazione non e' distribuibile. (ma queste sono feature che 
dipendono dai container e non sono 'da specifica')
E' quindi buona norma mettere nelle session solo oggetti serializzabili 
poiche' potresti avere problemi nel caso migrassi in un'architettura 
'clusterizzata' oppure in alternativa con qualche feature particolare di 
qualche Web container che non sfrutteresti.
Detto questo, non so pero' nel tuo caso quale sia il problema! Mi sembra 
strano che tu possa aggiungere i singoli oggetti ma non la Collection, 
il che mi fa pensare proprio ad un problema di serializzazione... ma in 
effetti se l'applicazione non e' marcata come distribuibile e/o il tuo 
container non vuole solo oggetti serializzabili per implementare dei 
meccanismi di preservazione memoria, non dovresti avere problemi.
Hai visto se nei log del Container ti dice qualcosa, qualche eccezione, 
un messaggio?
uL

 HttpSession )un oggetto nella sessione HTTP tutto va bene se questo oggetto
Ho riletto il tuo msg... setValue() non esiste proprio, i metodi sono 
getValue() e putValue() (ma sono deprecati sin dalla specifica 2.2).
I metodi da usare sono getAttribute() setAttribute(), anche se immagino 
che in iPlanet i due metodi deprecati richiamino questi (voglio sperare, 
ma non ci giurerei!).
Non credo sia un problema, ma intanto e' una correzione da fare... non 
si sa mai ;)
ciao
uL

Sono stato impreciso nel messaggio ... effettivamente uso i set e get
Attribute  ...
ma il problema rimane.
Il webContainer non dice proprio nulla a livello di log.
Continuero' a fare delle prove, ma credo che sia un problema + del
Webcontainer, che non dell'applicazione Java che scrivo io.
Forse aiuterebbe spulciare la documentazione di iPlanet ...
Grazie ancora Marco G.
