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

Sincronizacion/Concurrencia BD desde Java. Ayuda!

Estas en el tema de Sincronizacion/Concurrencia BD desde Java. Ayuda! en el foro de Java en Foros del Web. hola a todos! Tengo una pequeña duda de concepto y no sé muy bien por dónde tirar. El caso es que tengo una base de ...
  #1 (permalink)  
Antiguo 05/11/2008, 05:22
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 2 meses
Puntos: 0
Sincronizacion/Concurrencia BD desde Java. Ayuda!

hola a todos!

Tengo una pequeña duda de concepto y no sé muy bien por dónde tirar. El caso es que tengo una base de datos centralizada (MySQL) a la que podrán acceder varios usuarios a la vez. Quiero evitar que dos personas cojan los mismos datos de la BD a la vez e intenten modificarlos. Al primero que llegue le dejo los datos en modo lectura y escritura y al segundo (y al resto) solo de lectura. Cuando el primero termine de modificar, salvará los cambios y el resto podrán acceder de nuevo en escritura.

Cómo se puede hacer esto? cómo evito que los que lleguen "tarde" no puedan escribir?

muchas graciass
  #2 (permalink)  
Antiguo 05/11/2008, 07:53
 
Fecha de Ingreso: noviembre-2008
Mensajes: 11
Antigüedad: 15 años, 6 meses
Puntos: 0
Mensaje Respuesta: Sincronizacion/Concurrencia BD desde Java. Ayuda!

Tienes que trabajar con la clase Thread, un hilo para cada proceso. lo más sencillo sería implementar una clase que trabaje como un semaforo.
Un pequeño ejemplo:

public class Semaforo {
private int color;

public int getColor()....
public void setColor(int color)......
public void dibujarSemaforo()....
}

Así cuando uno esta leyendo el semaforo se pone rojo, y el segundo al consultar el color vería que no puede acceder.

O si no, sincronizarias el proceso de lectura, asi si hay mas de una petición a la vez, solo tiene acceso el primero, y el resto espera.
Aquí lo explica bien.
http://chuidiang.blogspot.com/2005/11/sincronizacin-de-hilos-en-java.html
  #3 (permalink)  
Antiguo 05/11/2008, 08:47
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Sincronizacion/Concurrencia BD desde Java. Ayuda!

Pero hilos harían falta si desde la misma aplicación se quisiese acceder , no?

La cosa es que mi aplicación va a estar instalada en diferentes ordenadores (1 aplicación entera en cada ordenador) y desde cada una de estas aplicaciones se accederá a un único servidor que está en otro sitio.

En realidad son diferentes aplicaciones, no? quiero decir, que no harían falta hilos...
  #4 (permalink)  
Antiguo 05/11/2008, 09:50
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 1 mes
Puntos: 7
Respuesta: Sincronizacion/Concurrencia BD desde Java. Ayuda!

Utiliza un campo timestamp en la tabla que quieras proteger.

Cuando un usuario edite un registro, recoge ese timestamp y mantenlo durante toda la sesión, cuando vayas a actualizar el registro (UPDATE) hazlo comparando el tiempo que "tienes" con el que está en la BD.

En ese momento puede ocurrir dos cosas:

1) Que la fecha sea igual o superior (el superior no se debería dar nunca, pero lo dejamos por si queremos ampliar el rango). En ese caso se actualizará el registro y el timestamp con la fecha-hora de la actualización.

2) Que la fecha sea inferior. En ese caso alguien ha actualizado el registro antes que nosotros y nuestros datos no son "correcto". Avisamos al usuario de tal cosa permitiendole actualizar los datos.
  #5 (permalink)  
Antiguo 05/11/2008, 10:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Respuesta: Sincronizacion/Concurrencia BD desde Java. Ayuda!

Si la aplicación va a estar en ordenadores diferentes y lo único que comparten es la BDD... pues el bloqueo ha de ser a nivel de BDD/SQL. Si hay lógica en el servidor centralizado, puedes poner la lógica de bloqueo ahí.

Eso sí, puedes empezar presuponiendo que no hay solución fácil y que todas las propuestas tienen inconvenientes . Es un problema antiguo, conocido y es lo que tiene. Si dejas que un usuario bloquee los datos, los otros tendrán que esperar mientras se toma el café, si no bloqueas, entonces tienes que detectar las modificaciones incompatibles y reconciliar los cambios...

Si es lo que quieres hacer, el "como" bloquear los cambios frente a otros usuarios depende de si lo haces a nivel de BDD o a nivel de software en el servidor.

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 19:38.