|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Mar 2007
Messaggi: 20
|
[JAVA] Mysql - Connection was implicitly closed by the driver
Salve,
ho sviluppato un applicazione in java che fa uso di mysql ma purtroppo, dopo ore di utilizzo, ho riscontrato un problema con la connessione a mysql stesso. Quadro generale del lavoro che svolge l'applicazione: L'applicazione è un server che gira in background e lavora soltanto quando un client si connette ad esso per usufruire dei suoi servizi. Ad ogni client connesso il server dedica un Thread, all'interno del quale viene aperta una nuova connessione al db e stanziati oggetti necessari ad offrire determinati servizi. Durante la comunicazione con un client, il server fa uso di mysql per registrare parte dei dati che il client stesso gli manda, effettua elaborazioni e risponde al client... Nel Thread principale, all'avvio del server, viene aperta una connessione al db necessaria al server per le sue operazioni, esterne ad ogni operazione aperta con un client. Quest'applicazione sta praticamente accesa 24h su 24h, e dopo ore di utilizzo ho iniziato ad avere questo errore No operations allowed after connection closed.Connection was implicitly closed by the driver. e il server praticamente non mi permetteva di far più nulla perché non aveva connessione al db a quanto pare. L'errore dice che non è possibile effettuare operazioni dopo che la connessione è stata chiusa, ed è stata chiusa dal driver... ma perché? presumo per un timeout... o ci sono altri casi? è possibile che sia andato in crash il driver? conoscete un modo per risolvere.... ho già cercato un giro su google ma non riesco a trovare nulla di chiaro Uso JConnector per connettermi a mysql Se non sbaglio le connessioni vengono chiuse automaticamente da mysql dopo 8 ore di inattività (wait_timeout)... Pensando il problema fosse questo, ho cercato di ricreare la situazione impostando un wait_timeout di 4 secondi. A questo punto apro una connessione con DB, una sleep attende 6 secondi prima di proseguire con il codice e con l'esecuzione di una query, dopo i 6 secondi in effetti la connessione sembra che sia stata chiusa ma ottengo un altro tipo errore The last packet successfully received from the server was 6.020 milliseconds ago. The last packet sent successfully to the server was 18 milliseconds ago. non so più dove sbattere la testa... c'è qualcuno che può darmi una mano o che conosce il reale motivo del primo errore che ottengo (No operations allowed after connection closed.Connection was implicitly closed by the driver.) grazie mille per il vostro aiuto |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Puoi provare ad usare isValid(timeout) per sapere se la connessione è ancora valida prima di cominciare a fare qualcosa nei thread. Se ritorna false devi riaprirla. Però visto che mi pare di capire che questa connessione sia condivisa da più thread non credo che sia la soluzione giusta. Se non hai limiti di latenza ti conviene lasciare che ogni thread apra una sua connessione a mysql quando gli serve e poi chiuderla immediatamente.
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Mar 2007
Messaggi: 20
|
ciao,
grazie per il tuo aiuto La connessione al db che viene creata nel thread principale (nel main per capirci), serve soltanto al server per alcune sue operazioni esterne ad ogni thread. Presumo che sia proprio la connessione che usa il server a cadere... sto cercando un modo per ricostruire forzatamente lo scatenarsi di questo evento ma non ci riesco... più che altro per conoscerne il reale motivo |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:15.


















