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

Pool de conexiones en aplicación J2SE, Netbeans, Glassfish, etc.

Estas en el tema de Pool de conexiones en aplicación J2SE, Netbeans, Glassfish, etc. en el foro de Java en Foros del Web. Estimados compañeros: Estoy dándole vueltas a un asunto, y no termino de encontrar la dirección adecuada, asi que creo que lo mejor es lanzar la ...
  #1 (permalink)  
Antiguo 06/08/2010, 04:12
 
Fecha de Ingreso: noviembre-2007
Mensajes: 74
Antigüedad: 14 años, 7 meses
Puntos: 5
Pool de conexiones en aplicación J2SE, Netbeans, Glassfish, etc.

Estimados compañeros:

Estoy dándole vueltas a un asunto, y no termino de encontrar la dirección adecuada, asi que creo que lo mejor es lanzar la pregunta, a ver si alguien me puede orientar.

Tengo una aplicación en dos capas, es decir, la aplicación desarrollada con j2se, que se ejecuta en varias computadoras clientes, y un servidor de bd oracle, al cual la aplicación se conecta y accede a la información que contiene. Para el desarrollo utilizo netbeans 6.9, y el servidor integrado en netbeans Glassfish.

Este es el escenario general. Lo que yo hacía hasta ahora, era abrir una conexión con la base de datos cuando el cliente abre su aplicación, mantenerla abierta durante la vida de la misma, y cerrarla al salir de la aplicación.

Sin embargo me enfrento a una exigencia particular en este caso concreto. La aplicación muestra mucha información que proviene de diferentes consultas sobre la base de datos, al mismo tiempo. Imaginad una pantalla dividida en muchas tablas, cada una de las cuales es una consulta diferente sobre la base de datos, y cada una se actualiza en un instante de tiempo aleatorio, imposible de determinar a priori. Cada tabla es un hilo de ejecución diferente que llegado su momento, vuelve a refrescar la información recuperando un juego de registros de la base de datos.

El problema que tengo es que como solo tengo una conexión con la base de datos para toda la aplicación, si un hilo de ejecución lanza una consulta de bd que tarda 10sg en resolverse, y posteriormente otro hilo de ejecución lanza una consulta que solo tarda 1sg en resolverse, el segundo hilo tiene que esperar a que la conexión esté disponible, asi que la tardanza de la segunda consulta que solo sería de 1 sg, se eleva a 11sg. Esto no funciona demasiado bien, porque cuando un hilo lleva varios segundos esperando a que la conexion quede libre, inevitablemente se le unen otros hilos en la misma situación.

Una estrategia que se me ocurrió es que cada hilo que necesita hacer una consulta, cree una conexión con la base de datos, y la cierre al terminar. Pero ya sabemos que establecer conexiones es costoso en tiempo y penaliza el rendimiento. Además, estamos hablando de una aplicación que tiene corriendo entre 15 y 20 hilos diferentes que realizan una consulta cada, mas o menos, 10 o 20 segundos, con lo cual un solo cliente podría abrir al mismo tiempo 20 conexiones sobre la base de datos. Multipliquemos eso por los diez o quince clientes estimados, y tenemos que en un momento dado se podrían generar hasta más de 300 conexiones a la base de datos, para cerrarlas casi todas unos segundos despues.


Asi que seguí pensando y se me ocurrió implementar un pool de conexiones usando Glassfish. De esta manera Glassfish se encargaría de gestionar el pool, que lo hará mejor que cualquier codigo que pueda programar yo, abrir nuevas conexiones cuando se vayan necesitando, cerrarlas cuando queden libres, y mantener un pequeño numero de conexiones siempre abierto listo para ser usado.

Pero todo lo que encuentro en internet acerca de como usar un pool de conexiones con JDBC, esta enfocado a aplicaciones web, no encuentro ningún ejemplo de como conectarse a un pool desde una aplicación j2se. Lo cual me lleva a pensar si me estaré haciendo un lio, y mezclando tecnologías que no tienen nada que ver.

COmprendo que un pool de conexiones este mas enfocado a una aplicación web que puede tener decenas de miles de usuarios concurrentes, pero, ¿se podria usar tambien desde una aplicación j2se?

Alguna idea y /o comentario?

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 06/08/2010, 12:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 18 años, 8 meses
Puntos: 51
Respuesta: Pool de conexiones en aplicación J2SE, Netbeans, Glassfish, etc.

El punto donde te estás mezclando es cuando intentas usar GlassFish para hacer el pool de conexiones. GlassFish es un servidor de aplicaciones Java EE, para hacer aplicaciones web, vamos. Así que es normal que los ejemplos que encuentres sólo hablen de usar el pool desde aplicaciones web. Esa parte, mejor descartarla.

Donde si que no vas errado es que usar un pool de conexiones lo puedes hacer tanto desde aplicaciones de escritorio como aplicaciones web, pero lo que has de buscar es la simple librería que te haga de pool de conexiones, sin tener que cargar con el servidor de aplicaciones.

Así pues, lo aconsejable es buscar librerías de pools de conexiones y simplemente crear una instancia siguiendo las instrucciones. Los servidores de aplicaciones dan otras instrucciones por que los pools los crean ellos y luego se los pasan a las aplicaciones. Tu lo crearás directamente.

Una par de librerías de ese tipo bastante usadas son Proxool y/o C3Po, aunque hay bastantes más. Puedes encontrar una lista aquí: http://java-source.net/open-source/connection-pools

Busca alguna que tenga versiones recientes, que el manual te sea claro y a por ello.

Ojo al configurar los máximos de cada pool puesto que tu BDD tiene que ser capaz de soportar que todos los clientes puedan usar el máximo simultaneamente.

Otras opciones de control, como un servidor centralizado, permiten optimizar mejor el uso de las conexiones y controlar mejor cuantas se usan, pero requieren una arquitectura de 3 capas, más compleja.

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 06/08/2010, 13:03
 
Fecha de Ingreso: noviembre-2007
Mensajes: 74
Antigüedad: 14 años, 7 meses
Puntos: 5
Respuesta: Pool de conexiones en aplicación J2SE, Netbeans, Glassfish, etc.

Hola:

Muchas gracias por tu respuesta, me has puesto en el camino correcto.

Despues de comparar las librerías que me comentas, creo que simplemente para probar, voy a usar DBCP, ya que observo que es una de las usadas en general, o esa sensación me dio de los resultados que obtuve de google.

De nuevo, muchas gracias por tus indicaciones, me han ayudado a caer del burro.

un saludo

r

Etiquetas: conexiones, glassfish, netbeans, pool
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:57.