Newsgroup: it.comp.java
Titolo: [forse OT?] - Limitare il numero di Handles del Java Server

Buonasera a tutti
Ho sviluppato un'applicazione web composta da servlet che gira su Apache
jserver su piattaforma W2K
Non ho nessun problema a farla girare tranne che noto che a fine giornata il
numero degli handles del processo  jserver sale abbastanza consistentemente.
Quando questo raggiunge circa 10000 il jserver non risponde più ed è
necessario farlo ripartire.
Ho scoperto dopo un pò di tempo che gli handles sono tutti od in parte
correlati alle choiamate che i servlet fanno alla Base Dati per cui se ad
esempio uno statement non viene chiuso l'handle resta "appeso" e con esso la
connessione. Ho provveduto a correggere tutto il codice facendo  in modo che
tutti gli statement siano chiusi. Effettivamente la situazione è migliorata
ma il numero degli handles rimane tale da consigliare di fare uno start and
stop del processo java durante la notte in modo da rilasciare le connessioni
e quindi riportare gli handles al valore iniziale. Parallelamente vedo sulla
Base Dati che rimangono connessioni aperte "vecchie" di parecchie ore.
Il forzare la chiusura di queste lato Base Dati non provoca l'abbassamento
degli handles, quindi il problema si deve risolvere lato Java
Quello che ho visto è che ogni volta che un servlet viene richiamato genera
un certo numero di handles correlati che dovrebbero essere rilasciati quando
il servlet finisce il suo ciclo. Suppongo che se il servlet viene interrotto
durante il suo ciclo (es. dal tasto stop del browser) gli statement  non
vengono chiuse correttamente e gli handles non vengono rilasciati.
Per la precisione io apro la connessione con la BaseDati nella init() e la
chiudo della destroy() e quasi tutti i metodi sono dichiarati synchronized
per evitare che i dati di un utente siano "mischiati" con quelli di un
altro.
Ho provato a creare un pool di connessioni sul java server ma questo mi
limita solo il numero dei threads, peraltro già basso
Infine la domanda: c'è qualche metodo/routine che mi permetta di eseguire un
controllo sulle connessioni aperte, ovvero sugli handles?
Grazie per l'attenzione
Raul

 altro.
secondo me il problema sta proprio nel fatto che tu gestisci le connessioni
nello strato delle servlet. Una servlet e una jsp sono troppo dipendenti
dall'application server e dal web in generale (gli "stop" di cui parli non sono
prevedibili). Dovresti crearti un piccolo framework "sicuro" per gestire le
connessioni, questo strato java deve essere fatto in modo da non lasciare
resultset/statement/connections appese.
Ti suggerisco di usare le callback ...
CIAO

 vengono chiuse correttamente e gli handles non vengono rilasciati.
A regola quando premi il tasto Stop il browser ignora quel che viene dal
server (semplicemente chiude il socket); la servlet continua a
funzionare ma a quel punto il socket diventa una specie di /dev/null,
visto che dall'altra parte niuno più recupera i dati. Il resto del
programma continua a funzionare e se il tuo codice è scritto a dovere
alla fine rilascerà gli statement e le connessioni.
Ciao,
	Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

 wrote in message
news:3AFAB7BD...@sinapsi.com...


 wrote in message
news:3AFC1958...@sdb.it...
