SlideShare una empresa de Scribd logo
1 de 193
Descargar para leer sin conexión
Alfresco 4.2 para
desarrolladores
El núcleo de Alfresco
El núcleo de Alfresco

Índice del capítulo
‣ Introducción 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 Jesús Salinas Revelles
El núcleo de Alfresco

Introducción a Alfresco
‣ ¿Qué es Alfresco?
‣ Algunas características técnicas del proyecto Alfresco.
‣ Documentación.
‣ Funcionalidades más importantes de cara a los usuarios.
‣ Arquitectura técnica.
‣ Componentes y servicios.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

¿Qué es Alfresco?
‣ Alfresco es un sistema de Gestión de Contenido Empresarial (ECM),

normalmente utilizado para Gestión de Documentos Digitales en
entornos exigentes (sometidos a importantes requisitos de
escalabilidad, alta disponibilidad, capacidades de integración,
auditabilidad, etc.).

‣ Es un proyecto OpenSource creado en 2005 por un equipo procedente

de Documentum.

‣ Alfresco gestiona todos los contenidos en nuestra empresa:

documentos, imágenes, fotos, páginas 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 características,
tales como, gestión de metadatos, control de versiones, gestión del
ciclo de vida, flujo de trabajo, búsquedas, asociaciones a otros
contenidos, etiquetado, comentarios.

Preparado por Jesús Salinas Revelles
El núcleo 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. También proporciona
por defecto un conjunto de aplicaciones para navegar por los
contenidos, buscar, gestionar, etc.

‣ Para el negocio, Alfresco ha sido diseñado para soportar todo tipo de

requisitos relacionados con los contenidos: herramientas para la
gestión de documentos, aplicaciones, interfaces para trabajo de
oficina. La gestión de flujos de trabajo soporta diferentes procesos de
negocio.

‣ Para el desarrolllador, Alfresco proporciona un repositorio escalable y

una plataforma de gestión que simplifica el desarrollo. Expone
infinidad de capacidades de gestión en forma de servicios.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

¿Qué es Alfresco?
‣ El núcleo de Alfresco es un repositorio gestionado por un servidor que

persiste contenidos, metadatos, etc.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

como una aplicación Java, eso significa que se puede ejecutar en
cualquier plataforma donde corre JavaEE.

‣ El núcleo 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

incorporación de nuevas funcionalidades dentro del sistema. Esto se
conoce como Web scripts y puede utilizarse para la gestión de datos o
servicios de presentación.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Algunas características técnicas del proyecto Alfresco
‣ Open Source : Tenemos el código disponible

(¡siempre, en cualquier versión!).

‣ Fácilmente extensible y basado en

tecnologías Java EE estándares 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 Jesús Salinas Revelles
El núcleo de Alfresco

Algunas características de negocio del proyecto Alfresco
‣ Dos versiones: Community y Enterprise.

Esta última con un soporte profesional, con
procesos de QA estrictos, SLA, etc.

‣ La versión Community es suficientemente

buena para ponerla en producción en
proyectos no críticos. Es gratuita.

‣ La versión Enterprise es de pago (aunque

se puede probar gratuitamente) y la
recomiendo para entornos críticos.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Documentación
‣ Muy buena documentación (¡cosa muy rara

en los proyectos y productos Open Source!).

‣ La documentación de la versión Community

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

‣ La documentación de la versión Enterprise

está en la web oficial
http://docs.alfresco.com

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Funcionalidades más importantes de cara a los usuarios
‣ Un único repositorio unificado para gestionar cualquier tipo de

contenido: documentos, imágenes, vídeo y audio.

‣ Puede ser usado como una unidad de red compartida con protocolo

CIFS, WebDAV, IMAP y SharePoint.

‣ Vista previa en línea de los tipos de archivos populares (como

documentos de Microsoft Office, PDFs e imágenes) directamente en el
navegador sin necesidad de descargarlos.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Funcionalidades más importantes de cara a los usuarios
‣ Integración 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 Jesús Salinas Revelles
El núcleo de Alfresco

Funcionalidades más 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
búsqueda.

‣ Capacidad para localizar documentos rápidamente con un sistema de

búsquedas avanzadas preindexadas.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

funcionalidad específica 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

abstracción.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Componentes y servicios

Preparado por Jesús Salinas Revelles
El núcleo 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 más de un componente que implemente un servicio.
‣ Con Spring Framework seleccionamos qué componente está

disponible en nuestro sistema para cada servicio y cómo está
configurado.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Componentes y servicios

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Componentes y servicios

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Componentes y servicios
‣ Los componentes pueden ser intercambiados por nuevas

implementaciones y se pueden añadir nuevos componentes.

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

servicios y hacen uso de ellos sin saber como están implementados.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

del core de Spring Framework como núcleo de Alfresco.

‣ Los componentes son configurados de manera declarativa.
‣ La programación orientada a aspectos permite aplicar conceptos

transversales de manera limpia.

‣ La inyección de dependencias permite establecer qué componente

está activo y su configuración.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Estructura del repositorio de Alfresco
‣ La interfaz pública 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 están
implementadas ni quién lo hace.

‣ Un registro de servicios está disponible.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Estructura del repositorio de Alfresco
‣ Detrás de los servicios están las implementaciones como cajas negras

(componentes).

‣ Cada servicio o componente está configurado a través de Spring en

ficheros de configuración XML o ficheros de contexto. En concreto, los
servicios de Alfresco Repository Foundation Services están
configurados en el fichero de Spring public-services-context.xml.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Foundation Services
‣ Es la interfaz de más bajo nivel para acceder a las capacidades del

repositorio.

‣ El enlace con esta interfaz se realiza a través del Repository Service

Registry o a través de inyección 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 políticas de seguridad y transaccionalidad están descritas de
forma declarativa y se fuerza su aplicación para cada servicio.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Extensiones del repositorio
‣ Alfresco soporta una forma estándar para realizar extensiones al

repositorio: configurar un componente, añadir un nuevo componente o
servicio o borrar componentes.

‣ Las extensiones se encapsulan fuera del núcleo del repositorio y se

instalan como pluging automáticamente.

‣ Las actualizaciones del núcleo del repositorio no afectan a nuestras

extensiones.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servicios básicos del repositorio
‣ Los 3 servicios más 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 modificación a la información que se ha
grabado en el repositorio: un documento Word o un fragmento XML.

‣

Servicio de búsquedas : maneja la información del índice de búsquedas y permite
recuperar los metadatos y el contenido del repositorio a través de distintas
opciones de búsqueda.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servicios básicos del repositorio

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Arquitectura de Alfresco
‣ Introducción.
‣ Servidor de aplicaciones de Alfresco.
‣

Repositorio de contenidos.

‣

Protocolos.

‣

Los servicios de Alfresco.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ La gestión de contenidos empresarial cubre un amplio rango de

aplicaciones: gestión de documental, gestión de contenidos web,
gestión de registros, búsqueda, etc.

‣ La arquitectura de Alfresco ha sido diseñada para ser capaz de

soportar los requisitos asociados a todas estas aplicaciones.

‣ Cada una de estas disciplinas tiene una serie de características únicas

y otras que se solapan, de tal forma que, el diseño de cada capacidad
no se ha realizado de forma aislada sino en el contexto de el sistema
completo.

‣ Alfresco pretende ser lo más simple posible en todos los ámbitos:

desarrollo, personalización, despliegue y uso. La solución más simple
y extendida de una solución ECM es una unidad compartida. La
arquitectura Alfresco tiene como objetivo ser tan simple como una
unidad compartida.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Escalado.
‣ Solución modular.
‣ Incoporando las mejores librerías de terceros.
‣ Independencia del entorno.
‣ Núcleo robusto.
‣ Extensiones con scripts.
‣ Solución basada en estándares.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Últimamente, Alfresco se usa para implementar un ECM para ofrecer

gestión documental, gestión de registros, etc.

‣ La solución se divide típicamente en clientes y servidor. Los clientes

ofrecen a los usuarios una interface de acceso a la solución y el
servidor proporciona servicios de gestión de contenidos y
almacenamiento.

‣ Es muy habitual que una solución ofrezca múltiple clientes sobre un

mismo servidor compartido, cada cliente se adapta al entorno en el
que va a ser utilizado.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ El servidor de aplicaciones agrupa un repositorio de contenidos y un

conjunto de servicios adicionales para construir la solución.

‣ El repositorio de contenidos ha sido definido siguiendo los siguientes

estándares:
‣

CMIS (Content Management Interoperability Services).

‣

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

‣ Estos estándares proporcionan una especificación para la definición

de contenidos y su almacenamiento, recuperación 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 Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Aunque se ha realizado un esfuerzo de estandarización a la hora de

definir los elementos del ECM, existe un salto entre las características
ofrecidas por el repositorio y los requisitos típicos de la solución.

‣ El servidor de aplicaciones de contenido de Alfresco proporciona la

siguiente categoría de servicios sobre el repositorio de contenidos:
‣

Servicios de contenidos (por ejemplo, transformación, etiquetados, extracción de
metadatos).

‣

Servicios de control (por ejemplo, flujos de trabajo, gestión de registros).

‣

Servicios de colaboración (por ejemplo, actividades, wiki).

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Alfresco proporciona dos clientes web principales: Alfresco Explorer y

Alfresco Share.

‣ Alfresco Explorer aparece desde la primera versión de Alfresco. Ha

sido implementado mediante Java Server Faces (JSF) y es altamente
personalizable, pero y muy IMPORTANTE, sólo puede desplegarse
como parte del servidor de aplicaciones de contenidos de Alfresco.

‣ Alfresco Share es un cliente algo más joven, centrado en aspectos de

colaboración. El concepto principal de Alfresco Share es la noción de
sitio web: un lugar donde los usuarios colaboran en la generación 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 años,
ha evolucionado y ahora soporta todas las funcionalidades que ofrece
Alfresco Explorer.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Alfresco ha sido diseñado como un sistema modular.
‣ Cada parte es un componente o servicio. Un componente es una

implementación que provee un capacidad o funcionalidad específica 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
abstracción.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Para soportar esta estrategía, Alfresco usa Spring framework

aprovechando entre otras cosas su factoría, inyección de
dependencias y programación orientada a aspectos:

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servidor de aplicaciones de Alfresco
‣ La responsabilidad más 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 públicas para permitir la
comunicación con clientes.

‣ Estas intefaces públicas y remotas son el único elemento visible desde

el cliente. Existen dos tipos:
‣

APIs remotas: permiten interacción programática con los servicios del servidor.

‣

Protocolos que ofrecen esos mismos servicios a los usuarios mediante un
protocolo asociado al cliente.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servidor de aplicaciones de Alfresco
‣ Esquema general del servidor:

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servidor de aplicaciones de Alfresco
‣ Intefaces públicas y remotas

Remote APIs

Protocols

Preparado por Jesús Salinas Revelles
El núcleo 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: configuración,
autenticación, permisos y transacciones que afectan a cualquier funcionalidad.
Esta infraestructura también protege al servidor de atarse a una implementación
específica (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 módulo con su
propia especificación e implementación.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

dentro de Alfresco. Se encarga de:
‣

Definición de la estructura de los contenidos.

‣

Creación, actualización y borrado de contenidos, metadatos asociados y
relaciones.

‣

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

‣

Renderizado de contenidos, locking, eventos, auditoría.

‣

Importación y exportación.

‣

Multi-idioma.

‣

Reglas y acciones.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Repositorio de contenidos
‣ Esquema del repositorio:

Content Repository

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Repositorio de contenidos
‣ El repositorio de contenidos proporciona una implementación de estos

servicios y los expone mediante:
‣

API de Alfresco,

‣

CMIS y

‣

API Java JSR-170.

‣ El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

Repositorio de contenidos
‣ Servicios:

Embeddeb APIs

Content Services
Control Services
Collaboration Services

Content Repository

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Repositorio de contenidos
‣ El motor de almacenamiento ofrece también mecanismos de consulta

construidas sobre Apache Lucene. Ofrece los siguientes tipos de
búsquedas:
‣

Filtrado por metadatos.

‣

Búsquedas por path.

‣

Búsquedas a texto completo.

‣

Cualquier combinación de las anteriores.

Preparado por Jesús Salinas Revelles
El núcleo 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 años y años de

experiencia (gestión de transacciones, escalado, administración).
Alfresco usa un nivel de abstracción 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 Jesús Salinas Revelles
El núcleo de Alfresco

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

contenidos de Alfresco soporta diferentes protocolos para la gestión
de carpetas y documentos.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

proyección 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 implementación 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. También existe herramientas que permite montar
servidores WebDAV como unidad de red.

‣ FTP (File Transfer Protocol) es un protoloco estándar de red para el

intercambio y manipulación de ficheros a través 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 Jesús Salinas Revelles
El núcleo de Alfresco

Protocolos
‣ IMAP (Internet Message Access Protocol) es un estándar 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 integración con la suite Microsoft Office.
Permite al usuario familiarizado con esta suite trabajar sobre
documentos dentro de Alfresco.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Los servicios de Alfresco
‣ Introducción.
‣ Servicios del repositorio de contenidos.
‣ Servicios de aplicación de contenidos.
‣ Las APIs de Alfresco.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ 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 públicos. Por ejemplo, los servicios Java son internos.

‣ Los servicios se dividen en dos categorías.
‣

Servicios del repositorio de contenidos.

‣

Servicios de aplicación de contenidos.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servicios del repositorio de contenidos
‣ Los servicios del repositorio de contenidos están escritos en Java y

son los servicios fundamentales para la gestión de contenidos.
‣

Gestión de ficheros y carpetas.

‣

Versionado y checkin/checkout.

‣

Auditoría.

‣

Autenticación, autorización y permisos.

‣

Modelado.

‣

Búsqueda.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servicios del repositorio de contenidos

Embeddeb APIs
Content Repository

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servicios de aplicación de contenidos
‣ Los servicios de apliación 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, extracción de
metadatos.

‣

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

‣

Servicios de colaboración: comentarios, etiquetado, actividades, etc.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servicios del repositorio de contenidos

Content Services
Control Services
Collaboration Services
Content Repository

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Estructura de los servicios
‣ La mayoría de los servicios se construyen en tres capas: núcleo Java,

servicio de script público y API RESTful.

Preparado por Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

Las APIs de Alfresco
Remote APIs

Embeddeb APIs

Preparado por Jesús Salinas Revelles
El núcleo 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 sólo lectura diseñada 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 combinándola con las plantillas.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Las APIs de Alfresco
‣ Alfresco permite definir extensiones sobre estas APIs:

Remote APIs

Extensions
Embeddeb APIs

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Las APIs de Alfresco
‣ APIs embebidas:

Preparado por Jesús Salinas Revelles
El núcleo 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 aplicación. Es RESTful, cada llamada
es una petición HTTP, es decir, no se necesita ningún lenguaje de programación

‣

RESTful.

‣

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Las APIs de Alfresco
‣ APIs remotas:

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Alfresco Java Foundation Services
‣ Introducción.
‣ Acceso a la API.
‣ Los servicios disponibles.
‣ Conceptos importantes.
‣ Servicio de nodos NodeService.
‣ Inyección de servicios.
‣ Construir nuevos servicios.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ 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 implementación adecuada del
servicio.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

código:
‣

Mediante Inyección de dependencias.

‣

Acceso manual mediante el método 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 Jesús Salinas Revelles
El núcleo 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 gestión de transacciones
TransactionService transactionService = serviceRegistry.getTransactionService();

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

org.alfresco.service, representa los servicios públicos del repositorio
de Alfresco.

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

mediante su interface:

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Acceso a la API
‣ El servicio de registro proporciona diferentes métodos para acceder a

los servicios:
‣

getActionService.

‣

getPermissionService.

‣

getAuthorityService.

‣

getFileFolderService.

‣

getScriptService.

‣

getWorkflowService.

‣

getNotificationService

‣

getAuditService

‣

...

Preparado por Jesús Salinas Revelles
El núcleo 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 métodos para acceder y
transformar el contenido de los nodos.

‣

SearchService: servicio de búsqueda.

‣

Servicio AuthenticationService.

‣

Servicio TransactionService.

‣

...

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

¿Cómo se crearon los servicios?
‣ Crear la implementación de la clase y la definición 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 Jesús Salinas Revelles
El núcleo de Alfresco

¿Cómo se crearon los servicios?
‣ Crear el proxy y la definición 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 Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo 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 más información en Alfresco Data Model API.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Los nodos en Alfresco
‣ El concepto StoreRef comprime dos elementos:
‣

Protocol del almacen: eso es el tipo de almacén.

‣

Store id: Idenficador del almacén.

‣ Ejemplos:

workspace://SpacesStore
archive://SpacesStore

Preparado por Jesús Salinas Revelles
El núcleo 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 almacén.

El tercero es el identificador del nodo dentro del almacén.
‣

UUID.

‣ Ejemplos:

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

Preparado por Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

Los modelos en Alfresco
‣ La identificación 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.

‣ Algún 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 Jesús Salinas Revelles
El núcleo de Alfresco

Servicio de nodos NodeService
‣ Se encuentra en el paquete org.alfresco.service.cmr.repository:

Preparado por Jesús Salinas Revelles
El núcleo 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 métodos:
‣

addAspect: este método añade un nuevo aspecto a un nodo dado.

‣

createNode: crea un nodo.

‣

deleteNode: borra un nodo.

‣

exists: verifica si existe un nodo.

‣

...

Preparado por Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

Servicio de nodos NodeService
‣ Más ejemplo en la siguiente url:
‣

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servicio de contenido ContentService
‣ Como ya se ha comentado antes, este servicio proporciona métodos

para acceder y transformar el contenido de los nodos.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Servicio de contenido ContentService
‣ Alguno de sus métodos:
‣

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
transformación.

Preparado por Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

Inyección de servicios
‣ Si necesitamos utilizar alguno de estos servicios dentro de cualquiera

de la extensiones desarrolladas en Alfresco, tendremos que aplicando
Inyección de Dependencias (gracias a Spring Framework), ponerlos a
disposición de nuestro código.

‣ 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 Jesús Salinas Revelles
El núcleo de Alfresco

Inyección 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 Jesús Salinas Revelles
El núcleo de Alfresco

Inyección de servicios
‣ Servicio de búsqueda: 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 Jesús Salinas Revelles
El núcleo de Alfresco

Inyección 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 Jesús Salinas Revelles
El núcleo de Alfresco

Inyección 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 Jesús Salinas Revelles
El núcleo de Alfresco

Inyección 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 Jesús Salinas Revelles
El núcleo de Alfresco

Construir nuevos servicios
‣ Los servicios de Alfresco se contruyen usando tres capa:
‣

Core Java,

‣

Un servicio script público.

‣

Una API RESTful.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Construir nuevos servicios
‣ Cada capa tiene las siguientes características:
‣

API Java embebida: es una API implementada en Java, encapsulando todas las
funcionalidades proporcionada por el servicio y es típicamente una collección de
métodos sin estado. Se considera una API sólo 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 diseña 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 Jesús Salinas Revelles
El núcleo de Alfresco

Alfresco API JavaScript
‣ Introducción.
‣ Objetos raíz (Root Scope Objects).
‣ ScriptNode API.
‣ API de creación y modificación.
‣ Ejemplos.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ 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 búsquedas incluyendo búsquedas a texto completo con resultados
ordenados.

‣

Navegando por jerarquía de nodos, examinar y modificar el valor de propiedades,
aspectos y asociaciones.

‣

Transformar y manipular contenido.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Usando esta API podemos (cont.):
‣

Procesar proyectos web WCM y objetos AVM.

‣

Crear grupos, personas y modificar permisos.

‣ Además, 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 librerías de scripts.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ 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.

‣

Búsquedas.

‣

People API.

‣

Funcionalidades relacionadas con logging.

‣ Además es posible añadir otros objetos como objetos raíz para usar en

nuestros scripts.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Objetos raíz (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 disposición diferentes APIs para manejar estos

objetos:
‣

ScriptContent API.

‣

Permission and Security API.

‣

Check in/Check out API.

‣

Versions API.

‣

Transformation API.

‣

...

‣ Para más información http://wiki.alfresco.com/wiki/

4.0_JavaScript_API.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Objetos raíz (Root Scope Objects)

Preparado por Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

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

d:noderef se convierte automáticamente 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 Jesús Salinas Revelles
El núcleo de Alfresco

ScriptNode API

Preparado por Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

ScriptNode API

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

API de creación y modificación
‣ La ScriptNode API no permite modificar muchas propiedades puesto

que son de sólo lectura. Sin embargo provee alternativas para hacerlo.

‣ La API de creación y modificación nos ofrece cantidad de funciones

para realizar este tipo de operaciones.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

API de creación y modificación

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

API de creación y modificación

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

API de creación y modificación

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

API de creación y modificación

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

API de creación y modificación
‣ Ejemplo: se añade un aspecto. El método addAspect realiza esta

operación.

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 Jesús Salinas Revelles
El núcleo de Alfresco

API de creación y modificación
‣ Ejemplo: se crea un documento en la carpeta de usuario.
‣

El método createFile realiza esta operación.
var doc = userhome.createFile("checkmeout.txt");
doc.content = "original text";

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

API de creación y modificación
‣ Ejemplo: se crean nodos mediante diferentes estrategias.
‣

El método createFile realiza esta operación.
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 Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

Ejemplos
‣ Crear el backup de un documento:
‣

Se utilizar el objeto raíz space y apoyándose en el método 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 método hasPermission comprueba si el usuario tiene permisos para crear hijos.
El método createFolder crea la carpeta
if (backupFolder == null && space.hasPermission("CreateChildren"))
{
// create the folder for the first time
backupFolder = space.createFolder("Backup");
}

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Ejemplos
‣ Para ver más ejemplos:
‣

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Alfresco Freemarker Templating API
‣ Introducción.
‣ Lenguaje de plantillas Freemarker.
‣ Modelo de datos.
‣ TemplateNode Model API.
‣ Más APIs.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Una plantilla es un documento que puede aplicarse a uno o varios

objetos (por ejemplo, uno o más documentos de un repositorio) para
generar otro documento. FreeMarker o XSLT son plantillas.

‣ La plantilla se escribe en un lenguage de plantillas específico.
‣ 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 Jesús Salinas Revelles
El núcleo de Alfresco

Lenguaje de plantillas Freemarker
‣ Introducción.
‣ Trabajando con variables.
‣ Operadores de comparación.
‣ Operadores lógicos.
‣ Operadores numéricos.
‣ Operador concatenación.
‣ Vectores.
‣ Estructuras selectivas.
‣ Iteraciones.
‣ Directivas en Freemarker.
Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Alfresco trabaja por defecto con Freemarker.
‣ La extensión 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 Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ FreeMarker es un motor de plantillas basado en Java. Se definen

plantillas que no son más que ficheros de texto que contienen la salida
deseada, excepto determinadas variables ${name}, y directivas (if,
bucles, etc).

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Trabajando con variables
‣ Definición de variable:

<#assign nombreVariable [= valor]>
‣ Ejemplo:

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Trabajando con variables
‣ Referencia de variables:
${nombreVariable}

‣ Ejemplo:

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Operadores de comparación
‣ = y == son equivalentes.
‣ !=

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Operadores de comparación
‣ <, <=, >= y >
‣ Cuidado con > y >=

<#if (x > y)>
...
‣ Podemos usar &gt; y &lt;

<#if (x &gt; y)>
...
‣ También se puede utilizar lt, lte, gt y gte

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Operadores lógicos
‣ Función OR: ||
‣ Función AND: &&
‣ Función 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 Jesús Salinas Revelles
El núcleo de Alfresco

Operadores numéricos
‣ Suma: +, Resta: -, Multiplicación: *, División: /, Módulo (resto): %
‣ Ejemplos:

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Operador concatenación
‣ Operador suma.

${3 * "5"}

<#-- Error --> 

${3 + "5"} 

<#-- OK --> 

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Vectores
‣ Sintaxis:

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

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Vectores
‣ Propiedades:
‣

first, last

‣

join

‣

seq_contains, seq_index_of, seq_last_index_of

‣

reverse

‣

size

‣

sort, sort_by

‣

chunk

‣ Más información:
‣

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

Preparado por Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

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

Tiene dos variables especiales disponibles dentro del bucle:
‣

item_index: valor numérico 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 Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Más información
‣ http://freemarker.org/docs/index.html

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Modelo de datos
‣ El modelo es un objeto o jerarquía de objetos que puede utilizar la

plantilla para generar la salida.

‣ Se muestran a continuación:

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Modelo por defecto

Preparado por Jesús Salinas Revelles
El núcleo 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, ...

‣ Más información
‣

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

Preparado por Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

TemplateNode Model API
‣ Ejemplos: Para acceder a una propiedad, sólo la segunda opción es

correcta.

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

TemplateNode Model API
‣ Ejemplos: Iteración 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 Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

TemplateNode Model API
‣ Ejemplo:
‣

El método childrenByLuceneSearch devuelve un mapa con el resultado de la
búsqueda contra el repositorio completo basado en la cadena de búsqueda
Lucene.

userhome.childrenByLuceneSearch (‘cadenaLucene’)
‣

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Más APIs
‣ Tenemos a nuestra disposición otras APIs responsables de:
‣

Versionado.

‣

Clasificación.

‣

Procesado XML.

‣

Flujos de trabajo.

‣

...

‣ Para más información:
‣

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Subsistemas
‣ Introducción.
‣ Listado de subsistemas.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Un subsistema es un módulo configurable responsable de una parte de

una funcionalidad de Alfresco. Típicamente, un subsistema envuelve
un área funcional opcional, tales como, IMAP binding o con varias
implementaciones alternativas como el subsistema de autenticación.

‣ Podemos imaginarlo como un miniservidor embebido dentro del

servidor principal. Se puede arrancar y parar de forma independiente y,
también se configura de forma independiente.

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

configuración.

‣ 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 comunicación entre ellos sólo puede realizarse
mediante la importación explícita de interfaces.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Esto significa que:
‣

Podemos tener múltiples instancias del mismo tipo: la misma plantilla de
configuración de Spring puede inicializarse con diferentes parámetros en diferentes
instancias. Esto permite, por ejemplo, la definición de una cadena de múltiples
subsistemas de autenticación gracias a la edición de ficheros de propiedades (o
JMX para la versión empresarial).

‣

Los subsistemas puede controlarse vía JMX (versión 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 específicas ocultas.

‣

Pueden cambiar de implementación.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Seguridad y autenticación en Alfresco
‣ Introducción.
‣ Seguridad en Alfresco.
‣ Autenticación.
‣ Autorización.
‣ Definición de permisos.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ En este capítulo vamos a hablar sobre la autenticación y las

funcionalidades contruidas sobre Alfresco para gestionar usuarios y
grupos, autenticación de usuarios, permisos y control de acceso.

‣ También analizaremos cómo personalizar Alfresco para que trabaje

con módulos, tales como, LDAP, NTLM, Kerberos y otros protocolos de
autenticación.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ La primera vez que se accede a una instalación 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 contraseña.

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

de administración para crear nuevos usuarios y asignar contraseñas.

‣ Por defecto, puedes gestionar los usuarios base y sus contraseñas

manualmente, y los usuarios no autenticados tendrá acceso limitado
como usuarios guest.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ 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 autenticación automática usando las credenciales del sistema operativo o
un servidor de SSO para eliminar la necesidad de una página de login.

‣

Delegar la responsabilidad de la autenticación en un servidor de directorio,
eliminando así la necesidad de configurar manualmente usuarios desde la consola
de administración.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

autenticación y autorización.

‣ Alfresco normalmente trabaja con el concepto de usuario y sus

credenciales pueden encontrarse en diferentes formatos y validarse de
diferentes formas. Por ejemplo, una contraseña puede validarse contra
un LDAP o un ticket de Kerberos puede validarse contra Microsoft
Active Directory Server.

‣ Alfresco incluye:
‣

Implementación de autenticación interna basada en contraseñas.

‣

Soporte para integrarse con diferentes entornos de autenticación externos.

‣

La posibilidad de generar una integración de autenticación propia.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Seguridad en Alfresco
‣ La autorización determina qué operaciones puede realizar un usuario

autenticado. Existen diferentes modelos de autenticación: Role Based
Access Control (RBAC), UNIX-style Access Control Lists (ACLs),
extended ACLs, Windows-style ACLs y otros muchos.

‣ La autorización 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 operación. Las ACLs se usan para
determinar si un usuario dado puede ejecutar la operación 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 método público

asociado a un bean. La invocación del método comprueba que el
usuario tiene permisos para realizar esta operación.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Seguridad en Alfresco
‣ Por convención, los beans que ofrecen estos servicios públicos son los

beans cuyos nombres empiezan en mayúscula, por ejemplo,
NodeService, SearchService o ContentService.

‣ La configuración de requisitos de seguridad para estos beans se

definen en ficheros xml. Un determinado método 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 métodos que devuelven colecciones o arrays

pueden filtrarse en función de los permisos del usuario. Si los
requisitos de autorización no se cumplen, la llamada al método fallará
y lanzará la excepción AccessDeniedException.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Seguridad en Alfresco
‣ La asignación 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

automáticamente 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 Jesús Salinas Revelles
El núcleo de Alfresco

Seguridad en Alfresco
‣ La configuración XML para los permisos también 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 alfrescomodelpermissionDefinitions.xml -->
<globalPermission permission="Read" authority="GROUP_EVERYONE" />

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Autenticación
‣ Introducción.
‣ Subsistemas de autenticación.
‣ Tipos de subsistemas.
‣ Cadena de autenticación.
‣ AlfrescoNTML.
‣ pass-through.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ La autenticación es una de las categorías de subsistemas que

encontramos en Alfresco.

‣ El subsistema de autenticación es una pila coordinada de

componentes compatibles responsables de proporcionar
funcionalidades de autenticación e identificación en Alfresco.

‣ Alfresco ofrece diferentes implementaciones del subsistema de

autenticación.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Subsistemas de autenticación
‣ La autenticación y la gestión de identidades se gestiona gracias a un

conjunto de módulos software configurables llamados subsistemas.

‣ El subsistema de autenticación proprociona las siguientes funciones a

Alfresco:
‣

Autenticación basada en contraseña para navegador, protocolo Microsoft
SharePoint, FTP y WebDAV.

‣

Autenticación para los sistemas de ficheros CIFS y NFS.

‣

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

‣

Exportación de registro de usuarios.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Tipos de subsistemas

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Cadena de autenticación
‣ Es muy habitual que al menos uno de los tipos anteriormente

comentados nos permita integrar Alfresco con el servidor de
autenticación que se utiliza en nuestra organización.

‣ Sin embargo, puede ocurrir que la integración con alguno de estos

sistemas no sea suficiente. Por diferentes razones, puede ocurrir que
queramos mezclar diferentes protocolos de autenticación.

‣ Esta es la razón por la cuál Alfresco ha diseñado una cadena de

autenticación. No es más que una lista de subsistemas de
autenticación 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 configuración del usuario.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Cadena de autenticación
‣ Configuración de la cadena de autenticación:
‣

Edición del fichero alfresco-global.properties que se encuentra en la ruta
<installLocation>sharedclasses.

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

‣

La propiedad authentication.chain declara la cadena de autenticación de Alfresco.
Su valor será una lista separada por comas de instancias de autenticación.

‣

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

AlfrescoNTML
‣ El mecanismo de autenticación que ofrece Alfresco, por defecto, es

una cadena de autenticación con una única instancia de un
subsistema de tipo alfrescoNtlm.

‣ El proceso de autentición se basa en la información de usuarios y

contraseñas almacenada en el repositorio de Alfresco.

‣ Proporciona soporte a autenticación mediante formulario y SSO

basada en NTLM, además de, autenticación mediante servidor CIFS.

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

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

AlfrescoNTML
‣ Edición del fichero alfresco-global.properties que se encuentra en la

ruta <installLocation>sharedclasses.
authentication.chain=alfinst:alfrescoNtlm

‣ La propiedad authentication.chain declara la cadena de autenticación

de Alfresco. Su valor será una lista separada por comas de instancias
de autenticación.

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

subsistema.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

AlfrescoNTML
‣ Configuración de la instancia:
‣

Debemos crear un directorio dentro de la carpeta de extensiones de Alfresco,
<installLocation>sharedclassesalfrescoextensionsubsystemsAuthentication
alfrescoNtlmalfinst

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

pass-through
‣ El subsistema passthru puede reemplazar el sistema de autenticación

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, autenticación
CIFS mediante servidores CIFS.

‣ Sólo ofrece soporte a NTLM v.1. La versión 2 de NTLM ha sido

diseñado para evitar ataques "man-in-the-middle", no es posible
implementarla en pass-through.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

LDAP
‣ El sistema LDAP ofrece dos funciones principales:
‣

Autenticación de usuario: comprobación del id de usuario y contraseña usando un
LDAP.

‣

Exportación del registro de usuario: se expone información sobre usuarios y grupos
para la sincronización del subsistema.

‣ Estas funciones pueden utilizarse de forma aislado o en conjunción.

Cuando la autenticación se usa sin la exportación de registro de
usuarios, los objetos se crean automáticamente para todos los
usuarios que hacen log in.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Kerberos
‣ El servicio de autenticación y autorización Java (JAAS) se usa dentro

del subsistema Kerberos para soportar autenticación Kerberos
mediante nombres de usuarios y contraseña.

‣ Debemos seleccionar Kerberos contra un servidor Active Directory.
‣ Los incovenientes de usar autenticación LDAP contra Active Directory

comparados con JAAS/Kerberos son:
‣

La solución más simple es usar el protocolo de autenticación SIMPLE LDAP, usado
con SSL.

‣

AD necesita un setup especial para usar autentiación digest MD5.

‣

LDAP puede usar GSSAPI y Kerberos, sería equivalente pero más complejo a la
hora de aplicar su configuración.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

External
‣ El subsistema external se usa con cualquier sistema de autenticación

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 método HttpServletRequest.getRemoteUser().

‣ Como esta es la forma estándar de propagar las identidades de los

usuarios a los servlets, sería compatible con un número de soluciones
SSO, incluyendo Central Authentication Service (CAS).

‣ La activación de autenticación external hace que Alfresco acepte

tokens de autenticación externos, debemos asegurar que no se
producen accesos directos a los puertos HTTP o AJP de Alfresco.

Preparado por Jesús Salinas Revelles
El núcleo 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
dinámica. Las autoridades dinámicas son usadas por roles internos.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Definición de permisos
‣ Los permisos se definen en un fichero de configuración XML. El fichero

por defecto se encuentra en:

<installLocation>tomcatwebappsalfrescoWEB-INFclassesalfrescomodel
permissionDefinitions.xml

‣ Esta configuración puede ser reemplazada o extendida seguiendo la

DTD definida en:

<installLocation>tomcatwebappsalfrescoWEB-INFclassesalfrescomodel
permissionSchema.dtd

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Definición de permisos
‣ Ejemplo: definición 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 Jesús Salinas Revelles
El núcleo de Alfresco

Extension classpath
‣ Introducción.
‣ Sintaxis.
‣ Ejemplo.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ El fichero alfresco-global.properties sólo puede usarse para definir

propiedades globales a todo el sistema.

‣ Pero la verdad es que también podemos controlar propiedades que

afectan a subsistemas, por ejemplo, los subsistemas de autenticación.

‣ 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 Jesús Salinas Revelles
El núcleo de Alfresco

Sintaxis
‣ Añadir un fichero de propiedades al classpath global del servidor.
‣

Para el caso de Tomcat sería $TOMCAT_HOME/shared/classes

‣ Se crea la ruta que coincide con el siguiente patrón para sobreescribir

las propiedades específicas 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 Jesús Salinas Revelles
El núcleo de Alfresco

Ejemplo
‣ Si la cadena de autenticación fuera la siguiente:
authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap1:ldap

‣ Entonces podríamos sobreescribir propiedades del subsistema

alfrescoNtlm1 en el siguiente fichero:

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

Preparado por Jesús Salinas Revelles
El núcleo 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) tendríamos que añadir propiedades en el siguiente fichero:

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

Preparado por Jesús Salinas Revelles
El núcleo 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 Jesús Salinas Revelles
El núcleo de Alfresco

Extensiones en Alfresco: empaquetado y despliegue
‣ Introducción.
‣ Ficheros sin empaquetar o zips.
‣ Ficheros JAR.
‣ Ficheros AMP.
‣ Rutas de despliegue.
‣ Carpeta Shared Classpath.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Existen varias formas de empaquetar extensiones de Alfresco.

Pasamos a describir cada una de ellas, incluyendo el empaquetado
como módulo usando ficheros AMP.

‣ El mecanismo de empaquetado seleccionado depende mucho del tipo

de extensión que se vaya a desarrollar.

‣ Para una extensión sencilla que consiste en uno o dos web scripts, la

mejor opción será un fichero JAR que contenga los scripts,
colocándolo en el classpath del servidor, por ejemplo, en tomcat $
{tomcat_home}/shared/lib.

‣ Para extensiones más complejas, el desarrollo de un módulo sería la

mejor opción, éste se empaqueta como fichero AMP y posteriormente
se aplica al war en cuestión (alfresco.war or share.war).

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Introducción
‣ Las opciones de empaquetado son:
‣

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

‣

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

‣

Ficheros JAR: las extensiones se pueden empaquetar siguiendo el formato
estándar 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 más
recomendable de despliegue de extensiones en entornos de producción es ésta.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Ficheros sin empaquetar o zips
‣ La técnica de empaquetado más simple es copiar o descomprimir los

ficheros de extensión en la jerarquía de directorios de Alfresco.
Podemos mejorar el proceso utilizando algún 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 instalación de Alfresco.

‣ Esta técnica 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 aplicación (Ant, Bash, Maven o lenguajes de script).

‣ Mover ficheros independientes tiene la ventaja de ser rápido y fácil de

entender, pero es mejor idea empaquetar en zip y, posteriormente,
descomprimir en el sistema.

‣ Esta técnica no se recomienda en entornos QA o producción.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

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

extensiones. Una vez que la extensión se empaqueta en formato JAR,
se puede cargar en las rutas estándares de classpath del servidor. Por
ejemplo, para Tomcat sería ${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 múltiples
personalizaciones aisladas unas de otras y un orden de selección

‣ Los ficheros estáticos (JavaScript, CSS, o imágenes) pueden colocarse

en el web root de Share, aunque también pueden empaquetarse dentro
de JARs. Para desplegar estos JARs, se recomienda colocarlos en uno
o más ficheros AMP, y desplegarlos posteriormente en Share.

‣ La instalación directa de JARs en la estructura de directorios de la

aplicación no es una práctica recomendable, el servidor de
aplicaciones puede sobreescribir los cambios.

Preparado por Jesús Salinas Revelles
El núcleo 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 específico 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 instalación 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 Jesús Salinas Revelles
El núcleo 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 extensión a $CATALINA_HOME/webapps/alfresco/WEB-INF/ y
reinciar Tomcat. Si por cualquier razón el servidor redespliega alfresco.war, las
extensiones serán borradas y tendremos que redesplegarlas otra vez.

‣

Una solución es cambiar permanently exploded deployment. Crea un directorio
llamado alfresco en el directorio webapps y extrae alfresco.war en él. Después
copia los ficheros de extensión a $CATALINA_HOME/webapps/alfresco/WEB-INF/ y
reinicia.

Preparado por Jesús Salinas Revelles
El núcleo de Alfresco

Carpeta Shared Classpath
‣ Muchas personalizaciones se pueden colocar en el servidor de

aplicaciones. Por ejemplo:
‣

Ficheros de configuración 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 Jesús Salinas Revelles
El núcleo de Alfresco

Carpeta Shared Classpath
‣ En esta carpeta encontramos subdirectorios estándares:
‣

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 Jesús Salinas Revelles
El núcleo de Alfresco

Classpath específico WAR
‣ Una mejor ruta para personalizaciones sería:
‣

$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 común aplicar parches sobre los war de Explorer y Share para

poner nuestro código en el lugar adecuado preservándolo 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 Jesús Salinas Revelles

Más contenido relacionado

La actualidad más candente

Tips and tricks for complex migrations to SharePoint Online
Tips and tricks for complex migrations to SharePoint OnlineTips and tricks for complex migrations to SharePoint Online
Tips and tricks for complex migrations to SharePoint OnlineAndries den Haan
 
SAP Document Management System Integration with Content Servers
SAP Document Management System Integration with Content Servers SAP Document Management System Integration with Content Servers
SAP Document Management System Integration with Content Servers Verbella CMG
 
SharePoint Information Architecture Best Practices
SharePoint Information Architecture Best PracticesSharePoint Information Architecture Best Practices
SharePoint Information Architecture Best PracticesStephanie Lemieux
 
A comprehensive guide to Salesforce Org Strategy
A comprehensive guide to Salesforce Org StrategyA comprehensive guide to Salesforce Org Strategy
A comprehensive guide to Salesforce Org StrategyGaytri khandelwal
 
Planning Your Migration to SharePoint Online #SPBiz60
Planning Your Migration to SharePoint Online #SPBiz60Planning Your Migration to SharePoint Online #SPBiz60
Planning Your Migration to SharePoint Online #SPBiz60Christian Buckley
 
Mainframe Modernization with Precisely and Microsoft Azure
Mainframe Modernization with Precisely and Microsoft AzureMainframe Modernization with Precisely and Microsoft Azure
Mainframe Modernization with Precisely and Microsoft AzurePrecisely
 
TOGAF Reference Models
TOGAF Reference ModelsTOGAF Reference Models
TOGAF Reference ModelsPaul Sullivan
 
Migration From Oracle to PostgreSQL
Migration From Oracle to PostgreSQLMigration From Oracle to PostgreSQL
Migration From Oracle to PostgreSQLPGConf APAC
 
ELK, a real case study
ELK,  a real case studyELK,  a real case study
ELK, a real case studyPaolo Tonin
 
Oracle Application Express (APEX) and Microsoft Sharepoint integration
Oracle Application Express (APEX) and Microsoft Sharepoint integrationOracle Application Express (APEX) and Microsoft Sharepoint integration
Oracle Application Express (APEX) and Microsoft Sharepoint integrationDimitri Gielis
 
Building a strong Data Management capability with TOGAF and ArchiMate
Building a strong Data Management capability with TOGAF and ArchiMateBuilding a strong Data Management capability with TOGAF and ArchiMate
Building a strong Data Management capability with TOGAF and ArchiMateBas van Gils
 
Learn about Tibco Designer
Learn about Tibco Designer Learn about Tibco Designer
Learn about Tibco Designer Cblsolutions.com
 
Log management with ELK
Log management with ELKLog management with ELK
Log management with ELKGeert Pante
 
SharePoint Design & Configuration Best Practices & Guidelines - Innovate Vanc...
SharePoint Design & Configuration Best Practices & Guidelines - Innovate Vanc...SharePoint Design & Configuration Best Practices & Guidelines - Innovate Vanc...
SharePoint Design & Configuration Best Practices & Guidelines - Innovate Vanc...Innovate Vancouver
 
Building Data Lakes in the AWS Cloud
Building Data Lakes in the AWS CloudBuilding Data Lakes in the AWS Cloud
Building Data Lakes in the AWS CloudAmazon Web Services
 
Guiding a Successful SharePoint Implementation
Guiding a Successful SharePoint ImplementationGuiding a Successful SharePoint Implementation
Guiding a Successful SharePoint ImplementationRandy Williams
 
Getting started with Enterprise Application Integration (EAI) using Enterpris...
Getting started with Enterprise Application Integration (EAI) using Enterpris...Getting started with Enterprise Application Integration (EAI) using Enterpris...
Getting started with Enterprise Application Integration (EAI) using Enterpris...Tamim Khan
 
Software AG’s webMethods Integration Cloud: Integrate Cloud Apps with ease
Software AG’s webMethods Integration Cloud: Integrate Cloud Apps with ease Software AG’s webMethods Integration Cloud: Integrate Cloud Apps with ease
Software AG’s webMethods Integration Cloud: Integrate Cloud Apps with ease Kellton Tech Solutions Ltd
 
Plan to Migrate to SharePoint Online
Plan to Migrate to SharePoint OnlinePlan to Migrate to SharePoint Online
Plan to Migrate to SharePoint OnlineErica Toelle
 

La actualidad más candente (20)

Tips and tricks for complex migrations to SharePoint Online
Tips and tricks for complex migrations to SharePoint OnlineTips and tricks for complex migrations to SharePoint Online
Tips and tricks for complex migrations to SharePoint Online
 
SAP Document Management System Integration with Content Servers
SAP Document Management System Integration with Content Servers SAP Document Management System Integration with Content Servers
SAP Document Management System Integration with Content Servers
 
SharePoint Information Architecture Best Practices
SharePoint Information Architecture Best PracticesSharePoint Information Architecture Best Practices
SharePoint Information Architecture Best Practices
 
A comprehensive guide to Salesforce Org Strategy
A comprehensive guide to Salesforce Org StrategyA comprehensive guide to Salesforce Org Strategy
A comprehensive guide to Salesforce Org Strategy
 
Informatica Cloud Overview
Informatica Cloud OverviewInformatica Cloud Overview
Informatica Cloud Overview
 
Planning Your Migration to SharePoint Online #SPBiz60
Planning Your Migration to SharePoint Online #SPBiz60Planning Your Migration to SharePoint Online #SPBiz60
Planning Your Migration to SharePoint Online #SPBiz60
 
Mainframe Modernization with Precisely and Microsoft Azure
Mainframe Modernization with Precisely and Microsoft AzureMainframe Modernization with Precisely and Microsoft Azure
Mainframe Modernization with Precisely and Microsoft Azure
 
TOGAF Reference Models
TOGAF Reference ModelsTOGAF Reference Models
TOGAF Reference Models
 
Migration From Oracle to PostgreSQL
Migration From Oracle to PostgreSQLMigration From Oracle to PostgreSQL
Migration From Oracle to PostgreSQL
 
ELK, a real case study
ELK,  a real case studyELK,  a real case study
ELK, a real case study
 
Oracle Application Express (APEX) and Microsoft Sharepoint integration
Oracle Application Express (APEX) and Microsoft Sharepoint integrationOracle Application Express (APEX) and Microsoft Sharepoint integration
Oracle Application Express (APEX) and Microsoft Sharepoint integration
 
Building a strong Data Management capability with TOGAF and ArchiMate
Building a strong Data Management capability with TOGAF and ArchiMateBuilding a strong Data Management capability with TOGAF and ArchiMate
Building a strong Data Management capability with TOGAF and ArchiMate
 
Learn about Tibco Designer
Learn about Tibco Designer Learn about Tibco Designer
Learn about Tibco Designer
 
Log management with ELK
Log management with ELKLog management with ELK
Log management with ELK
 
SharePoint Design & Configuration Best Practices & Guidelines - Innovate Vanc...
SharePoint Design & Configuration Best Practices & Guidelines - Innovate Vanc...SharePoint Design & Configuration Best Practices & Guidelines - Innovate Vanc...
SharePoint Design & Configuration Best Practices & Guidelines - Innovate Vanc...
 
Building Data Lakes in the AWS Cloud
Building Data Lakes in the AWS CloudBuilding Data Lakes in the AWS Cloud
Building Data Lakes in the AWS Cloud
 
Guiding a Successful SharePoint Implementation
Guiding a Successful SharePoint ImplementationGuiding a Successful SharePoint Implementation
Guiding a Successful SharePoint Implementation
 
Getting started with Enterprise Application Integration (EAI) using Enterpris...
Getting started with Enterprise Application Integration (EAI) using Enterpris...Getting started with Enterprise Application Integration (EAI) using Enterpris...
Getting started with Enterprise Application Integration (EAI) using Enterpris...
 
Software AG’s webMethods Integration Cloud: Integrate Cloud Apps with ease
Software AG’s webMethods Integration Cloud: Integrate Cloud Apps with ease Software AG’s webMethods Integration Cloud: Integrate Cloud Apps with ease
Software AG’s webMethods Integration Cloud: Integrate Cloud Apps with ease
 
Plan to Migrate to SharePoint Online
Plan to Migrate to SharePoint OnlinePlan to Migrate to SharePoint Online
Plan to Migrate to SharePoint Online
 

Destacado

Destacado (6)

CMIS is here, did you know?
CMIS is here, did you know?CMIS is here, did you know?
CMIS is here, did you know?
 
Athento iDM
Athento iDMAthento iDM
Athento iDM
 
CMIS-OASIS. Otro estándar para repositorios y gestores de contenidos
CMIS-OASIS. Otro estándar para repositorios y gestores de contenidosCMIS-OASIS. Otro estándar para repositorios y gestores de contenidos
CMIS-OASIS. Otro estándar para repositorios y gestores de contenidos
 
Athento LIMS
Athento LIMSAthento LIMS
Athento LIMS
 
Contenidos personalizados en alfresco ecm
Contenidos personalizados en alfresco ecmContenidos personalizados en alfresco ecm
Contenidos personalizados en alfresco ecm
 
Actividad teorico practica paquetes especializados
Actividad teorico practica paquetes especializadosActividad teorico practica paquetes especializados
Actividad teorico practica paquetes especializados
 

Similar a El core de Alfresco 4.2

Alfresco. La gestión de contenidos empresarial
Alfresco. La gestión de contenidos empresarialAlfresco. La gestión de contenidos empresarial
Alfresco. La gestión de contenidos empresarialCLEFormación
 
Alfresco- Trabajo de Grado
Alfresco- Trabajo de Grado Alfresco- Trabajo de Grado
Alfresco- Trabajo de Grado Andy Lopez
 
Consejos de seguridad con Alfresco
Consejos de seguridad con AlfrescoConsejos de seguridad con Alfresco
Consejos de seguridad con AlfrescoToni de la Fuente
 
Dev ops with Data
Dev ops with DataDev ops with Data
Dev ops with Datannakasone
 
Presentación gestión del conocimiento alfresco vfinal
Presentación gestión del conocimiento alfresco vfinalPresentación gestión del conocimiento alfresco vfinal
Presentación gestión del conocimiento alfresco vfinalJaime Lastra
 
SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)
SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)
SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)juandanielp
 
Plataformas de desarrollo web
Plataformas de desarrollo web Plataformas de desarrollo web
Plataformas de desarrollo web Andy015
 
Gestión documental colaborativa con Alfresco ECM
Gestión documental colaborativa con Alfresco ECMGestión documental colaborativa con Alfresco ECM
Gestión documental colaborativa con Alfresco ECMzylk net
 
Comparativa entre Alfresco Enterprise vs Community
Comparativa entre Alfresco Enterprise vs Community Comparativa entre Alfresco Enterprise vs Community
Comparativa entre Alfresco Enterprise vs Community Toni de la Fuente
 
Simplex portal 4.0 - Detalle de funcionalidades
Simplex portal 4.0 - Detalle de funcionalidadesSimplex portal 4.0 - Detalle de funcionalidades
Simplex portal 4.0 - Detalle de funcionalidadesSIMPLEXPORTAL
 
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Francisco Javier Toscano Lopez
 
201406 presentación alfresco healthpoint
201406 presentación alfresco healthpoint201406 presentación alfresco healthpoint
201406 presentación alfresco healthpointAquilino García Martos
 

Similar a El core de Alfresco 4.2 (20)

Alfresco. La gestión de contenidos empresarial
Alfresco. La gestión de contenidos empresarialAlfresco. La gestión de contenidos empresarial
Alfresco. La gestión de contenidos empresarial
 
Alfresco
AlfrescoAlfresco
Alfresco
 
Alfresco- Trabajo de Grado
Alfresco- Trabajo de Grado Alfresco- Trabajo de Grado
Alfresco- Trabajo de Grado
 
Dossier
DossierDossier
Dossier
 
Alfresco - Infraestructura - ALKAID.cr
Alfresco - Infraestructura - ALKAID.crAlfresco - Infraestructura - ALKAID.cr
Alfresco - Infraestructura - ALKAID.cr
 
Consejos de seguridad con Alfresco
Consejos de seguridad con AlfrescoConsejos de seguridad con Alfresco
Consejos de seguridad con Alfresco
 
Presentación gestión del conocimiento alfresco vfinal
Presentación gestión del conocimiento alfresco vfinalPresentación gestión del conocimiento alfresco vfinal
Presentación gestión del conocimiento alfresco vfinal
 
Dev ops with Data
Dev ops with DataDev ops with Data
Dev ops with Data
 
Presentación gestión del conocimiento alfresco vfinal
Presentación gestión del conocimiento alfresco vfinalPresentación gestión del conocimiento alfresco vfinal
Presentación gestión del conocimiento alfresco vfinal
 
Alfresco Day Santiago - Apiux
Alfresco Day Santiago - ApiuxAlfresco Day Santiago - Apiux
Alfresco Day Santiago - Apiux
 
SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)
SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)
SAMP (OpenSolaris + Apache + MySQL + PHP / Python / Perl / Drupal / Django)
 
Plataformas de desarrollo web
Plataformas de desarrollo web Plataformas de desarrollo web
Plataformas de desarrollo web
 
Gestión documental colaborativa con Alfresco ECM
Gestión documental colaborativa con Alfresco ECMGestión documental colaborativa con Alfresco ECM
Gestión documental colaborativa con Alfresco ECM
 
Comparativa entre Alfresco Enterprise vs Community
Comparativa entre Alfresco Enterprise vs Community Comparativa entre Alfresco Enterprise vs Community
Comparativa entre Alfresco Enterprise vs Community
 
Alfresco
AlfrescoAlfresco
Alfresco
 
alamcenamiento en la nube.ppt
alamcenamiento en la nube.pptalamcenamiento en la nube.ppt
alamcenamiento en la nube.ppt
 
Cloud Foundry 101
Cloud Foundry 101Cloud Foundry 101
Cloud Foundry 101
 
Simplex portal 4.0 - Detalle de funcionalidades
Simplex portal 4.0 - Detalle de funcionalidadesSimplex portal 4.0 - Detalle de funcionalidades
Simplex portal 4.0 - Detalle de funcionalidades
 
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
 
201406 presentación alfresco healthpoint
201406 presentación alfresco healthpoint201406 presentación alfresco healthpoint
201406 presentación alfresco healthpoint
 

Más de Ematiz Tecnología, S.L.

Más de Ematiz Tecnología, S.L. (10)

Perfiles en maven
Perfiles en mavenPerfiles en maven
Perfiles en maven
 
Filtrado de recursos en Maven
Filtrado de recursos en MavenFiltrado de recursos en Maven
Filtrado de recursos en Maven
 
Estructura de un informe en JasperReports
Estructura de un informe en JasperReportsEstructura de un informe en JasperReports
Estructura de un informe en JasperReports
 
Introducción a JasperReports
Introducción a JasperReportsIntroducción a JasperReports
Introducción a JasperReports
 
Liferay 6 1, Internacionalización en nuestros desarrollos
Liferay 6 1, Internacionalización en nuestros desarrollosLiferay 6 1, Internacionalización en nuestros desarrollos
Liferay 6 1, Internacionalización en nuestros desarrollos
 
Liferay 6.1 Service Builder
Liferay 6.1  Service BuilderLiferay 6.1  Service Builder
Liferay 6.1 Service Builder
 
Liferay 6.1 Campos personalizados desde el panel de control
Liferay 6.1  Campos personalizados desde el panel de controlLiferay 6.1  Campos personalizados desde el panel de control
Liferay 6.1 Campos personalizados desde el panel de control
 
Liferay versión 6.1 Trabajando con LDAP, introducción
Liferay versión 6.1  Trabajando con LDAP, introducciónLiferay versión 6.1  Trabajando con LDAP, introducción
Liferay versión 6.1 Trabajando con LDAP, introducción
 
Liferay 6.1 Campos personalizados
Liferay 6.1 Campos personalizadosLiferay 6.1 Campos personalizados
Liferay 6.1 Campos personalizados
 
Trabajando con imagenes en liferay 6.1
Trabajando con imagenes en liferay 6.1Trabajando con imagenes en liferay 6.1
Trabajando con imagenes en liferay 6.1
 

Último

Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 

Último (13)

Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

El core de Alfresco 4.2

  • 2. El núcleo de Alfresco Índice del capítulo ‣ Introducción 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 Jesús Salinas Revelles
  • 3. El núcleo de Alfresco Introducción a Alfresco ‣ ¿Qué es Alfresco? ‣ Algunas características técnicas del proyecto Alfresco. ‣ Documentación. ‣ Funcionalidades más importantes de cara a los usuarios. ‣ Arquitectura técnica. ‣ Componentes y servicios. Preparado por Jesús Salinas Revelles
  • 4. El núcleo de Alfresco ¿Qué es Alfresco? ‣ Alfresco es un sistema de Gestión de Contenido Empresarial (ECM), normalmente utilizado para Gestión de Documentos Digitales en entornos exigentes (sometidos a importantes requisitos de escalabilidad, alta disponibilidad, capacidades de integración, auditabilidad, etc.). ‣ Es un proyecto OpenSource creado en 2005 por un equipo procedente de Documentum. ‣ Alfresco gestiona todos los contenidos en nuestra empresa: documentos, imágenes, fotos, páginas 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 características, tales como, gestión de metadatos, control de versiones, gestión del ciclo de vida, flujo de trabajo, búsquedas, asociaciones a otros contenidos, etiquetado, comentarios. Preparado por Jesús Salinas Revelles
  • 5. El núcleo 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. También proporciona por defecto un conjunto de aplicaciones para navegar por los contenidos, buscar, gestionar, etc. ‣ Para el negocio, Alfresco ha sido diseñado para soportar todo tipo de requisitos relacionados con los contenidos: herramientas para la gestión de documentos, aplicaciones, interfaces para trabajo de oficina. La gestión de flujos de trabajo soporta diferentes procesos de negocio. ‣ Para el desarrolllador, Alfresco proporciona un repositorio escalable y una plataforma de gestión que simplifica el desarrollo. Expone infinidad de capacidades de gestión en forma de servicios. Preparado por Jesús Salinas Revelles
  • 6. El núcleo de Alfresco ¿Qué es Alfresco? ‣ El núcleo de Alfresco es un repositorio gestionado por un servidor que persiste contenidos, metadatos, etc. Preparado por Jesús Salinas Revelles
  • 7. El núcleo de Alfresco ¿Qué es Alfresco? ‣ Alfresco incorpora una arquitectura moderna. El sistema ha crecido como una aplicación Java, eso significa que se puede ejecutar en cualquier plataforma donde corre JavaEE. ‣ El núcleo 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 incorporación de nuevas funcionalidades dentro del sistema. Esto se conoce como Web scripts y puede utilizarse para la gestión de datos o servicios de presentación. Preparado por Jesús Salinas Revelles
  • 8. El núcleo de Alfresco Algunas características técnicas del proyecto Alfresco ‣ Open Source : Tenemos el código disponible (¡siempre, en cualquier versión!). ‣ Fácilmente extensible y basado en tecnologías Java EE estándares 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 Jesús Salinas Revelles
  • 9. El núcleo de Alfresco Algunas características de negocio del proyecto Alfresco ‣ Dos versiones: Community y Enterprise. Esta última con un soporte profesional, con procesos de QA estrictos, SLA, etc. ‣ La versión Community es suficientemente buena para ponerla en producción en proyectos no críticos. Es gratuita. ‣ La versión Enterprise es de pago (aunque se puede probar gratuitamente) y la recomiendo para entornos críticos. Preparado por Jesús Salinas Revelles
  • 10. El núcleo de Alfresco Documentación ‣ Muy buena documentación (¡cosa muy rara en los proyectos y productos Open Source!). ‣ La documentación de la versión Community está en la Wiki http://wiki.alfresco.com ‣ La documentación de la versión Enterprise está en la web oficial http://docs.alfresco.com Preparado por Jesús Salinas Revelles
  • 11. El núcleo de Alfresco Funcionalidades más importantes de cara a los usuarios ‣ Un único repositorio unificado para gestionar cualquier tipo de contenido: documentos, imágenes, vídeo y audio. ‣ Puede ser usado como una unidad de red compartida con protocolo CIFS, WebDAV, IMAP y SharePoint. ‣ Vista previa en línea de los tipos de archivos populares (como documentos de Microsoft Office, PDFs e imágenes) directamente en el navegador sin necesidad de descargarlos. Preparado por Jesús Salinas Revelles
  • 12. El núcleo de Alfresco Funcionalidades más importantes de cara a los usuarios ‣ Integración 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 Jesús Salinas Revelles
  • 13. El núcleo de Alfresco Funcionalidades más 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 búsqueda. ‣ Capacidad para localizar documentos rápidamente con un sistema de búsquedas avanzadas preindexadas. Preparado por Jesús Salinas Revelles
  • 14. El núcleo de Alfresco Componentes y servicios ‣ Cada parte del repositorio de Alfresco es un componente o un servicio. ‣ Un componente es una implementación que provee un capacidad o funcionalidad específica 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 abstracción. Preparado por Jesús Salinas Revelles
  • 15. El núcleo de Alfresco Componentes y servicios Preparado por Jesús Salinas Revelles
  • 16. El núcleo 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 más de un componente que implemente un servicio. ‣ Con Spring Framework seleccionamos qué componente está disponible en nuestro sistema para cada servicio y cómo está configurado. Preparado por Jesús Salinas Revelles
  • 17. El núcleo de Alfresco Componentes y servicios Preparado por Jesús Salinas Revelles
  • 18. El núcleo de Alfresco Componentes y servicios Preparado por Jesús Salinas Revelles
  • 19. El núcleo de Alfresco Componentes y servicios ‣ Los componentes pueden ser intercambiados por nuevas implementaciones y se pueden añadir nuevos componentes. ‣ El sistema es muy flexible ya que los clientes se conectan a los servicios y hacen uso de ellos sin saber como están implementados. Preparado por Jesús Salinas Revelles
  • 20. El núcleo de Alfresco Componentes y servicios ‣ La flexibilidad descrita anteriormente es posible gracias al uso interno del core de Spring Framework como núcleo de Alfresco. ‣ Los componentes son configurados de manera declarativa. ‣ La programación orientada a aspectos permite aplicar conceptos transversales de manera limpia. ‣ La inyección de dependencias permite establecer qué componente está activo y su configuración. Preparado por Jesús Salinas Revelles
  • 21. El núcleo de Alfresco Estructura del repositorio de Alfresco ‣ La interfaz pública 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 están implementadas ni quién lo hace. ‣ Un registro de servicios está disponible. Preparado por Jesús Salinas Revelles
  • 22. El núcleo de Alfresco Estructura del repositorio de Alfresco ‣ Detrás de los servicios están las implementaciones como cajas negras (componentes). ‣ Cada servicio o componente está configurado a través de Spring en ficheros de configuración XML o ficheros de contexto. En concreto, los servicios de Alfresco Repository Foundation Services están configurados en el fichero de Spring public-services-context.xml. Preparado por Jesús Salinas Revelles
  • 23. El núcleo de Alfresco Foundation Services ‣ Es la interfaz de más bajo nivel para acceder a las capacidades del repositorio. ‣ El enlace con esta interfaz se realiza a través del Repository Service Registry o a través de inyección 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 políticas de seguridad y transaccionalidad están descritas de forma declarativa y se fuerza su aplicación para cada servicio. Preparado por Jesús Salinas Revelles
  • 24. El núcleo de Alfresco Extensiones del repositorio ‣ Alfresco soporta una forma estándar para realizar extensiones al repositorio: configurar un componente, añadir un nuevo componente o servicio o borrar componentes. ‣ Las extensiones se encapsulan fuera del núcleo del repositorio y se instalan como pluging automáticamente. ‣ Las actualizaciones del núcleo del repositorio no afectan a nuestras extensiones. Preparado por Jesús Salinas Revelles
  • 25. El núcleo de Alfresco Servicios básicos del repositorio ‣ Los 3 servicios más 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 modificación a la información que se ha grabado en el repositorio: un documento Word o un fragmento XML. ‣ Servicio de búsquedas : maneja la información del índice de búsquedas y permite recuperar los metadatos y el contenido del repositorio a través de distintas opciones de búsqueda. Preparado por Jesús Salinas Revelles
  • 26. El núcleo de Alfresco Servicios básicos del repositorio Preparado por Jesús Salinas Revelles
  • 27. El núcleo de Alfresco Arquitectura de Alfresco ‣ Introducción. ‣ Servidor de aplicaciones de Alfresco. ‣ Repositorio de contenidos. ‣ Protocolos. ‣ Los servicios de Alfresco. Preparado por Jesús Salinas Revelles
  • 28. El núcleo de Alfresco Introducción ‣ La gestión de contenidos empresarial cubre un amplio rango de aplicaciones: gestión de documental, gestión de contenidos web, gestión de registros, búsqueda, etc. ‣ La arquitectura de Alfresco ha sido diseñada para ser capaz de soportar los requisitos asociados a todas estas aplicaciones. ‣ Cada una de estas disciplinas tiene una serie de características únicas y otras que se solapan, de tal forma que, el diseño de cada capacidad no se ha realizado de forma aislada sino en el contexto de el sistema completo. ‣ Alfresco pretende ser lo más simple posible en todos los ámbitos: desarrollo, personalización, despliegue y uso. La solución más simple y extendida de una solución ECM es una unidad compartida. La arquitectura Alfresco tiene como objetivo ser tan simple como una unidad compartida. Preparado por Jesús Salinas Revelles
  • 29. El núcleo de Alfresco Introducción ‣ Escalado. ‣ Solución modular. ‣ Incoporando las mejores librerías de terceros. ‣ Independencia del entorno. ‣ Núcleo robusto. ‣ Extensiones con scripts. ‣ Solución basada en estándares. Preparado por Jesús Salinas Revelles
  • 30. El núcleo de Alfresco Introducción Preparado por Jesús Salinas Revelles
  • 31. El núcleo de Alfresco Introducción ‣ Últimamente, Alfresco se usa para implementar un ECM para ofrecer gestión documental, gestión de registros, etc. ‣ La solución se divide típicamente en clientes y servidor. Los clientes ofrecen a los usuarios una interface de acceso a la solución y el servidor proporciona servicios de gestión de contenidos y almacenamiento. ‣ Es muy habitual que una solución ofrezca múltiple clientes sobre un mismo servidor compartido, cada cliente se adapta al entorno en el que va a ser utilizado. Preparado por Jesús Salinas Revelles
  • 32. El núcleo de Alfresco Introducción ‣ El servidor de aplicaciones agrupa un repositorio de contenidos y un conjunto de servicios adicionales para construir la solución. ‣ El repositorio de contenidos ha sido definido siguiendo los siguientes estándares: ‣ CMIS (Content Management Interoperability Services). ‣ JCR (Java Content Repository / JSR-170/286). ‣ Estos estándares proporcionan una especificación para la definición de contenidos y su almacenamiento, recuperación 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 Jesús Salinas Revelles
  • 33. El núcleo de Alfresco Introducción ‣ Aunque se ha realizado un esfuerzo de estandarización a la hora de definir los elementos del ECM, existe un salto entre las características ofrecidas por el repositorio y los requisitos típicos de la solución. ‣ El servidor de aplicaciones de contenido de Alfresco proporciona la siguiente categoría de servicios sobre el repositorio de contenidos: ‣ Servicios de contenidos (por ejemplo, transformación, etiquetados, extracción de metadatos). ‣ Servicios de control (por ejemplo, flujos de trabajo, gestión de registros). ‣ Servicios de colaboración (por ejemplo, actividades, wiki). Preparado por Jesús Salinas Revelles
  • 34. El núcleo de Alfresco Introducción ‣ Alfresco proporciona dos clientes web principales: Alfresco Explorer y Alfresco Share. ‣ Alfresco Explorer aparece desde la primera versión de Alfresco. Ha sido implementado mediante Java Server Faces (JSF) y es altamente personalizable, pero y muy IMPORTANTE, sólo puede desplegarse como parte del servidor de aplicaciones de contenidos de Alfresco. ‣ Alfresco Share es un cliente algo más joven, centrado en aspectos de colaboración. El concepto principal de Alfresco Share es la noción de sitio web: un lugar donde los usuarios colaboran en la generación 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 años, ha evolucionado y ahora soporta todas las funcionalidades que ofrece Alfresco Explorer. Preparado por Jesús Salinas Revelles
  • 35. El núcleo de Alfresco Introducción ‣ Alfresco ha sido diseñado como un sistema modular. ‣ Cada parte es un componente o servicio. Un componente es una implementación que provee un capacidad o funcionalidad específica 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 abstracción. Preparado por Jesús Salinas Revelles
  • 36. El núcleo de Alfresco Introducción ‣ Para soportar esta estrategía, Alfresco usa Spring framework aprovechando entre otras cosas su factoría, inyección de dependencias y programación orientada a aspectos: Preparado por Jesús Salinas Revelles
  • 37. El núcleo de Alfresco Servidor de aplicaciones de Alfresco ‣ La responsabilidad más 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 públicas para permitir la comunicación con clientes. ‣ Estas intefaces públicas y remotas son el único elemento visible desde el cliente. Existen dos tipos: ‣ APIs remotas: permiten interacción programática con los servicios del servidor. ‣ Protocolos que ofrecen esos mismos servicios a los usuarios mediante un protocolo asociado al cliente. Preparado por Jesús Salinas Revelles
  • 38. El núcleo de Alfresco Servidor de aplicaciones de Alfresco ‣ Esquema general del servidor: Preparado por Jesús Salinas Revelles
  • 39. El núcleo de Alfresco Servidor de aplicaciones de Alfresco ‣ Intefaces públicas y remotas Remote APIs Protocols Preparado por Jesús Salinas Revelles
  • 40. El núcleo 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: configuración, autenticación, permisos y transacciones que afectan a cualquier funcionalidad. Esta infraestructura también protege al servidor de atarse a una implementación específica (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 módulo con su propia especificación e implementación. Preparado por Jesús Salinas Revelles
  • 41. El núcleo de Alfresco Repositorio de contenidos ‣ El repositorio es el sistema que se encarga de manejar los contenidos dentro de Alfresco. Se encarga de: ‣ Definición de la estructura de los contenidos. ‣ Creación, actualización y borrado de contenidos, metadatos asociados y relaciones. ‣ Consultas a los contenidos, control de acceso (permisos) y versionado. ‣ Renderizado de contenidos, locking, eventos, auditoría. ‣ Importación y exportación. ‣ Multi-idioma. ‣ Reglas y acciones. Preparado por Jesús Salinas Revelles
  • 42. El núcleo de Alfresco Repositorio de contenidos ‣ Esquema del repositorio: Content Repository Preparado por Jesús Salinas Revelles
  • 43. El núcleo de Alfresco Repositorio de contenidos ‣ El repositorio de contenidos proporciona una implementación de estos servicios y los expone mediante: ‣ API de Alfresco, ‣ CMIS y ‣ API Java JSR-170. ‣ El núcleo 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 Jesús Salinas Revelles
  • 44. El núcleo de Alfresco Repositorio de contenidos ‣ Servicios: Embeddeb APIs Content Services Control Services Collaboration Services Content Repository Preparado por Jesús Salinas Revelles
  • 45. El núcleo de Alfresco Repositorio de contenidos ‣ El motor de almacenamiento ofrece también mecanismos de consulta construidas sobre Apache Lucene. Ofrece los siguientes tipos de búsquedas: ‣ Filtrado por metadatos. ‣ Búsquedas por path. ‣ Búsquedas a texto completo. ‣ Cualquier combinación de las anteriores. Preparado por Jesús Salinas Revelles
  • 46. El núcleo 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 años y años de experiencia (gestión de transacciones, escalado, administración). Alfresco usa un nivel de abstracción 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 Jesús Salinas Revelles
  • 47. El núcleo de Alfresco Protocolos ‣ Para permitir el uso de Alfresco en diferentes ámbitos, el servidor de contenidos de Alfresco soporta diferentes protocolos para la gestión de carpetas y documentos. Preparado por Jesús Salinas Revelles
  • 48. El núcleo de Alfresco Protocolos ‣ CIFS (Common Internet File System) es un protocolo que permite la proyección 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 implementación 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. También existe herramientas que permite montar servidores WebDAV como unidad de red. ‣ FTP (File Transfer Protocol) es un protoloco estándar de red para el intercambio y manipulación de ficheros a través 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 Jesús Salinas Revelles
  • 49. El núcleo de Alfresco Protocolos ‣ IMAP (Internet Message Access Protocol) es un estándar 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 integración con la suite Microsoft Office. Permite al usuario familiarizado con esta suite trabajar sobre documentos dentro de Alfresco. Preparado por Jesús Salinas Revelles
  • 50. El núcleo de Alfresco Los servicios de Alfresco ‣ Introducción. ‣ Servicios del repositorio de contenidos. ‣ Servicios de aplicación de contenidos. ‣ Las APIs de Alfresco. Preparado por Jesús Salinas Revelles
  • 51. El núcleo de Alfresco Introducción ‣ 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 públicos. Por ejemplo, los servicios Java son internos. ‣ Los servicios se dividen en dos categorías. ‣ Servicios del repositorio de contenidos. ‣ Servicios de aplicación de contenidos. Preparado por Jesús Salinas Revelles
  • 52. El núcleo de Alfresco Servicios del repositorio de contenidos ‣ Los servicios del repositorio de contenidos están escritos en Java y son los servicios fundamentales para la gestión de contenidos. ‣ Gestión de ficheros y carpetas. ‣ Versionado y checkin/checkout. ‣ Auditoría. ‣ Autenticación, autorización y permisos. ‣ Modelado. ‣ Búsqueda. Preparado por Jesús Salinas Revelles
  • 53. El núcleo de Alfresco Servicios del repositorio de contenidos Embeddeb APIs Content Repository Preparado por Jesús Salinas Revelles
  • 54. El núcleo de Alfresco Servicios de aplicación de contenidos ‣ Los servicios de apliación 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, extracción de metadatos. ‣ Servicios de control: flujos de trabajo, proyectos web, etc. ‣ Servicios de colaboración: comentarios, etiquetado, actividades, etc. Preparado por Jesús Salinas Revelles
  • 55. El núcleo de Alfresco Servicios del repositorio de contenidos Content Services Control Services Collaboration Services Content Repository Preparado por Jesús Salinas Revelles
  • 56. El núcleo de Alfresco Estructura de los servicios ‣ La mayoría de los servicios se construyen en tres capas: núcleo Java, servicio de script público y API RESTful. Preparado por Jesús Salinas Revelles
  • 57. El núcleo 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 Jesús Salinas Revelles
  • 58. El núcleo de Alfresco Las APIs de Alfresco Remote APIs Embeddeb APIs Preparado por Jesús Salinas Revelles
  • 59. El núcleo 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 sólo lectura diseñada 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 combinándola con las plantillas. Preparado por Jesús Salinas Revelles
  • 60. El núcleo de Alfresco Las APIs de Alfresco ‣ Alfresco permite definir extensiones sobre estas APIs: Remote APIs Extensions Embeddeb APIs Preparado por Jesús Salinas Revelles
  • 61. El núcleo de Alfresco Las APIs de Alfresco ‣ APIs embebidas: Preparado por Jesús Salinas Revelles
  • 62. El núcleo 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 aplicación. Es RESTful, cada llamada es una petición HTTP, es decir, no se necesita ningún lenguaje de programación ‣ RESTful. ‣ CMIS: estándar que define servicios web y asociaciones tipo REST para trabajar con repositorios que cumplen este estándar. Preparado por Jesús Salinas Revelles
  • 63. El núcleo de Alfresco Las APIs de Alfresco ‣ APIs remotas: Preparado por Jesús Salinas Revelles
  • 64. El núcleo de Alfresco Alfresco Java Foundation Services ‣ Introducción. ‣ Acceso a la API. ‣ Los servicios disponibles. ‣ Conceptos importantes. ‣ Servicio de nodos NodeService. ‣ Inyección de servicios. ‣ Construir nuevos servicios. Preparado por Jesús Salinas Revelles
  • 65. El núcleo de Alfresco Introducción ‣ 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 implementación adecuada del servicio. Preparado por Jesús Salinas Revelles
  • 66. El núcleo de Alfresco Acceso a la API ‣ Existen tres estrategias para acceder a estas interfaces en nuestro código: ‣ Mediante Inyección de dependencias. ‣ Acceso manual mediante el método 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 Jesús Salinas Revelles
  • 67. El núcleo 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 gestión de transacciones TransactionService transactionService = serviceRegistry.getTransactionService(); Preparado por Jesús Salinas Revelles
  • 68. El núcleo de Alfresco Acceso a la API ‣ La interface ServiceRegistry se encuentra en el paquete org.alfresco.service, representa los servicios públicos del repositorio de Alfresco. ‣ Proporciona metadatos de cada servicio y acceso a cada uno de ellos mediante su interface: Preparado por Jesús Salinas Revelles
  • 69. El núcleo de Alfresco Acceso a la API ‣ El servicio de registro proporciona diferentes métodos para acceder a los servicios: ‣ getActionService. ‣ getPermissionService. ‣ getAuthorityService. ‣ getFileFolderService. ‣ getScriptService. ‣ getWorkflowService. ‣ getNotificationService ‣ getAuditService ‣ ... Preparado por Jesús Salinas Revelles
  • 70. El núcleo 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 métodos para acceder y transformar el contenido de los nodos. ‣ SearchService: servicio de búsqueda. ‣ Servicio AuthenticationService. ‣ Servicio TransactionService. ‣ ... Preparado por Jesús Salinas Revelles
  • 71. El núcleo de Alfresco ¿Cómo se crearon los servicios? ‣ Crear la implementación de la clase y la definición 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 Jesús Salinas Revelles
  • 72. El núcleo de Alfresco ¿Cómo se crearon los servicios? ‣ Crear el proxy y la definición 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 Jesús Salinas Revelles
  • 73. El núcleo 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 Jesús Salinas Revelles
  • 74. El núcleo 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 más información en Alfresco Data Model API. Preparado por Jesús Salinas Revelles
  • 75. El núcleo de Alfresco Los nodos en Alfresco ‣ El concepto StoreRef comprime dos elementos: ‣ Protocol del almacen: eso es el tipo de almacén. ‣ Store id: Idenficador del almacén. ‣ Ejemplos: workspace://SpacesStore archive://SpacesStore Preparado por Jesús Salinas Revelles
  • 76. El núcleo 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 almacén. El tercero es el identificador del nodo dentro del almacén. ‣ UUID. ‣ Ejemplos: workspace://SpacesStore/5af5a38b-e20a-4885-bbd1-4b3fde9b0dd3 Preparado por Jesús Salinas Revelles
  • 77. El núcleo 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 Jesús Salinas Revelles
  • 78. El núcleo de Alfresco Los modelos en Alfresco ‣ La identificación 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. ‣ Algún 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 Jesús Salinas Revelles
  • 79. El núcleo de Alfresco Servicio de nodos NodeService ‣ Se encuentra en el paquete org.alfresco.service.cmr.repository: Preparado por Jesús Salinas Revelles
  • 80. El núcleo 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 métodos: ‣ addAspect: este método añade un nuevo aspecto a un nodo dado. ‣ createNode: crea un nodo. ‣ deleteNode: borra un nodo. ‣ exists: verifica si existe un nodo. ‣ ... Preparado por Jesús Salinas Revelles
  • 81. El núcleo 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 Jesús Salinas Revelles
  • 82. El núcleo 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 Jesús Salinas Revelles
  • 83. El núcleo de Alfresco Servicio de nodos NodeService ‣ Más ejemplo en la siguiente url: ‣ http://wiki.alfresco.com/wiki/NodeRef_cookbook Preparado por Jesús Salinas Revelles
  • 84. El núcleo de Alfresco Servicio de contenido ContentService ‣ Como ya se ha comentado antes, este servicio proporciona métodos para acceder y transformar el contenido de los nodos. Preparado por Jesús Salinas Revelles
  • 85. El núcleo de Alfresco Servicio de contenido ContentService ‣ Alguno de sus métodos: ‣ 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 transformación. Preparado por Jesús Salinas Revelles
  • 86. El núcleo 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 Jesús Salinas Revelles
  • 87. El núcleo 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 Jesús Salinas Revelles
  • 88. El núcleo de Alfresco Inyección de servicios ‣ Si necesitamos utilizar alguno de estos servicios dentro de cualquiera de la extensiones desarrolladas en Alfresco, tendremos que aplicando Inyección de Dependencias (gracias a Spring Framework), ponerlos a disposición de nuestro código. ‣ 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 Jesús Salinas Revelles
  • 89. El núcleo de Alfresco Inyección 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 Jesús Salinas Revelles
  • 90. El núcleo de Alfresco Inyección de servicios ‣ Servicio de búsqueda: 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 Jesús Salinas Revelles
  • 91. El núcleo de Alfresco Inyección 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 Jesús Salinas Revelles
  • 92. El núcleo de Alfresco Inyección 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 Jesús Salinas Revelles
  • 93. El núcleo de Alfresco Inyección 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 Jesús Salinas Revelles
  • 94. El núcleo de Alfresco Construir nuevos servicios ‣ Los servicios de Alfresco se contruyen usando tres capa: ‣ Core Java, ‣ Un servicio script público. ‣ Una API RESTful. Preparado por Jesús Salinas Revelles
  • 95. El núcleo de Alfresco Construir nuevos servicios ‣ Cada capa tiene las siguientes características: ‣ API Java embebida: es una API implementada en Java, encapsulando todas las funcionalidades proporcionada por el servicio y es típicamente una collección de métodos sin estado. Se considera una API sólo 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 diseña 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 Jesús Salinas Revelles
  • 96. El núcleo de Alfresco Alfresco API JavaScript ‣ Introducción. ‣ Objetos raíz (Root Scope Objects). ‣ ScriptNode API. ‣ API de creación y modificación. ‣ Ejemplos. Preparado por Jesús Salinas Revelles
  • 97. El núcleo de Alfresco Introducción ‣ 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 búsquedas incluyendo búsquedas a texto completo con resultados ordenados. ‣ Navegando por jerarquía de nodos, examinar y modificar el valor de propiedades, aspectos y asociaciones. ‣ Transformar y manipular contenido. Preparado por Jesús Salinas Revelles
  • 98. El núcleo de Alfresco Introducción ‣ Usando esta API podemos (cont.): ‣ Procesar proyectos web WCM y objetos AVM. ‣ Crear grupos, personas y modificar permisos. ‣ Además, 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 librerías de scripts. Preparado por Jesús Salinas Revelles
  • 99. El núcleo de Alfresco Introducción ‣ 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. ‣ Búsquedas. ‣ People API. ‣ Funcionalidades relacionadas con logging. ‣ Además es posible añadir otros objetos como objetos raíz para usar en nuestros scripts. Preparado por Jesús Salinas Revelles
  • 100. El núcleo de Alfresco Objetos raíz (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 disposición diferentes APIs para manejar estos objetos: ‣ ScriptContent API. ‣ Permission and Security API. ‣ Check in/Check out API. ‣ Versions API. ‣ Transformation API. ‣ ... ‣ Para más información http://wiki.alfresco.com/wiki/ 4.0_JavaScript_API. Preparado por Jesús Salinas Revelles
  • 101. El núcleo de Alfresco Objetos raíz (Root Scope Objects) Preparado por Jesús Salinas Revelles
  • 102. El núcleo 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 Jesús Salinas Revelles
  • 103. El núcleo de Alfresco ScriptNode API ‣ Una funcionalidad muy útil es que cualquier propiedad de tipo d:noderef se convierte automáticamente 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 Jesús Salinas Revelles
  • 104. El núcleo de Alfresco ScriptNode API Preparado por Jesús Salinas Revelles
  • 105. El núcleo 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 Jesús Salinas Revelles
  • 106. El núcleo de Alfresco ScriptNode API Preparado por Jesús Salinas Revelles
  • 107. El núcleo de Alfresco API de creación y modificación ‣ La ScriptNode API no permite modificar muchas propiedades puesto que son de sólo lectura. Sin embargo provee alternativas para hacerlo. ‣ La API de creación y modificación nos ofrece cantidad de funciones para realizar este tipo de operaciones. Preparado por Jesús Salinas Revelles
  • 108. El núcleo de Alfresco API de creación y modificación Preparado por Jesús Salinas Revelles
  • 109. El núcleo de Alfresco API de creación y modificación Preparado por Jesús Salinas Revelles
  • 110. El núcleo de Alfresco API de creación y modificación Preparado por Jesús Salinas Revelles
  • 111. El núcleo de Alfresco API de creación y modificación Preparado por Jesús Salinas Revelles
  • 112. El núcleo de Alfresco API de creación y modificación ‣ Ejemplo: se añade un aspecto. El método addAspect realiza esta operación. 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 Jesús Salinas Revelles
  • 113. El núcleo de Alfresco API de creación y modificación ‣ Ejemplo: se crea un documento en la carpeta de usuario. ‣ El método createFile realiza esta operación. var doc = userhome.createFile("checkmeout.txt"); doc.content = "original text"; Preparado por Jesús Salinas Revelles
  • 114. El núcleo de Alfresco API de creación y modificación ‣ Ejemplo: se crean nodos mediante diferentes estrategias. ‣ El método createFile realiza esta operación. 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 Jesús Salinas Revelles
  • 115. El núcleo 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 Jesús Salinas Revelles
  • 116. El núcleo de Alfresco Ejemplos ‣ Crear el backup de un documento: ‣ Se utilizar el objeto raíz space y apoyándose en el método 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 método hasPermission comprueba si el usuario tiene permisos para crear hijos. El método createFolder crea la carpeta if (backupFolder == null && space.hasPermission("CreateChildren")) { // create the folder for the first time backupFolder = space.createFolder("Backup"); } Preparado por Jesús Salinas Revelles
  • 117. El núcleo de Alfresco Ejemplos ‣ Para ver más ejemplos: ‣ http://wiki.alfresco.com/wiki/JavaScript_API_Cookbook Preparado por Jesús Salinas Revelles
  • 118. El núcleo de Alfresco Alfresco Freemarker Templating API ‣ Introducción. ‣ Lenguaje de plantillas Freemarker. ‣ Modelo de datos. ‣ TemplateNode Model API. ‣ Más APIs. Preparado por Jesús Salinas Revelles
  • 119. El núcleo de Alfresco Introducción ‣ Una plantilla es un documento que puede aplicarse a uno o varios objetos (por ejemplo, uno o más documentos de un repositorio) para generar otro documento. FreeMarker o XSLT son plantillas. ‣ La plantilla se escribe en un lenguage de plantillas específico. ‣ 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 Jesús Salinas Revelles
  • 120. El núcleo de Alfresco Lenguaje de plantillas Freemarker ‣ Introducción. ‣ Trabajando con variables. ‣ Operadores de comparación. ‣ Operadores lógicos. ‣ Operadores numéricos. ‣ Operador concatenación. ‣ Vectores. ‣ Estructuras selectivas. ‣ Iteraciones. ‣ Directivas en Freemarker. Preparado por Jesús Salinas Revelles
  • 121. El núcleo de Alfresco Introducción ‣ Alfresco trabaja por defecto con Freemarker. ‣ La extensión 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 Jesús Salinas Revelles
  • 122. El núcleo de Alfresco Introducción ‣ FreeMarker es un motor de plantillas basado en Java. Se definen plantillas que no son más que ficheros de texto que contienen la salida deseada, excepto determinadas variables ${name}, y directivas (if, bucles, etc). Preparado por Jesús Salinas Revelles
  • 123. El núcleo de Alfresco Trabajando con variables ‣ Definición de variable: <#assign nombreVariable [= valor]> ‣ Ejemplo: <#assign var_link= "http://www.ematiz.com"> Preparado por Jesús Salinas Revelles
  • 124. El núcleo de Alfresco Trabajando con variables ‣ Referencia de variables: ${nombreVariable} ‣ Ejemplo: <a href="${var_link}">Navega a la web</a> Preparado por Jesús Salinas Revelles
  • 125. El núcleo de Alfresco Trabajando con variables ‣ El operador punto: (root) | +- book | | | +- title = "Breeding green mouses" | | | +- author ${book.title} Otra alternativa book["title"] Preparado por Jesús Salinas Revelles
  • 126. El núcleo de Alfresco Operadores de comparación ‣ = y == son equivalentes. ‣ != <#if user = "Big Joe"> It is Big Joe </#if> <#if user != "Big Joe"> It is not Big Joe </#if>  Preparado por Jesús Salinas Revelles
  • 127. El núcleo de Alfresco Operadores de comparación ‣ <, <=, >= y > ‣ Cuidado con > y >= <#if (x > y)> ... ‣ Podemos usar &gt; y &lt; <#if (x &gt; y)> ... ‣ También se puede utilizar lt, lte, gt y gte Preparado por Jesús Salinas Revelles
  • 128. El núcleo de Alfresco Operadores lógicos ‣ Función OR: || ‣ Función AND: && ‣ Función 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 Jesús Salinas Revelles
  • 129. El núcleo de Alfresco Operadores numéricos ‣ Suma: +, Resta: -, Multiplicación: *, División: /, Módulo (resto): % ‣ Ejemplos: ${100 - x * x} ${x / 2} ${12 % 10}  75 2.5 2 Preparado por Jesús Salinas Revelles
  • 130. El núcleo de Alfresco Operador concatenación ‣ Operador suma. ${3 * "5"} <#-- Error -->  ${3 + "5"}  <#-- OK -->  Preparado por Jesús Salinas Revelles
  • 131. El núcleo de Alfresco Vectores ‣ Sintaxis: <#assign nombreArray = ["value1", "value2", ... ]> ‣ Ejemplo: <#assign seq = ["winter", "spring", "summer", "autumn"]> Preparado por Jesús Salinas Revelles
  • 132. El núcleo de Alfresco Vectores ‣ Propiedades: ‣ first, last ‣ join ‣ seq_contains, seq_index_of, seq_last_index_of ‣ reverse ‣ size ‣ sort, sort_by ‣ chunk ‣ Más información: ‣ http://freemarker.org/docs/ref_builtins_sequence.html. Preparado por Jesús Salinas Revelles
  • 133. El núcleo 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 Jesús Salinas Revelles
  • 134. El núcleo 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 Jesús Salinas Revelles
  • 135. El núcleo de Alfresco Iteraciones ‣ Sintaxis: <#list sequence as item> ... </#list> ‣ Tiene dos variables especiales disponibles dentro del bucle: ‣ item_index: valor numérico 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 Jesús Salinas Revelles
  • 136. El núcleo 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 Jesús Salinas Revelles
  • 137. El núcleo de Alfresco Directivas en Freemarker ‣ assign. ‣ import. ‣ include. ‣ macro. ‣ ... Preparado por Jesús Salinas Revelles
  • 138. El núcleo de Alfresco Más información ‣ http://freemarker.org/docs/index.html Preparado por Jesús Salinas Revelles
  • 139. El núcleo de Alfresco Modelo de datos ‣ El modelo es un objeto o jerarquía de objetos que puede utilizar la plantilla para generar la salida. ‣ Se muestran a continuación: Preparado por Jesús Salinas Revelles
  • 140. El núcleo de Alfresco Modelo por defecto Preparado por Jesús Salinas Revelles
  • 141. El núcleo 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, ... ‣ Más información ‣ http://wiki.alfresco.com/wiki/Template_Guide#TemplateNode_Model_API Preparado por Jesús Salinas Revelles
  • 142. El núcleo 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 Jesús Salinas Revelles
  • 143. El núcleo 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 Jesús Salinas Revelles
  • 144. El núcleo de Alfresco TemplateNode Model API ‣ Ejemplos: Para acceder a una propiedad, sólo la segunda opción es correcta. <b>wrong:</b> ${document.properties.myprop} <br> <b>ok:</b> ${document.properties["my:myprop"]} Preparado por Jesús Salinas Revelles
  • 145. El núcleo de Alfresco TemplateNode Model API ‣ Ejemplos: Iteración 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 Jesús Salinas Revelles
  • 146. El núcleo 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 Jesús Salinas Revelles
  • 147. El núcleo de Alfresco TemplateNode Model API ‣ Ejemplo: ‣ El método childrenByLuceneSearch devuelve un mapa con el resultado de la búsqueda contra el repositorio completo basado en la cadena de búsqueda Lucene. userhome.childrenByLuceneSearch (‘cadenaLucene’) ‣ Todos los nodos que coinciden con el criterio son recuperados, la búsqueda se realiza sobre todo el repositorio. Preparado por Jesús Salinas Revelles
  • 148. El núcleo de Alfresco Más APIs ‣ Tenemos a nuestra disposición otras APIs responsables de: ‣ Versionado. ‣ Clasificación. ‣ Procesado XML. ‣ Flujos de trabajo. ‣ ... ‣ Para más información: ‣ http://wiki.alfresco.com/wiki/Template_Guide#Version_History Preparado por Jesús Salinas Revelles
  • 149. El núcleo de Alfresco Subsistemas ‣ Introducción. ‣ Listado de subsistemas. Preparado por Jesús Salinas Revelles
  • 150. El núcleo de Alfresco Introducción ‣ Un subsistema es un módulo configurable responsable de una parte de una funcionalidad de Alfresco. Típicamente, un subsistema envuelve un área funcional opcional, tales como, IMAP binding o con varias implementaciones alternativas como el subsistema de autenticación. ‣ Podemos imaginarlo como un miniservidor embebido dentro del servidor principal. Se puede arrancar y parar de forma independiente y, también se configura de forma independiente. ‣ Tiene su propio contexto de Spring (Spring Application Context) y su configuración. ‣ 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 comunicación entre ellos sólo puede realizarse mediante la importación explícita de interfaces. Preparado por Jesús Salinas Revelles
  • 151. El núcleo de Alfresco Introducción ‣ Esto significa que: ‣ Podemos tener múltiples instancias del mismo tipo: la misma plantilla de configuración de Spring puede inicializarse con diferentes parámetros en diferentes instancias. Esto permite, por ejemplo, la definición de una cadena de múltiples subsistemas de autenticación gracias a la edición de ficheros de propiedades (o JMX para la versión empresarial). ‣ Los subsistemas puede controlarse vía JMX (versión 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 específicas ocultas. ‣ Pueden cambiar de implementación. Preparado por Jesús Salinas Revelles
  • 152. El núcleo de Alfresco Listado de subsistemas ‣ Authentication. ‣ Synchronization. ‣ File Servers. ‣ Third Party. ‣ IMAP. ‣ WCM Deployment Receiver. ‣ sysAdmin. Preparado por Jesús Salinas Revelles
  • 153. El núcleo de Alfresco Seguridad y autenticación en Alfresco ‣ Introducción. ‣ Seguridad en Alfresco. ‣ Autenticación. ‣ Autorización. ‣ Definición de permisos. Preparado por Jesús Salinas Revelles
  • 154. El núcleo de Alfresco Introducción ‣ En este capítulo vamos a hablar sobre la autenticación y las funcionalidades contruidas sobre Alfresco para gestionar usuarios y grupos, autenticación de usuarios, permisos y control de acceso. ‣ También analizaremos cómo personalizar Alfresco para que trabaje con módulos, tales como, LDAP, NTLM, Kerberos y otros protocolos de autenticación. Preparado por Jesús Salinas Revelles
  • 155. El núcleo de Alfresco Introducción ‣ La primera vez que se accede a una instalación 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 contraseña. ‣ Si se autentica con privilegios de administrador, podrá usar la consola de administración para crear nuevos usuarios y asignar contraseñas. ‣ Por defecto, puedes gestionar los usuarios base y sus contraseñas manualmente, y los usuarios no autenticados tendrá acceso limitado como usuarios guest. Preparado por Jesús Salinas Revelles
  • 156. El núcleo de Alfresco Introducción ‣ 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 autenticación automática usando las credenciales del sistema operativo o un servidor de SSO para eliminar la necesidad de una página de login. ‣ Delegar la responsabilidad de la autenticación en un servidor de directorio, eliminando así la necesidad de configurar manualmente usuarios desde la consola de administración. Preparado por Jesús Salinas Revelles
  • 157. El núcleo de Alfresco Seguridad en Alfresco ‣ La seguridad en Alfresco trabaja con dos conceptos importantes: autenticación y autorización. ‣ Alfresco normalmente trabaja con el concepto de usuario y sus credenciales pueden encontrarse en diferentes formatos y validarse de diferentes formas. Por ejemplo, una contraseña puede validarse contra un LDAP o un ticket de Kerberos puede validarse contra Microsoft Active Directory Server. ‣ Alfresco incluye: ‣ Implementación de autenticación interna basada en contraseñas. ‣ Soporte para integrarse con diferentes entornos de autenticación externos. ‣ La posibilidad de generar una integración de autenticación propia. Preparado por Jesús Salinas Revelles
  • 158. El núcleo de Alfresco Seguridad en Alfresco ‣ La autorización determina qué operaciones puede realizar un usuario autenticado. Existen diferentes modelos de autenticación: Role Based Access Control (RBAC), UNIX-style Access Control Lists (ACLs), extended ACLs, Windows-style ACLs y otros muchos. ‣ La autorización 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 operación. Las ACLs se usan para determinar si un usuario dado puede ejecutar la operación 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 método público asociado a un bean. La invocación del método comprueba que el usuario tiene permisos para realizar esta operación. Preparado por Jesús Salinas Revelles
  • 159. El núcleo de Alfresco Seguridad en Alfresco ‣ Por convención, los beans que ofrecen estos servicios públicos son los beans cuyos nombres empiezan en mayúscula, por ejemplo, NodeService, SearchService o ContentService. ‣ La configuración de requisitos de seguridad para estos beans se definen en ficheros xml. Un determinado método 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 métodos que devuelven colecciones o arrays pueden filtrarse en función de los permisos del usuario. Si los requisitos de autorización no se cumplen, la llamada al método fallará y lanzará la excepción AccessDeniedException. Preparado por Jesús Salinas Revelles
  • 160. El núcleo de Alfresco Seguridad en Alfresco ‣ La asignación 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 automáticamente 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 Jesús Salinas Revelles
  • 161. El núcleo de Alfresco Seguridad en Alfresco ‣ La configuración XML para los permisos también 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 alfrescomodelpermissionDefinitions.xml --> <globalPermission permission="Read" authority="GROUP_EVERYONE" /> Preparado por Jesús Salinas Revelles
  • 162. El núcleo de Alfresco Autenticación ‣ Introducción. ‣ Subsistemas de autenticación. ‣ Tipos de subsistemas. ‣ Cadena de autenticación. ‣ AlfrescoNTML. ‣ pass-through. Preparado por Jesús Salinas Revelles
  • 163. El núcleo de Alfresco Introducción ‣ La autenticación es una de las categorías de subsistemas que encontramos en Alfresco. ‣ El subsistema de autenticación es una pila coordinada de componentes compatibles responsables de proporcionar funcionalidades de autenticación e identificación en Alfresco. ‣ Alfresco ofrece diferentes implementaciones del subsistema de autenticación. Preparado por Jesús Salinas Revelles
  • 164. El núcleo de Alfresco Subsistemas de autenticación ‣ La autenticación y la gestión de identidades se gestiona gracias a un conjunto de módulos software configurables llamados subsistemas. ‣ El subsistema de autenticación proprociona las siguientes funciones a Alfresco: ‣ Autenticación basada en contraseña para navegador, protocolo Microsoft SharePoint, FTP y WebDAV. ‣ Autenticación para los sistemas de ficheros CIFS y NFS. ‣ Single sign-on (SSO) para navegador, protocolo Microsoft SharePoint y WebDAV. ‣ Exportación de registro de usuarios. Preparado por Jesús Salinas Revelles
  • 165. El núcleo de Alfresco Tipos de subsistemas Preparado por Jesús Salinas Revelles
  • 166. El núcleo de Alfresco Cadena de autenticación ‣ Es muy habitual que al menos uno de los tipos anteriormente comentados nos permita integrar Alfresco con el servidor de autenticación que se utiliza en nuestra organización. ‣ Sin embargo, puede ocurrir que la integración con alguno de estos sistemas no sea suficiente. Por diferentes razones, puede ocurrir que queramos mezclar diferentes protocolos de autenticación. ‣ Esta es la razón por la cuál Alfresco ha diseñado una cadena de autenticación. No es más que una lista de subsistemas de autenticación 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 configuración del usuario. Preparado por Jesús Salinas Revelles
  • 167. El núcleo de Alfresco Cadena de autenticación ‣ Configuración de la cadena de autenticación: ‣ Edición del fichero alfresco-global.properties que se encuentra en la ruta <installLocation>sharedclasses. instance_name1:type1, instance_name2:type2, ..., instance_namen:typen ‣ La propiedad authentication.chain declara la cadena de autenticación de Alfresco. Su valor será una lista separada por comas de instancias de autenticación. ‣ Cada instancia se declara con un nombre seguido de “:” y el tipo de subsistema. Preparado por Jesús Salinas Revelles
  • 168. El núcleo de Alfresco AlfrescoNTML ‣ El mecanismo de autenticación que ofrece Alfresco, por defecto, es una cadena de autenticación con una única instancia de un subsistema de tipo alfrescoNtlm. ‣ El proceso de autentición se basa en la información de usuarios y contraseñas almacenada en el repositorio de Alfresco. ‣ Proporciona soporte a autenticación mediante formulario y SSO basada en NTLM, además de, autenticación mediante servidor CIFS. ‣ Nota: SSO con NTML, por defecto, se encuentra desactivado. Preparado por Jesús Salinas Revelles
  • 169. El núcleo de Alfresco AlfrescoNTML ‣ Edición del fichero alfresco-global.properties que se encuentra en la ruta <installLocation>sharedclasses. authentication.chain=alfinst:alfrescoNtlm ‣ La propiedad authentication.chain declara la cadena de autenticación de Alfresco. Su valor será una lista separada por comas de instancias de autenticación. ‣ Cada instancia se declara con un nombre seguido de “:” y el tipo de subsistema. Preparado por Jesús Salinas Revelles
  • 170. El núcleo de Alfresco AlfrescoNTML ‣ Configuración de la instancia: ‣ Debemos crear un directorio dentro de la carpeta de extensiones de Alfresco, <installLocation>sharedclassesalfrescoextensionsubsystemsAuthentication alfrescoNtlmalfinst Preparado por Jesús Salinas Revelles
  • 171. El núcleo de Alfresco pass-through ‣ El subsistema passthru puede reemplazar el sistema de autenticación 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, autenticación CIFS mediante servidores CIFS. ‣ Sólo ofrece soporte a NTLM v.1. La versión 2 de NTLM ha sido diseñado para evitar ataques "man-in-the-middle", no es posible implementarla en pass-through. Preparado por Jesús Salinas Revelles
  • 172. El núcleo de Alfresco LDAP ‣ El sistema LDAP ofrece dos funciones principales: ‣ Autenticación de usuario: comprobación del id de usuario y contraseña usando un LDAP. ‣ Exportación del registro de usuario: se expone información sobre usuarios y grupos para la sincronización del subsistema. ‣ Estas funciones pueden utilizarse de forma aislado o en conjunción. Cuando la autenticación se usa sin la exportación de registro de usuarios, los objetos se crean automáticamente para todos los usuarios que hacen log in. Preparado por Jesús Salinas Revelles
  • 173. El núcleo de Alfresco Kerberos ‣ El servicio de autenticación y autorización Java (JAAS) se usa dentro del subsistema Kerberos para soportar autenticación Kerberos mediante nombres de usuarios y contraseña. ‣ Debemos seleccionar Kerberos contra un servidor Active Directory. ‣ Los incovenientes de usar autenticación LDAP contra Active Directory comparados con JAAS/Kerberos son: ‣ La solución más simple es usar el protocolo de autenticación SIMPLE LDAP, usado con SSL. ‣ AD necesita un setup especial para usar autentiación digest MD5. ‣ LDAP puede usar GSSAPI y Kerberos, sería equivalente pero más complejo a la hora de aplicar su configuración. Preparado por Jesús Salinas Revelles
  • 174. El núcleo de Alfresco External ‣ El subsistema external se usa con cualquier sistema de autenticación 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 método HttpServletRequest.getRemoteUser(). ‣ Como esta es la forma estándar de propagar las identidades de los usuarios a los servlets, sería compatible con un número de soluciones SSO, incluyendo Central Authentication Service (CAS). ‣ La activación de autenticación external hace que Alfresco acepte tokens de autenticación externos, debemos asegurar que no se producen accesos directos a los puertos HTTP o AJP de Alfresco. Preparado por Jesús Salinas Revelles
  • 175. El núcleo 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 dinámica. Las autoridades dinámicas son usadas por roles internos. Preparado por Jesús Salinas Revelles
  • 176. El núcleo de Alfresco Definición de permisos ‣ Los permisos se definen en un fichero de configuración XML. El fichero por defecto se encuentra en: <installLocation>tomcatwebappsalfrescoWEB-INFclassesalfrescomodel permissionDefinitions.xml ‣ Esta configuración puede ser reemplazada o extendida seguiendo la DTD definida en: <installLocation>tomcatwebappsalfrescoWEB-INFclassesalfrescomodel permissionSchema.dtd Preparado por Jesús Salinas Revelles
  • 177. El núcleo de Alfresco Definición de permisos ‣ Ejemplo: definición 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 Jesús Salinas Revelles
  • 178. El núcleo de Alfresco Extension classpath ‣ Introducción. ‣ Sintaxis. ‣ Ejemplo. Preparado por Jesús Salinas Revelles
  • 179. El núcleo de Alfresco Introducción ‣ El fichero alfresco-global.properties sólo puede usarse para definir propiedades globales a todo el sistema. ‣ Pero la verdad es que también podemos controlar propiedades que afectan a subsistemas, por ejemplo, los subsistemas de autenticación. ‣ 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 Jesús Salinas Revelles
  • 180. El núcleo de Alfresco Sintaxis ‣ Añadir un fichero de propiedades al classpath global del servidor. ‣ Para el caso de Tomcat sería $TOMCAT_HOME/shared/classes ‣ Se crea la ruta que coincide con el siguiente patrón para sobreescribir las propiedades específicas 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 Jesús Salinas Revelles
  • 181. El núcleo de Alfresco Ejemplo ‣ Si la cadena de autenticación fuera la siguiente: authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap1:ldap ‣ Entonces podríamos sobreescribir propiedades del subsistema alfrescoNtlm1 en el siguiente fichero: alfresco/extension/subsystems/Authentication/alfrescoNtlm/alfrescoNtlm1/ mychanges.properties Preparado por Jesús Salinas Revelles
  • 182. El núcleo 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) tendríamos que añadir propiedades en el siguiente fichero: alfresco/extension/subsystems/fileServers/default/default/mychanges.properties Preparado por Jesús Salinas Revelles
  • 183. El núcleo 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 Jesús Salinas Revelles
  • 184. El núcleo de Alfresco Extensiones en Alfresco: empaquetado y despliegue ‣ Introducción. ‣ Ficheros sin empaquetar o zips. ‣ Ficheros JAR. ‣ Ficheros AMP. ‣ Rutas de despliegue. ‣ Carpeta Shared Classpath. Preparado por Jesús Salinas Revelles
  • 185. El núcleo de Alfresco Introducción ‣ Existen varias formas de empaquetar extensiones de Alfresco. Pasamos a describir cada una de ellas, incluyendo el empaquetado como módulo usando ficheros AMP. ‣ El mecanismo de empaquetado seleccionado depende mucho del tipo de extensión que se vaya a desarrollar. ‣ Para una extensión sencilla que consiste en uno o dos web scripts, la mejor opción será un fichero JAR que contenga los scripts, colocándolo en el classpath del servidor, por ejemplo, en tomcat $ {tomcat_home}/shared/lib. ‣ Para extensiones más complejas, el desarrollo de un módulo sería la mejor opción, éste se empaqueta como fichero AMP y posteriormente se aplica al war en cuestión (alfresco.war or share.war). Preparado por Jesús Salinas Revelles
  • 186. El núcleo de Alfresco Introducción ‣ Las opciones de empaquetado son: ‣ Ficheros sin empaquetar: ficheros individuales tales como web scripts pueden copiarse en el directorio de extensión. ‣ Ficherso zip: las extensiones se pueden empaquetar con ficheros Zip. ‣ Ficheros JAR: las extensiones se pueden empaquetar siguiendo el formato estándar 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 más recomendable de despliegue de extensiones en entornos de producción es ésta. Preparado por Jesús Salinas Revelles
  • 187. El núcleo de Alfresco Ficheros sin empaquetar o zips ‣ La técnica de empaquetado más simple es copiar o descomprimir los ficheros de extensión en la jerarquía de directorios de Alfresco. Podemos mejorar el proceso utilizando algún 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 instalación de Alfresco. ‣ Esta técnica 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 aplicación (Ant, Bash, Maven o lenguajes de script). ‣ Mover ficheros independientes tiene la ventaja de ser rápido y fácil de entender, pero es mejor idea empaquetar en zip y, posteriormente, descomprimir en el sistema. ‣ Esta técnica no se recomienda en entornos QA o producción. Preparado por Jesús Salinas Revelles
  • 188. El núcleo de Alfresco Ficheros JAR ‣ El formato JAR puede utilizarse para empaquetar diferentes tipos de extensiones. Una vez que la extensión se empaqueta en formato JAR, se puede cargar en las rutas estándares de classpath del servidor. Por ejemplo, para Tomcat sería ${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 múltiples personalizaciones aisladas unas de otras y un orden de selección ‣ Los ficheros estáticos (JavaScript, CSS, o imágenes) pueden colocarse en el web root de Share, aunque también pueden empaquetarse dentro de JARs. Para desplegar estos JARs, se recomienda colocarlos en uno o más ficheros AMP, y desplegarlos posteriormente en Share. ‣ La instalación directa de JARs en la estructura de directorios de la aplicación no es una práctica recomendable, el servidor de aplicaciones puede sobreescribir los cambios. Preparado por Jesús Salinas Revelles
  • 189. El núcleo 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 específico 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 instalación 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 Jesús Salinas Revelles
  • 190. El núcleo 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 extensión a $CATALINA_HOME/webapps/alfresco/WEB-INF/ y reinciar Tomcat. Si por cualquier razón el servidor redespliega alfresco.war, las extensiones serán borradas y tendremos que redesplegarlas otra vez. ‣ Una solución es cambiar permanently exploded deployment. Crea un directorio llamado alfresco en el directorio webapps y extrae alfresco.war en él. Después copia los ficheros de extensión a $CATALINA_HOME/webapps/alfresco/WEB-INF/ y reinicia. Preparado por Jesús Salinas Revelles
  • 191. El núcleo de Alfresco Carpeta Shared Classpath ‣ Muchas personalizaciones se pueden colocar en el servidor de aplicaciones. Por ejemplo: ‣ Ficheros de configuración 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 Jesús Salinas Revelles
  • 192. El núcleo de Alfresco Carpeta Shared Classpath ‣ En esta carpeta encontramos subdirectorios estándares: ‣ 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 Jesús Salinas Revelles
  • 193. El núcleo de Alfresco Classpath específico WAR ‣ Una mejor ruta para personalizaciones sería: ‣ $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 común aplicar parches sobre los war de Explorer y Share para poner nuestro código en el lugar adecuado preservándolo 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 Jesús Salinas Revelles