Pergunta

Minha exigência é que tenho aplicação web J2EE servidor e aplicação web J2EE cliente. Às vezes, o cliente pode ir offline. Quando o cliente vem em linha, ele deve ser capaz de sincronizar as alterações para lá e para cá. Também eu deveria ser capaz de controlar quais linhas / tabelas precisam ser sincronizados com base em alguns filtros / regras. Existe algum frameworks Java existentes para fazê-lo? Se eu precisar de implementar em meu próprio, quais são as diferentes estratégias que você pode sugerir?

Uma solução em minha mente é manter os logs de SQL e executar mesmas declarações no outro lado durante a sincronização. Você vê algum problema com esta estratégia?

Foi útil?

Solução

Há uma série de bibliotecas Java para sincronização de dados / replicação. Dois que eu estou ciente de são narciso e SymmetricDS . Em uma vida anterior eu tolamente implementada (em Java) meu próprio processo de replicação de dados. Parece que o tipo de coisa que deve ser bastante simples, mas se os dados podem ser atualizados em vários lugares ao mesmo tempo, ele é diabolicamente complicado. Eu recomendo fortemente que você use um dos projetos acima mencionados para tentar desvio lidar com essa complexidade si mesmo.

Outras dicas

A questão biggist com a sincronização é quando o usuário edita algo desligada, e é editado on-line ao mesmo tempo. Você precisa mesclar as duas peças mudaram de dados, ou lidar com a interface do usuário para permitir que o usuário para dizer qual versão está correta. Se você eliminar a possibilidade de tanto que está sendo editado, ao mesmo tempo, então você não tem que resolver este problema pegajoso.

O método é geralmente para adicionar um campo 'modificado' para todas as tabelas, e compará-campo modificado do cliente para um determinado registro em uma determinada linha, contra a data de modificação do servidor. Se eles não corresponderem, em seguida, substituir os dados do servidor.

Tenha cuidado com as chaves geradas automaticamente - você precisa ter certeza de sua integridade dos dados é mantida quando você copiar a partir do cliente para o servidor. Estritamente executar as instruções SQL novamente no servidor poderia colocá-lo em uma situação onde a chave gerada automaticamente mudou, e de repente as chaves estrangeiras estão a apontar para registros diferentes do que você pretende.

Muitas vezes, quando a importação de dados de outra fonte, você manter o controle da chave primária a partir da fonte externa, bem como a sua própria chave primária pessoal. Isso faz com que determinam as mudanças e diferenças entre os conjuntos de dados mais fácil para situações de sincronização difíceis.

Seu sincronizador precisa identificar quando os dados podem apenas ser atualizados e quando um ser humano necessidades para mediar um conflito potencial. Eu escrevi um artigo que explica como fazer isso usando o log e algébrica leis .

O que é mais adequado, como o armazenamento de dados do lado do cliente na sua aplicação? Você pode escolher a partir de um banco de dados incorporado como SQLite ou uma fila de mensagens ou algum objeto armazenar ou (se nenhum destes pode ser utilizado uma vez que é uma aplicação web) arquivos / documentos guardados no cliente usando Web DB ou IndexedDB através de HTML 5 de LocalStorage API.

Verifique o papel Gold Rush: Móvel Transação Middleware com Java -Object Replication . documentação de sistemas conectados ocasionalmente, da Microsoft descreve duas abordagens: service-oriented ou e-orientada de dados orientado a mensagem. Gold Rush leva a abordagem anteriormente. A abordagem mais tarde banco de dados usa merge-replicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top