Foros del Web » Programación para mayores de 30 ;) » Java »

Hibernate con Oracle

Estas en el tema de Hibernate con Oracle en el foro de Java en Foros del Web. Un saludo a todos los amigos del foro... Bueno estoy desarrollando una aplicacion Web con Java + Hibernate y una BD Oracle. Todo sale bien, ...
  #1 (permalink)  
Antiguo 06/06/2008, 08:23
 
Fecha de Ingreso: junio-2008
Mensajes: 11
Antigüedad: 15 años, 10 meses
Puntos: 0
Pregunta Hibernate con Oracle

Un saludo a todos los amigos del foro...
Bueno estoy desarrollando una aplicacion Web con Java + Hibernate y una BD Oracle. Todo sale bien, pues al hacer correr mapea la BD bien puedo hacer consultas El PROBLEMA es cuando lo dejo por un buen tiempo (2 o 3 horas) sin que yo haga nada sale el siguiente error:

[WARN] SQL Error: 17002, SQLState: null
[ERROR] Excepción de E/S: Connection timed out
[INFO] ERROR LOG
exception.getMessage() = could not execute query
exception.getMessage() = [Ljava.lang.StackTraceElement;@1fbafbb
exception.getCause() = java.sql.SQLException: Excepción de E/S: Connection timed out
exception.fillInStackTrace() = org.hibernate.exception.GenericJDBCException: could not execute query

Y cuando quiero volver a consultar algo me sale:

[WARN] SQL Error: 17008, SQLState: null
[ERROR] Conexión cerrada
[INFO] ERROR LOG
exception.getMessage() = could not execute query
exception.getMessage() = [Ljava.lang.StackTraceElement;@e01873
exception.getCause() = java.sql.SQLException: Conexión cerrada
exception.fillInStackTrace() = org.hibernate.exception.GenericJDBCException: could not execute query

Mi configuracion de mi archivo hibernate.cfg.xml es:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer" >false</property>
<property name="hibernate.connection.driver_class">oracle.jd bc.driver.OracleDriver</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@ host:1521:DBXXXX</property>
<property name="hibernate.connection.username">username</property>
<property name="hibernate.dialect">org.hibernate.dialect.Ora cle9Dialect</property>
<property name="current_session_context_class">thread</property>
</session-factory>
</hibernate-configuration>

No entiendo que pasa por que aparece 'Connection timed out' y luego 'Conexión cerrada' .

De antemano Gracias por su ayuda!!!

Att. Javi
  #2 (permalink)  
Antiguo 07/06/2008, 14:30
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Hibernate con Oracle

Muchas BDD cierran las conexiones que han estado inactivas durante X tiempo, asi que es "normal" lo que te pasa. Tu servidor de BDD esta cerrando las conexiones al cabo de un tiempo y cuando Hibernate va a usar la conexion, se encuentra con que esta cerrada.

Muchos DataSources tienen opciones de configuracion para evitar eso, haciendo llamadas periodicamente para comprobar que la conexion sigue abierta y de paso que la BDD no la cierre. Busca a ver las opciones de configuracion de tu DataSource, que seguramente tendra algo de eso.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 09/06/2008, 09:20
 
Fecha de Ingreso: junio-2008
Mensajes: 11
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Hibernate con Oracle

GreenEyed, gracias por tu colaboración...
Te comento que en Oracle la BD que estoy usando tiene un Profile 'DEFAULT', y este profile a su vez tiene una confiuración UNLIMITED para todo inclusive para Connect time. ¿Lo cerrara la conexión el Hibernate y no la BD?

Ahora lo que comentas de usar un DataSources estaba buscando y encontra el:
c3p0 con Hibernate que tiene varias opciones para la conexión, lo malo es que aun no hemos definido que Servidor de Aplicaciones usaremos y me imagino que para configurar esto es diferente por cada Servidor de aplicaciones.

Tabien me pregunto ¿Por que la BD sigue mapeada si cerro la conexión y no se vuelve a reconectar?

Gracias.

Javi.
  #4 (permalink)  
Antiguo 09/06/2008, 13:58
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Hibernate con Oracle

Si usas c3p0 con Hibernate, entonces tu configuracion va aparte del servidor de aplicaciones y será la misma independientemente del que uses. La configuracion del c3p0 es la que deberias mirar.

No soy un DBA en Oracle, pero creo que es el servidor de aplicaciones en global el que corta las conexiones que cree que se han perdido por inactividad, y no lo hace por perfiles. Puede que ese valor sea para otra cosa. De todas formas, que el servidor de BDD no corte las conexiones inactivas no es buena cosa, por que sirve para algo. Es mejor configurar que el DataSource las haga activas periodicamente.

El por que no se reconecta... eso tendras que preguntarselo a los que hicieron c3p0, : Seguramente pensaron que la gente que tuviera ese problema configuraria el pool con los valores adecuados para mantener la conexion activa.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:22.