Você está na página 1de 3

PORTADA • Repositorio de Contenidos Java

Explorando el Repositorio de Contenidos Java Jackrabbit

CONEJO VELOZ

sad ,Fotolia
Con Jackrabbit ahorramos tiempo en el desarrollo web. Se trata de una implementación en código abierto del

estándar Java Content Repository.

POR CARSTEN ZIEGELER

L
as bases de datos, al igual que las la utilización de un método más efi- tales como el control de revisiones o el
estructuras de datos convencio- ciente. historial de cambios (Figura 1).
nales, no siempre son la solución La idea tras la API JCR para la tecno-
perfecta para el desarrollo web. Una logía Java (Java Content Repository) El Repositorio de
aplicación web, como puede ser un por- consiste es abstraer los servicios rela- Contenidos
tal de servicios para el personal de una cionados con los datos de la aplicación La especificación completa del estándar
empresa, por ejemplo, necesita una subyacente empleando una API están- para el Repositorio de Contenidos es un
serie de requisitos sobre cómo y cuándo dar para el acceso a dichos servicios. punto de partida excelente a la hora de
pueden los usuarios acceder a los datos. Con un repositorio de contenidos evita- familiarizarnos con la API del Reposito-
Cada usuario tiene sus propias necesi- mos la necesidad de reimplementar rio de Contenidos de Java [1]. La idea
dades con respecto a los datos. Por continuamente los servicios de datos es que la definición de un repositorio es
ejemplo, a uno puede interesarle la bús- con cada aplicación. En lugar de eso, la independiente de las fuentes de datos
queda de determinados contenidos, aplicación simplemente llama a una subyacentes, los protocolos y la arqui-
mientras que otro puede querer que se función a través de la API del reposito- tectura. La API se divide en dos niveles.
le notifiquen ciertos eventos, pero rio. El nivel 1 ofrece la funcionalidad básica
ambos necesitan privilegios para la El repositorio de contenidos combina necesaria para el acceso de lectura,
modificación de contenidos. algunas ventajas de los sistemas de mientras que el nivel 2 soluciona los
En resumen, no basta con ofrecer archivos y de las bases de datos. De los problemas relativos a la modificación
contenidos. El usuario de hoy día – así sistemas de archivos, el repositorio de los datos almacenados.
como el desarrollador de hoy día – adopta el almacenamiento jerárquico de La implementación de la referencia
espera que el contenido venga acompa- archivos sin estructura y los permisos del JCR fue creada por Day Software, de
ñado de una serie de servicios. Por para el control de acceso. En lo que cuyo relevo se encargó la Apache Soft-
ejemplo, las aplicaciones web suelen concierne a las bases de datos, el repo- ware Foundation. Desde entonces, esta
implementar control de acceso, funcio- sitorio también soporta almacena- implementación se ha convertido en un
nes de búsqueda, revisiones y, aunque miento de datos estructurados, consul- exitoso proyecto de código abierto con
el desarrollador podría implementar tas, transacciones y comprobaciones de el nombre de Apache Jackrabbit [2].
todas estas funciones desde cero en la integridad. Los repositorios de conteni- Junto al proyecto se ha creado también
aplicación, es mucho más conveniente dos soportan además funcionalidades una importante comunidad, que conti-

28 Número 43 WWW.LINUX- MAGAZINE.ES


Administración
Reposotorio de Spam
de Contenidos
Jackrabbit •• PORTADA
PORTADA
• EVALUACIÓN
Java

núa impulsando su desarrollo. El repo-


sitorio de Jackrabbit es una rica imple-
mentación del estándar, con un com-
pleto juego de funciones de nivel 1 y
nivel 2. Jackrabbit añade además fun-
cionalidades extra, como la posibilidad
de instalar un cluster del repositorio.
Con Jackrabbit se incluye una aplica-
ción web que nos guía en los primeros
pasos necesarios para la definición de
un repositorio de contenidos. Dicho de
otro modo, con esta aplicación dispone-
mos de una interfaz que nos permite
instalar nuevos repositorios.
Apache Jackrabbit soporta el acceso
al repositorio a través de WebDAV, que
hace más sencillo su montaje, la copia
de cualquier tipo de archivos, la crea-
ción de directorios y la gestión de los Figura 1: El Repositorio de contenidos auna las ventajas de las bases de datos y las de los sis-
contenidos del repositorio. temas de archivos.
La Figura 2 muestra una perspectiva
general del modelo del repositorio: Pre- forma de árbol, donde cada elemento es (cadena de caracteres, número, cadena
senta una estructura jerárquica simple o bien un nodo o una propiedad. Cada binaria, etc).
en forma de árbol con n niveles. La ins- nodo puede o no tener nodos hijos, así Los nodos permiten el almacena-
tancia principal es el repositorio, que como de 0 a n propiedades para el miento en forma jerárquica de, a modo
puede contener una o más áreas de tra- almacenamiento de datos (ver el cuadro de ejemplo, fotografías digitales bajo un
bajo. A su vez, cada espacio de trabajo de texto Tipos). Una propiedad es de un nodo fotos. Otros nodos del repositorio
contiene una serie de elementos en tipo dado y contiene un tipo de dato representan los álbumes de fotos, que
pueden a su vez contener subálbumes.
Listado 1: Acceso al Repositorio Por ejemplo, todas la fotografías toma-
01 InitialContext jndiContext = ... das en Amsterdam en el año 2008
podrían residir bajo /fotos/2008/Amster-
02 Repository repositorio =
dam. Se puede acceder a cada ele-
(Repository)jndiContext.lookup(“MiRepositorio”);
mento, ya se trate de un nodo o de una
03 propiedad, a través de una ruta que
04 // Crear las credenciales comienza por la raíz del repositorio. Por
debajo del nodo Amsterdam hay foto-
05 Credentials credenciales = new SimpleCredentials(
grafías, y cada foto tiene su propio
06 ”carsten”, ”passwordsecreto”.toCharArray()); nodo. Pero un repositorio es más que
07 una simple colección de archivos y
08 // Abrir una sesión directorios. Las propiedades de cada
nodo individual pueden incluir paráme-
09 Session sesion = repositorio.login(credenciales, ”Área de Trabajo
tros útiles para la aplicación web, como
A”);
el flujo binario de la imagen, o paráme-
tros como la fecha de captura de la foto-
Listado 2: Leyendo y Escribiendo en el Repositorio grafía y su localización. Es responsabili-
01 // Tomar el álbum ”/fotos/2008” dad del desarrollador estructurar los
datos en el repositorio de la mejor
02 Node knoten = (Node)sesion.getRootNode().getNode(“fotos/2008”);
forma posible para la aplicación. La
03 // Crear un nuevo álbum documentación del repositorio Jackrab-
04 Node album = node.addNode(“Amsterdam”); bit, así como su wiki [3], nos ofrecen
05 // Añadir una propiedad trucos y consejos para el modelaje de
contenidos.
06 album.setProperty(“Descripción”, ”Fotos de Amsterdam”);
07 album.setProperty(“publico_lectura”, true); La API de Java
08 Para interactuar con el repositorio se
09 // y guardar
requiere la realización de un par de
pasos previos: Los desarrolladores de la
10 sesion.save();
aplicación deben definir primero una

WWW.LINUX- MAGAZINE.ES Número 43 29


EVALUACIÓN
PORTADA • Repositorio
• Jackrabbit
de Contenidos Java

reaccionar las unas con las tras mien-


tras permanecen conectadas. Por ejem-
plo, puede haber muchas aplicaciones
que guarden fotos en un mismo álbum.
El nuevo framework Apache Sling [4]
está basado en un repositorio de conte-
nidos basado a su vez en REST. Cada
petición se empareja con un contenido
del repositorio, para luego seleccionar
un script que se encarga de mostrar
dicho contenido.

Desarrollo: JSR 283


La versión 2 del estándar se encuentra
actualmente en desarrollo bajo la deno-
minación JSR 283. El nuevo estándar,
que se planea esté listo este mismo año,
Figura 2: El modelo de repositorio: El área de trabajo contiene los nodos A, B y C. El nodo A incluirá varias extensiones. El principal
tiene las propiedades x e y. objetivo es la mejora de la gestión del
repositorio y de las funciones de admi-
conexión al repositorio, para crear des- código del Listado 2 consulta un nodo nistración. Por ejemplo, al estándar
pués una sesión para cada usuario indi- (por ejemplo, /fotos/2008) de un reposi- actual no le preocupan ni el control del
vidual. El resto de las acciones usarán torio. Por debajo de éste, crea un nuevo acceso ni la gestión de los tipos de los
esa sesión. El primer paso a dar, necesa- nodo Amsterdam, asigna propiedades y nodos. JSR 283 se ocupará de estos
rio para el acceso al repositorio, no está guarda los cambios. aspectos [5].
definido en el estándar. Dependiendo de La API soporta una función de bús-
cómo esté implementada la infraestruc- queda a través de SQL o XPath para la Futuro
tura, Apache Jackrabbit nos ofrece realización de consultas complejas. Para El proyecto JCR ha convertido la palabra
varios métodos. Uno de ellos usa JNDI mantener un registro de los cambios JCR en sinónimo de repositorio de conte-
(Java Naming and Directory Interface). producidos en el repositorio se referen- nidos. Un repositorio de contenidos se
El código del Listado 1 crea la sesión de cia el EventListeners registrado con la concibe como una infraestructura con
un usuario ficticio. sesión. El usuario puede especificar qué unos servicios definidos. El usuario sólo
El desarrollador puede hacer uso de partes del repositorio monitorizar tiene que preocuparse de la aplicación,
la sesión para la consulta y la modifica- durante el proceso de registro y restrin- mientras que una sola aplicación puede
ción de nodos. Cuando se producen los gir la notificación a cambios y tipos acceder fácilmente a varios repositorios
cambios, no es el repositorio quien los determinados. Con esta última funcio- de contenidos.
guarda; en lugar de eso, se envía un nalidad es sencillo ejecutar un flujo de La flexibilidad de JCR ayuda sobrema-
mensaje a la sesión, lo cual significa trabajo determinado con un tipo especí- nera al programador, que puede apren-
que se pueden guardar múltiples cam- fico de contenido del repositorio. Los derse una sola API y aplicarla a una
bios de una sola vez. Por encima de componentes de las distintas aplicacio- variedad de casos distintos. Además,
esto hay transacciones explícitas. El nes, o las aplicaciones mismas, pueden con Jackrabbit no dependemos de nin-
guna marca comercial y reducimos el
Tipos coste de la migración. ■
Cada nodo tiene exactamente un tipo primario. Este tipo define la estructura del nodo,
por ejemplo, especificando qué propiedades o hijos puede contener. Además del tipo RECURSOS
primario, un nodo puede tener un número indeterminado de mixins. Un mixin es tam- [1] JSR 170: http://www.jcp.org/jsr/
bién una definición de tipo que puede añadir propiedades a un nodo cualquiera. Cada detail/170.jsp
aplicación puede definir sus propios tipos. La combinación de la herencia múltiple y los [2] Apache Jackrabbit: http://jackrabbit.
mixins posibilita una definición de tipos extremadamente flexible y precisa. El estándar apache.org
define varios tipos, como por ejemplo nt:unstructured, con el que se permiten [3] Wiki de Apache Jackrabbit: http://
arbitrariamente árboles de nodos y propiedades. wiki.apache.org/jackrabbit/
Normalmente conviene usar los tipos que ya hay y adaptarlos luego a nuestras propias FrontPage
necesidades. Para el álbum de fotos esto significaría usar algún tipo como nt:folder, [4] Proyecto Apache Sling: http://
que describe un directorio, con nuestro propio mixin aportando información adicional incubator.apache.org/sling
sobre el álbum. A su vez, cada imagen puede ser de tipo nt:file, con un mixin que con- [5] JSR 283: http://jcp.org/en/jsr/
tenga datos específicos de imagen. El uso de tipos estándar ofrece también la ventaja detail?id=283
de simplificar la interacción con aplicaciones de terceros y el manejo que éstas hagan [6] REST explicado: http://www.xfront.
de los datos. com/REST-Web-Services.html

30 Número 43 WWW.LINUX- MAGAZINE.ES

Você também pode gostar