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).
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.
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.
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.
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.
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.
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