Newsgroup: it.comp.java
Titolo: Errore JDBC quando riavvio il Server DB

Ciao a tutti,
ho due applicazioni in Tomcat
una Tomcat4+linux+Mysql5
una Tomcat5+win2003+SqlServer2000
mi capita ognitanto di trovare i tomcat "impallati" e doverli riavviare 
per far ri-funzionare l'applicazione. (in calce l'eccezione del 
tomcat5+SqlServer2000)
Ho notato questo accade in particolare se riavvio il DB.
Ho cercato su internet ma non ho trovato molto di interessante. L'unica 
cosa che ho capito è che, ad es. su MySql, sembra vengano chiuse le 
connessioni dopo il tempo "wait_timeout" impostato nei parametri ( 8 ore 
di solito)
Qualcuno ha già affrontato il problema? Come evitare perlomeno che mi 
venga bloccato tutta l'applicazione?
Ciao grazie
java.sql.SQLException: I/O Error: Connection reset by peer: socket write 
error
	at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1052)
	at 
net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:465)
	at 
net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:777)
	at 
org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
	at lotti.persistence.ArticoloDAO.loadAllByLinea(ArticoloDAO.java:155)
	at lotti.domain.ProductCatalog.getArticoli(ProductCatalog.java:59)
	at application.azioni.LottiNuovo.esegui(LottiNuovo.java:57)
	at servlet.Controller.doPost(Controller.java:150)
	at servlet.Controller.doGet(Controller.java:92)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at 
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at 
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at 
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Connection reset by peer: socket 
write error
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(Unknown Source)
	at java.net.SocketOutputStream.write(Unknown Source)
	at java.io.DataOutputStream.write(Unknown Source)
	at 
net.sourceforge.jtds.jdbc.SharedSocket.sendNetPacket(SharedSocket.java:671)
	at 
net.sourceforge.jtds.jdbc.RequestStream.putPacket(RequestStream.java:560)
	at net.sourceforge.jtds.jdbc.RequestStream.flush(RequestStream.java:508)
	at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1039)

 di solito)
il problema potrebbe essere questo. la connessione cade e la servlet o jsp
punta ad una connessione che non esiste più e quindi abortisce. questo
significherebbe che crei un oggetto connection quando parte la web-app e usi
sempre quello, invece di aprire-chiudere la connessione.
meglio sarebbe usare un pool di connessioni che gestisce da se questo
problema.
guarda la classe javax.sql.DataSource.
altra cosa, se già usi il connection pool, può essere che mysql venga
riavviato, quindi le connessioni del pool di fatto non esistono più e
bisogna riavviare tomcat (o la web app), per ricaricare il pool.
ma un DB server di produzione non dovrebbe mai cadere o essere stoppato,
sarebbe una situazione molto imbarazzante (succede però, lo so per
esperienza)

 
E' la seconda che hai detto, uso un gestore di pool di connessioni.
In effetti quello che succede è che è capitato di dover riavviare il DB
(non il server con il db..) perchè qualche processo era impazzito.
Tralasciando i perchè e i percome mi basta per ora sapere che (come 
immaginavo) è normale che debba riavviare tomcat in questi casi.
Non è possibile comunque intercettare o catturare una cosa del genere, vero?
ciao grazie

 venga bloccato tutta l'applicazione?
configurando in modo appropriato il pool di connessioni.
se ad esempio usi il dbcp:
http://commons.apache.org/dbcp/configuration.html
soffermati sul parametro validationQuery. quello serve proprio a fare
in modo che il pool non ti resituisca una connessione non più valida.