Você está na página 1de 193

Alfresco 4.

2 para
desarrolladores
El ncleo de Alfresco

El ncleo de Alfresco

ndice del captulo


Introduccin a Alfresco.
Arquitectura de Alfresco.
Alfresco Java Foundation Services.
Java Script API.
Freemarker Templating API.
Subsistemas.
Seguridad en Alfresco.
Extension classpath.
Extensiones en Alfresco: empaquetado y despliegue.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin a Alfresco
Qu es Alfresco?
Algunas caractersticas tcnicas del proyecto Alfresco.
Documentacin.
Funcionalidades ms importantes de cara a los usuarios.
Arquitectura tcnica.
Componentes y servicios.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Qu es Alfresco?
Alfresco es un sistema de Gestin de Contenido Empresarial (ECM),

normalmente utilizado para Gestin de Documentos Digitales en


entornos exigentes (sometidos a importantes requisitos de
escalabilidad, alta disponibilidad, capacidades de integracin,
auditabilidad, etc.).

Es un proyecto OpenSource creado en 2005 por un equipo procedente

de Documentum.

Alfresco gestiona todos los contenidos en nuestra empresa:

documentos, imgenes, fotos, pginas web, registros, documentos xml


y cualquier otro fichero semiestructurado o no estructurado.

Los servicios que ofrece Alfresco son una de sus grandes ventajas.

Permiten gestionar el contenido de los documentos y caractersticas,


tales como, gestin de metadatos, control de versiones, gestin del
ciclo de vida, flujo de trabajo, bsquedas, asociaciones a otros
contenidos, etiquetado, comentarios.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Qu es Alfresco?
Para los usuarios finales, Alfresco se presenta como un conjunto de

aplicaciones o extensiones de sus propias aplicaciones que gestionan


sus contenidos. Alfresco puede aparecer como una unidad compartida
con protocolo CIFS, WebDAV, IMAP y SharePoint. Tambin proporciona
por defecto un conjunto de aplicaciones para navegar por los
contenidos, buscar, gestionar, etc.

Para el negocio, Alfresco ha sido diseado para soportar todo tipo de

requisitos relacionados con los contenidos: herramientas para la


gestin de documentos, aplicaciones, interfaces para trabajo de
oficina. La gestin de flujos de trabajo soporta diferentes procesos de
negocio.

Para el desarrolllador, Alfresco proporciona un repositorio escalable y

una plataforma de gestin que simplifica el desarrollo. Expone


infinidad de capacidades de gestin en forma de servicios.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Qu es Alfresco?
El ncleo de Alfresco es un repositorio gestionado por un servidor que

persiste contenidos, metadatos, etc.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Qu es Alfresco?
Alfresco incorpora una arquitectura moderna. El sistema ha crecido

como una aplicacin Java, eso significa que se puede ejecutar en


cualquier plataforma donde corre JavaEE.

El ncleo se basa en la plataforma Spring, proporcionando a Alfresco

la capacidad de modularizar los diferentes elementos del sistema:


versionado, seguridad, reglas, etc.

Alfresco utiliza estrategias de scripting para simplificar la

incorporacin de nuevas funcionalidades dentro del sistema. Esto se


conoce como Web scripts y puede utilizarse para la gestin de datos o
servicios de presentacin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Algunas caractersticas tcnicas del proyecto Alfresco


Open Source : Tenemos el cdigo disponible

(siempre, en cualquier versin!).

Fcilmente extensible y basado en

tecnologas Java EE estndares y proyectos


Open Source de xito como Apache Lucene,
OpenOffice, Spring Framework, SWFTools,
Quartz Scheduler, etc.

Maduro (estamos en la v.4) y con multitud de

casos de xito documentados.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Algunas caractersticas de negocio del proyecto Alfresco


Dos versiones: Community y Enterprise.

Esta ltima con un soporte profesional, con


procesos de QA estrictos, SLA, etc.

La versin Community es suficientemente

buena para ponerla en produccin en


proyectos no crticos. Es gratuita.

La versin Enterprise es de pago (aunque

se puede probar gratuitamente) y la


recomiendo para entornos crticos.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Documentacin
Muy buena documentacin (cosa muy rara

en los proyectos y productos Open Source!).

La documentacin de la versin Community

est en la Wiki
http://wiki.alfresco.com

La documentacin de la versin Enterprise

est en la web oficial


http://docs.alfresco.com

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Funcionalidades ms importantes de cara a los usuarios


Un nico repositorio unificado para gestionar cualquier tipo de

contenido: documentos, imgenes, vdeo y audio.

Puede ser usado como una unidad de red compartida con protocolo

CIFS, WebDAV, IMAP y SharePoint.

Vista previa en lnea de los tipos de archivos populares (como

documentos de Microsoft Office, PDFs e imgenes) directamente en el


navegador sin necesidad de descargarlos.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Funcionalidades ms importantes de cara a los usuarios


Integracin en Microsoft Office. Alfresco tiene el mismo aspecto que

SharePoint para Microsoft Office, permitiendo a los usuarios subir,


acceder, salir y modificar contenido desde Office.

Arrastrar y soltar desde el email. Alfresco se puede instalar como un

servicio IMAP en su cliente de email, de manera que puede arrastrar y


soltar contenido en Alfresco desde su email.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Funcionalidades ms importantes de cara a los usuarios


Portales colaborativos en Web (basados en Alfresco Share). Permite a

equipos globales colaborar para generar contenido de manera


eficiente. Soporte a nuevas funciones sociales, como las
actualizaciones de estado, los flujos de actividades, etiquetado y
bsqueda.

Capacidad para localizar documentos rpidamente con un sistema de

bsquedas avanzadas preindexadas.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Componentes y servicios
Cada parte del repositorio de Alfresco es un componente o un servicio.
Un componente es una implementacin que provee un capacidad o

funcionalidad especfica y que debe ser manejada como una caja


negra por el resto del sistema.

Un servicio es una interfaz de acceso y uso para los clientes. Es una

abstraccin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Componentes y servicios

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Componentes y servicios
Los clientes de Alfresco se acoplan a los servicios y no a los

componentes. Esto nos permite tener la libertad de cambiar las


implementaciones de manera transparente.

Puede haber ms de un componente que implemente un servicio.


Con Spring Framework seleccionamos qu componente est

disponible en nuestro sistema para cada servicio y cmo est


configurado.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Componentes y servicios

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Componentes y servicios

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Componentes y servicios
Los componentes pueden ser intercambiados por nuevas

implementaciones y se pueden aadir nuevos componentes.

El sistema es muy flexible ya que los clientes se conectan a los

servicios y hacen uso de ellos sin saber como estn implementados.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Componentes y servicios
La flexibilidad descrita anteriormente es posible gracias al uso interno

del core de Spring Framework como ncleo de Alfresco.

Los componentes son configurados de manera declarativa.


La programacin orientada a aspectos permite aplicar conceptos

transversales de manera limpia.

La inyeccin de dependencias permite establecer qu componente

est activo y su configuracin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Estructura del repositorio de Alfresco


La interfaz pblica es conocida como Alfresco Repository Foundation

Services.

Cada servicio es expuesto como una interfaz Java sobre la que un

cliente puede invocar operaciones sin conocer como estn


implementadas ni quin lo hace.

Un registro de servicios est disponible.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Estructura del repositorio de Alfresco


Detrs de los servicios estn las implementaciones como cajas negras

(componentes).

Cada servicio o componente est configurado a travs de Spring en

ficheros de configuracin XML o ficheros de contexto. En concreto, los


servicios de Alfresco Repository Foundation Services estn
configurados en el fichero de Spring public-services-context.xml.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Foundation Services
Es la interfaz de ms bajo nivel para acceder a las capacidades del

repositorio.

El enlace con esta interfaz se realiza a travs del Repository Service

Registry o a travs de inyeccin de dependencias de Spring (si el


cliente usa Spring).

El acceso a los Foundation Services est limitado a los clientes locales

(en el mismo proceso que el repositorio).

Los servicios de Foundation Services son transaccionales y seguros.

Las polticas de seguridad y transaccionalidad estn descritas de


forma declarativa y se fuerza su aplicacin para cada servicio.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Extensiones del repositorio


Alfresco soporta una forma estndar para realizar extensiones al

repositorio: configurar un componente, aadir un nuevo componente o


servicio o borrar componentes.

Las extensiones se encapsulan fuera del ncleo del repositorio y se

instalan como pluging automticamente.

Las actualizaciones del ncleo del repositorio no afectan a nuestras

extensiones.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicios bsicos del repositorio


Los 3 servicios ms importantes de Foundation Services son :

Servicio de nodos : provee los metadatos y la estructura a los contenidos. Un nodo


debe soportar propiedades y asociaciones con otros nodos.

Servicio de contenido : permite el acceso y modificacin a la informacin que se ha


grabado en el repositorio: un documento Word o un fragmento XML.

Servicio de bsquedas : maneja la informacin del ndice de bsquedas y permite


recuperar los metadatos y el contenido del repositorio a travs de distintas
opciones de bsqueda.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicios bsicos del repositorio

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Arquitectura de Alfresco
Introduccin.
Servidor de aplicaciones de Alfresco.

Repositorio de contenidos.

Protocolos.

Los servicios de Alfresco.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
La gestin de contenidos empresarial cubre un amplio rango de

aplicaciones: gestin de documental, gestin de contenidos web,


gestin de registros, bsqueda, etc.

La arquitectura de Alfresco ha sido diseada para ser capaz de

soportar los requisitos asociados a todas estas aplicaciones.

Cada una de estas disciplinas tiene una serie de caractersticas nicas

y otras que se solapan, de tal forma que, el diseo de cada capacidad


no se ha realizado de forma aislada sino en el contexto de el sistema
completo.

Alfresco pretende ser lo ms simple posible en todos los mbitos:

desarrollo, personalizacin, despliegue y uso. La solucin ms simple


y extendida de una solucin ECM es una unidad compartida. La
arquitectura Alfresco tiene como objetivo ser tan simple como una
unidad compartida.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Escalado.
Solucin modular.
Incoporando las mejores libreras de terceros.
Independencia del entorno.
Ncleo robusto.
Extensiones con scripts.
Solucin basada en estndares.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
ltimamente, Alfresco se usa para implementar un ECM para ofrecer

gestin documental, gestin de registros, etc.

La solucin se divide tpicamente en clientes y servidor. Los clientes

ofrecen a los usuarios una interface de acceso a la solucin y el


servidor proporciona servicios de gestin de contenidos y
almacenamiento.

Es muy habitual que una solucin ofrezca mltiple clientes sobre un

mismo servidor compartido, cada cliente se adapta al entorno en el


que va a ser utilizado.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
El servidor de aplicaciones agrupa un repositorio de contenidos y un

conjunto de servicios adicionales para construir la solucin.

El repositorio de contenidos ha sido definido siguiendo los siguientes

estndares:

CMIS (Content Management Interoperability Services).

JCR (Java Content Repository / JSR-170/286).

Estos estndares proporcionan una especificacin para la definicin

de contenidos y su almacenamiento, recuperacin de contenidos,


versionado, etc.

El almacenamiento de contenidos, por defecto, se realiza de forma

combinada en base de datos y en el sistema de ficheros.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Aunque se ha realizado un esfuerzo de estandarizacin a la hora de

definir los elementos del ECM, existe un salto entre las caractersticas
ofrecidas por el repositorio y los requisitos tpicos de la solucin.

El servidor de aplicaciones de contenido de Alfresco proporciona la

siguiente categora de servicios sobre el repositorio de contenidos:

Servicios de contenidos (por ejemplo, transformacin, etiquetados, extraccin de


metadatos).

Servicios de control (por ejemplo, flujos de trabajo, gestin de registros).

Servicios de colaboracin (por ejemplo, actividades, wiki).

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Alfresco proporciona dos clientes web principales: Alfresco Explorer y

Alfresco Share.

Alfresco Explorer aparece desde la primera versin de Alfresco. Ha

sido implementado mediante Java Server Faces (JSF) y es altamente


personalizable, pero y muy IMPORTANTE, slo puede desplegarse
como parte del servidor de aplicaciones de contenidos de Alfresco.

Alfresco Share es un cliente algo ms joven, centrado en aspectos de

colaboracin. El concepto principal de Alfresco Share es la nocin de


sitio web: un lugar donde los usuarios colaboran en la generacin de
contenidos. Ha sido desarrollado usando Spring Surf.

Alfresco Share puede desplegarse de forma independiente al servidor

de aplicaciones de contenidos de Alfresco. Durante los ltimos aos,


ha evolucionado y ahora soporta todas las funcionalidades que ofrece
Alfresco Explorer.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Alfresco ha sido diseado como un sistema modular.
Cada parte es un componente o servicio. Un componente es una

implementacin que provee un capacidad o funcionalidad especfica y


que debe ser manejada como una caja negra por el resto del sistema.
Un servicio es una interfaz de acceso y uso para los clientes, es una
abstraccin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Para soportar esta estratega, Alfresco usa Spring framework

aprovechando entre otras cosas su factora, inyeccin de


dependencias y programacin orientada a aspectos:

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servidor de aplicaciones de Alfresco


La responsabilidad ms importante del servidor es proveer de un

conjunto de servicios para ser usados en soluciones ECM.

El servidor podemos verlo como una caja negra donde almacenamos y

gestionamos contenidos. Alfresco Content Application Server expone


un conjunto de interfaces remotas y pblicas para permitir la
comunicacin con clientes.

Estas intefaces pblicas y remotas son el nico elemento visible desde

el cliente. Existen dos tipos:

APIs remotas: permiten interaccin programtica con los servicios del servidor.

Protocolos que ofrecen esos mismos servicios a los usuarios mediante un


protocolo asociado al cliente.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servidor de aplicaciones de Alfresco


Esquema general del servidor:

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servidor de aplicaciones de Alfresco


Intefaces pblicas y remotas

Remote APIs

Protocols

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servidor de aplicaciones de Alfresco


El servidor est formado por un conjunto de capas. Los elementos

sobre los que se contruye el sistema son:

La base del sistema es un conjunto de elementos de infraestructura: configuracin,


autenticacin, permisos y transacciones que afectan a cualquier funcionalidad.
Esta infraestructura tambin protege al servidor de atarse a una implementacin
especfica (gestores de transacciones o mecanismos de cach).

El repositorio de contenidos de Alfresco se construye sobre la base de esta


infraestructura. Cada funcionalidad del repositorio se mapea a un mdulo con su
propia especificacin e implementacin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Repositorio de contenidos
El repositorio es el sistema que se encarga de manejar los contenidos

dentro de Alfresco. Se encarga de:

Definicin de la estructura de los contenidos.

Creacin, actualizacin y borrado de contenidos, metadatos asociados y


relaciones.

Consultas a los contenidos, control de acceso (permisos) y versionado.

Renderizado de contenidos, locking, eventos, auditora.

Importacin y exportacin.

Multi-idioma.

Reglas y acciones.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Repositorio de contenidos
Esquema del repositorio:

Content Repository

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Repositorio de contenidos
El repositorio de contenidos proporciona una implementacin de estos

servicios y los expone mediante:

API de Alfresco,

CMIS y

API Java JSR-170.

El ncleo del repositorio es un motor de almacenamiento, responsable

de almacenar y recuperar los contenidos que se gestionan. Este motor


trabaja sobre dos conceptos:

Nodo: esta entidad maneja los metadatos y estructura de un contenido. Un nodo


soporta propiedades y relaciones con otros nodos.

Contenido: contenido a guardar, por ejemplo, documento Excel y ODT.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Repositorio de contenidos
Servicios:

Embeddeb APIs

Content Services
Control Services
Collaboration Services

Content Repository

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Repositorio de contenidos
El motor de almacenamiento ofrece tambin mecanismos de consulta

construidas sobre Apache Lucene. Ofrece los siguientes tipos de


bsquedas:

Filtrado por metadatos.

Bsquedas por path.

Bsquedas a texto completo.

Cualquier combinacin de las anteriores.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Repositorio de contenidos
Por defecto, Alfresco almacena los nodos en la base de datos y el

contenido en el sistema de ficheros.

El uso de base de datos proporciona el beneficio de aos y aos de

experiencia (gestin de transacciones, escalado, administracin).


Alfresco usa un nivel de abstraccin para aislar el motor de
almacenamiento y el dialecto SQL utilizado.

El contenido se almacena en el sistema de ficheros permitiendo

acceso a contenidos muy grandes, streaming y la posibilidad de


trabajar con diferentes dispositivos de almacenamiento.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Protocolos
Para permitir el uso de Alfresco en diferentes mbitos, el servidor de

contenidos de Alfresco soporta diferentes protocolos para la gestin


de carpetas y documentos.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Protocolos
CIFS (Common Internet File System) es un protocolo que permite la

proyeccin de Alfresco como una unidad de ficheros compartida


nativa. Cualquier cliente puede leer y escribir en las unidades en las
que puede leer y escribir en Alfresco, permitiendo el uso de unidades
compartidas en vez del ECM sin que el usuario se entere. Alfresco
adquiri la nica implementacin de servidor CIFS basada en Java,
JLAN.

WebDAV (Web-based Distributed Authoring and Versioning) es un

conjunto de extensiones de HTTP que permite gestionar ficheros


mediante servidores web. Muchas herramientas de contenidos ofrecen
soporte a WebDAV. Tambin existe herramientas que permite montar
servidores WebDAV como unidad de red.

FTP (File Transfer Protocol) es un protoloco estndar de red para el

intercambio y manipulacin de ficheros a travs de la red. Este


protocolo es particularmente til en los procesos de carga masiva de
carpetas y ficheros en el repositorio de contenidos de Alfresco.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Protocolos
IMAP (Internet Message Access Protocol) es un estndar que permite

acceder a email mediante un servidor de mail remoto. Alfresco se


comporta como servidor de correo, permitiendo a clientes de correo
como Microsoft Outlook, Apple Mail, y Thunderbird conectar e
interactuar con carpetas y ficheros dentro del repositorio de
contenidos de Alfresco.

Microsoft SharePoint, protocolo que permite Alfresco actuar como

servidor SharePoint, creando integracin con la suite Microsoft Office.


Permite al usuario familiarizado con esta suite trabajar sobre
documentos dentro de Alfresco.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Los servicios de Alfresco


Introduccin.
Servicios del repositorio de contenidos.
Servicios de aplicacin de contenidos.
Las APIs de Alfresco.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
El servidor de contenidos de Alfresco proporciona funcionalidades

para capturar, gestionar y colaborar sobre contenidos usando


servicios. Estos servicios son la base de la funcionalidad
proporcionada por Alfresco.

Alfresco expone estos servicios en varios niveles, incluyendo Java,

scripting, REST, y servicios web. Algunos servicios son internos y otros


son pblicos. Por ejemplo, los servicios Java son internos.

Los servicios se dividen en dos categoras.

Servicios del repositorio de contenidos.

Servicios de aplicacin de contenidos.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicios del repositorio de contenidos


Los servicios del repositorio de contenidos estn escritos en Java y

son los servicios fundamentales para la gestin de contenidos.

Gestin de ficheros y carpetas.

Versionado y checkin/checkout.

Auditora.

Autenticacin, autorizacin y permisos.

Modelado.

Bsqueda.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicios del repositorio de contenidos

Embeddeb APIs
Content Repository

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicios de aplicacin de contenidos


Los servicios de apliacin de contenidos extiendo los servicios del

repositorio para proporcionar capacidades evolucionadas necesarias


para las aplicaciones colaborativas que manejan contenidos ricos. Se
organizan como:

Servicios de contenidos: reglas y acciones, transformaciones, extraccin de


metadatos.

Servicios de control: flujos de trabajo, proyectos web, etc.

Servicios de colaboracin: comentarios, etiquetado, actividades, etc.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicios del repositorio de contenidos

Content Services
Control Services
Collaboration Services
Content Repository

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Estructura de los servicios


La mayora de los servicios se construyen en tres capas: ncleo Java,

servicio de script pblico y API RESTful.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Las APIs de Alfresco


El servidor de contenidos de Alfresco ofrece dos tipos de APIs:

APIs remotas: usadas por clientes que se comunican con el servidor de contenidos
de Alfresco de forma remota.

APIs embebidas: usadas por extensiones que han sido desplegadas y se ejecutan
dentro del servidor de contenidos de Alfresco.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Las APIs de Alfresco


Remote APIs

Embeddeb APIs

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Las APIs de Alfresco


Las APIs embebidas son usadas por extensiones de Alfresco que se

ejecutan directamente contra el Servidor de contenidos de Alfresco.


Existen tres APIs principales:

Alfresco Java Foundation API: proporciona un conjunto de interfaces Java para el


acceso a los servicios del repositorio.

API JavaScript: javascript que nos permite acceder a los servicios de base.

API Template: API de slo lectura diseada para renderizar salidas HTML, XML,
JSON, y texto usando el motor de plantillas FreeMarker. Esta API usa una vista
orientada a objetos del repositorio de contenidos combinndola con las plantillas.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Las APIs de Alfresco


Alfresco permite definir extensiones sobre estas APIs:

Remote APIs

Extensions
Embeddeb APIs

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Las APIs de Alfresco


APIs embebidas:

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Las APIs de Alfresco


Las APIs remotas permiten a clientes conectarse desde una capa

independiente para comunicarse con el servidor de aplicaciones de


contenidos de Alfresco.

Estas APIs se basan en servicios web basados en protocolos RESTful y

CMIS, permitiendo as el desarrollo contra estas APIs usando un rango


de lenguajes amplio (Java, PHP, Ruby, and .NET). Las APIs son:

Alfresco API para contenido en Cloud: esta API permite acceder al contenido
gestionado por Alfresco Cloud desde nuestra aplicacin. Es RESTful, cada llamada
es una peticin HTTP, es decir, no se necesita ningn lenguaje de programacin

RESTful.

CMIS: estndar que define servicios web y asociaciones tipo REST para trabajar
con repositorios que cumplen este estndar.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Las APIs de Alfresco


APIs remotas:

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Alfresco Java Foundation Services


Introduccin.
Acceso a la API.
Los servicios disponibles.
Conceptos importantes.
Servicio de nodos NodeService.
Inyeccin de servicios.
Construir nuevos servicios.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Son el conjunto de servicios que propocionan acceso completo a

todas las capacidades del repositorio de Alfresco.

Es una API in-process, que significa que el cliente que la usa debe

encontrarse en el mismo proceso que el repositorio.

Por ejemplo, el cliente web Alfresco Explorer usa esta API y se

encuentra empaquetado con el repositorio en el mismo war.

Cada servicio se maneja en forma de interface Java. Spring Framework

ser el responsable de inyectar la implementacin adecuada del


servicio.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Acceso a la API
Existen tres estrategias para acceder a estas interfaces en nuestro

cdigo:

Mediante Inyeccin de dependencias.

Acceso manual mediante el mtodo Spring getBean() de Spring.


Factory.getBean("AuthenticationService");

Indirectamente mediante el servicio de Alfresco ServiceRegistry: el servicio de


registro mantiene un listado de todos los servicios del repositorio disponibles.
serviceRegistry.getAuthenticationService()

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Acceso a la API
La interface ServiceRegistry nos proporciona acceso a todos los

servicios del core del repositorio:

// Inicializar el contexto
ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
// Se obtiene el servicio de registros
final ServiceRegistry serviceRegistry = (ServiceRegistry)
ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
// Se recupera el servicio de gestin de transacciones
TransactionService transactionService = serviceRegistry.getTransactionService();

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Acceso a la API
La interface ServiceRegistry se encuentra en el paquete

org.alfresco.service, representa los servicios pblicos del repositorio


de Alfresco.

Proporciona metadatos de cada servicio y acceso a cada uno de ellos

mediante su interface:

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Acceso a la API
El servicio de registro proporciona diferentes mtodos para acceder a

los servicios:

getActionService.

getPermissionService.

getAuthorityService.

getFileFolderService.

getScriptService.

getWorkflowService.

getNotificationService

getAuditService

...

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Los servicios disponibles


Existe un servicio para cada funcionalidad disponible:

NodeService: servicio de nodos. Nos permite crear, modificar, recuperar y borrar


nodos, asociaciones, aspectos y propiedades.

ContentService: servicio de contenidos. Proporciona mtodos para acceder y


transformar el contenido de los nodos.

SearchService: servicio de bsqueda.

Servicio AuthenticationService.

Servicio TransactionService.

...

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Cmo se crearon los servicios?


Crear la implementacin de la clase y la definicin del bean:

<?xml version='1.0' encoding='UTF-8'?>


<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://
www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<bean id="nodeService" class= ...
...
</bean>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Cmo se crearon los servicios?


Crear el proxy y la definicin del bean:
<bean id="NodeService" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>org.alfresco.service.cmr.repository.NodeService</value>
</list>
</property>
<property name="target">

<ref bean="nodeService"/>

</property>
...

Por ltimo, se registra el servicio.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Conceptos importantes
Antes de seguir debemos tener en cuenta una series de conceptos

importantes:

Nodo y contenido.

Namespaces o espacio de nombre.

Los modelos de Alfresco.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Los nodos en Alfresco


Cualquier nodo en Alfresco se modela mediante la clase NodeRef que

se encuentra en el paquete org.alfresco.service.cmr.repository.

Cualquier nodo de almacenamiento en Alfresco se modela mediante la

clase StoreRef que se encuentra en el paquete


org.alfresco.service.cmr.repository.

Podemos encontrar ms informacin en Alfresco Data Model API.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Los nodos en Alfresco


El concepto StoreRef comprime dos elementos:

Protocol del almacen: eso es el tipo de almacn.

Store id: Idenficador del almacn.

Ejemplos:

workspace://SpacesStore
archive://SpacesStore

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Los nodos en Alfresco


El concepto NodeRef comprime tres elementos:

Los dos primeros asociados al store ref:

protocolo: tipo de almacen.

storeid: identificador del almacn.

El tercero es el identificador del nodo dentro del almacn.

UUID.

Ejemplos:

workspace://SpacesStore/5af5a38b-e20a-4885-bbd1-4b3fde9b0dd3

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Los espacios de nombre


La clase NamespaceService nos proporciona acceso a los espacios de

nombre que utiliza Alfresco por defecto para sus nodos:

// Espacio de nombres para content


NamespaceService.CONTENT_MODEL_1_0_URI
// Prefijo utilizado en el espacio de nombres content
NamespaceService.CONTENT_MODEL_PREFIX

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Los modelos en Alfresco


La identificacin de tipos, aspectos, asociaciones, propiedades, etc, se

realiza mediante objeto de la clase QName.

Para facilitar el trabajo cuando se manejan elementos definidos por

defecto en Alfresco, tenemos una clase que define constantes muy


tiles, ContentModel.

Algn ejemplo de constante:

// Identifica al tipo cm:content


ContentModel.TYPE_CONTENT
// Identifica al tipo cm:folder
ContentModel.TYPE_FOLDER
// Identifica a la propiedad cm:name
ContentModel.PROP_NAME
..
Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicio de nodos NodeService


Se encuentra en el paquete org.alfresco.service.cmr.repository:

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicio de nodos NodeService


Como ya se ha comentado anteriormente, este servicio permite crear,

modificar, recuperar y borrar nodos, asociaciones, aspectos y


propiedades.

Alguno de sus mtodos:

addAspect: este mtodo aade un nuevo aspecto a un nodo dado.

createNode: crea un nodo.

deleteNode: borra un nodo.

exists: verifica si existe un nodo.

...

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicio de nodos NodeService


Ejemplos:
// Se recupera el nombre del fichero asociado al nodo
String fileName = (String) nodeService.getProperty(
nodeRef, ContentModel.PROP_NAME);
// Se recupera el valor de una propiedad
QName PROP_QNAME_MY_PROPERTY = QName.createQName(
"custom.model", "myProperty");
value = nodeService.getProperty(nodeRef, PROP_QNAME_MY_PROPERTY);
// Actualizar el valor de una propiedad
QName PROP_QNAME_MY_PROPERTY = QName.createQName(
"custom.model", "myProperty");
nodeService.setProperty(nodeRef, PROP_QNAME_MY_PROPERTY, value);

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicio de nodos NodeService


Ejemplos:
// Se recupera el nodo padre
ChildAssociationRef childAssocRef = nodeService.getPrimaryParent(nodeRef);
NodeRef parent = childAssociationRef.getParentRef();
// Se anade un aspecto a un nodo
QName CUSTOM_ASPECT_QNAME = QName.createQName(
"custom.model", "MyAspect");
QName PROP_QNAME_MY_PROPERTY = QName.createQName(
"custom.model", "myProperty");
Map<QName,Serializable> aspectValues = new HashMap<QName,Serializable>();
aspectValues.put(PROP_QNAME_MY_PROPERTY, value);
nodeService.addAspect(nodeRef, CUSTOM_ASPECT_QNAME, aspectValues);

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicio de nodos NodeService


Ms ejemplo en la siguiente url:

http://wiki.alfresco.com/wiki/NodeRef_cookbook

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicio de contenido ContentService


Como ya se ha comentado antes, este servicio proporciona mtodos

para acceder y transformar el contenido de los nodos.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicio de contenido ContentService


Alguno de sus mtodos:

getReader: recupera un lector para una determinada propiedad.

getWriter: recupera un escritor para trabajar sobre una determinada propiedad.

getTransformer: se recupera un transformador para llevar a cabo una


transformacin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicio de contenido ContentService


Ejemplos:
// Leer el contenido de un nodo
ContentReader reader = contentService.getReader(
nodeRef, ContentModel.PROP_CONTENT);
String content = reader.getContentString();
// Leer el contenido de un nodo en binario
ContentReader reader = contentService.getReader(nodeRef,
ContentModel.PROP_CONTENT);
InputStream originalInputStream = reader.getContentInputStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
final int BUF_SIZE = 1 << 8; //1KiB buffer
byte[] buffer = new byte[BUF_SIZE];
int bytesRead = -1;
while((bytesRead = originalInputStream.read(buffer)) > -1) {
outputStream.write(buffer, 0, bytesRead);
}
originalInputStream.close();
byte[] binaryData = outputStream.toByteArray();
Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Servicio de contenido ContentService


Ejemplos:
// Escribir el contenido de un nodo
ContentWriter writer = contentService.getWriter(nodeRef,
ContentModel.PROP_CONTENT, true);
writer.putContent(new ByteArrayInputStream(content));
// Escribir el contenido de un fichero en un nodo
ContentWriter writer = contentService.getWriter(nodeRef,
ContentModel.PROP_CONTENT, true);
writer.setLocale(CONTENT_LOCALE);
File file = new File("c:/temp/images/BigCheese1.bmp");
writer.setMimetype("image/bmp");
writer.putContent(file);

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Inyeccin de servicios
Si necesitamos utilizar alguno de estos servicios dentro de cualquiera

de la extensiones desarrolladas en Alfresco, tendremos que aplicando


Inyeccin de Dependencias (gracias a Spring Framework), ponerlos a
disposicin de nuestro cdigo.

El fichero public-services-context.xml que se encuentra en la carpeta

${tomcat}/webapps/alfresco/WEB-INF/classes/alfresco define la
mayor parte de los servicios:

<?xml version='1.0' encoding='UTF-8'?>


<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://
www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<import
resource="classpath:alfresco/public-services-security-context.xml"/>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Inyeccin de servicios
Servicio de registro: si queremos inyectar este servicio en nuestras

clases tendremos que usar el id ServiceRegistry.

<?xml version='1.0' encoding='UTF-8'?>


<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://
www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<import
resource="classpath:alfresco/public-services-security-context.xml"/>
<!-- Service Registry -->
<bean id="ServiceRegistry"
class="org.alfresco.repo.service.ServiceDescriptorRegistry" />

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Inyeccin de servicios
Servicio de bsqueda: si queremos hacer referencia a este servicio

tendremos que usar el id SearchService:

<!-- Search Service -->


<bean id="SearchService"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>org.alfresco.service.cmr.search.SearchService</value>
</property>
<property name="target">
<ref bean="searchService"/>
</property>
...
</bean>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Inyeccin de servicios
Servicio de nodos: si queremos hacer referencia a este servicio

tendremos que usar el id NodeService:

<!-- Node Service -->


<bean id="NodeService"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>org.alfresco.service.cmr.repository.NodeService</value>
</list>
...
</bean>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Inyeccin de servicios
Servicio de contenidos: si queremos hacer referencia a este servicio

tendremos que usar el id ContentService:

<!-- Content Service -->


<bean id="ContentService"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>org.alfresco.service.cmr.repository.ContentService</value>
</property>
<property name="target">
<ref bean="contentService"/>
</property>
<property name="interceptorNames">
...
</bean>
Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Inyeccin de servicios
Ejemplos:

<?xml version='1.0' encoding='UTF-8'?>


<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://
www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<bean id="webscript.org.alfresco.search.document-searcher.get"
parent="webscript"

class="com.ematiz.webscripts.ExpSearcher">
<property name="searchService">
<ref bean="SearchService" />
</property>
...
</bean>
...

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Construir nuevos servicios


Los servicios de Alfresco se contruyen usando tres capa:

Core Java,

Un servicio script pblico.

Una API RESTful.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Construir nuevos servicios


Cada capa tiene las siguientes caractersticas:

API Java embebida: es una API implementada en Java, encapsulando todas las
funcionalidades proporcionada por el servicio y es tpicamente una colleccin de
mtodos sin estado. Se considera una API slo accesible para los desarrolladores

API JavaScript: es una interface desarrollada sobre la API Java embebida,


proporcionando interfaces amigables sobre las capacidades del sistema.

API RESTful: se disea entorno a recursos y datos para proporcionar una API
basada en URLs que pueden llamarse desde cualquier lenguaje. Habitualmente, se
construyen sobre los servicios Script.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Alfresco API JavaScript


Introduccin.
Objetos raz (Root Scope Objects).
ScriptNode API.
API de creacin y modificacin.
Ejemplos.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
La API Alfresco JavaScript permite a los desarrolladores crear ficheros

JavaScript para acceder, modificar y crear objetos en el repositorio de


Alfresco. Proporciona un modelo orientado a objetos para manejar
conceptos como nodos, propiedades, asociaciones y aspectos.

La API es similar a API Template de Alfresco. La primera permite

modificar, crear nodos, aspectos, etc.

Usando esta API podemos:

Encontrar nodos via XPath y directamente via NodeRef o path.

Realizar bsquedas incluyendo bsquedas a texto completo con resultados


ordenados.

Navegando por jerarqua de nodos, examinar y modificar el valor de propiedades,


aspectos y asociaciones.

Transformar y manipular contenido.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Usando esta API podemos (cont.):

Procesar proyectos web WCM y objetos AVM.

Crear grupos, personas y modificar permisos.

Adems, estos scripts pueden crear nuevos ficheros, carpetas, nodos

de cualquier tipo, copiar/mover/borrar nodos y crear/modificar/borrar


hijos, etc.

Los scripts pueden incluir otros scripts (import). Esto significa que el

desarrollador puede utilizar libreras de scripts.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
La API Alfresco JavaScript proporciona acceso a objetos Java.
Tendremos acceso a objetos root por defecto, por ejemplo:

Carpetas home del usuario y home company.

Proyectos web WCM.

Bsquedas.

People API.

Funcionalidades relacionadas con logging.

Adems es posible aadir otros objetos como objetos raz para usar en

nuestros scripts.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Objetos raz (Root Scope Objects)


La mayor parte de estos objetos se conocen como Script Node objects

y modelan conceptos como nodos, aspectos, asociaciones, etc.

Tenemos a nuestra disposicin diferentes APIs para manejar estos

objetos:

ScriptContent API.

Permission and Security API.

Check in/Check out API.

Versions API.

Transformation API.

...

Para ms informacin http://wiki.alfresco.com/wiki/

4.0_JavaScript_API.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Objetos raz (Root Scope Objects)

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

ScriptNode API
Los objetos companyhome, userhome, document, space, y person

representan objetos de tipo nodo y proporcionan acceso a


propiedades, aspectos y asociaciones.

La API ScriptNode puede utilizarse dentro de nuestros scripts:

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

ScriptNode API
Una funcionalidad muy til es que cualquier propiedad de tipo

d:noderef se convierte automticamente en otro objeto de tipo


ScriptNode.

Si un documento tiene una propiedad locale de tipo nodeRef:


var name = person.properties.username
var locale = document.properties.locale.properties.name;

Adicionalmente, cualquier propiedad de tipo d:content se convierte en

objeto de tipo ScriptContent. Por ejemplo:

var mimetype = document.properties.content.mimetype;


var content = document.properties.content.content;

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

ScriptNode API

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

ScriptNode API
Ejemplo:

mynode.assocs["cm:translations"][0]
mynode.sourceAssocs["cm:translations"][0]
myforumnode.childAssocs["fm:discussion"][0]
mynode.parentAssocs["cm:contains"][0]

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

ScriptNode API

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

API de creacin y modificacin


La ScriptNode API no permite modificar muchas propiedades puesto

que son de slo lectura. Sin embargo provee alternativas para hacerlo.

La API de creacin y modificacin nos ofrece cantidad de funciones

para realizar este tipo de operaciones.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

API de creacin y modificacin

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

API de creacin y modificacin

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

API de creacin y modificacin

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

API de creacin y modificacin

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

API de creacin y modificacin


Ejemplo: se aade un aspecto. El mtodo addAspect realiza esta

operacin.

var props = new Array(1);


props["cm:template"] = document.nodeRef;
document.addAspect("cm:templatable", props);
props = new Array(1);
props["cm:lockIsDeep"] = true;
document.addAspect("cm:lockable", props);
props = new Array(1);
props["cm:hits"] = 1;
document.addAspect("cm:countable", props);

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

API de creacin y modificacin


Ejemplo: se crea un documento en la carpeta de usuario.

El mtodo createFile realiza esta operacin.


var doc = userhome.createFile("checkmeout.txt");
doc.content = "original text";

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

API de creacin y modificacin


Ejemplo: se crean nodos mediante diferentes estrategias.

El mtodo createFile realiza esta operacin.


var node1 = userhome.createNode("create test1.txt", "cm:content");
node1.content = "node1 content";
var node2 = userhome.createNode(null, "sys:base");
var props = new Array();
props["cm:name"] = "create test3.txt";
var node3 = userhome.createNode(null, "cm:content", props);
props["cm:name"] = "node name4.txt";
props["cm:title"] = "node title4";
var node4 = userhome.createNode(null, "cm:content", props, "cm:contains");

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Ejemplos
Crear el backup de un documento:
// find the backup folder - create if not already exists
var backupFolder = space.childByNamePath("Backup");
if (backupFolder == null && space.hasPermission("CreateChildren"))
{
// create the folder for the first time
backupFolder = space.createFolder("Backup");
}
if (backupFolder!= null && backupFolder.hasPermission("CreateChildren"))
{
// copy the doc into the backup folder
var copy = document.copy(backupFolder);
if (copy!= null)
{
// change the name so we know it's a backup
copy.name = "Backup of " + copy.name;
copy.save();
}
}
Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Ejemplos
Crear el backup de un documento:

Se utilizar el objeto raz space y apoyndose en el mtodo childByNamePath se


recupera el nodo que representa a la carpeta de backup.
// find the backup folder - create if not already exists
var backupFolder = space.childByNamePath("Backup");

El mtodo hasPermission comprueba si el usuario tiene permisos para crear hijos.


El mtodo createFolder crea la carpeta
if (backupFolder == null && space.hasPermission("CreateChildren"))
{
// create the folder for the first time
backupFolder = space.createFolder("Backup");
}

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Ejemplos
Para ver ms ejemplos:

http://wiki.alfresco.com/wiki/JavaScript_API_Cookbook

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Alfresco Freemarker Templating API


Introduccin.
Lenguaje de plantillas Freemarker.
Modelo de datos.
TemplateNode Model API.
Ms APIs.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Una plantilla es un documento que puede aplicarse a uno o varios

objetos (por ejemplo, uno o ms documentos de un repositorio) para


generar otro documento. FreeMarker o XSLT son plantillas.

La plantilla se escribe en un lenguage de plantillas especfico.


El modelo de datos ser el conjunto de objetos disponible en la

plantilla.

Plantilla + Modelo de datos = salida

El desarrollador necesita conocer el lenguaje de plantillas que

debemos utilizar y el modelo de datos disponible.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Lenguaje de plantillas Freemarker


Introduccin.
Trabajando con variables.
Operadores de comparacin.
Operadores lgicos.
Operadores numricos.
Operador concatenacin.
Vectores.
Estructuras selectivas.
Iteraciones.
Directivas en Freemarker.
Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Alfresco trabaja por defecto con Freemarker.
La extensin de los ficheros es ftl.
Debemos ser capaces de generar plantillas siguiendo su sintaxis:
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>Our latest product:
<a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
FreeMarker es un motor de plantillas basado en Java. Se definen

plantillas que no son ms que ficheros de texto que contienen la salida


deseada, excepto determinadas variables ${name}, y directivas (if,
bucles, etc).

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Trabajando con variables


Definicin de variable:

<#assign nombreVariable [= valor]>


Ejemplo:

<#assign var_link= "http://www.ematiz.com">

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Trabajando con variables


Referencia de variables:
${nombreVariable}

Ejemplo:

<a href="${var_link}">Navega a la web</a>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Trabajando con variables


El operador punto:
(root)
|
+- book
| |
| +- title = "Breeding green mouses"
| |
| +- author

${book.title}
Otra alternativa
book["title"]

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Operadores de comparacin
= y == son equivalentes.
!=

<#if user = "Big Joe">


It is Big Joe
</#if>
<#if user != "Big Joe">
It is not Big Joe
</#if>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Operadores de comparacin
<, <=, >= y >
Cuidado con > y >=

<#if (x > y)>


...
Podemos usar &gt; y &lt;

<#if (x &gt; y)>


...
Tambin se puede utilizar \lt, \lte, \gt y \gte

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Operadores lgicos
Funcin OR: ||
Funcin AND: &&
Funcin NOT: !
Ejemplo:

<#if x < 12 && color = "green">


We have less than 12 things, and they are green.
</#if>
<#if !hot> <#-- here hot must be a boolean -->
It's not hot.
</#if>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Operadores numricos
Suma: +, Resta: -, Multiplicacin: *, Divisin: /, Mdulo (resto): %
Ejemplos:

${100 - x * x}
${x / 2}
${12 % 10}
75
2.5
2

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Operador concatenacin
Operador suma.

${3 * "5"}

<#-- Error -->

${3 + "5"}

<#-- OK -->

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Vectores
Sintaxis:

<#assign nombreArray = ["value1", "value2", ... ]>


Ejemplo:

<#assign seq = ["winter", "spring", "summer", "autumn"]>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Vectores
Propiedades:

first, last

join

seq_contains, seq_index_of, seq_last_index_of

reverse

size

sort, sort_by

chunk

Ms informacin:

http://freemarker.org/docs/ref_builtins_sequence.html.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Vectores
Ejemplos:

<#assign colors = ["red", "green", "blue"]>


${colors?join(", ")}
Salida
red, green, blue
<#assign seq = ["winter", "spring", "summer", "autumn"]>
${seq?size}
Salida
4
Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Estructuras selectivas
Sintaxis:
<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
<#else>
...
</#if>

Ejemplo:
<#if x == 1>
x is 1
<#else>
x is not 1
</#if>
Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Iteraciones
Sintaxis:
<#list sequence as item>
...
</#list>

Tiene dos variables especiales disponibles dentro del bucle:

item_index: valor numrico que contiene el ndice del elemento sobre el que se est
iterando.

item_has_next: booleando que indica si el elemento sobre el que nos encontramos es el


ltimo.

Ejemplo:
<#assign seq = ["winter", "spring", "summer", "autumn"]>
<#list seq as x>
${x_index + 1}. ${x}<#if x_has_next>,</#if>
</#list>
Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Iteraciones
Ejemplos:

<#assign x=3>
<#list 1..x as i>
${i}
</#list>
<#list seq as x>
${x}
<#if x = "spring"><#break></#if>
</#list>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Directivas en Freemarker
assign.
import.
include.
macro.
...

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Ms informacin
http://freemarker.org/docs/index.html

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Modelo de datos
El modelo es un objeto o jerarqua de objetos que puede utilizar la

plantilla para generar la salida.

Se muestran a continuacin:

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Modelo por defecto

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

TemplateNode Model API


Esta API proporciona un conjunto de propiedades:

properties, children

assocs, childAssocs

aspects, hasAspect(String aspectName)

isContainer, isDocument, isCategory

content, url, downloadUrl, ...

Ms informacin

http://wiki.alfresco.com/wiki/Template_Guide#TemplateNode_Model_API

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

TemplateNode Model API


Ejemplo: properties es un mapa que almacena las propiedades de los

nodos.

<#assign props = document.properties?keys>

Ejemplo:

Found: ${companyhome.nodeByReference["workspace://SpacesStore/
e661dccb-ecc0-11da-9974-63f65406985a"].id}

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

TemplateNode Model API


Ejemplos:

<b>Company Home Space:</b> ${companyhome.properties.name}

<b>My Home Space children count:</b> ${userhome.children?size}

<b>Locked:</b> <#if document.isLocked>Yes<#else>No</#if>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

TemplateNode Model API


Ejemplos: Para acceder a una propiedad, slo la segunda opcin es

correcta.

<b>wrong:</b> ${document.properties.myprop} <br>


<b>ok:</b> ${document.properties["my:myprop"]}

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

TemplateNode Model API


Ejemplos: Iteracin sobre todas las propiedades del documento.
<table>
<#assign props = document.properties?keys>
<#list props as t>
<#-- If the property exists -->
<#if document.properties[t]?exists>
<#if document.properties[t]?is_date>
<tr><td>${t} = ${document.properties[t]?date}</td></tr>
<#elseif document.properties[t]?is_boolean>
<tr><td>${t} = ${document.properties[t]?string("yes", "no")}</td></tr>
<#else>
<tr><td>${t} = ${document.properties[t]}</td></tr>
</#if>
</#if>
</#list>
</table>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

TemplateNode Model API


Ejemplos: listado de los documentos dentro de la carpeta de usuario.
<table>
<#list userhome.children as child>
<#if child.isDocument>
<tr><td>${child.properties.name}</td></tr>
<#if child.mimetype = "text/plain">
<tr><td style='padding-left:16px'>${child.content}</td></tr>
<#elseif child.mimetype = "image/jpeg">
<tr>
<td style='padding-left:16px'>
<img width=100 height=65 src="/alfresco${child.url}">
<td>
</tr>
</#if>
</#if>
</#list>
</table>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

TemplateNode Model API


Ejemplo:

El mtodo childrenByLuceneSearchdevuelve un mapa con el resultado de la


bsqueda contra el repositorio completo basado en la cadena de bsqueda
Lucene.

userhome.childrenByLuceneSearch (cadenaLucene)

Todos los nodos que coinciden con el criterio son recuperados, la bsqueda se
realiza sobre todo el repositorio.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Ms APIs
Tenemos a nuestra disposicin otras APIs responsables de:

Versionado.

Clasificacin.

Procesado XML.

Flujos de trabajo.

...

Para ms informacin:

http://wiki.alfresco.com/wiki/Template_Guide#Version_History

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Subsistemas
Introduccin.
Listado de subsistemas.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Un subsistema es un mdulo configurable responsable de una parte de

una funcionalidad de Alfresco. Tpicamente, un subsistema envuelve


un rea funcional opcional, tales como, IMAP binding o con varias
implementaciones alternativas como el subsistema de autenticacin.

Podemos imaginarlo como un miniservidor embebido dentro del

servidor principal. Se puede arrancar y parar de forma independiente y,


tambin se configura de forma independiente.

Tiene su propio contexto de Spring (Spring Application Context) y su

configuracin.

Este contexto es hijo del principal. Eso significa que puede referenciar

cualquier bean del contexto principla.

Sin embargo, los beans de los subsistemas no se ven desde el

contexto principal y la comunicacin entre ellos slo puede realizarse


mediante la importacin explcita de interfaces.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Esto significa que:

Podemos tener mltiples instancias del mismo tipo: la misma plantilla de


configuracin de Spring puede inicializarse con diferentes parmetros en diferentes
instancias. Esto permite, por ejemplo, la definicin de una cadena de mltiples
subsistemas de autenticacin gracias a la edicin de ficheros de propiedades (o
JMX para la versin empresarial).

Los subsistemas puede controlarse va JMX (versin empresarial).

Tienen su propio espacio de nombres para sus beans: de esa forma no existe la
posibilidad de conflictos de nombrado.

Interfaces perfectamente definidas: se pueden importar en cualquier otro sitio del


sistema.

Implementaciones especficas ocultas.

Pueden cambiar de implementacin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Listado de subsistemas
Authentication.
Synchronization.
File Servers.
Third Party.
IMAP.
WCM Deployment Receiver.
sysAdmin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Seguridad y autenticacin en Alfresco


Introduccin.
Seguridad en Alfresco.
Autenticacin.
Autorizacin.
Definicin de permisos.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
En este captulo vamos a hablar sobre la autenticacin y las

funcionalidades contruidas sobre Alfresco para gestionar usuarios y


grupos, autenticacin de usuarios, permisos y control de acceso.

Tambin analizaremos cmo personalizar Alfresco para que trabaje

con mdulos, tales como, LDAP, NTLM, Kerberos y otros protocolos de


autenticacin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
La primera vez que se accede a una instalacin de Alfresco mediante

el cliente web Explorer, Alfresco nos identifica como usuario guest.

Nos podemos autenticar con otro usuario haciendo click en el enlace

de login y poniendo nuestro usuario y contrasea.

Si se autentica con privilegios de administrador, podr usar la consola

de administracin para crear nuevos usuarios y asignar contraseas.

Por defecto, puedes gestionar los usuarios base y sus contraseas

manualmente, y los usuarios no autenticados tendr acceso limitado


como usuarios guest.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
A partir de aqu, hay un conjunto de personalizaciones que podemos

realizar si queremos mejorar las posibilidades del sistema, por


ejemplo:

Deshabilitar el acceso usuarios no autenticados, guest.

Habilitar autenticacin automtica usando las credenciales del sistema operativo o


un servidor de SSO para eliminar la necesidad de una pgina de login.

Delegar la responsabilidad de la autenticacin en un servidor de directorio,


eliminando as la necesidad de configurar manualmente usuarios desde la consola
de administracin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Seguridad en Alfresco
La seguridad en Alfresco trabaja con dos conceptos importantes:

autenticacin y autorizacin.

Alfresco normalmente trabaja con el concepto de usuario y sus

credenciales pueden encontrarse en diferentes formatos y validarse de


diferentes formas. Por ejemplo, una contrasea puede validarse contra
un LDAP o un ticket de Kerberos puede validarse contra Microsoft
Active Directory Server.

Alfresco incluye:

Implementacin de autenticacin interna basada en contraseas.

Soporte para integrarse con diferentes entornos de autenticacin externos.

La posibilidad de generar una integracin de autenticacin propia.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Seguridad en Alfresco
La autorizacin determina qu operaciones puede realizar un usuario

autenticado. Existen diferentes modelos de autenticacin: Role Based


Access Control (RBAC), UNIX-style Access Control Lists (ACLs),
extended ACLs, Windows-style ACLs y otros muchos.

La autorizacin en Alfresco se basa en UNIX-extended ACLs. Cada

nodo tiene un ACL que usa para asignar permisos a grupos y usuarios.

Operaciones, tales como crear un nodo, describen qu permisos son

necesarios para realizar la operacin. Las ACLs se usan para


determinar si un usuario dado puede ejecutar la operacin basada en
los permisos que han sido asignados directamente al usuario o
indirectamente al grupo.

Las operaciones en Alfresco se ejecutan a partir de un mtodo pblico

asociado a un bean. La invocacin del mtodo comprueba que el


usuario tiene permisos para realizar esta operacin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Seguridad en Alfresco
Por convencin, los beans que ofrecen estos servicios pblicos son los

beans cuyos nombres empiezan en mayscula, por ejemplo,


NodeService, SearchService o ContentService.

La configuracin de requisitos de seguridad para estos beans se

definen en ficheros xml. Un determinado mtodo puede estar


disponible para todos los usuarios, todos los usuarios de un
determinado grupo, todos los usuarios de un determinado role, etc.

Adicionalmente, para los mtodos que devuelven colecciones o arrays

pueden filtrarse en funcin de los permisos del usuario. Si los


requisitos de autorizacin no se cumplen, la llamada al mtodo fallar
y lanzar la excepcin AccessDeniedException.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Seguridad en Alfresco
La asignacin de permisos se realiza mediante listas de control de

acceso (Access Control Lists, ACLs).

Estas listas son listas de control de entradas (Access Control Entries,

ACEs). stas asocian una autoridad con un permiso o conjunto de


permisos, y define si el permiso se deniega o permite para la autoridad.

Cada nodo tiene un ACL. Cuando se crea un nodo, ste

automticamente hereda la ACL de su padre. Una vez que el nodo se


ha creado, se puede alterar su comportamiento rompiendo la herencia
o modificando su ACL.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Seguridad en Alfresco
La configuracin XML para los permisos tambin define un contexto

ACL libre para los ACEs que se aplican sobre los nodos.

Por ejemplo, puedes usarlo para asignar acceso en modo lectura para

todo el mundo para todos los nodos independientemente de que ACLs


individuales asignadas a cualquier nodo.
<!-- Extension to alfresco\model\permissionDefinitions.xml -->
<globalPermission permission="Read" authority="GROUP_EVERYONE" />

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Autenticacin
Introduccin.
Subsistemas de autenticacin.
Tipos de subsistemas.
Cadena de autenticacin.
AlfrescoNTML.
pass-through.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
La autenticacin es una de las categoras de subsistemas que

encontramos en Alfresco.

El subsistema de autenticacin es una pila coordinada de

componentes compatibles responsables de proporcionar


funcionalidades de autenticacin e identificacin en Alfresco.

Alfresco ofrece diferentes implementaciones del subsistema de

autenticacin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Subsistemas de autenticacin
La autenticacin y la gestin de identidades se gestiona gracias a un

conjunto de mdulos software configurables llamados subsistemas.

El subsistema de autenticacin proprociona las siguientes funciones a

Alfresco:

Autenticacin basada en contrasea para navegador, protocolo Microsoft


SharePoint, FTP y WebDAV.

Autenticacin para los sistemas de ficheros CIFS y NFS.

Single sign-on (SSO) para navegador, protocolo Microsoft SharePoint y WebDAV.

Exportacin de registro de usuarios.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Tipos de subsistemas

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Cadena de autenticacin
Es muy habitual que al menos uno de los tipos anteriormente

comentados nos permita integrar Alfresco con el servidor de


autenticacin que se utiliza en nuestra organizacin.

Sin embargo, puede ocurrir que la integracin con alguno de estos

sistemas no sea suficiente. Por diferentes razones, puede ocurrir que


queramos mezclar diferentes protocolos de autenticacin.

Esta es la razn por la cul Alfresco ha diseado una cadena de

autenticacin. No es ms que una lista de subsistemas de


autenticacin ordenada por prioridad. Cada subsistema tiene:

Un tipo.

Un nombre nico que lo distingue de otras instancias del mismo tipo.

Un conjunto de valores proporcionados por la configuracin del usuario.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Cadena de autenticacin
Configuracin de la cadena de autenticacin:

Edicin del fichero alfresco-global.properties que se encuentra en la ruta


<installLocation>\shared\classes.

instance_name1:type1, instance_name2:type2, ..., instance_namen:typen

La propiedad authentication.chain declara la cadena de autenticacin de Alfresco.


Su valor ser una lista separada por comas de instancias de autenticacin.

Cada instancia se declara con un nombre seguido de : y el tipo de subsistema.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

AlfrescoNTML
El mecanismo de autenticacin que ofrece Alfresco, por defecto, es

una cadena de autenticacin con una nica instancia de un


subsistema de tipo alfrescoNtlm.

El proceso de autenticin se basa en la informacin de usuarios y

contraseas almacenada en el repositorio de Alfresco.

Proporciona soporte a autenticacin mediante formulario y SSO

basada en NTLM, adems de, autenticacin mediante servidor CIFS.

Nota: SSO con NTML, por defecto, se encuentra desactivado.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

AlfrescoNTML
Edicin del fichero alfresco-global.properties que se encuentra en la

ruta <installLocation>\shared\classes.
authentication.chain=alfinst:alfrescoNtlm

La propiedad authentication.chain declara la cadena de autenticacin

de Alfresco. Su valor ser una lista separada por comas de instancias


de autenticacin.

Cada instancia se declara con un nombre seguido de : y el tipo de

subsistema.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

AlfrescoNTML
Configuracin de la instancia:

Debemos crear un directorio dentro de la carpeta de extensiones de Alfresco,


<installLocation>\shared\classes\alfresco\extension\subsystems\Authentication
\alfrescoNtlm\alfinst

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

pass-through
El subsistema passthru puede reemplazar el sistema de autenticacin

con un controlador Windows server/domain para autenticar a los


usuarios en Alfresco. Este sistema elimina la necesidad de crear
cuentas de usuarios dentro de Alfresco.

Passthru ofrece soporte a Single Sign-On (SSO) mediante NTLM para

WebDav y los clientes web Alfresco Explorer and Share, autenticacin


CIFS mediante servidores CIFS.

Slo ofrece soporte a NTLM v.1. La versin 2 de NTLM ha sido

diseado para evitar ataques "man-in-the-middle", no es posible


implementarla en pass-through.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

LDAP
El sistema LDAP ofrece dos funciones principales:

Autenticacin de usuario: comprobacin del id de usuario y contrasea usando un


LDAP.

Exportacin del registro de usuario: se expone informacin sobre usuarios y grupos


para la sincronizacin del subsistema.

Estas funciones pueden utilizarse de forma aislado o en conjuncin.

Cuando la autenticacin se usa sin la exportacin de registro de


usuarios, los objetos se crean automticamente para todos los
usuarios que hacen log in.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Kerberos
El servicio de autenticacin y autorizacin Java (JAAS) se usa dentro

del subsistema Kerberos para soportar autenticacin Kerberos


mediante nombres de usuarios y contrasea.

Debemos seleccionar Kerberos contra un servidor Active Directory.


Los incovenientes de usar autenticacin LDAP contra Active Directory

comparados con JAAS/Kerberos son:

La solucin ms simple es usar el protocolo de autenticacin SIMPLE LDAP, usado


con SSL.

AD necesita un setup especial para usar autentiacin digest MD5.

LDAP puede usar GSSAPI y Kerberos, sera equivalente pero ms complejo a la


hora de aplicar su configuracin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

External
El subsistema external se usa con cualquier sistema de autenticacin

externo.

Este sistema puede integrarse con un servidor de aplicaciones de tal

forma que la identidad de los usuarios logados se pasan a los servlets


mediante el mtodo HttpServletRequest.getRemoteUser().

Como esta es la forma estndar de propagar las identidades de los

usuarios a los servlets, sera compatible con un nmero de soluciones


SSO, incluyendo Central Authentication Service (CAS).

La activacin de autenticacin external hace que Alfresco acepte

tokens de autenticacin externos, debemos asegurar que no se


producen accesos directos a los puertos HTTP o AJP de Alfresco.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Autoridades
Las autoridades que maneja Alfresco son personas o grupos de

personas.

Un grupo puede contener personas u otros grupos.


Las autoridades asignadas a un usuario son su userName (Person

node), todos los grupos a los que pertenece y cualquier autoridad


dinmica. Las autoridades dinmicas son usadas por roles internos.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Definicin de permisos
Los permisos se definen en un fichero de configuracin XML. El fichero

por defecto se encuentra en:

<installLocation>\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\model
\permissionDefinitions.xml

Esta configuracin puede ser reemplazada o extendida seguiendo la

DTD definida en:

<installLocation>\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\model
\permissionSchema.dtd

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Definicin de permisos
Ejemplo: definicin de permisos asociados al aspecto Ownable.
<permissionSet type="cm:ownable" expose="selected">
<!-- Permission control to allow ownership of the node to be taken from others -->
<permissionGroup name="TakeOwnership" requiresType="false" expose="false">
<includePermissionGroup permissionGroup="SetOwner" type="cm:ownable" />
</permissionGroup>
<permissionGroup name="SetOwner" requiresType="false" expose="false"/>
<!-- The low level permission to control setting the owner of a node -->
<permission name="_SetOwner" expose="false" requiresType="false">
<grantedToGroup permissionGroup="SetOwner" />
<requiredPermission on="node" type="sys:base" name="_WriteProperties" />
</permission>
</permissionSet>

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Extension classpath
Introduccin.
Sintaxis.
Ejemplo.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
El fichero alfresco-global.properties slo puede usarse para definir

propiedades globales a todo el sistema.

Pero la verdad es que tambin podemos controlar propiedades que

afectan a subsistemas, por ejemplo, los subsistemas de autenticacin.

Ahora bien, para hacer esto, necesitamos definir diferentes valores

para las mismas propiedades, para cada instancia del subsistema.

Para resolver este problema aparece un mecanismo llamado extension

classpath.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Sintaxis
Aadir un fichero de propiedades al classpath global del servidor.

Para el caso de Tomcat sera $TOMCAT_HOME/shared/classes

Se crea la ruta que coincide con el siguiente patrn para sobreescribir

las propiedades especficas de la instancia del subsistemas:


alfresco/extension/subsystems/<category>/<type>/<id>/*.properties

<id> es el identificador de la instancia del subsistema, que debe ser el valor por
defecto para subsistemas con una nica instancia o el identificador proporcionado
en la cadena de subsistemas.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Ejemplo
Si la cadena de autenticacin fuera la siguiente:
authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap1:ldap

Entonces podramos sobreescribir propiedades del subsistema

alfrescoNtlm1 en el siguiente fichero:

alfresco/extension/subsystems/Authentication/alfrescoNtlm/alfrescoNtlm1/
mychanges.properties

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Ejemplo
El tipo por defecto y el id de subsistema sin cadenas es default, por lo

tanto, para sobreescribir propiedades del servidor de ficheros


(fileserver) tendramos que aadir propiedades en el siguiente fichero:

alfresco/extension/subsystems/fileServers/default/default/mychanges.properties

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Extensiones en Alfresco
Alfresco can be freely customized and extended according to your

needs.

These customizations can be as simple as tweaking a single

configuration file, or the development of a sophisticated module such


as Records Management.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Extensiones en Alfresco: empaquetado y despliegue


Introduccin.
Ficheros sin empaquetar o zips.
Ficheros JAR.
Ficheros AMP.
Rutas de despliegue.
Carpeta Shared Classpath.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Existen varias formas de empaquetar extensiones de Alfresco.

Pasamos a describir cada una de ellas, incluyendo el empaquetado


como mdulo usando ficheros AMP.

El mecanismo de empaquetado seleccionado depende mucho del tipo

de extensin que se vaya a desarrollar.

Para una extensin sencilla que consiste en uno o dos web scripts, la

mejor opcin ser un fichero JAR que contenga los scripts,


colocndolo en el classpath del servidor, por ejemplo, en tomcat $
{tomcat_home}/shared/lib.

Para extensiones ms complejas, el desarrollo de un mdulo sera la

mejor opcin, ste se empaqueta como fichero AMP y posteriormente


se aplica al war en cuestin (alfresco.war or share.war).

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Introduccin
Las opciones de empaquetado son:

Ficheros sin empaquetar: ficheros individuales tales como web scripts pueden
copiarse en el directorio de extensin.

Ficherso zip: las extensiones se pueden empaquetar con ficheros Zip.

Ficheros JAR: las extensiones se pueden empaquetar siguiendo el formato


estndar JAR y ser cargado en el sistema mediante el shared classpath.

Fichero AMP: este formato que debemos elegir en la mayor parte de la extensiones,
especialemente cuando van a utilizarse en muchos sitios. La forma ms
recomendable de despliegue de extensiones en entornos de produccin es sta.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Ficheros sin empaquetar o zips


La tcnica de empaquetado ms simple es copiar o descomprimir los

ficheros de extensin en la jerarqua de directorios de Alfresco.


Podemos mejorar el proceso utilizando algn lenguaje de script o
herramientas de build como ANT. Con estas herramientas podemos
empaquetar los ficheros en formato zip con la estructura de directorios
adecuada, y descomprimirlos en la instalacin de Alfresco.

Esta tcnica puede ser muy efectiva durante las primeras fases del

desarrollo. Muchos entornos de desarrollo emplean procesos de build


que pueden ejecutar scripts para mover los ficheros modificados hasta
la aplicacin (Ant, Bash, Maven o lenguajes de script).

Mover ficheros independientes tiene la ventaja de ser rpido y fcil de

entender, pero es mejor idea empaquetar en zip y, posteriormente,


descomprimir en el sistema.

Esta tcnica no se recomienda en entornos QA o produccin.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Ficheros JAR
El formato JAR puede utilizarse para empaquetar diferentes tipos de

extensiones. Una vez que la extensin se empaqueta en formato JAR,


se puede cargar en las rutas estndares de classpath del servidor. Por
ejemplo, para Tomcat sera ${tomcat}/shared/lib, o ${tomcat}/
webapps/alfresco/WEB-INF/lib.

Desde Alfresco 3.4, el cliente web Share soporta extensiones

empaquetadas como ficheros JAR. Esto permite mltiples


personalizaciones aisladas unas de otras y un orden de seleccin

Los ficheros estticos (JavaScript, CSS, o imgenes) pueden colocarse

en el web root de Share, aunque tambin pueden empaquetarse dentro


de JARs. Para desplegar estos JARs, se recomienda colocarlos en uno
o ms ficheros AMP, y desplegarlos posteriormente en Share.

La instalacin directa de JARs en la estructura de directorios de la

aplicacin no es una prctica recomendable, el servidor de


aplicaciones puede sobreescribir los cambios.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Ficheros AMP
Los ficheros AMP (Alfresco Module Packages) son la mejor forma de

empaquetar extensiones en Alfresco.

Estos ficheros son ZIPs que siguen un layout especfico y puede ser

fusionado con otros WAR tales como alfresco.war o share.war usando


la herramienta Alfresco Module Management Tool (MMT). Esta
herramienta est disponible en el directorio de instalacin de Alfresco
en alfresco-mmt.jar.

El Alfresco SDK incluye varias herramientas (ANT) para gestionar estos

procesos.

En los ltimos tiempos Maven Alfresco SDK proporciona un conjunto

de herramientas para construir y desplegar ficheros AMP.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Rutas de despliegue
Existen diferentes rutas donde poder desplegar las extensiones

desarrolladas para Alfresco, dependiendo de la fase del ciclo de vida


de desarrollo en el que nos encontremos, tipo de empaquetado y
servidor de aplicaciones.

Para Tomcat:

Cuando el servidor est arrancado, alfresco.war se encuentra en formato carpeta


en $CATALINA_HOME/webapps/alfresco. Para el servidor si est corriendo, copiar
los ficheros de extensin a $CATALINA_HOME/webapps/alfresco/WEB-INF/ y
reinciar Tomcat. Si por cualquier razn el servidor redespliega alfresco.war, las
extensiones sern borradas y tendremos que redesplegarlas otra vez.

Una solucin es cambiar permanently exploded deployment. Crea un directorio


llamado alfresco en el directorio webapps y extrae alfresco.war en l. Despus
copia los ficheros de extensin a $CATALINA_HOME/webapps/alfresco/WEB-INF/ y
reinicia.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Carpeta Shared Classpath


Muchas personalizaciones se pueden colocar en el servidor de

aplicaciones. Por ejemplo:

Ficheros de configuracin de Alfresco, tales como share-config-custom.xml.

Ficheros de contexto de Spring.

Ficheros de propiedades, tales como, webclient.properties.

Para Tomcat, la carpeta shared class loader es $CATALINA_HOME/

shared/classes/alfresco/ para ficheros con clases.

Para JBoss, la carpeta shared class loader es $JBOSS_HOME/server/

default/conf/alfresco/.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Carpeta Shared Classpath


En esta carpeta encontramos subdirectorios estndares:

extension: para cambios en el repositorio o la interfaz de Alfresco Explorer.

web-extension: para cambios en la interfaz de Alfresco Share.

messages: para cadenas de caracteriors i18n.

Los ficheros que se empaqueta en formato JAR debe colocarse en el

directorio lib, por ejemplo, $CATALINA_HOME/shared/lib.

Preparado por Jess Salinas Revelles

El ncleo de Alfresco

Classpath especfico WAR


Una mejor ruta para personalizaciones sera:

$CATALINA_HOME/webapps/alfresco/WEB-INF/classes

$CATALINA_HOME/webapps/alfresco/WEB-INF/lib (para JARs)

$CATALINA_HOME/webapps/share/WEB-INF/classes

$CATALINA_HOME/webapps/share/WEB-INF/lib (para JARs)

Es muy comn aplicar parches sobre los war de Explorer y Share para

poner nuestro cdigo en el lugar adecuado preservndolo de


redespliegues del servidor de aplicaciones.

Esto es lo que hace el script apply_amps, aplica tu fichero AMP al war

que necesites usando Module Management Tool (MMT). Para tener


mayor control sobre el proceso, en vez de usar este script se
recomienda usar MMT directamente.

Preparado por Jess Salinas Revelles

Você também pode gostar