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

Una pequeña duda con hilos y acceso a base de datos

Estas en el tema de Una pequeña duda con hilos y acceso a base de datos en el foro de Java en Foros del Web. Que tal, bueno solamente una duda. Les cuento mi situación, estoy trabajando con una librería para la recepción y envío de mensajes SMS, tengo un ...
  #1 (permalink)  
Antiguo 23/07/2007, 12:40
Avatar de PeterQB  
Fecha de Ingreso: diciembre-2006
Ubicación: La eterna primavera
Mensajes: 39
Antigüedad: 17 años, 4 meses
Puntos: 0
Una pequeña duda con hilos y acceso a base de datos

Que tal, bueno solamente una duda.

Les cuento mi situación, estoy trabajando con una librería para la recepción y envío de mensajes SMS, tengo un pequeño programa que esta sondeando el telefono o módem en busca de nuevos mensajes entrantes, despues de cierto tiempo saco todos los mensajes y los proceso, inserto en base de datos y obtengo información de la BD que tengo que retornar según sea la petición que venga en el mensaje.

Todo trabaja bien, el inconveniente se viene cuando hay concurrencia, puesto que el acceso a la base de datos y las respuestas son secuenciales, mi duda es si metiendo hilos en la parte del acceso a la base de datos se logra que sea simultanea las respuestas que retorno o mínimo me recorte los tiempos de respuestas que tengo, ya que, aunque no es muy tardado pues no tiene el mismo tiempo de respuesta que si fuera un solo mensaje el que entra.

Me faltó comentar que ya utilizo hilos en el programa principal, pero mi duda surge en la parte de si debo o sería buena practica utilizar hilos para que todo el procesamiento a la base de datos no sea secuencial, con secuencial me refiero a la parte de por cada mensaje esperar a que termine el primero para comenzar con el siguiente.

Se antemano les agradezco sus comentarios
  #2 (permalink)  
Antiguo 25/07/2007, 11:25
 
Fecha de Ingreso: septiembre-2005
Mensajes: 20
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Una pequeña duda con hilos y acceso a base de datos

En cuanto a la base de datos no deberías tener ningún problema de implementar hilos. Todos los DBMS que se consideren como tales saben manejar la concurrencia perfectamente.
Lo que deberías tener cuidado es si compartes entre los hilos la información que manejan tus mensajes o respuestas. Recuerda que leer y escribir una misma variable en memoria en dos procesos o hilos simultánemante puede provocar resultados inesperados en tu programa. De todas maneras puedes sincronizar el acceso a cualquier recursos compartidos en Java utilizando secciones críticas (métodos sinchronized) sin ningún inconveniente.

Salu2!
  #3 (permalink)  
Antiguo 25/07/2007, 23:08
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Una pequeña duda con hilos y acceso a base de datos

Hola:

No estoy muy seguro, pero si todos los hilos comparten la misma Connection, sí deberías sincronizarlos. Tanto si es necesario sincronizarlos como si la sincronización la hace internamente la base de datos o la clase Connection, un hilo tendría que esperar a que el otro termine al compartir conexión.

Si los hilos son independientes y pueden trabajar cada uno "a su bola", posiblemente ganes algo de velocidad si usas hilos distintos con Connection distintas.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 26/07/2007, 00:52
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Una pequeña duda con hilos y acceso a base de datos

No se debería usar el mismo objeto Connection desde dos hilos distintos simultaneamente, nunca. Connection no es "Thread safe".

S!
  #5 (permalink)  
Antiguo 28/07/2007, 21:28
Avatar de PeterQB  
Fecha de Ingreso: diciembre-2006
Ubicación: La eterna primavera
Mensajes: 39
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Una pequeña duda con hilos y acceso a base de datos

Les agradezco a los tres por haber respondido y tomarse el tiempo para leer el problema. Con respecto a lo que comenta Shandrio, creo que no me supe explicar, por supuesto que los DBMS manejan internamente lo que es concurrencia y demás caracteristicas que comenta. El problema va mas a lo que comenta chuidiang y el consejo que dá greeneyed, el punto es que creo que tengo que modificar la parte de la conexion a la base de datos puesto que como lo comentan utilizó solo un objeto connection que es el que me matiene abierta la conexion a la BD. La conexión a la base de datos la realizó por medio de un archivo properties, lo que se me ocurre ahora seria utilizar la interfaz DataSource como el generador de conexiones.

Pero en esta parte tendria que crear objetos connection cada vez que necesite acceso a la BD y eso a mi consideracion bajaria igualmente el rendimiento de la aplicación.

Gracias por sus cometarios, ayuda pero sobre todo tiempo.
  #6 (permalink)  
Antiguo 29/07/2007, 05:21
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Una pequeña duda con hilos y acceso a base de datos

Lo que necesitas es un DataSource que te haga un Pool de conexiones. Es decir, que tenga ya abiertas varias conexiones a la base de datos, asi que cuando le pides una no la esta creando, si no que te devuelve una que ya tenia abierta.

Cuando terminas con la conexion y haces un close, en realidad la conexion no se cierra si no que se devuelve al Pool para poder ser utilizada de nuevo en otra peticion.

De esa forma no has de abrir conexiones nuevas cada vez y el rendimiento es mucho mayor, a la vez que puedes trabajar con multiples conexiones simultaneamente.

Asi que lo suyo es buscar un PooledDataSource o usar alguna libreria que te use un Pool de conexiones.

Yo, por ejemplo, cuando uso Hibernate suelo configurarlo para que use un Pool de conexiones, normalmente el Proxool. Otras veces defino directamente un PooledDataSource en Resin, que es el contenedor de servlets que uso. Y otras veces uso directamente un Pool de conexiones que definimos nosotros hace tiempo y sabemos que es solido.

S!
  #7 (permalink)  
Antiguo 28/09/2007, 14:52
Avatar de poloche  
Fecha de Ingreso: abril-2006
Ubicación: cochabamba
Mensajes: 93
Antigüedad: 18 años
Puntos: 1
Re: Una pequeña duda con hilos y acceso a base de datos

hola estimado samigos tengu un proble que no se por que me sale
resulta que estoy utilizando hibernate en una aplicacion todo funciona de maravilla pero en ciertas ocasiones me da un error
collection was evicted


y eso no se por que
pero haber si me ayudan plis aunque sea un aequeña pista
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 04:12.