Estamos recibiendo una excepción CommunicationsException (de DBCP) después de un tiempo de inactividad (unas pocas horas). El mensaje de error (en la Excepción) se encuentra al final de esta pregunta, pero no veo wait_timeout definido en ninguno de los archivos de configuración. (¿Dónde deberíamos buscar? ¿En algún lugar fuera del directorio tomcat/conf?).Configuración de Tomcat utilizando DBCP
En segundo lugar, como lo sugiere la Excepción, ¿dónde se pone "Propiedad de conexión de conector/J 'autoReconnect = true'"? Aquí está la definición de recursos en el archivo conf/context.xml en Tomcat establecido:
<Resource name="jdbc/TomcatResourceName" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
username="xxxx" password="yyyy"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/dbname?autoReconnect=true"/>
En tercer lugar, ¿por qué la espera JVM hasta la llamada a executeQuery() para iniciar la excepción? Si la conexión ha excedido el tiempo de espera, el método getConnection arrojará la excepción, ¿no es así? Esta es la sección del código fuente que estoy hablando:
try {
conn = getConnection (true);
stmt = conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rset = stmt.executeQuery (bQuery);
while (rset.next()) {
....
Por último, aquí están las 1ras pocas líneas de la traza de pila ...
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 84,160,724 milliseconds ago. The last packet sent successfully to the server was 84,160,848 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3291)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1938)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2107)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2642)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2571)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1451)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
Estas son las razones algunos de nosotros estamos pensando "olvídate dbcp, puede ser tan dependiente de las configuraciones IDE y de la magia debajo del capó que DriverManager.getConnection (...) puede ser más confiable". ¿Algún comentario sobre eso? Gracias por sus conocimientos, - MS
Si entiendo bien, DBCP mantiene su conexión en su grupo pero el servidor mySql la agota, así que cuando esta conexión se envía a la aplicación, es una conexión cerrada. Tiene sentido, pero ¿es eso mi correcta comprensión? Otro q: ¿Hay algún punto en el uso de validationQuery/testOnBorrow como mencionaste, así como testWhileIdle y autoRecon ... en el archivo context.xml? Van en ese archivo, ¿verdad? –
1. Su comprensión es correcta. Todas las soluciones que indiqué son complementarias. Configurar uno, no impide configurar los otros. El cinturón y los tirantes son mejores ;-) Implementaría las 3 soluciones. la prueba mientras está inactivo significa menos tiempo de espera en el tiempo de "préstamo". La configuración de propiedades reducirá las desconexiones inoportunas. Sí, todos ellos se encuentran en la sección de Recursos del context.xml de su webapp (más adelante implementado por tomcat en $ CATALINA_HOME/conf/Catalina/localhost/yourwebapp.xml). –
no se recomienda autoReconnect - http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html – OrangeDog