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

Controlar acceso de base de datos

Estas en el tema de Controlar acceso de base de datos en el foro de Java en Foros del Web. Hola a todos, estoy haciendo una pagina en JSP y necesito controlar que diferentes usuarios no ejecuten a la vez consultas a la base de ...
  #1 (permalink)  
Antiguo 26/12/2005, 07:43
 
Fecha de Ingreso: octubre-2005
Mensajes: 15
Antigüedad: 18 años, 6 meses
Puntos: 0
Controlar acceso de base de datos

Hola a todos, estoy haciendo una pagina en JSP y necesito controlar que diferentes usuarios no ejecuten a la vez consultas a la base de datos para que no haya problemas de consistencia de la información. Utilizo base de datos MySql y Tomcat 5.5.

¿Cómo puedo implementar lo que deseo hacer? estoy intentando implementar un servlet que se llame desde las páginas JSP y este a su vez, llame a los métodos de las clases que acceden a la base de datos, pero no me esta quedando demasiado claro esta opción, si teneis alguna otra solución a mi problema os lo agradeceré enormemente.

Muchas Gracias
  #2 (permalink)  
Antiguo 26/12/2005, 07:49
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
Solo debes proteger las lineas de codigo donde se hace el acceso a la base de datos sincronizando estas lineas para que solo un hilo pueda ejecutarlas por vez. es muy sencillo

Código PHP:
sinchronized(this) {
    
//cualquier linea dentro de este bloke esta cincronizada
    //y protegida de la concurrencia

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #3 (permalink)  
Antiguo 26/12/2005, 08:23
 
Fecha de Ingreso: octubre-2005
Mensajes: 15
Antigüedad: 18 años, 6 meses
Puntos: 0
pero, si el código que accede a la base de datos está dentro de los métodos de las diferentes clases, y varios usuarios llaman a un mismo método a la vez, se instanciarán tantos objetos de la clase como usuarios soliciten ese método, en ese caso ¿tambien se produce la sincronización?

Creo que me he explicado bien.

Gracias.
  #4 (permalink)  
Antiguo 26/12/2005, 08:27
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
Pues eso es precisamente de lo que se trata la cincronizacion.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #5 (permalink)  
Antiguo 26/12/2005, 09:40
 
Fecha de Ingreso: octubre-2005
Mensajes: 15
Antigüedad: 18 años, 6 meses
Puntos: 0
de acuerdo, ya me ha quedado todo claro. muchas gracias y feliz navidad
  #6 (permalink)  
Antiguo 26/12/2005, 13:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Exclamación

Cita:
Iniciado por awelito
pero, si el código que accede a la base de datos está dentro de los métodos de las diferentes clases, y varios usuarios llaman a un mismo método a la vez, se instanciarán tantos objetos de la clase como usuarios soliciten ese método, en ese caso ¿tambien se produce la sincronización?

Creo que me he explicado bien.

Gracias.
Así como está escrito, la sincronizacion solo se produce POR OBJETO, asi que varios objetos diferentes podran ejecutar simultaneamente los métodos. Así que si quieres que no se puedan ejecutar simultaneamente, tendras que usar UN UNICO objeto, como por ejemplo un Singleton almancenado en el contexto. De todas formas lo mas normal es usar transacciones para mantener la coherencia entre peticiones simultaneas.

Mantener la coherencia entre conversaciones, varias peticiones, que ocurren a la vez es algo mas complejo y que requiere mucho mas trabajo.

Un saludo.
  #7 (permalink)  
Antiguo 26/12/2005, 16:08
 
Fecha de Ingreso: octubre-2005
Mensajes: 15
Antigüedad: 18 años, 6 meses
Puntos: 0
Tienes razón, he estado haciendo pruebas y no se sincronizan las peticiones , intentare almacenar el objeto Singleton en contexto. Muchas gracias.
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 07:46.