Foro sobre Java EE > Cursores abiertos Oracle
Guenas.
Has mirado la configuración de Glassfish?
Hay un apartado en la gestión de los pool en el que se escribe que debe ejecutar para comprobar que la conexión física con la BD funciona.
Prueba de desactivar esa opción y si ya no ocurre el problema tendrás claro a que se debe.
Un saludo
Buenas, a qué apartado te refieres?
La conexión con la base de datos funciona, dentro de la configuración de Glassfish hace ping sin problemas, además me puedo conectar a la aplicación y usar todas sus funcionalidades. El problema es que se quedan los cursores abiertos con la consulta que escribí en el primer post.
Un saludo.
Si la conexión se queda abierta no se cerrará nunca y eso se repite muchas veces tu pool de conexiones se quedará sin ellas y nada funconará. Si te pasa eso está claro que se queda abiertas.
La pregunta es:
¿Como gestionas la conexión? ¿Lo haces tú por código?, tienes o ORM como Hibernate o un TransactionManager de Spring que se encarga de ello?, ¿Una librería que gestiona el pool como C3p0?
Cuéntanos.
Saludo
Buenas, disculpad por la tardanza pero estamos hasta arriba de trabajo y se hace difícil.
Te comento, es una aplicación que empezaron a desarrollar otras personas por lo que nos está costando más de lo normal ver todas estas cosas.
Por lo que veo no hay ningún ORM de los que comentas, por otro lado el pool se gestiona a través de OracleConnectionPoolDataSource.
La cosa es que en principio parece que todo funciona bien pero luego revisando en el SGBD (en este caso Toad) las sesiones que hay abiertas aparece la Select que puse en el primer post, nos parece muy extraño porque es una Select que no aparece en el código y no sabemos si la está lanzando el Glassfish por ejemplo o qué puede estar pasando.
Cualquier cosa decidme, un saludo.
Mirando un poco en google tiene que tener en cuenta que hay varios tipos de Open Cursors en Oracle. Por la query que hace y ya que no está en el código tiene pinta que es algo interno de Oracle.
¿Seguro que se deja algo abierto? ¿Como lo compruebas? ¿Te da errores la aplicación de se ha alcanzado el máximo de cursores o conexiones en el programa?
revisa esto que puede que sea algo del sistema y punto.
https://jonathanlewis.wordpress.com/2013/03/27/open-cursors/
Si la aplicación te da problemas lo más seguro es que en algún punto no se haya cerrado la conexión del pool correctamente y se deja la conexión abierta. Es lo que tiene hacer las conexiones con JDBC puro, por contra todo es más rápido.
Para confirmar que la aplicación está bien o mal yo lo que haría es coger apache JMETER
http://jmeter.apache.org/
Y hacer unas cuantes peticiones http que recorran las principales páginas y tu aplicación que se encargarán de hacer queries a la BD. Una vez hecho esto haría una prueba de carga masiva unos 70 - 100 hilos atacando a tu App (dependiendo de como responda tu server). Y si aguanta y responde sin errores de conexión contra BD no problem.
Si da problemas no te va a quedar más remedio que buscar en el código donde no se está cerrando.
Saludo.
Buenos días, muchas gracias por la información, en cuanto tenga un rato libre voy a probar todo esto que me dices y os comento si veo algo raro.
Muchas gracias por la ayuda, un saludo.
Hola a todos, estoy teniendo un problema con una aplicación que corre sobre Glassfish y con base de datos Oracle.
El problema es que cuando hago una consulta en Oracle me aparecen unos cursores abiertos con una Select rarísima que no está en la aplicación, es la siguiente:
SELECT value$
FROM props$
WHERE name = 'GLOBAL_DB_NAME'
Otro problema que también hemos visto es que al hacer una transacción, la última operación también se queda abierta (ya sea INSERT o UPDATE).
Llevamos mis compañeros y yo bastante tiempo buscando solución a este problema y no sabemos ya qué más hacer.
Para dar más datos, las conexiones van a través de un pool de conexiones que está configurado en el propio Glassfish, el código de la aplicación está escrito en JAVA EE con el IDE Eclipse y la base de datos es Oracle.
Muchas gracias de antemano.