Semana passada estive testando o Hibernate Envers e fiquei impressionado com a facilidade da configuração e o potencial que ele possui no controle das revisões dos registros.
A partir daí, voltei ao meu questionamento que tenho há quase meio ano em busca de uma boa alternativa para trabalhar com um sistema online, que caso caia o sinal da internet o usuário possa continuar usando o sistema normalmente em um banco de dados local.E depois quando a internet voltar ele continua no mesmo processo.Ou seja, essa queda passar imperceptível na visão do usuário.
Hoje em dia, esse processo é bastante trabalhoso se é que tem como fazer, pois vejo diversas limitações.
1-Para usar o sistema “offline” eu preciso ter uma base de dados atualizada localmente, e o usuário (nem o computador) irá prever uma queda na internet e fazer um backup segundos antes da queda.
Por isso, que voltei nessa questão com o “milagre” que o Envers propicia. O Envers grava as revisões em uma nova tabela do banco de dados a cada alteração.Penso eu, não seria fantástico ter algum framework que utilizasse esse mesmo conceito, ao passar o endereço local dele, toda alteração que fizesse no banco de dados do servidor também atualizasse nesse banco de dados local? Não haveria perda de perfomance, pois a aplicação cliente chamaria o servidor, e enquanto está esperando a resposta do servidor já chamou a atualização no banco de dados local.O processamento ocorreria em locais diferentes.
Com um banco de dados local atualizado, assim que a internet caísse ( tem algumas API’s que já disponibilizam isso ) dispara um evento e você falaria para o seu programa utilizar o banco de dados local, e assim que a internet voltasse você sincronizaria as novas informações, e as que foram alteradas (que estariam marcadas com alguma flag).Assim o seu cliente não fica reclamando que o servidor está fora do ar, ou que está sem internet, e com certeza ganharíamos muitos pontos com os clientes.
O problema em trabalhar com o banco de dados local é que já entraria outra limitação, já que provavelmente todos os bancos de dados embarcados possuam uma estrutura mais limitada e, talvez não consiga simular toda a estrutura de um banco de dados como o MySQL, PostgreSQL ou Oracle.Porém como estamos falando apenas em inserir registros talvez possa ser feito algo.
Enfim, é uma solução talvez complexa, mas que se bem trabalhada pode originar um bom framework… Porém, acho que já devem existir opções que satisfaçam o que preciso se alguém souber por favor me indique link ou documentação
OBS: Hoje em dia estamos cada vez mais dependentes da internet, porém não podemos ficar presos a ela.Precisamos oferecer alternativas que possam suprir uma eventual falta dela.