En nombre del equipo de ingeniería del SDK, me complace anunciar que hemos trabajado en la implementación de la especificación JCache (JSR107) y que, por lo tanto, ya está disponible una vista previa para desarrolladores.
La especificación JCache permite a los desarrolladores construir sus aplicaciones alrededor de una API estándar para Caché, intercambiando implementaciones con el mínimo esfuerzo. Esta implementación se basará en Couchbase Server y el Java SDK 2.0 para realizar el almacenamiento en caché de una manera eficiente y performante.
Queremos que los desarrolladores tengan una muestra de lo que está por venir y permitirles hacer comentarios y sugerencias al principio del proceso. Tenga en cuenta que esto no es en absoluto una implementación terminada, ya que bastantes cosas son todavía trabajo en progreso, pero las operaciones básicas y la configuración son funcionales.
Descubramos cómo utilizar esta aplicación.
Obtención de la aplicación
El plan es, por supuesto, hacerlo disponible en Maven Central, pero por ahora la implementación de Couchbase JCache está alojada en nuestro propio repositorio de Maven. Puedes obtener la vista previa para desarrolladores desde allí añadiendo lo siguiente a tu archivo pom.xml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
com.couchbase.cliente java-caché 1.0.0-dp couchbase couchbase repo http://files.couchbase.com/maven2 falso |
También puedes coger los tarros directamente (necesitarás java-cache, java-client y java-core), o si te sientes aventurero puedes ver el último código en github.
Breve panorámica
En JCache, un Proveedor de caché
se resuelve y se utiliza para obtener un Gestor de caché
que, a su vez, se utiliza para crear Caché
s. Cada caché puede configurarse mediante un CacheConfiguration
.
Esta aplicación se basa en el Grupo
y Cubo
introducido en el Java SDK 2.0.0. Para configurar correctamente el cubo subyacente, se necesita un CouchbaseConfiguration
debe utilizarse en esta implementación (pero tenga en cuenta que CouchbaseConfiguration.builder().build()
debe proporcionar valores por defecto sanos, véase más adelante).
Cada CouchbaseCacheManager tiene un CouchbaseCluster
instancia. Éstas se arrancan utilizando una lista de cadenas de conexión que por defecto son localhost pero que pueden cambiarse llamando a setBootstrap
en el proveedor de caché antes de crear el gestor de caché.
En CouchbaseCacheManager
se puede utilizar para crear y obtener un nuevo CouchbaseCache
respaldado por un Cubo
del SDK.
Veamos un breve ejemplo completo. Este ejemplo requiere el siguiente contexto couchbase:
- Un clúster accesible en
localhost:8091
- Un bucket llamado "jcache" (contraseña: "jcache") en este cluster
Una vez hecho esto, se puede ejecutar el siguiente fragmento:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
CouchbaseCachingProvider proveedor de caché = nuevo CouchbaseCachingProvider(); //si tu cluster no tiene nodo localhost, personaliza la lista bootstrap //cachingProvider.setBootstrap("192.168.1.2", "node3.midominio.org"); //si ya utiliza el SDK de Java en algún otro lugar de su aplicación, debería reutilizar Entorno //cachingProvider.setEnvironment(myCouchbaseEnvironmentUsedSomewhereElse); //crear un gestor de caché identificado por el URI por defecto y ClassLoader CouchbaseCacheManager cacheManager = proveedor de caché.getCacheManager(); //crear una caché llamada miPrimeraCaché CouchbaseCache<Cadena, Cadena> caché = cacheManager.crearCaché("miPrimerCache", CouchbaseConfiguration.constructor("miPrimerCache").construya()); //almacenar una cadena caché.poner("miClave", "miValor"); //recuperarlo de la caché Cadena inCache = caché.consiga("miClave"); |
Tenga en cuenta que los gestores de caché se identifican mediante un URI y un Cargador de clases
y sólo se crean si no hay Gestor de caché
para los mismos identificadores (en caso contrario, el método devuelve el gestor existente).
Personalización del almacenamiento en caché
Hemos visto que, por defecto, la implementación de la caché intenta conectarse a un clúster accesible en localhost, y que podemos utilizar CouchbaseConfiguration.builder("cacheName").build()
por defecto para la configuración de una caché. Pero, ¿podemos personalizar a través de CouchbaseConfiguration
?
Ajustes comunes en la API de JCache
CouchbaseConfiguration se basa en una configuración por defecto MutableConfiguration
(que define configuraciones comunes de la API). Se pueden cambiar estos ajustes mutando la configuración una vez construida, o pasando una CompleteConfiguration que se copiará a la configuración del constructor. useBase(BaseConfiguraciónCompleta)
método.
¿Qué cubo utilizar?
Tiene dos opciones: compartir un único bucket para varias cachés, anteponiendo las claves de cada caché en el bucket compartido, o utilizar un bucket dedicado para una caché determinada.
Por defecto, un cubo compartido llamado jcache
(contraseña esperada: "jcache"). El prefijo por defecto es el nombre de la caché seguido de un guión bajo.
- La caché compartida puede modificarse mediante
useSharedBucket(String nombre, String contraseña)
. - El prefijo de la clave en un contexto de caché compartida puede cambiarse utilizando
withPrefix(String prefix)
. - Se puede activar un método alternativo de utilización de la caché dedicada utilizando
useDedicatedBucket(String nombre, String contraseña)
(restablecerá el prefijo).
Confiar en las vistas para listar todos los elementos de una caché
Parte de la API de JCache permite obtener todos los elementos de una caché, o iterar sobre ellos. La mejor forma de conseguirlo en Couchbase es usar vistas. Así que esta implementación espera que haya una vista disponible para listar todos los elementos de la caché.
- Por defecto, el documento de diseño y la vista esperados son
jcache
y el cacheName. - El documento de diseño puede modificarse llamando a
viewAllDesignDoc(String designDocName)
. - El nombre de la vista puede cambiarse llamando a
viewAllViewName(String viewName)
. - También puede utilizar
viewAll(String designDocName, String viewName)
para cambiar ambos.
Se espera que el usuario cree la vista correcta en el bucket correcto para cada caché. No olvide que las claves probablemente lleven un prefijo en el bucket (a menos que haya utilizado explícitamente un bucket dedicado).
¿Y ahora qué?
Este avance para desarrolladores muestra la dirección general que tomamos con esta implementación, y tiene la mayoría de las operaciones de JCache funcionando en una capacidad mínima (aún no hay un bloqueo adecuado, por lo que las operaciones descritas como atómica en la especificación, como getAndPut
no debe considerarse como tal).
Las cosas que quedan por implementar para tener una cobertura completa de la especificación son: - mejorar y completar la recopilación de estadísticas - bloqueo, atomicidad de un subconjunto de operaciones - añadir soporte para listeners - añadir soporte para EntryProcessors - implementar read-through y write-through - añadir soporte para anotaciones.
Conclusión
Espero que esto sea de tu interés. Si quieres aprender más sobre JCache o el SDK de Java (y quizás volver aquí más tarde), aquí tienes algunos recursos:
Si tiene alguna sugerencia o comentario que hacernos, por favor, ¡hágalo! El mejor lugar para hacerlo es en los comentarios a continuación o en la página oficial foros.
También puede presentar Cuestiones en nuestro seguimiento de errores (utilice el botón "Cliente Java de Couchbase", también conocido como JCBCy utilice JCache componente).
Las contribuciones también son bienvenidas. Tendrías que firma nuestro CLA (véase doc. de código abierto) y permítanos validar que lo ha hecho antes de enviar una solicitud de extracción en GitHub.
Espero que te haya gustado este avance. ¡Feliz codificación!