Newsgroup: it.comp.java
Titolo: Servlet threads

Oggi stavo parlando con un amico e siamo caduti sull'argomento servlet e
jsp.
E pensare che una volta si parlava di f...a tra amici :-)) e ora si parla di
computer :-))
Ora...
Se è realistico pensare ad un parallelismo tra servlet e cgi, jsp e php,
il mio amico mi ha detto: "eh ma con le servlet puoi usare threads"...
E io mi sono detto..ma ogni cgi è un thread, quando eseguito:) (o come se lo
fosse)
Domanda fatidica: ma i thread servlet possono comunicare tra loro ??
J

 Domanda fatidica: ma i thread servlet possono comunicare tra loro ??
Non capisco bene la domanda, ad ogni modo con JSP e Servlet, puoi comunicare
in tutti i modi in cui un'applicazione possa aver bisogno di comunicare.
questo è garantito.
Ciao
~Jigi

In effetti mi sono spiegato male:
metti caso che ho una servlet.
Un visitatore digita il suo nome e la servlet memorizza il nome, crea un
thread e gestisce/monitorizza la navigazione dell'utente o gli fa il caffč,
non importa.
Io con un'altra servlet "indice" visualizzo tutti i thread attivi e tutti i
nomi degli utenti.
Quando un utente lascia la servlet, la servlet comunica la morte del thread
e la "indice" devisualizza l'utente dalla lista-utenti.
Questo non č il progetto che voglio fare, č solo un esempio a titolo
esplicativo per intenderci su cosa intendo tra thread che comunicano.
J

 Domanda fatidica: ma i thread servlet possono comunicare tra loro ??
Rispondo si, anche se la domanda non mi è totalmente chiara è normale avere
interazioni fra thread.

Non saprei come un thread possa monitorare la navigazione dell'utente.
Potresti avere un HashMap "indice" con scope application che viene
notificato dalle pagine quando l'utente le visita. Per vedere quando la
sessione scade basta implementare SessionBindingListener, e rimuovere
l'entry dell'utente sloggato.
In questo caso non avresti threads e solo JSP. Occhio però a sincronizzare
l'accesso all'oggetto indice. Se usi Hashtable anziché HashMap, è già
sincronizzato, oppure puoi ottenere facilmente un HashMap sincronizzato (io
preferisco sincronizzare HashMap, se ti serve aiuto su come fare chiedi).
Non è molto comune che si rendano necessari threads lavorando con
applicazioni web, molto spesso c'è il sistema per evitarli.
Ciao
~Jigi

Ma girando la domanda in modo semplice,
due utenti di un sito web, possono interagire tra loro se hanno attivato un
thread ciascuno, generati dalla stessa servlet ? :)

Quando capirò cosa sono Hashtable e Hashmap :))
Fammi prima cercare qualche info in proposito affinchè possa farti domande
sensate :)
Grazie x la disponibilità
:)
J

 thread ciascuno, generati dalla stessa servlet ? :)
Beh, naturalmente si, intanto condividono le variabili di istanza (tant'è
che devi accedervi in modo synchronized).

 se lo fosse)
*La* differenza tra servlet (e tecnologie equivalenti: isapi dll, etc) e
CGI e' che per CGI il'http server crea ex-novo un processo per ogni
richiesta; un (oggetto) servlet viene creato una volta sola (all'interno
del processo della JVM associata al server, talvolta chiamato "servlet
engine" o "servlet runner") e viene riusato ad ogni richiesta. 
A seconda del modello scelto, il server http puo' creare un singolo
thread  di risposta, con conseguente coda di richieste e invio separato
di ciascuna rischiesta alla servlet - il cui codice quindi e' invocato da
un solo thread e riceve una richiesta alla volta; oppure creare un certo
numero di handler thread, i quali a loro volta invocano i servizi della
servlet in parallelo; in questo caso, l'oggetto servlet e' usato in
parallelo da piu' thread, quindi il codice deve essere scritto in modo
threadsafe. 
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 processi su cui eseguire i servlet. E comunque un thread java è un entità
L'unico processo che gira è la VM; come per tutte le classi il class
loader carica la servlet, il suo metodo service viene eseguito da un
thread per ogni invocazione da parte del client.
Le variabili dell'oggetto sono chiaramente visibili dal metodo service
di ciascun thread.
A più invocazioni di un CGI corrisponde la creazione di più processi e
non di semplici thread, con conseguente overhead ed occupazione di
memoria.
tityrus

Correggetemi se sbaglio:
Dato che la VM che esegue i programmi è una sola,
si può supporre che due programmi identici, caricati dalla stessa VM siano
indipendenti.
Tali programmi sono in grado di creare dei thread.
Tali thread, essendo "alimentati" dalla stessa VM, e generati dal padri
simili, sono in grado di dialogare tra loro.
Corretto ?
J

 si puň supporre che due programmi identici, caricati dalla stessa VM siano
