Couchbase Mobile

Couchbase Mobile Changes Explorer - Parte. 2

Introdução

O Couchbase Mobile Gateway de sincronização O feed de alterações oferece uma maneira de monitorar eventos em uma implantação móvel. O feed torna viável a criação de lógica comercial sofisticada. Escrevi uma ferramenta para ajudar a examinar e entender o feed. Você pode ler uma introdução e uma descrição em primeira parte desta série de duas partes. O código também serve como exemplo de escuta do feed.

O código

Incluí aqui as principais classes do código do aplicativo. Esta é a primeira versão, portanto, ela pode receber muitos aprimoramentos. Os parâmetros estão todos conectados. Confira o projeto aqui no GitHub para obter atualizações. Você também pode encontrar instruções para criar, executar e empacotar o aplicativo lá.

JavaFX: A classe Controller

O JavaFX divide aplicativos simples em uma classe controladora e uma interface de usuário declarativa. Vamos examinar o controlador.

Essa primeira listagem mostra um monte de código padrão. Implemento vários ouvintes para a interface do usuário dentro da própria classe para reduzir o número de arquivos. Isso é para fins ilustrativos.

O @FXML marcam todos os campos que a estrutura associará automaticamente a partes da interface do usuário.

Em seguida, vem a inicialização. O JavaFX chama esse método como parte de seu ciclo de vida padrão.

Separei a inicialização da lista de documentos em sua própria rotina. A lista de documentos é vinculada ao documentList variável. Por sua vez documentList atualizará a interface do usuário sempre que a lista de itens que passamos for alterada.

Configurei uma consulta em tempo real para monitorar o banco de dados do cliente quanto a quaisquer alterações. Isso acontece por meio de uma consulta de "todos os documentos". Uma consulta de todos os documentos não requer uma visualização associada. Eu defino INCLUDE_DELETED para que a ferramenta possa mostrar a aparência de um documento excluído no banco de dados.

Com os outros vínculos em vigor, só precisamos atualizar o documentos lista. Veremos o ouvinte de consulta ao vivo que faz isso mais adiante.

As próximas linhas definem o estado inicial de alguns botões de alternância. Preciso de um ouvinte extra para manter o Sincronização consistente com o estado real das replicações. Mais informações sobre isso ao longo do artigo.

Escrevi uma classe separada para monitorar o Sync Gateway. O código de inicialização foi concluído com a criação de uma nova instância de monitor e seu início.

A próxima seção contém vários ouvintes.

Aqui está o ouvinte de consulta ao vivo que é chamado sempre que o banco de dados local é alterado. Eu não projetei a ferramenta para trabalhar com bancos de dados enormes. Portanto, sempre que os dados mudavam, eu simplesmente adotava a abordagem de força bruta de reler todos os documentos. O getRows retorna um enumerador que indexará e fará exatamente isso. O JavaFX se encarrega de atualizar a interface do usuário quando documentos mudanças.

Esse ouvinte cuida do rastreamento quando um usuário clica em uma entrada na lista de documentos. As entradas são os IDs dos documentos, portanto, podemos usar uma seleção para extrair o documento diretamente do banco de dados.

Usei uma abordagem de retorno de chamada para obter os resultados do feed de alterações. A interface é definida na seção SGMonitor classe. Ela tem apenas um método. Nessa implementação, simplesmente pego o corpo da resposta do feed e o coloco sobre o texto existente no painel de texto do feed de alterações. Também foi feita uma pequena formatação para facilitar a leitura.

Por fim, adicionei um ouvinte para a atividade de replicação. A interface vem da classe auxiliar DBService. Escrevi um pouco sobre como detectar o estado de uma replicação aqui. Para este aplicativo, só preciso saber se uma replicação está sendo executada ou não para manter a Sincronização estado do botão consistente. Isso lida com casos em que um usuário tenta iniciar uma sincronização, mas ela falha. Isso pode ocorrer se o usuário precisar fornecer credenciais de autenticação, mas não as tiver fornecido, por exemplo.

Em seguida, temos vários métodos vinculados a elementos da interface do usuário. O JavaFX cuida de grande parte da fiação.

Aqui eu defino o uso de credenciais de autenticação sempre que o botão correspondente for acionado.

Esse código mostra alguns itens interessantes. Eu uso um Jackson Mapeador de objetos para converter o texto no painel de conteúdo em um mapa de propriedades.

Em seguida, verifico se há uma entrada _id. O Couchbase Mobile reserva a maioria das propriedades que começam com um "_" para uso do sistema (com exceções especiais). Se o texto que estivermos tentando converter contiver _idSe o documento não for editado, presumo que seja uma edição de um documento existente. Caso contrário, crio um novo documento.

Portanto, em poucas palavras, temos um exemplo de criação e atualização de documentos. Essa não é a maneira preferida de atualizar, embora seja suficiente em muitos casos. Você pode ler mais sobre atualizações aqui.

Isso reage à alternância do Sincronização botão. Lembre-se, porém, de que usamos um ouvinte para verificar o estado em outro lugar.

O restante do código aqui são apenas bits auxiliares e uma parte para encerrar tudo antes de sair.

A classe Database Helper

Isso mostra o código de uma classe auxiliar de banco de dados simples. Na maioria das vezes, considero essa classe um bom pacote das operações típicas necessárias para gerenciar um banco de dados e iniciar um conjunto bidirecional padrão de replicações. Estou incluindo-a aqui porque a considero útil e para maior clareza.

Eu implemento o Replicação.ChangeListener interface. Isso talvez seja um pouco incomum. Mencionei o motivo anteriormente. Este link leva você à página postagem no blog sobre isso.

A classe Sync Gateway Monitor

Por fim, vamos dar uma olhada na classe auxiliar para monitorar o Sync Gateway. Também vou analisar isso em partes.

Eu uso o Biblioteca OkHttp da Square. Atualmente, o Couchbase Lite também usa essa biblioteca internamente. O OkHttp usa um padrão de construtor. Preparo uma instância do builder que usarei durante o restante do código no construtor da classe. Você pode ler sobre o significado de todos os parâmetros na seção Documentação do Sync Gateway.

O iniciar tem a parte mais interessante do código. Ele ativa um thread em segundo plano. Sob a configuração do thread e o código de controle, executo um loop contínuo. O loop faz chamadas de rede síncronas. O tratamento de erros é simples. Basta lançar uma exceção se algo der errado.

O Sync Gateway responde com cadeias de caracteres JSON. Você pode ver que o código separa a resposta e analisa o JSON em um arquivo JsonNode objeto. Isso tudo é para chegar ao última_seq na resposta.

Para rastrear o que deve ser enviado em seguida, o feed de alterações depende de um mecanismo de sequência simples. Você deve tratar isso como um objeto opaco. Pegue o valor de última_seq da resposta anterior e defina o desde para esse mesmo valor na próxima solicitação.

Não há nenhum dano real em não fornecer o desde parâmetro. O Sync Gateway apenas reproduzirá todas as alterações desde o início se ele estiver faltando. É por isso que você verá que, neste exemplo, eu trapaceio um pouco e sempre crio a instância da classe com desde definido como a string "0".

Em um aplicativo do mundo real, talvez você queira ter uma maneira de salvar a última sequência de caracteres que seu aplicativo processou, em vez de ficar percorrendo o histórico de alterações todas as vezes.

O restante do código é apenas um par de métodos curtos.

E isso é tudo para as classes principais. Há outras necessárias para o aplicativo completo.

Confira o Repositório do GitHub para ver todo o código e as instruções para criá-lo.

Leia uma discussão sobre o aplicativo e como usá-lo em primeira parte.

Pós-escrito

Você pode encontrar mais recursos em nosso portal do desenvolvedor e nos siga no Twitter @CouchbaseDev.

Você pode postar perguntas em nosso fóruns. E participamos ativamente de Estouro de pilha.

Entre em contato comigo pelo Twitter com perguntas, comentários, tópicos que você gostaria de ver etc. @HodGreeley

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Author

Posted by Hod Greeley

Hod Greeley é um defensor dos desenvolvedores da Couchbase e mora no Vale do Silício. Ele tem mais de duas décadas de experiência como engenheiro de software e gerente de engenharia. Trabalhou em diversas áreas de software, incluindo física e química computacional, segurança de computadores e redes, finanças e dispositivos móveis. Antes de ingressar na Couchbase em 2016, Hod liderou as relações com desenvolvedores para dispositivos móveis na Samsung. Hod é Ph.D. em física química pela Universidade de Columbia.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.