J'ai trois projets entrants qui partagent un problème commun:
ils doivent avoir la logique sur un système Web et ils ont besoin d'une application locale (par exemple point de vente) qui communique avec un tel système via un service Web RESTful.
Ma solution
La solution que j'ai réussi à trouver consiste à implémenter dans la file d' attente de messages de l' application de bureau pour stocker les opérations alors que le service est hors ligne, plus précisément, la file d'attente de messages asynchrone . Cependant, c'est la partie facile (si telle est la meilleure solution). Je m'intéresse également à la synchronisation des données et à la résolution des conflits.
Le système principal doit être basé sur le Web, car une application Web est requise pour les rapports et le suivi par les parties prenantes, et les services Web traiteraient les demandes de plusieurs établissements.
Les clients de bureau (de préférence légers) seront implémentés avec Java (plus spécifiquement Netbeans) et le système web avec Symfony2. Deux des projets nécessitent une intégration matérielle pour le client, donc rendre l'application de bureau avec la technologie Web (par exemple Appcelerator Titanium) pourrait être une douleur majeure.
Ma question
Quelle est une meilleure solution qui évolue, ce qui signifie une efficacité maximale avec un minimum d'effort (et de préférence sans frais supplémentaires, comme l'achat d'un serveur de sauvegarde pour un fonctionnement local)?
Qui d'autre s'en est occupé auparavant? Comment avez-vous résolu votre problème? Quelles leçons pouvez-vous partager?
Comment avez-vous géré la synchronisation?
Edit: Ajout d'une partie manquante à ma question au point # 3
la source
Faites tout localement et synchronisez périodiquement .
Voici ce que je ferais si j'étais vous (je ne connais pas le framework de synchronisation en Java comme nous l'avons en .NET).
Conservez un horodatage dans l'application locale qui tiendra la dernière fois que vous vous êtes connecté avec succès.
Quelle que soit l'heure à laquelle vous vous reconnectez, cet horodatage sera utilisé pour extraire de nouvelles données, puis envoyer de nouvelles commandes générées localement.
Vous conserverez ensuite deux horodatages. Un pour définir quand la commande a été créée (localement ou en ligne) et un quand elle a été enregistrée par le serveur.
Je ne recommande pas Message Queuing pour cela. J'ai utilisé MQ dans le passé pour un site Web de commerce électronique qui devait être connecté à Navision. Tout était géré au sein de Navision et les modifications envoyées au site Web de commerce électronique via MQ, y compris le statut des commandes et tout, y compris les descriptions de produits, les prix, etc. De nouvelles commandes ont également été envoyées à Navision via MQ.
la source
Ou vous devriez regarder les implémentations de bases de données de systèmes connectés occasionnellement qui font le gros travail de synchronisation des clients distants avec le serveur. (SQL Server a cela avec SQL CE dans une certaine mesure, Outlook le fait).
De cette façon, vous pouvez effectuer toutes vos modifications localement dans une base de données à faible encombrement (il maintient le contrôle de version / les horodatages logiques, etc. afin que vous n'ayez pas à vous soucier des horloges PC, etc.) et chaque fois que vous vous connectez, vous le synchronisez avec le principal serveur.
Je n'irais pas pour une solution REST lorsque le système ne peut pas être en ligne la plupart du temps.
la source