Newsgroup: it.comp.java
Titolo: rilevare da una web application la sconnessione di un client

ciao a tutti,
sono agli inizi con tomcat e la creazione di web application
e da alcuni giorni sto cercando senza successo informazioni
per capire come rilevare da una web application la sconnessione
di un client, più precisamente devo capire quando il browser viene
chiuso per eseguire una certa operazione che va a liberare delle
risorse su un altro sistema (un AS400)
qualcuno può aiutarmi?
ciao)o
Andrea
http://jame.sf.net

 risorse su un altro sistema (un AS400)
Purtroppo che io sappia non esistono sistemi certi per verificare cio'.
Potresti utilizzare un js sull'unload delle pagina o uno script ricorsivo 
lato client che 'pinga' il server, ma sono tutti sistemi che non danno 
garanzie assolute. L'unica certezza che hai è nella scadenza della 
sessione.
-- 
daniele

 risorse su un altro sistema (un AS400)
Penso che la sola speranza sia la fine della sessione..

Andrea Medeghini wrote:

è un problema che ho risolto usando l'unload del body. faccio caricare una 
paginetta jsp che dice al server "ciao, ciao". Con Explorer OK, Netscape & 
Mozilla controlla la versione. Con Moz. 5 funziona, ma se non mi sbaglio 
con la 4 non si poteva fare un windows.open nell'unload (motivi si 
sicurezza).

 sicurezza).
quello che mi suggerisci purtroppo non mi basta
ho bisogno di intercettare l'evento lato server e non fare affidamento al
client
la risorsa che devo liberare è "critica", non posso aspettare il timeout
della sessione perchè è troppo lungo e non posso neppure abbassarlo
il mio problema è che ci sono degli impiegati che lavorano via web
e magari rimangono inattivi per un po', quando finiscono devono
fare logout ma se per qualsiasi motivo chiudono il browser in modo
improprio non liberano la risorsa e c'è il rischio che non lavori più
nessuno fino a quando non parte un timeout su AS400
(che per vari motivi è molto alto)
ho tolto dalla finestra del browser tutti i pulsanti che potevo
eliminare ma resta sempre ALT-F4 e il task manager, e pertanto
mi serve una soluzione più robusta perchè non posso permettere
che ci siano buchi simili
ciò di cui avrei bisogno è un evento generato direttamente
dal web server (apache) alla sconnessione del client
ciao)o
Andrea
http://jame.sf.net

 (che per vari motivi è molto alto)
Se la "protezione" della risorsa e' circoscritta ad alcune pagine, perche'
non crei un'altra applicazione WEB, con timeout mooolto inferiore e la
richiami con dei collegamenti seguiti da parametri generati a runtime che ti
indicano che l'utente e' connesso.
Potrebbe funzionare?

 dal web server (apache) alla sconnessione del client
Impossibile perche' il web server non ha la minima conoscenza del
fatto che il client sia stato chiuso. Per lui e' come se venisse
chiuso non appena finisce di mandargli la pagina richiesta.
Andrea



Quello che voglio proporti è un po' contorto da realizzare, ma per un
problema simile penso che possa andare bene...
Si tratta di creare un'applicazione-server minima attiva sulla stessa
macchina che pubblica l'applicazione web, e giri parallela ad essa, in
ascolto su una porta a tua scelta.
Sui client potresti far caricare (in un frame) un'applet Java che si
connetta via socket diretti al mini-server.
Alla chiusura della pagina l'applet riceverebbe dalla JVM in esecuzione nel
browser i segnali stop-destroy, gestiti in modo da trasmettere al
mini-server una sequenza che indichi la chiusura della pagina. A quel punto
il mini-server, usando java.net.URL, potrebbe connettersi al webserver
locale costruendo un indirizzo del tipo 
http://localhost/contesto/servlet
?<parametri vari>
In questo modo saresti in grado di rilevare nella web application il momento
ESATTO in cui un browser viene chiuso.
Vedi un po' te se può bastare....
-- 
Fermate Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
  ---  
http://xenu.freewinds.cx
(per rispondere personalmente leva IlDitoDalCulo)

 locale costruendo un indirizzo del tipo
vi ringrazio tutti per i suggerimenti
oggi parlo con un mio collega e decidiamo cosa fare
(o meglio cosa avremo da fare appena tornati dalle ferie)
il fatto č che abbiamo a che fare con programmi scritti
su as400 che lavorano con una loro logica(?)  intoccabile
ciao)o
Andrea
http://jame.sf.net

 situazione inaccettabile.
infatti stiamo portando su web l'as400 sul quale
girano programmi che mettono blocchi ovunque :(
ciao)o
Andrea
http://jame.sf.net

 dal web server (apache) alla sconnessione del client
Fai in modo che la tua (tue) pagina web venga ri-richiesta ogni n 
millisecondi (con un refresh tag).
Lato server, se non ricevi una richiesta dopo, per dire, 2*n millisecondi,
puoi assumere che a) l'utente abbia chiuso il browser o b) il network sia 
giu' - in ogni caso, liberi la risorsa.
La cosa genere parecchio traffico, ma su intranet e' ragionevole.
Un'altra possibilita' e' mettere un'applet invisibile in ogni pagina, che 
si occupa di mandare il segnale "sono in vita" della pagina.
-- 
You dont know what to do when you dont know what you're doing.
http://space.tin.it/computer/csadun

 si occupa di mandare il segnale "sono in vita" della pagina.
ehm... guarda qui:
news:s9XEb.18000$
wM.14...@news1.tin.it
I socket diretti paiono brutti?


 I socket diretti paiono brutti?
No, ma mettere un server su ogni macchina crea un po' piu' complicazioni 
per quanto riguarda installazione, sicurezza, etc. Un'applet che ri-
richiede la pagina ottiene lo stesso effetto, ma ha accesso senza problemi 
all'host da cui e' stata scaricata.


 all'host da cui e' stata scaricata.
E chi ha parlato di un server su ogni macchina?
Hai letto bene il mio post? forse non mi sono spiegato bene, oppure devo
supporre che si sia perso per strada...
news:s9XEb.18000$
wM.14...@news1.tin.it
La mia idea era quella di affiancare un'applicazione server, scritta
anch'essa in java, sulla stessa macchina dove gira Tomcat... L'applet, una
volta caricata, si connette via socket diretti a questo mini-server
trasmettendogli qualche dato utile. Alla sua chiusura è sufficiente rilevare
la chiusura del socket stesso sul miniserver per scatenare la richiesta http
su localhost. Provo con un disegno (e vai con ascii-art... scusate se fa
abbastanza schifo...)
        .---------[WEB SERVER]----------.
        |                               |
        |   [TOMCAT] <--- [MINISERVER]  |
        |        ^             ^        |
        '--------|-------------|--------'
                 |             |
                 |             |
.--[CLIENT1]--.  |             |    .--[CLIENT2]--.
| .-browser-.>|--'-------------|----|<.-browser-. |
| | applet  |>|----------------'----|<| applet  | |
| '---------' |                     | '---------' |
'-------------'                     '-------------'
Strutturando bene la servlet che riceverà la richiesta dal miniserver, è
possibile in qualche modo rilevare il momento esatto in cui la risorsa su
AS400 può essere liberata. Ripeto, può sembrare una proposta contorta, ma
penso sia adeguato alla difficoltà del problema.
Se ho detto qualche vaccata avvertimi eh...
-- 
Fermate Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx/
