2009-07-06 14 views
11

Estoy corriendo un problema con la agrupación de conexiones de Oracle a través de OracleConnectionCacheImpl. Cuando me conecto a un grupo de conexión en mi servidor de base de datos (Oracle 10g) a través del controlador delgado, todo funciona bien hasta después de un tiempo no especificado, la conexión db se corta (posiblemente debido a conexiones inactivas?) Y aparece un mensaje de error:¿Cómo volver a conectar automáticamente el grupo de conexiones de Oracle después de la interrupción de la conexión?

Conexión cerrada.

Al actualizar la página y al volver a intentar la conexión, se vuelve a conectar la base de datos, por lo que no parece ser un problema con la red o la base de datos. ¿Es una forma de que el grupo de conexiones de Oracle valide su conexión y se vuelva a conectar si la conexión del grupo está muerta por algún motivo?

estoy usando Apache Tomcat 6.0.18, actualización de Java EE6 11.

(Parece que hay una función de ping en el controlador fino Oracle. ¿Eso ayuda y dónde puedo encontrarlo?)

+2

1) ¿Se puede añadir todo el seguimiento de la pila para la conexión cerrada 2) ¿Te ha establecido InactivityTimeout, TimeToLiveTimeout o AbandonedConnectionTimeout a cualquiera de los valores no predeterminados? 3) ¿Usas ValidateConnection? –

+0

4) ¿Las conexiones físicas entre el servidor de aplicaciones y el servidor de bases de datos se cortan en el nivel de red, p. por un firewall? –

+0

¿Dónde configuro estos parámetros? Soy nuevo en la programación de Oracle, por lo que no estoy seguro de dónde encontrar estos parámetros. ¿Dónde puedo encontrar ValidateConnection y forzar una reconexión? (Simplemente actualizar mi navegador inmediatamente después de ver el error solucionará las cosas de inmediato. No estoy seguro si esto es un problema de firewall.) – futureelite7

Respuesta

-1

Utilice otra biblioteca del conjunto de conexiones, como C3P0 y use la función para el reconnect automático.

0

Apache DBCP (grupo de conexiones DB) ayudará aquí. Puede configurar con with un parámetro 'validationQuery', que es una consulta SQL para ejecutar en una conexión eliminada del grupo ANTES de que se lo entregue. Si la consulta falla, la conexión se descarta y se crea una nueva que se le entrega.

ve aquí http://commons.apache.org/proper/commons-dbcp/configuration.html para más detalles.

Nota, la validationQuery será llamado cada vez que reciba una conexión de la agrupación, por lo que debe ser lo más rápido posible. por ejemplo:

SELECT id FROM users LIMIT 1; 
0

Se pueden añadir algunos parámetros de configuración en el context.xml de manera que la agrupación de conexiones Tomcat se hará cargo de las conexiones inactivas. Aquí hay un ejemplo de context.xml por favor use el usuario/contraseña/url/puertos, etc. según su configuración.

<?xml version="1.0" encoding="UTF-8"?> 
<Context path=""> 
    <!-- Specify a JDBC data source --> 
    <Resource name="jdbc/db" auth="Container" 
       type="javax.sql.DataSource" 
       username="user" 
       password="password" 
       driverClassName="driver.class.fullpath" 
       url="jdbc:oracle://localhost:3306/ 
       maxActive="50" 
       maxIdle="10" 
       testOnBorrow="true" 
       testWhileIdle="true" 
       validationQuery="/* ping */" 
       removeAbandoned="true" 
       logAbandoned="true"/> 
</Context> 
Cuestiones relacionadas