Estandarizando el acceso a Alfresco con CMIS

CMIS (Content Management Interoperability Services), es un estándar abierto para el diseño de una capa de abstracción que permita el control de diversos gestores de contenidos y repositorios documentales de una forma genérica. Para ello, CMIS define un modelo de dominio y una serie de mecanismos estándares de comunicación como Web Services o RESTful AtomPub.

OASIS es el reponsable de la gestión de este estándar desde Mayo de 2010, el cual contempla la gestión de dos tipos de objetos principalmente: directorios y documentos. A partir de estos, se establecerá una jerarquía de almacenamiento asignándo propiedades a ambos y complementándolos con el control de acceso a los mismos, control de versiones o incluso definiendo relaciones entre ellos.

Son muchos los gestores de contenidos que actualmente han apostado por CMIS a la hora de exponer su funcionalidad. Esto hace posible diseñar aplicaciones más flexibles y con un menor grado de acoplamiento, ya que la dependencia de un estándar y no de una implementación específica del software de gestión de contenidos permite poder migrar a otro proveedor de forma más sencilla.

En este artículo y en sucesivas entregas profundizaremos en las bases de CMIS, en su implementación en Alfresco y en su uso desde las aplicaciones cliente que diseñemos.

CMIS y Java Content Repository

Antes de comenzar a analizar a fondo CMIS, una de las primera preguntas que nos puede surgir es, ¿Porque otro estándar para el acceso abstracto a repositorios documentales si ya existe JCR?

Al margen de que en CMIS se interopera no a nivel de lenguaje Java, sino a nivel HTTP (Web Services o REST), el foco de ambos estándares es distinto, con lo que son totalmente compatibles.

Lo más llamativo es que si usamos Apache Chemistry para implementar nuestro servidor, podemos hacer que cualquier repositorio que ya cumpla JCR, sea ahora accesible vía CMIS de forma directa.

A continuación, podemos ver un gráfico muy descriptivo que explica cómo estos estándares interactuan entre ellos:

Haz clic en la imagen anterior para ver el detalle completo :)

El modelo de dominio

CMIS acaba definiendo un modelo de dominio, de forma que nuestra aplicación deberá trabajar sobre este a la hora de acceder a los contenidos del repositorio.

En el modelo de dominio vamos a manejar varios tipos de objetos: documentos, directorios, relaciones y políticas.

En general, cualquier objeto del modelo va a poder tener propiedades a modo de metadatos, las cuales tendrán un ID conocido y un valor. Por ejemplo, cualquier objeto tiene definida una fecha de creación (cm:created) y la persona que lo creó (cm:creator). Por otra parte, e incluyendo los atributos anteriores, un directorio también podrá tener la referencia al padre o el nombre del directorio (cm:name). Podemos encontrar más detalles sobre los atributos mapeados entre CMIS y Alfresco en su guía de referencia.

Como conceptos avanzados, CMIS incorpora también el manejo de los privilegios de acceso a los objetos (ACL) y lo que se conoce como "interpretaciones" (renditions). Las renditions nos permiten la obtención de versiones especiales de los documentos en base a unos criterios, por ejemplo para la generación de un thumbnail.

Bindings

Como detallábamos en la introducción, CMIS define al margen del modelo de dominio una serie de estándares de comunicación con el fin de favorecer la interoperabilidad de su arquitectura.

Estos dos estándares son: Web Services para comunicación SOAP/XML y RESTful AtomPub para transmisión HTTP de documentos ATOM (extendidos con atributos definidos por CMIS).

Sobre este modelo de comunicación, el repositorio que implemente CMIS deberá ofrecer los siguientes servicios:

  • Repositorio. Información y funcionalidades disponibles en el repositorio.

  • Navegación. Navegación por la estructura de directorios.

  • Objetos. Operaciones CRUD sobre objetos.

  • Inserción multidirectorio. Gestión de la inyección de un mismo objeto en múltiples destinos.

  • Búsqueda. Tratamiento de consultas con CMISQL.

  • Versionado. Acceso a documentos y a sus versiones.

  • Relaciones. Búsqued de objetos y de sus relaciones.

  • Permisos. Gestión de las políticas de acceso y de los ACLs concretos de los objetos.

Conclusiones

En este artículos hemos presentado el estándar CMIS ofrecido por OASIS para conseguir un acceso abstracto a los repositorios documentales. En próximas entregas veremos cómo interactuar con Alfresco a través de CMIS y hacer uso de otras funcionalidades avanzadas de CMIS como las renditions o las búsquedas.


OASIS | CMIS Specification CMIS | Domain model JCR | JCR - CMIS comparison

Portada de Genbeta