Tenho três projetos recebidos que compartilham um problema comum:
eles precisam ter a lógica em um sistema web e precisam de um aplicativo local (por exemplo, ponto de venda) que se comunique com esse sistema por meio de um serviço web RESTful.
Minha solução
A solução que eu consegui encontrar é implementar no serviço de enfileiramento de mensagens do aplicativo de desktop para armazenar operações enquanto o serviço está offline, mais precisamente, enfileiramento de mensagens assíncrono . No entanto, essa é a parte mais fácil (se essa for a melhor solução). Também estou preocupado com a sincronização de dados e resolução de conflitos.
O sistema principal precisa ser baseado na Web, já que um aplicativo da Web é necessário para relatórios e monitoramento pelas partes interessadas, e os serviços da Web lidam com solicitações de vários estabelecimentos.
Os clientes de desktop (preferencialmente thin) serão implementados com Java (mais especificamente Netbeans) e o sistema web com Symfony2. Dois dos projetos exigem integração de hardware para o cliente, portanto, tornar o aplicativo de desktop com tecnologia da Web (por exemplo, Appcelerator Titanium) pode ser um grande problema.
Minha pergunta
Qual é a melhor solução escalável, significando eficiência máxima com o mínimo de esforço (e de preferência sem custos adicionais, como a compra de um servidor de backup para operação local)?
Quem mais já lidou com isso antes? Como você resolveu seu problema? Que lições você pode compartilhar?
Como você lidou com a sincronização?
Editar: adicionada uma peça que faltava à minha pergunta no ponto 3