miércoles, 20 de julio de 2011

Integración de Alfresco y Liferay




El portlet DocLib de Alfresco proporciona todas las funcionalidades del componente document library de Alfresco Share dentro de un portal. Este portlet se ofrece en tres modalidades: acceso a todo el repositorio de Alfresco, acceso a las document libraries de los sites de los que se es miembro o acceso a la document library de un site en concreto.

Funcionalidades

Estos portlets incluyen casi todas las funcionalidades del Share aunque con las siguientes excepciones:

  • No existe la acción "Ver enAlfresco Explorer" para los espacios.
  • En la vista de detalles, no semuestra la sección "Compartir".
  • Los nombres de los usuarios noestán enlazados a las páginas de sus perfiles.
  • Al no mostrarse la cabecera de la aplicación Share, no hay acceso a la barra de herramientas, a otras páginas de los sites ni a los dasboards de la aplicación.

Instalación
El siguiente procedimiento de instalación asume las siguientes condiciones:

  • Alfresco está instalado y funcionando. La versión probada es la 3.4 Enterprise pero también debería funcionar con las versiones Community.
  • Liferay está instalado y funcionando. La versión probada es la 6 EE pero también se ha probado con éxito es la 6 EE SP1 y 6.0.5 GA.
  • Las modificaciones indicadas se han de hacer con Alfresco y Liferay detenidos.
  • Tanto Liferay como Alfresco están instalados en Tomcat.

Configuración de Liferay

Si Liferay y Alfresco están en la misma máquina pero en servidores de aplicaciones distintos, hay que cambiar los puertos usados por el Tomcat de Liferay para evitar conflictos. Localizar y modificar el siguiente fichero <LIFERAY_HOME>/tomcat/conf/server.xml como sigue:

<Server port="8105" shutdown="SHUTDOWN">

<Connector port="8180" protocol="HTTP/1.1"

             connectionTimeout="20000"

             redirectPort="8443" URIEncoding="UTF-8" />

<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />

Configuración de Alfresco

En el Alfresco hay que añadir los siguientes elementos en el fichero <ALFRESCO_HOME>/tomcat/shared/classes/alfresco-global.properties.

authentication.chain=alfrescoNtlm1:alfrescoNtlm,external1:external

external.authentication.proxyUserName=

Advertencia: La autenticación necesaria para el portlet es incompatible con el mecanismo de autenticación passthru.

Desplegar la aplicación Share en Liferay

Copiar el fichero share.war de la instancia de Alfresco en el directorio deploy del Liferay.

Configurar la aplicación Share en Liferay

Localizar y modificar el fichero <LIFERAY_HOME>/tomcat/conf/catalina.properties con la siguiente línea:

shared.loader=${catalina.home}/shared/classes,${catalina.home}/shared/lib/*.jar

Crear la carpeta <LIFERAY_HOME>/tomcat/shared/classes/alfresco/web-extension y añadir un fichero llamado shared-config-custom.xml con el siguiente contenido:


Nota: en caso de que el Alfresco no esté instalado en la misma máquina que el Liferay o esté instalado en un puerte diferente al 8080, hay que modificar los endpoints para que apunten a la ubicación correcta.

Iniciar Alfresco y Liferay

Arrancar primero la instancia de Alfresco y a continuación la de Liferay. Para que los portlets desplieguen correctamente es necesario que el Alfresco esté arrancado.

Añadir los portlets a una página de Liferay

Los portlets de Alfresco están disponibles bajo la categoría Alfresco del menú Añadir Aplicación de Liferay. Cada uno de los portlets se ha de desplegar en su propia página y no puede haber dos o más portlets en la misma página.

Es necesario que en Alfresco y en Liferay existan los mismos usuarios por lo que es aconsejable que exista algún tipo de sincronización entre ambos repositorios de usuarios y un SSO entre sus sesiones.

Contextualización

El portlet de acceso al repositorio por defecto da acceso a todos los espacios del repositorio. En el ámbito de una integración Liferay-Alfresco más extensa es interesante que el portlet detecte automáticamente en qué comunidad de Liferay está ubicado y muestre directamente el espacio de Alfresco correspondiente a esa comunidad.

El enfoque adoptado para la contextualización del portlet ha sido el siguiente: añadimos una preferencia al portlet con un valor por defecto. Al instanciar el portlet, si la preferencia tiene el valor por defecto, éste mostrará el espacio de la comunidad donde esté ubicado el portlet. En caso de que el portlet esté ubicado en una página personal de usuario, mostrará la carpeta personal del usuario en Alfresco. Si la preferencia del portlet contiene un path de un espacio en Alfresco, este path será el que se mostrará.

Modificar la definición del portlet

El primer paso es modificar el fichero de definición del porlet (portlet.xml) para añadir la preferencia y los parámetros de inicio del portlet:

 
También hay que hacer un cambio en el fichero liferay-portlet.xml para determinar el ámbito de las preferencias que acabamos de definir:

 <portlet>

   <portlet-name>ShareRepoBrowser</portlet-name>

   <preferences-unique-per-layout>true</preferences-unique per-layout>

   <user-principal-strategy>screenName</user-principal-strategy>

 </portlet>

Creación de la página de edición de las preferencias

A continuación hay que crear una página en Alfresco Share que permita editar la preferencia que hemos añadido en el apartado anterior. La definición de la página será la siguiente:


Esta página estará basada en una platilla donde haremos referencia al webscript que permitirá la definición de la preferencia:


Creación del webscript de edición de las preferencias

El webscript de edición de la preferencia presenta un formulario con un campo de texto donde se puede entrar un path de Alfresco. La acción del formulario apuntará de nuevo al portlet para grabar la preferencia.

La definición del web script será:


El controlador del webscript será muy sencillo y sólo lo utilizaremos para capturar el estado del portlet:


La plantilla de visualización será de tipo html:


En esta plantilla es importante el elemento prefSiteId que contiene el valor de la preferencia en el portal.

La presentación del formulario requiere unos estilos para que se visualice correctamente: Estos estilos ya los lleva Alfresco por defecto:

Este webscript se ha de completar con los ficheros de internacionalización que sean necesarios.

Modificar implementación del portlet doclib

La clase que implementa el portlet se llama ProxyPortlet y se puede encontrar en el fichero alfresco-share-3.4.0.jar de la aplicación share.

En la definición de constantes añadiremos:

En el método init hay que incluir:


El método doView lo modificaremos para que localice una preferencia llamada param y, en caso de que aparezca, sustiuirla por el valor de la comunidad en la que se encuentra la instacia del portlet. Este cambio lo hacemos en el bucle que recorre las preferencias del portlet:



Ajustes finales

Hay dos elementos del código de Alfresco Share que impiden que la contextualización funciona tal como está definida.

El primero es el tratamiento de la URLs que hace la plantilla del webscript de la documentlibrary porque necesita que los parámetros le lleguen por la window.location. Para solucionar este problema hay que comentar en la plantilla documentlibrary.inc.ftl el siguiente condicional:
    if (loc.hash === "" && loc.search !== "")

El segundo elemento es un estilo CSS que colisiona con los estilos de Liferay. Este estilo se encuentra en el fichero reset-fonts-grids.css y hay que borrarlo de dicho fichero:
body{text-align:center;}

No hay comentarios: