Integrando Liferay con Alfresco

Un matrimonio... de conveniencia

Alfresco es un sistema open source para administrar contenidos muy completo pero que, sobre todo, es fuertemente reconocido por su gestión documental y la definición de flujos de procesos.

Gran parte de las funcionalidades que ofrece Alfresco ya son ofrecidas por la Document Library de Liferay como son la seguridad, control de versiones, vistas preliminares, categorizaciones, workflows…. por lo que como siempre digo, si no tienes una necesidad real para usar Alfresco, ¡no lo hagas! y mantén tu arquitectura lo más simple posible.

Liferay y Alfresco cumplen el protocolo CMIS, por lo que la integración entre las dos herramientas es muy sencilla aunque, como verás más adelante en este post, la integración tiene ciertas limitaciones.

El protocolo CMIS se creó para que, los diferentes gestores de contenidos que lo cumplieran, pudieran operar entre sí. Técnicamente hablando, son una serie de interfaces web estandarizadas que los gestores de contenidos deben implementar.

Liferay dispone out-of-the-box de dos formas de realizar esta integración usando el protocolo CMIS. Vamos a ello!

Integración 1:  montando un repositorio Alfresco en la Document Library

Esta integración se consigue añadiendo un nuevo repositorio al portlet Documentos y Multimedia. Para ello tenemos que realizar los siguientes pasos

Modificar el portal-ext.properties

Añade las siguientes propiedades al portal-ext.properties de Liferay y reinicia el servidor de aplicaciones.

#Añade el password del usuario a la sesión.
#Date cuenta que si se hace un dump de la jvm esta información será accesible 

session.store.password=true


#La pantalla de login solicitará el nombre del usuario en lugar del e-mail
#También lo puedes hacer usando la interfaz web desde el panel de control

company.security.auth.type=screenName

Como ya habrás intuido, el nombre del usuario debe ser el mismo en las 2 plataformas, por lo que es recomendable disponer de una fuente de usuarios común (un ldap por ejemplo).

Por defecto, el usuario administrador de Alfresco es ‘admin’ así que el nombre de usuario del administrador de Liferay también debería ser ‘admin’, y por supuesto, la contraseña debería ser la misma en los dos sistemas.

Añadir el repositorio al portlet Documentos y Multimedia

Posiciónate en la biblioteca de documentos que quieres integrar con Alfresco y añade un nuevo repositorio

En la siguiente pantalla, vas a tener que introducir los datos del repositorio Alfresco.

En el campo que está coloreado con el fondo amarillo, debes poner la url en la que Alfresco está publicando el servicio AtomPub.

Para obtener ese valor, debes ir a Alfresco (en mi caso, la url principal de alfresco es http://localhost:9080/alfresco) y copiar el valor de la URL de CMIS 1.1 AtomPub Service Document .

Si usas Alfresco 5 la url será http://TUURL:TUPUERTO:/alfresco/api/-default-/public/cmis/versions/1.1/atom
Página de Alfresco donde obtener la url

Una vez añadido el repositorio verás que en la Document Library aparece un nuevo directorio, llamado Alfresco en mi caso, que contiene los mismos ficheros y directorios que se muestran en Alfresco.

Vista desde el portlet Documentos y Multimedia

Vista desde Alfresco

En este tipo de integración, disponemos de un directorio en la Document Library que, internamente, está operando exclusivamente con el repositorio Alfresco.

Para entenderlo más fácilmente, piensa como si dentro de ese directorio, estuvieras accediendo a Alfresco mediante un iframe.

Esto quiere decir que Liferay no es consciente siquiera de la existencia de los documentos que se encuentran en ese directorio. Esto tiene varias implicaciones:

  • Los documentos no van a indexarse en elasticsearch (y por tanto no los podrás encontrar usando el buscador de Liferay)
  • Los documentos no existen como recurso del portal por lo que no podrás asignarle permisos
  • No vas a poder usar las categorías de Liferay
  • No vas a poder generar listados de documentos con el publicador de contenido
  • No vas a poder usar los metadatos de la biblioteca

La principal característica que tiene este tipo de integración, es que cada usuario invoca el repositorio de Alfresco con sus credenciales del portal. Por tanto, por ejemplo, la seguridad de los documentos reside en Alfresco.

Liferay únicamente permite establecer los permisos al directorio desde donde se accede a Alfresco, pero los documentos dentro de ese directorio son ya responsabilidad de Alfresco.

Este tipo de integración hace que sea Alfresco el responsable de la indexación, seguridad, categorización, workflow, etc de los documentos y Liferay solamente actúa como un “visor” de estos documentos.

Esto quiere decir que los roles que tengamos creados en Liferay no serán visibles desde Alfresco (y a la inversa), por lo que tendríamos por ejemplo que mantener dos sistemas de seguridad ya sea manualmente o haciendo algún tipo de desarrollo que sincronice la seguridad entre las dos plataformas.

Por tanto, esta integración tendrá sentido siempre que queramos usar las funcionalidades de gestión de documentos ofrecidas por Alfresco en lugar de las que disponemos en Liferay o si nuestra empresa ya dispone de un repositorio Alfresco y necesitamos seguir usándolo.

Pros

  • Podemos tener ficheros almacenados en Liferay y otros en Alfresco
  • Podemos configurar las Document Library independientemente
  • Podemos usar las funcionalidades que ofrece Alfresco

Contras

  • No podemos usar la búsqueda, workflow, permisos, etc de Liferay
  • Debemos mantener dos sistemas de seguridad diferentes

Integración 2: almacenando los binarios de la Document Library en Alfresco

En esta integración lo que hacemos realmente es reemplazar el método que usa liferay para almacenar los binarios.

Por defecto, liferay almacena los binarios de los documentos en el sistema de ficheros, en el directorio data/document_library de la instalación.

Para indicarle que use Alfresco tenemos que hacer lo siguiente

Modificar el portal-ext.properties

dl.store.impl=com.liferay.portal.store.cmis.CMISStore

Modificar la configuración osgi

Crea el siguiente fichero en la ruta/osgi/configs/com.liferay.portal.store.cmis.configuration.CMISStoreConfiguration.cfg

Y añádele el siguiente contenido

repositoryUrl=http://localhost:9080/alfresco/cmisatom
credentialsUsername=admin
credentialsPassword=<Tu password> 
systemRootDir=Liferay

Estas propiedades indican dónde está Alfresco, el usuario con el que nos vamos a conectar a Alfresco y el directorio, dentro del repositorio Alfresco, donde vamos a guardar todos los datos.

Date cuenta que en este tipo de integración todos los ficheros creados en Alfresco tendrá el mismo propietario

Usando este tipo de integración, lo que conseguimos es que Liferay ya no guarde los binarios en el sistema de ficheros sino que los almacene en Alfresco.

En este caso, Liferay es el responsable de los datos del fichero por lo que la seguridad, workflow, etc de los documentos se hace desde Liferay y Alfresco se convierte en un simple almacén de datos binarios.

Vista desde Liferay

Vista desde Alfresco

Date cuenta también de que la estructura de directorios y nombre de ficheros con los que se almacena la información en Alfresco. Es la misma estructura de directorios que utiliza la document Library cuando está utilizando el sistema de ficheros.

Esta integración hace que para “entender” el significado de los ficheros almacenados en Alfresco, siempre tenga que usarse Liferay.

De esta forma, si quisiéramos en el futuro dejar de utilizar Liferay como frontal para la gestión documental, la información almacenada en Alfresco no tendría la información suficiente.

Aunque no sé a qué insensato se le ocurriría dejar de usar Liferay una vez conocido ^_^

Pros

  • Usamos los documentos como si estuvieran almacenados en Liferay. Podemos buscarlos, dar permisos, categorizar, etc

Contras

  • Las Document Library de todos los sitios web almacenarán los binarios en Alfresco
  • La información almacenada en Alfresco solo sirve para identificar el fichero por parte de Liferay. No es human friendly.
  • No podemos modificar los ficheros (por ejemplo, añadir una nueva versión) desde Alfresco, ya que liferay no se enteraría del cambio.
  • Todos los documentos en Alfresco son creados por el mismo usuario

Elucubrando que es gerundio

La primera integración sí que nos permite usar toda la potencia de Alfresco, aunque por contra hace que Liferay sea un mero espectador y que ni siquiera podemos buscar documentos usando el buscador de Liferay. Por lo que la funcionalidad desde el punto de vista de Liferay está muy limitada.

La segunda integración, hace que los datos almacenados en Alfresco no tengan ningún sentido para los humanos por lo que se me hace difícil imaginar cuándo utilizarla. Sí, vale, puede ser que queramos que todos nuestros binarios, no solo los de Liferay, estén centralizados en un mismo sistema por una decisión organizativa más que técnica, aunque en este caso no entiendo por qué no usar por ejemplo un simple directorio de un sistema de ficheros. Aunque, en cierta manera, podría tener “sentido”.

Tal vez, intentando buscar una justificación, queramos utilizar esta configuración cuando creamos que el performance de un cluster Alfresco va a ser mayor que una lectura de un fichero de disco ¿? …. no lo sé, lo dudo. Además para estos casos ya existe Jackrabbit.

Para disponer de una “integración completa” tendríamos que tener sincronizados los metadatos de los dos sistemas, entendiendo como metadatos los permisos, las categorizaciones, etc y eso ya… sería auténtico amor.

 

Entorno de pruebas utilizado:

  • Oracle JDK 8
  • Liferay 7 GA3
  • Alfresco Community 5.1 (201605-GA)
  • MySql 5.7

*Si necesitas ayuda en la instalación de Alfresco, puedes consultar la documentación oficial en http://docs.alfresco.com/community/concepts/install-community-intro.html

*Puedes consultar otras configuraciones del portlet Documentos y Multimedia en https://dev.liferay.com/discover/portal/-/knowledge_base/7-0/repository-types