java database content-management jcr

java - ¿Cuándo usar JCR(repositorio de contenido) sobre otras opciones?



database content-management (1)

Estoy intentando evaluar los repositorios de contenido ( JSR283 ) como Jackrabbit y ModeShape pero debo confesar que no entiendo qué problema se resuelve en primer lugar e incluso si es una buena opción para el proyecto. ¿Qué casos crees que es la mejor solución para aplicar? ¿No es lo mismo que las bases de datos relacionales, excepto por el tamaño? ¿Por qué? Puntos extra para señalar ejemplos del mundo real.

Gracias por adelantado.


Los repositorios JCR son diferentes de RDBMS, porque un repositorio JCR:

  • es jerárquico, lo que le permite organizar su contenido en una estructura que se adapta a sus necesidades y donde la información relacionada a menudo se almacena muy cerca y por lo tanto se puede navegar fácilmente
  • es flexible, lo que permite que el contenido se adapte y evolucione, utilizando un sistema de tipo de nodo que puede ser completamente "sin esquema" para totalmente restrictivo (por ejemplo, como una base de datos relacional)
  • utiliza una API Java estándar (p. ej., javax.jcr)
  • resúmenes donde la información está realmente almacenada: muchas implementaciones JCR pueden almacenar contenido en una variedad de bases de datos relacionales y otras tiendas, algunas pueden exponer tiendas que no son JCR a través de la API JCR, y algunas pueden federar múltiples tiendas en un solo repositorio virtual.
  • admite consultas y búsqueda de texto completo fuera de la caja
  • admite eventos, bloqueo, control de versiones y otras funciones

Ciertamente puede construir todas o algunas de estas características en su propia aplicación, pero eso probablemente se aleje más de lo que su propósito principal de su aplicación.

¿Qué tipo de aplicaciones se pueden beneficiar de estas características? Los sistemas de administración de contenido han usado repositorios durante mucho tiempo, y JCR (y Jackrabbit) realmente crecieron debido a la necesidad de una API estándar común para acceder a diferentes repositorios de contenido (ver JSR-170 y JSR-283 ).

Otro ejemplo son los sistemas de gestión de documentos, que administran archivos electrónicos (que a menudo son imágenes de documentos en papel) y proporcionan búsquedas y consultas. Los DMS han usado repositorios por algún tiempo.

Los sistemas de gestión de artefactos pueden usar repositorios para gestionar artefactos digitales (a menudo archivos) junto con información adicional (metadatos). JCR funciona muy bien aquí, porque puede almacenar los metadatos en la misma ubicación que los archivos: los que comprenden estas propiedades adicionales pueden verlos, aquellos que no les importa no tienen que verlos. Sé que Artifactory es una implementación de repositorio de Maven que usa JCR. También hay repositorios para gestionar artefactos del servicio web, artefactos del servicio de datos y artefactos de prueba.

Pero los repositorios de JCR no son para administrar archivos. JCR utiliza una noción simple de una jerarquía de nodos, donde los nodos pueden contener propiedades con nombre (con uno o múltiples valores) e hijos. Las propiedades y el nodo secundario que están permitidos están dictados en su totalidad por tipos de nodos, que pueden modificarse y combinarse según sea necesario nodo a nodo. JCR predefine algunos tipos de nodos integrados que se necesitan comúnmente, como los que se utilizan para representar archivos y carpetas en el repositorio. Puede reutilizar estos tipos incorporados, ampliarlos o escribir el suyo propio. Muchas personas abogan por usar mixins casi como facetas o aspectos, de modo que si un nodo necesita asumir una faceta, simplemente puede agregar una mixin al nodo.

JCR se diseñó para admitir fácilmente la importación de contenido XML en el repositorio, donde cada elemento se asigna a un nodo y cada atributo se asigna a un atributo. Y muchas cosas se representan utilizando XML (o YAML o JSON), y todo esto puede representarse y almacenarse fácilmente en un repositorio de JCR. Como ejemplo, considere un repositorio de JCR que almacena información de configuración (que normalmente podría almacenarse en múltiples archivos XML). JCR puede versionar esa información, permitir el acceso a ella desde múltiples procesos, habilitar consultas y búsquedas, y notificar a la (s) aplicación (es) cuando el contenido cambie.

Hay varias buenas descripciones de JCR con más detalles y ejemplos. Algunos de estos son: