Tengo tres proyectos entrantes que comparten un problema común:
necesitan tener la lógica en un sistema web y necesitan una aplicación local (por ejemplo, un punto de venta) que se comunique con dicho sistema a través de un servicio web RESTful.
Mi solución
La solución que se me ocurrió es implementar en la cola de mensajes de la aplicación de escritorio para almacenar operaciones mientras el servicio está fuera de línea, más precisamente, la cola de mensajes asíncrona . Sin embargo, esa es la parte fácil (si tal es la mejor solución). También me preocupa la sincronización de datos y la resolución de conflictos.
El sistema principal debe estar basado en la web, ya que se requiere una aplicación web para los informes y el monitoreo por parte de las partes interesadas, y los servicios web manejarán las solicitudes de varios establecimientos.
Los clientes de escritorio (preferiblemente delgados) se implementarán con Java (más específicamente Netbeans) y el sistema web con Symfony2. Dos de los proyectos requieren integración de hardware para el cliente, por lo que la aplicación de escritorio con tecnología web (por ejemplo, Appcelerator Titanium) podría ser un gran problema.
Mi pregunta
¿Cuál es una mejor solución que escala, lo que significa la máxima eficiencia con el mínimo esfuerzo (y preferiblemente sin costos adicionales, como comprar un servidor de respaldo para la operación local)?
¿Quién más ha tratado esto antes? ¿Cómo resolviste tu problema? ¿Qué lecciones puedes compartir?
¿Cómo lidiaste con la sincronización?
Editar: se agregó una parte faltante a mi pregunta en el punto 3
fuente
Haga todo localmente y sincronice periódicamente .
Esto es lo que haría si fuera usted (no conozco el marco de sincronización en Java como tenemos en .NET).
Mantenga una marca de tiempo en la aplicación local que se mantendrá la última vez que se conectó con éxito.
Independientemente del momento en que vuelva a conectarse, esa marca de tiempo se usará para extraer nuevos datos y luego enviar nuevos pedidos generados localmente.
Luego mantendrá dos marcas de tiempo. Uno para definir cuándo se creó el pedido (localmente o en línea) y otro cuando el servidor lo ha registrado.
No recomiendo Message Queue Server para eso. Utilicé MQ en el pasado para un sitio web de comercio electrónico que tenía que estar conectado a Navision. Todo fue operado dentro de Navision, y los cambios enviados al sitio web de comercio electrónico a través de MQ, incluido el estado del pedido y todo, incluidas las descripciones de productos, precios, etc. También se enviaron nuevos pedidos a Navision a través de MQ.
fuente
O bien, debe observar implementaciones de bases de datos de sistemas ocasionalmente conectadas que hacen el trabajo duro de sincronizar clientes remotos con el servidor. (SQL Server tiene esto con SQL CE hasta cierto punto, Outlook lo hace).
De esta manera, puede hacer todos sus cambios localmente en una pequeña base de datos de huella (mantiene versiones / marcas de tiempo lógicas, etc. para que no tenga que preocuparse por los relojes de la PC, etc.) y cada vez que se conecta, sincroniza esto con el principal servidor.
No buscaría una solución REST cuando el sistema no puede estar en línea la mayor parte del tiempo.
fuente