Opciones de desarrollo con Alfresco

PAUT-0023 (Pauta)

Alfresco proporciona muchas opciones para interactuar con el repositorio a traves de una aplicación externa. En el momento de escoger una u otras es importante que se analice cual de ellas se ajusta mas a las necesidades del proyecto en el que se este trabajando.

Con el objetivo de ayudar en este analisis se va a ofrecer una breve descripción de cada una de estas opciones indicando sus prinicipales caracteristicas.

Incrustar el Repositorio (Alfresco foundation API)

El repositorio de Alfresco puede ser incrustado dentro de una apliación propia. Esta aproximación nos da acceso total a la API del repositorio de Alfresco. Esta es una API Java local para las comunicaciones con el repositorio. Esta interfaz es la mas nativa para la conectividad con Alfresco. Puede usar también esta interfaz también cuando su aplicación esta ligada con la tecnología de implementación de Alfresco (Spring) y sus interfaces.

A favor

  • Interfaz nativa para el repositorio (proporcionara el mejor rendimiento)

En contra

  • Arquitectura muy acoplada
  • No es una interfaz distribuida
  • Interfaz especifca de Alfresco

Direccionalidad URL (URL Adressability)

Una aplicación externa puede realiazar una llamada XMLHttpRequest a Alfresco que especifica una referencia a un nodo (que son accesible via URL) y una referencia a una plantilla FreeMarker en el servidor. Alfresco procesara la plantilla en el contexto del nodoy devolvera el resultado.

A favor

  • Facilidad de implementación

En contra

  • Utilidad muy especifica
  • Escasa potencia

Web Scripts (RESTFUL API, Web Scripts Framework)

Los Web scripts proveen al repositorio de Alfresco con servicios de contenido que son accesibles desde cualquier parte (consultar el repositorio, extraer contenido y alterar el comportamiento del repositorio), expone el repositorio para gestion de documentos y contenidos web, proporciona medios de busqueda personalizados. Cada web script estara ligado a un metodo HTTP y a una URL personalizada. Se puede construir una libreria de URLs que proporcione una API HTTP completa (RESTful or STRESTful) HTTP API. Las Librerias pueden ser instaladas facilmente en cualquier servidor Alfresco. La API Restful de Alfresco esta en construcción y aún carece de muchas de las funcionalidades del sistema.

A favor

  • Convierte Alfresco en un servidor HTTP destinado a la gestión de contenidos
  • Construye facilmente Servicios Web para la gestion de contenidos accesibles via HTTP
  • Accede, gestiona y enlaza facilmete los contenidos a traves de una RESTful API hecha a medida.
  • No se necesita amplios conocimientos de Java ni herramientas complejas.

En contra

  • Interfaz por defecto con muy poca funcionalidad aunque esta previsto añadirla toda
  • La interfaz por defecto es especifica de Alfresco
  • Tecnología nueva no accesible antes de la versión 2.1

Servicios Web (Alfresco Web Services API)

Alfresco proporciona acceso remoto a traves de una API de Servicios Web basada en SOAP. La API de Servicios Web esta especificamente diseñada para reducir la cantidad de comunicación con el servidor lo que la hace una manera bastante eficiente de acceso remoto. En algunos casos la Api propia de Alfresco no da un buen rendimiento en cuestión de escalabilidad y algunos clientes optan por escribir sus propios Servicios. Los inconvenientes a la utilización de la API de servicios web de Alfresco es el acoplamiento con la API especifica de Alfresco y los fuertes requerimientos en el lado del cliente.

A favor

  • Implementada sobre la API del repositorio de alfresco para obtener el mejor rendimiento.
  • Interfaz optimizada para transacciones distribuidas
  • Interfaz remota mas compatible

En contra

  • La Interfaz es especifica de Alfresco
  • Fuertes requerimientos en la parte cliente.

Interfaz JCR de Alfresco (JCR API)

La interfaz JCR de Alfresco JCR muestra el repositorio de Alfresco tras un adaptador de compatibilidad con el estandar JCR lo que permite comunicarse con Alfresco con una aproximación basanda en un estandar. El estandar JCR no cubre toda la funcionalidad que Alfresco así que normalmente se combina con una de las otras aproximaciones. La interfaz JCR de Alfresco es una interfaz local se puede ser adquirida a traves de interaccion Spring (Opcionalmente la configuración spring se puede extender para vincular la interfaz JCR con JNDI).

A favor

  • JCR es una especificación creada y soportada por la industria

En contra

  • CR es una nueva especificacion y esta todavia en plena evolución
  • El adaptador JCR puede que no rinda el mismo nivel que la interfaz nativa de Alfresco.
  • La interfaz JCR de Alfresco no es una interfaz distribuida
  • Capacidades de Alfresco no cubiertas

Extension JCR RMI de Alfresco

La extension JCR RMI envuelve la implementación Alfresco JCR en una capa remota (mediante el uso de Apache Jackrabbit), proporcionando acceso remoto a la api JCR de Alfresco JCR. La interfaz JCR no ha sido optimizada para un entorno remoto/distribuido. Esto significa que realiza que realiza multitud de pequeñas llamadas a traves de la red lo que puede constituir un problema de rendimiento. RMI se basa en la serializacion de objectos .. algunos tipos de contenidos tienen propiedades nodos que pueden ser dificiles de manejar, convirtiendose en un verdadero problema.

A favor

  • RMI proporciona una interfaz de programación nativa facil de usar
  • Rapida implementacion remota
  • JCR es interfaz basado en un estandar industrial

En contra

  • RMI es problematico para en la interacción con firewall.
  • RMI es especifico de java
  • Puede provocar problemas de rendimiento.
  • Problemas de serialización de onjetos complejos.