¿Cuál es la mejor manera de realizar la conmutación por error fuera de línea de un cliente de escritorio que utiliza un servicio web?

13

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 logré encontrar es implementar en la aplicación de escritorio cola de mensajes para almacenar operaciones mientras el servicio está desconectado, más precisamente, 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 las partes interesadas deben solicitar una aplicación web para que los interesados puedan realizar los informes, y los servicios web atenderá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 hacer que la aplicación de escritorio con tecnología web (por ejemplo, Appcelerator Titanium) sea un gran problema.

Mi pregunta

  1. ¿Cuál es una mejor solución que se puede escalar, es decir, máxima eficiencia con un mínimo esfuerzo (y preferiblemente sin costos adicionales, como comprar un servidor de respaldo para operaciones locales)?

  2. ¿Quién más ha tratado esto antes? ¿Cómo resolviste tu problema? ¿Qué lecciones puedes compartir?

  3. ¿Cómo lidiaste con la sincronización?

Editar: Agregué una parte faltante a mi pregunta en el punto 3

    
pregunta dukeofgaming 18.05.2011 - 07:10

3 respuestas

3

Sé que su pregunta es java, pero realmente me gusta esta arquitectura de estilo de bus de mensajes para este tipo de cosas

Básicamente, cuando se envían mensajes, obtienen potencialmente dos respuestas. El primero es del caché local, el segundo viene del servidor una vez que se conecta.

Estoy bastante seguro de que podrías adaptar esta arquitectura (rhino bus y nhib) a la tuya (MQ y hib) con bastante facilidad.

    
respondido por el Brook 26.05.2011 - 23:11
10

Haz todo localmente y sincroniza periódicamente .

Esto es lo que haría si fuera usted (no conozco la infraestructura de sincronización en Java como la que tenemos en .NET).

Mantener una marca de tiempo en la aplicación local que mantendrá la última vez que te conectaste correctamente.

Independientemente del momento en que se vuelva a conectar, esa marca de tiempo se usará para extraer nuevos datos y luego enviar nuevos pedidos generados localmente.

Luego mantendrás dos marcas de tiempo. Uno para definir cuándo se ha creado el pedido (localmente o en línea) y otro cuando el servidor lo ha registrado.

No recomiendo Message Queue Server para eso. Usé MQ en el pasado para un sitio web de comercio electrónico que tenía que estar conectado a Navision. Todo funcionó dentro de Navision, y los cambios se enviaron al sitio web de comercio electrónico a través de MQ, incluido el estado de los pedidos y todo lo que incluye descripciones de productos, precios, etc. También se enviaron nuevos pedidos a Navision a través de MQ.

    
respondido por el user2567 18.05.2011 - 09:34
1

O debería mirar implementaciones de bases de datos de sistemas conectados ocasionalmente que hacen el trabajo duro de sincronizar clientes remotos con el servidor. (SQL Server tiene esto con SQL CE hasta cierto punto, Outlook hace esto).

De esta manera, puede hacer todos los cambios localmente en una base de datos de tamaño reducido (mantiene las marcas de tiempo de las versiones / lógicas, etc. para que no tenga que preocuparse por los relojes de la PC, etc.) y cada vez que se conecte, sincronice esto. con el servidor principal.

No buscaría una solución REST cuando el sistema no puede estar en línea la mayor parte del tiempo.

    
respondido por el Subu Sankara Subramanian 23.05.2011 - 07:40

Lea otras preguntas en las etiquetas