Introducción

En Couchbase Móvil Pasarela de sincronización changes feed proporciona una forma de monitorizar eventos en un despliegue móvil. El feed permite escribir lógica de negocio sofisticada. Escribí una herramienta para ayudar a examinar y comprender el feed. Puedes leer una introducción y una descripción en primera parte de esta serie de dos partes. El código también sirve de ejemplo para escuchar el feed.

El código

He incluido aquí las clases principales del código de la aplicación. Esta es la primera versión, por lo que puede utilizar un montón de mejoras. Los parámetros están todos cableados. Comprueba el proyecto aquí en GitHub para las actualizaciones. También encontrará instrucciones para crear, ejecutar y empaquetar la aplicación.

JavaFX: La clase Controller

JavaFX divide las aplicaciones sencillas en una clase controladora y una interfaz de usuario declarativa. Vamos a caminar a través del controlador.

Esta primera lista muestra un montón de código. Implemento varias escuchas para la interfaz de usuario dentro de la propia clase para reducir el número de archivos. Esto es para fines ilustrativos.

En @FXML marcan todos los campos que el framework vinculará automáticamente a partes de la interfaz de usuario.

A continuación viene la inicialización. JavaFX llama a este método como parte de su ciclo de vida estándar.

He dividido la inicialización de la lista de documentos en su propia rutina. La lista de documentos se vincula a la lista de documentos variable. A su vez lista de documentos actualizará la interfaz de usuario cada vez que cambie la lista de elementos que le pasemos.

Configuro una consulta en tiempo real para supervisar la base de datos del cliente en busca de cambios. Esto ocurre a través de una consulta "all docs". Una consulta "all docs" no requiere una vista asociada. Configuro INCLUIR_BORRADO para que la herramienta pueda mostrar el aspecto de un documento eliminado en la base de datos.

Con el resto de vinculaciones en su sitio, sólo tenemos que actualizar el archivo documentos lista. Más adelante veremos el listener de consulta en vivo que hace eso.

Las siguientes líneas establecen el estado inicial de un par de botones. Necesito un listener extra para mantener el Sincroniza coherente con el estado real de las réplicas. Más sobre esto más adelante en el artículo.

Escribí una clase separada para monitorear Sync Gateway. El código de inicialización terminó creando una nueva instancia de monitor y arrancando.

La siguiente sección contiene varios oyentes.

Aquí está el escuchador de consultas en vivo que es llamado cada vez que la base de datos local cambia. No diseñé la herramienta para trabajar con bases de datos masivas. Por lo tanto, cada vez que los datos cambian, acabo de tomar la fuerza bruta enfoque de volver a leer todos los documentos. El getRows devuelve un enumerador que indexará haciendo justamente eso. JavaFX se encarga de actualizar la interfaz de usuario cuando documentos cambios.

Este listener se encarga de rastrear cuando un usuario hace clic en una entrada de la lista de documentos. Las entradas son los ID de los documentos, por lo que podemos utilizar una selección para extraer el documento directamente de la base de datos.

He utilizado un enfoque de devolución de llamada para obtener los resultados de la alimentación de cambios. La interfaz está definida en SGMonitor clase. Sólo tiene un método. En esta implementación simplemente tomo el cuerpo de la respuesta del feed y lo añado al texto existente en el panel de texto del feed de cambios. Hay un poco de formato hecho para que sea más fácil de leer, también.

Finalmente añadí un listener para la actividad de replicación. La interfaz proviene de la clase de ayuda DBService. Escribí un poco sobre la detección del estado de una replicación aquí. Para esta aplicación sólo necesito saber si una replicación se está ejecutando o no para mantener el Sincroniza coherente con el estado del botón. Esto permite gestionar los casos en los que un usuario intenta iniciar una sincronización pero falla. Esto puede ocurrir, por ejemplo, si el usuario tiene que proporcionar credenciales de autenticación y no lo ha hecho.

A continuación tenemos varios métodos vinculados a elementos de la interfaz de usuario. JavaFX se encarga de gran parte del cableado.

Aquí establezco el uso de credenciales de autenticación cada vez que se activa el botón correspondiente.

Este código muestra un par de cosas interesantes. Utilizo un Jackson ObjectMapper para convertir el texto del panel de contenido en un mapa de propiedades.

A continuación compruebo si hay una entrada _id. Couchbase Mobile reserva la mayoría de las propiedades que empiezan por "_" para uso del sistema (con excepciones especiales). Si el texto que intentamos convertir contiene _idSupongo que se trata de una edición de un documento existente. De lo contrario, creo un nuevo documento.

En resumen, tenemos un ejemplo de creación y actualización de documentos. Esta no es la forma preferida de actualizar, aunque es suficiente en muchos casos. Puede leer más sobre actualizaciones aquí.

Reacciona a la activación de Sincroniza botón. Recordemos, sin embargo, que utilizamos un oyente para verificar el estado en otro lugar.

El resto del código aquí son sólo bits de ayuda y una pieza para cerrar todo antes de salir.

La clase Database Helper

Esto muestra el código para una clase de ayuda de base de datos directa. En su mayor parte me parece que esta clase es un buen paquete de las operaciones típicas necesarias para la gestión de una base de datos y el inicio de un conjunto bidireccional estándar de réplicas. La incluyo aquí porque la encuentro útil y por claridad.

Pongo en práctica el Replication.ChangeListener interfaz. Eso es quizás un poco inusual. Antes he mencionado el motivo. Este enlace le lleva a la entrada del blog al respecto.

La clase Sync Gateway Monitor

Por último, echemos un vistazo a la clase helper para monitorizar Sync Gateway. Voy a caminar a través de esto en pedazos, también.

Utilizo el Biblioteca OkHttp de Square. Actualmente Couchbase Lite también usa esta librería, internamente. OkHttp utiliza un patrón constructor. Preparo una instancia del constructor que usaré durante el resto del código en el constructor de la clase. Puedes leer sobre el significado de todos los parámetros en la sección Documentación de Sync Gateway.

En iniciar tiene la parte más interesante del código. Hace girar un hilo de fondo. Bajo la configuración del hilo y el código de control ejecuto un bucle continuo. El bucle hace llamadas síncronas a la red. El manejo de errores es simple. Simplemente lanza una excepción si algo va mal.

Sync Gateway responde con cadenas JSON. Puede ver que el código separa la respuesta y analiza el JSON en un archivo JsonNode objeto. Todo esto es para llegar a la última_seq en la respuesta.

Para saber qué enviar a continuación, el feed de cambios se basa en un sencillo mecanismo de secuencia. Deberías tratar esto como un objeto opaco. Tome el valor de última_seq de la respuesta anterior, y establece el desde a ese mismo valor para la siguiente petición.

No hay ningún inconveniente en no suministrar el desde parámetro. Sync Gateway simplemente reproducirá todos los cambios desde el principio si falta. Por eso verás que en este ejemplo, hago un poco de trampa y siempre creo la instancia de la clase con desde a la cadena "0".

En una aplicación del mundo real, es posible que desee tener alguna manera de guardar la última cadena de secuencia que su aplicación ha procesado, en lugar de agitar a través de la historia de cambios cada vez.

El resto del código son sólo un par de métodos cortos.

Y eso es todo para las clases principales. Hay otras necesarias para la aplicación completa.

Echa un vistazo a la Repo de GitHub para ver todo el código y las instrucciones para construirlo.

Lea un análisis de la aplicación y cómo utilizarla en primera parte.

Posdata

Encontrará más recursos en nuestra portal para desarrolladores y síganos en Twitter @CouchbaseDev.

Puede enviar preguntas a nuestro foros. Y participamos activamente en Stack Overflow.

Envíame tus preguntas, comentarios, temas que te gustaría ver, etc. a Twitter. @HodGreeley

Autor

Publicado por Hod Greeley, Defensor del Desarrollador, Couchbase

Hod Greeley es desarrollador de Couchbase y vive en Silicon Valley. Tiene más de dos décadas de experiencia como ingeniero de software y director de ingeniería. Ha trabajado en una variedad de campos de software, incluyendo física computacional y química, seguridad informática y de redes, finanzas y móviles. Antes de unirse a Couchbase en 2016, Hod dirigió las relaciones con desarrolladores para móviles en Samsung. Hod es doctor en física química por la Universidad de Columbia.

Dejar una respuesta