Pregunta

Mi requisito es que tengo la aplicación web J2EE del servidor y la aplicación web J2EE del cliente. A veces el cliente puede desconectarse. Cuando el cliente se conecta, debería poder sincronizar los cambios de aquí para allá. También debería poder controlar qué filas / tablas deben sincronizarse según algunos filtros / reglas. ¿Existe algún marco de trabajo Java para hacerlo? Si necesito implementar por mi cuenta, ¿cuáles son las diferentes estrategias que me puede sugerir?

Una solución en mi mente es mantener registros de SQL y ejecutar las mismas declaraciones en el otro lado durante la sincronización. ¿Ve algún problema con esta estrategia?

¿Fue útil?

Solución

Hay varias bibliotecas Java para la sincronización / replicación de datos. Dos de los que tengo conocimiento son daffodil y SymmetricDS . En una vida anterior, implementé tontamente (en Java) mi propio proceso de replicación de datos. Parece el tipo de cosas que deberían ser bastante sencillas, pero si los datos pueden actualizarse en varios lugares simultáneamente, es infernalmente complicado. Le recomiendo encarecidamente que use uno de los proyectos antes mencionados para tratar de evitar lidiar con esta complejidad usted mismo.

Otros consejos

El problema de biggist con la sincronización es cuando el usuario edita algo sin conexión y se edita en línea al mismo tiempo. Debe fusionar los dos datos modificados, o tratar con la interfaz de usuario para permitir al usuario decir qué versión es la correcta. Si elimina la posibilidad de que ambos sean editados al mismo tiempo, entonces no tiene que resolver este problema difícil.

El método generalmente es agregar un campo 'modificado' a todas las tablas, y comparar el campo modificado del cliente para un registro dado en una fila dada, contra la fecha de modificación del servidor. Si no coinciden, entonces reemplaza los datos del servidor.

Tenga cuidado con las claves autogeneradas: debe asegurarse de mantener la integridad de sus datos cuando copie del cliente al servidor. La ejecución estricta de las sentencias SQL nuevamente en el servidor podría ponerlo en una situación en la que la clave autogenerada ha cambiado y, de repente, sus claves externas apuntan a registros diferentes de lo que pretendía.

A menudo, al importar datos de otra fuente, realiza un seguimiento de la clave primaria de la fuente externa, así como de su propia clave primaria personal. Esto facilita la determinación de los cambios y las diferencias entre los conjuntos de datos para situaciones de sincronización difíciles.

Su sincronizador necesita identificar cuándo se pueden actualizar los datos y cuándo un ser humano necesita mediar en un conflicto potencial. He escrito un documento que explica cómo hacerlo utilizando el registro y el algebraico leyes .

¿Cuál es el más adecuado como almacén de datos del lado del cliente en su aplicación? Puede elegir entre una base de datos incrustada como SQLite o una cola de mensajes o algún almacén de objetos o (si no se puede usar ninguno de estos, ya que es una aplicación web) archivos / documentos guardados en el cliente usando Web DB o IndexedDB a través de HTML 5 LocalStorage API.

Verifique el documento Gold Rush: Mobile Transaction Middleware con Java -Réplica de objetos . La documentación de Microsoft de sistemas conectados ocasionalmente describe dos enfoques: orientado a servicios u orientado a mensajes y orientado a datos. Gold Rush toma el enfoque anterior. El enfoque posterior utiliza la fusión de bases de datos de replicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top