DOCUMENTO DE FORMACIÓN: MANUAL DEL CURSO TÉCNICO Plataforma de objetos

Anuncio
DOCUMENTO DE FORMACIÓN:
MANUAL DEL CURSO TÉCNICO
ver 1.3
Plataforma de objetos
digitales educativos
(AGREGA)
Autor:
Indra Sistemas
Fecha:
Abril del 2009
HISTORIA DEL DOCUMENTO
Versión: V 1.1
Versión: V 1.2
Versión: V 1.3
Descripción: Creación del documento
Elaborado por:
Javier Bermejo del Valle
Alicia Arribas Delgado
Carlos Rubio Muñoz
Francisco Javier Espino
Revisado por:
Calidad
Aprobado por:
Descripción: Adaptación para Tomcat + Oracle y Agrega 1.1.0
Elaborado por:
Javier Bermejo del Valle
Revisado por:
Calidad
Aprobado por:
Descripción: Adaptación Agrega 1.1.1
Elaborado por:
Javier Bermejo del Valle
Revisado por:
Calidad
Aprobado por:
Descripción: Adaptación Agrega 1.1.1
Elaborado por:
Francisco Javier Espino Paisán
Revisado por:
Calidad
Aprobado por:
LISTA DE DISTRIBUCIÓN
Nombre
Equipo de Proyecto
Equipo de Proyecto
Localización
Calidad
Red.es
Fecha: 15/09/2008
Alianza2
Fecha: 22/10/2008
Fecha:
Alianza2
Fecha: 05/12/2008
Fecha: 09/12/2008
Fecha:
Fecha: 18/12/2008
Fecha: 19/12/2008
Fecha:
Fecha: 01/04/2009
Fecha: 02/04/2009
Fecha:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Versión: V 1.0
1
INDICE
INTRODUCCIÓN .......................................................................................................................... 4
1.1.
1.2.
1.3.
2.
OBJETIVO ............................................................................................................................... 4
ESTRUCTURA DEL MANUAL ............................................................................................. 4
ACRÓNIMOS .......................................................................................................................... 4
BLOQUE II: COMPONENTES DE LA PLATAFORMA ....................................................... 21
3.1. INTRODUCCIÓN .................................................................................................................. 21
3.2. CAPA DE DATOS ................................................................................................................. 21
3.2.1.
SISTEMA DE FICHEROS .............................................................................................. 21
3.2.2.
BASE DE DATOS ........................................................................................................... 25
3.2.3.
AUTENTICACIÓN LDAP .............................................................................................. 32
3.3. CAPA DE APLICACIÓN ...................................................................................................... 36
3.3.1.
JDK 1.6 ........................................................................................................................... 36
3.3.2.
SERVIDOR DE APLICACIONES ................................................................................... 39
3.3.3.
GALERÍA DE IMÁGENES ............................................................................................. 87
3.4. CAPA DE SERVIDOR WEB ................................................................................................. 91
3.4.1.
APACHE 2 ...................................................................................................................... 92
3.4.2.
AYUDA MEDIAWIKI ................................................................................................... 101
3.4.3.
PROXY CACHE: SQUID ............................................................................................. 103
4.
Alianza2
BLOQUE I: ARQUITECTURA FÍSICA Y LÓGICA DE LA PLATAFORMA...................... 6
2.1. INTRODUCCIÓN .................................................................................................................... 6
2.2. ARQUITECTURA FÍSICA ...................................................................................................... 7
2.2.1.
APACHE ........................................................................................................................... 8
2.2.2.
JBOSS APPLICATION SERVER / APACHE TOMCAT ................................................... 8
2.2.3.
BASES DE DATOS: MYSQL, ORACLE ........................................................................... 8
2.2.4.
LDAP ................................................................................................................................ 9
2.2.5.
SERVIDOR DE FICHEROS: NFS .................................................................................... 9
2.2.6.
RESUMEN CONEXIONES ESTABLECIDAS .................................................................. 9
2.3. ARQUITECTURA LÓGICA ................................................................................................. 10
2.3.1.
INTRODUCCIÓN ........................................................................................................... 10
2.3.2.
NODO DE OBJETOS DIGITALES EDUCATIVOS ....................................................... 12
3.
Alianza2
BLOQUE III: OPERACIÓN Y MANTENIMIENTO DE LA PLATAFORMA .................. 124
4.1. ARRANQUE Y PARADA DE LOS APLICATIVOS .......................................................... 124
4.1.1.
JBOSS ........................................................................................................................... 124
4.1.2.
TOMCAT ...................................................................................................................... 125
4.1.3.
SERVIDOR DE COLAS APACHE ACTIVEMQ ........................................................... 125
4.1.4.
SERVIDOR WEB APACHE .......................................................................................... 126
4.1.5.
MySQL .......................................................................................................................... 126
4.1.6.
LDAP ............................................................................................................................ 126
4.1.7.
SERVIDOR NFS ........................................................................................................... 127
4.2. FICHEROS DE LOG ............................................................................................................ 127
4.2.1.
JBOSS ........................................................................................................................... 127
4.2.2.
TOMCAT ...................................................................................................................... 128
4.2.3.
APACHE ....................................................................................................................... 129
4.2.4.
MySQL .......................................................................................................................... 130
4.2.5.
LDAP ............................................................................................................................ 131
4.3. BACKUPS............................................................................................................................ 131
4.3.1.
BASE DE DATOS ......................................................................................................... 131
4.3.2.
OPENLDAP .................................................................................................................. 132
4.3.3.
MÓDULOS WAR .......................................................................................................... 133
4.3.4.
ÍNDICES ....................................................................................................................... 133
4.3.5.
INFORMES................................................................................................................... 133
4.3.6.
FICHEROS DE CONFIGURACIÓN DEL PORTAL .................................................... 133
4.3.7.
ESTÁTICOS .................................................................................................................. 134
4.3.8.
PROGRAMACIÓN DE BACKUPS EN CRON ............................................................. 134
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
1.
2
5.
BLOQUE IV: INTEGRACIÓN CON LA PLATAFORMA .................................................. 143
5.1. INTRODUCCIÓN ................................................................................................................ 143
5.2. WEBSERVICES PUBLICADOS ......................................................................................... 143
5.2.1.
BUSCAR ....................................................................................................................... 143
5.2.2.
ENTREGAR .................................................................................................................. 145
5.3. OAIPMH .............................................................................................................................. 149
5.3.1.
INTRODUCCIÓN ......................................................................................................... 149
5.3.2.
IDENTIFY..................................................................................................................... 149
5.3.3.
LISTMETADATAFORMATS ........................................................................................ 151
5.3.4.
LISTSETS ...................................................................................................................... 152
5.3.5.
LISTIDENTIFIERS ....................................................................................................... 152
5.3.6.
GETRECORD ............................................................................................................... 154
5.3.7.
LISTRECORDS ............................................................................................................. 156
5.3.8.
ERRORES ..................................................................................................................... 162
5.4. GESTOR SESIONES ........................................................................................................... 163
5.4.1.
INTRODUCCIÓN ......................................................................................................... 163
5.4.2.
ALCANCE..................................................................................................................... 163
5.4.3.
INTEGRACIÓN A TRAVÉS DE WEB SERVICES ........................................................ 164
5.5. SQI........................................................................................................................................ 166
5.5.1.
INTRODUCCIÓN ......................................................................................................... 166
5.5.2.
ALCANCE..................................................................................................................... 167
5.5.3.
INTEGRACIÓN A TRAVÉS DE WEB SERVICES ........................................................ 168
5.6. DRI ....................................................................................................................................... 174
5.6.1.
INTRODUCCIÓN ......................................................................................................... 174
5.6.2.
ALCANCE..................................................................................................................... 175
5.6.3.
INTEGRACIÓN A TRAVÉS DE WEB SERVICES. ....................................................... 176
6.
REFERENCIAS ......................................................................................................................... 182
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
4.4. MODIFICACIONES FRENTE A CAMBIOS FRECUENTES ............................................ 134
4.4.1.
MODIFICACIÓN DE LA BASE DE DATOS DEL PORTAL AGREGA ....................... 135
4.4.2.
MODIFICACIÓN DE LA BASE DE DATOS DE LA AYUDA MEDIAWIKI ................ 135
4.4.3.
CAMBIO DE DATOS DE CONEXIÓN AL LDAP ........................................................ 135
4.4.4.
CAMBIO DE IP DEL SERVIDOR DE APLICACIONES ............................................. 135
4.4.5.
CAMBIO DE IP DEL SERVIDOR WEB APACHE ...................................................... 136
4.5. TAREAS PLANIFICADAS ................................................................................................. 136
4.5.1.
PARÁMETROS DE CONFIGURACIÓN DEL PLANIFICADOR ................................ 136
4.5.2.
TAREAS ........................................................................................................................ 136
4.6. GENERACIÓN AUTOMÁTICA DE FICHEROS............................................................... 137
4.6.1.
GENERACIÓN DE LOS INFORMES DE PORTADA .................................................. 138
4.6.2.
GENERACIÓN DE LOS FICHEROS SITEMAP .......................................................... 138
4.6.3.
GENERACIÓN DEL CONTENIDO DINÁMICO DE LA PLATAFORMA ................... 138
4.6.4.
GENERACIÓN DEL CATÁLOGO ............................................................................... 138
4.6.5.
GENERACIÓN DE RSS ................................................................................................ 139
4.7. SEGURIDAD ....................................................................................................................... 139
4.7.1.
SEGURIDAD EN JBOSS .............................................................................................. 139
4.7.2.
SEGURIDAD EN TOMCAT ......................................................................................... 140
4.7.3.
SEGURIDAD EN APACHE .......................................................................................... 141
4.8. ACTUALIZACIÓN MEDIAWIKI ...................................................................................... 142
3
1. INTRODUCCIÓN
1.1. OBJETIVO
Alianza2
La plataforma Agrega se concibe como un repositorio de almacenamiento de Objetos
Alianza2
Digitales Educativos en la que se pone a disposición de los usuarios capacidades de
creación, visualización, catalogación y compartición de sus contenidos a través de un
navegador o mediante llamadas webservices.
administradores del software y las máquinas que integran la plataforma, cubriendo las
arquitecturas físicas y lógicas de la plataforma, cada uno de los componentes que integran la
solución y las políticas de operación y mantenimiento necesarias.
1.2. ESTRUCTURA DEL MANUAL
Los contenidos del manual se han estructurado en 3 bloques claramente diferenciados:
1. BLOQUE I: ARQUITECTURA FÍSICA Y LÓGICA DE LA PLATAFORMA
En el primer bloque, se detallará tanto la arquitectura física como la arquitectura
lógica de la plataforma. Durante el desarrollo del capítulo, se analizará la arquitectura
física propuesta por parte de la UTE la cual no siempre reflejará el entorno real de
cada CCAA. Con respecto a la arquitectura lógica, se detallará al máximo las
comunicaciones entre módulos y los servicios existentes.
2. BLOQUE II: COMPONENTES DE LA PLATAFORMA
Partiendo de la clásica arquitectura de 3 niveles o capas para proveer servicios web,
se especificarán uno a uno todos los componentes que forman parte del portal,
haciendo especial hincapié en los ficheros de configuración más relevantes,
procedimientos automatizados ejecutados durante la instalación, etc.
3. BLOQUE III: OPERACIÓN Y MANTENIMIENTO DE LA PLATAFORMA
Por último, una vez comprendida la solución (y los componentes que la integran), se
analizarán las recomendaciones para la operación y mantenimiento de la plataforma.
Las tareas descritas en este bloque, pretenden ayudar al administrador facilitándole
procesos comunes a ejecutar, cambios a realizar ante modificaciones habituales, etc.
1.3. ACRÓNIMOS

CN: Common Name

DN: Distinguished Name
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
El presente documento es el manual para el curso de formación técnica destinado a los
4
DRI: Digital Repositories Interoperability

JbossAS: JBoss Application Server

JDK: Java Development Kit

JVM: Java Virtual Machine

LDAP: Lightweight Directory Access Protocol

NFS: Network File System

OAIPMH: Open Archives Initiative Protocol for Metadata Harvesting

ODE: Objeto Digital Educativo

PODE: Plataforma de Objetos Digitales Educativos

SOA: Service Oriented Architecture

SQI: Simple Query Interface
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico

5
2. BLOQUE I: ARQUITECTURA FÍSICA Y LÓGICA DE
LA PLATAFORMA
Alianza2
2.1. INTRODUCCIÓN
Alianza2
En el bloque actual describiremos la arquitectura física y lógica de un nodo de la plataforma.
Un nodo operativo esta formado por un conjunto de servicios (que pueden ejecutarse en una
o varias máquinas físicas o virtualizadas diferentes) formando así una aplicación web
Un nodo responde a la arquitectura de 3 capas o niveles empleada típicamente en los
portales web:
Apache
Capa servidor Web
PHP (MediaWiki)
Squid (caché opcional)
JBoss Application Server / Apache Tomcat
Capa de aplicación
JDK 1.6
Galería de Imágenes
NFS
Capa de datos
Base de datos (MySQL)
LDAP
La capa del servidor web se encuentra formada por la aplicación de Apache, sobre la cual se
instalará el módulo de PHP 5.X y la ayuda que se encuentra elaborada sobre la aplicación
MediaWiki 1.12.0.
En la capa de aplicación encontramos la JDK 1.6.0, el servidor de aplicaciones JBoss o
Apache Tomcat (aunque no se trate de un servidor de aplicaciones J2EE compatible,
añadiendo un sistema de colas como ActiveMQ permite el despliegue de Agrega) y por
último la galería de imágenes. En secciones posteriores entraremos en detalle sobre los
mismos.
Por último, la capa de datos debe ofrecer un directorio compartido visible desde el Apache y
el servidor de aplicaciones (típicamente vía NFS aunque valdrían otras soluciones), una base
de datos (en nuestro caso MySQL) sobre la cual se crearán las tablas y usuarios tanto de la
plataforma como de la ayuda MediaWiki, y por último debe existir un servicio de LDAP
corriendo para la autenticación de los usuarios.
En la siguiente sección describiremos una arquitectura física modelo que puede no coincidir
con la instalación real. Desde el punto de vista arquitectónico, se podrían instalar todas las
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
completa, el portal Agrega.
6
capas en una misma máquina física, pero se desaconseja por razones tanto de rendimiento
como de seguridad.
2.2. ARQUITECTURA FÍSICA
Alianza2
Alianza2
La arquitectura física (modelo de referencia) que se plantea es la que se muestra en la
siguiente figura:
Router
FIREWALL
DMZ
Servidor Web
APACHE
INTERNET
FIREWALL
Interno
Red De Datos
Red De Aplicación
:8080
:8009
:3306/:1521
Servidor de BBDD
MYSQL/Oracle
Servidor Aplicaciones
JBOSS/Tomcat
:389
Servidor de Directorios
OpenLDAP
Red De Almacenamiento
:2049
Servidor de Archivos
NFS
En el diagrama mostrado se ha optado por independizar cada servicio en una máquina
diferente, no obstante, no es estrictamente necesario que en producción se dispongan de
tantas máquinas físicas como servicios. Como regla general es conveniente dejar el servidor
web Apache en la zona desmilitarizada (DMZ) por razones de seguridad, y en caso necesario
el servidor que alberga la base de datos podría también albergar el LDAP.
Debido a la carga de CPU, número de ficheros abiertos y número de conexiones se
recomienda que el servidor donde se ejecuta el servidor de aplicaciones se ejecute sobre
una máquina física sin compartir recursos con otros servicios.
NOTA: para simplificar la figura no se han representado las redes de gestión que suelen
existir para la propia gestión de las máquinas, sin embargo, si se han diferenciado las redes
de aplicación de las redes de almacenamiento.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
:80
:443
7
2.2.1.
APACHE
Por razones de seguridad se propone que el servidor web Apache se instale en la zona
desmilitarizada (DMZ). El servidor web atenderá peticiones en el puerto 80 (HTTP) y 443
Alianza2
(HTTPS). Accederá por medio de cortafuegos a la red interna al puerto 8009 (Conector AJP)
del servidor de aplicaciones JBoss.
Alianza2
Hay que tener en cuenta que la ayuda (MediaWiki) es un módulo PHP que se ejecutará
sobre Apache y que realizará conexiones a la base de datos MySQL. Es posible crear una
base de datos aislada para tal propósito, incluso instalarla en la propia máquina de Apache si
en limitar el acceso de los usuarios a la base de datos por dirección IP.
A la hora de instalar Apache debemos decidir si deseamos que sirva directamente los
contenidos estáticos, para lo cual, será necesario que éstos se instalen en una partición
compartida accesible tanto desde el servidor de aplicaciones como desde Apache, o si por el
contrario, por cada petición queremos que se redirija al servidor de aplicaciones (aunque se
traten de contenidos estáticos tales como CSS, JS, GIF…). En función de una u otra opción
será necesario o no configurar el espacio de disco compartido por NFS.
2.2.2.
JBOSS APPLICATION SERVER / APACHE TOMCAT
La aplicación del portal de Agrega se desplegará sobre el servidor de aplicaciones JBoss o
Tomcat los cuales se ejecutarán con la versión JDK 1.6. Desde el servidor se necesitará
tener acceso tanto al servidor LDAP (para autenticar a los usuarios) como a la base de datos
(para autorizar, cargar contenidos, localizar, noticias, faq…). Es obligatorio que el servidor
disponga de un volumen montado con gran capacidad de almacenamiento (ya sea desde un
servidor con un array de discos exportados por NFS o bien directamente discos locales al
servidor).
Si se decide que Apache sirva directamente los contenidos estáticos, es necesario que el
servidor de aplicaciones haga uso del directorio compartido exportado por NFS para que
dichos contenidos puedan ser servidos directamente desde el servidor web.
Adicionalmente, es posible desplegar Agrega sobre el contenedor de servlets Apache
Tomcat 5.X o superior junto con un sistemas de colas JMS como Apache ActiveMQ.
2.2.3.
BASES DE DATOS: MYSQL, ORACLE
La plataforma de Agrega necesita hacer uso de una base de datos, en concreto, de MySQL
(también es posible ejecutar el portal con otras bases de datos como por ejemplo Oracle). En
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
no queremos abrir conexiones hacia nuestra base de datos interna. La mejor opción consiste
8
la base de datos del portal se albergarán las tablas relacionadas con el uso y funcionamiento
de Agrega (auditoria, búsquedas realizadas, localizador de ficheros en disco, noticias,
categorías, roles de usuarios…) y en la base de datos de la Mediawiki se almacenarán todos
los textos de la ayuda (el dump que se ofrece de la ayuda Wiki corresponde con una base de
Alianza2
datos MySQL).
Alianza2
Hay que tener en cuenta que, al encontrarse la ayuda basada en el software libre de
MediaWiki, se ejecuta directamente sobre Apache (es una aplicación PHP). Con el fin de
securizar al máximo la plataforma se sugiere que se configuren los usuarios de conexión
desde la MediaWiki especificando las IPs permitidas y dando acceso únicamente a la base
2.2.4.
LDAP
El portal de Agrega se autentica contra el LDAP haciendo el uso de la operación “bind”. Si la
comunidad autónoma ya dispone de un LDAP, durante la instalación bastaría con crear la
nueva estructura del portal y los usuarios iniciales, configurando posteriormente el acceso al
mismo desde la configuración del portal. Si no se tuviera ningún LDAP, se recomienda la
instalación de OpenLDAP v2.
2.2.5.
SERVIDOR DE FICHEROS: NFS
En el caso de desear servir los ficheros estáticos directamente desde Apache, es necesario
que algún servicio exporte vía NFS un directorio compartido montado desde Apache y el
servidor de aplicaciones. En ese directorio compartido encontraremos no sólo los ficheros
estáticos de la apariencia del portal (CSS, JS, GIF…) sino que también encontraremos todos
los recursos de los ODEs cargados en la misma (por ejemplo un recurso puede ser una
secuencia animada flash, un fichero OGG, un video AVI…).
2.2.6.
RESUMEN CONEXIONES ESTABLECIDAS
Las conexiones que se deben tener en cuenta en las conectividades (rutas) y reglas de los
firewalls son las siguientes:
Host Origen
Puerto Origen
Host Destino
Puerto Destino
* (ANY)
* (ANY)
* (ANY)
* (ANY)
Apache
Apache
80
443
Apache
Apache
* (ANY)
* (ANY)
JBoss/Tomcat
MySQL
8009
3306
JBoss/Tomcat
JBoss/Tomcat
* (ANY)
* (ANY)
LDAP
MySQL/Oracle
389
3306/1521
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
de datos de la MediaWiki.
9
Con el fin de ilustrar las conexiones establecidas, mostramos la siguiente figura:
Router FIREWALL
INTERNET
DMZ
Alianza2
:80
:443
Alianza2
Servidor Web
APACHE
:3306
FIREWALL
Interno
:8009
Red De Datos
Red De Aplicación
Servidor de BBDD
MYSQL/Oracle
Servidor de Directorios
OpenLDAP
:3306/:1521
:389
Red De Almacenamiento
:2049
Servidor de Archivos
NFS
2.3. ARQUITECTURA LÓGICA
2.3.1.
INTRODUCCIÓN
La plataforma se desarrolla con la tecnología Java (J2EE v1.4) y tiene una Arquitectura
Orientada a Servicios (SOA) donde el papel del proveedor de servicios lo interpretará el
Nodo de Objetos Educativos Digitales y el papel consumidor lo interpretarán las Aplicaciones
Clientes, según el siguiente esquema:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Servidor Aplicaciones
JBOSS
10
Alianza2
La Arquitectura Orientada a Servicios (SOA), define los servicios de los cuales estará
compuesto el sistema y sus interacciones. Desde el punto de vista del consumidor, los
servicios son conceptualmente similares a los componentes tradicionales, salvo que los
servicios encapsulan sus propios datos y no forman parte, estrictamente hablando, de la
aplicación sino que son utilizados por ésta.
Otra de las facetas interesantes de la arquitectura SOA es que permite realizar aplicaciones
modulares que exponen la lógica de negocio que se decida para ser consumida por terceros.
Destacamos el componente de Interfaz de Interoperabilidad que se basa en el estándar de
interoperabilidad de Repositorios de IMS (IMS-DRI), que proporciona la funcionalidad básica
para explotar los objetos digitales presentes en el repositorio (Buscar, presentar y
almacenar). La tecnología que los implementa es la de Web Services que proporciona el
sustento de servicios de una arquitectura orientada a servicios.
Las búsquedas de contenidos se realizarán con un sistema federal basado en la
especificación Simple Query Interface (SQI). Al estar SQI promovido por la Comisión
Europea, su adopción facilitará la integración de la Plataforma en las redes europeas de
repositorios educativos. En la definición de los servicios no incluidos en IMS DRI que deban
incorporarse a la Interfaz de Interoperabilidad se tomará como fuente de inspiración las Open
Service Interface Definitions (OSIDs) elaboradas por el MIT en Open Knowledge Initiative
(OKI).
El Nodo incorpora un repositorio que almacena los contenidos empaquetados conforme al
estándar SCORM 2004, aunque proporcionará paquetes en los formatos SCORM 2004,
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Alianza2
11
SCORM 1.2 e IMS-CP. La información de catalogación se almacena conforme al estándar
LOM v.1.0 en español (LOMES).
Como parte de las aplicaciones cliente, se desarrolla un portal, denominado Portal M.E.C.,
Alianza2
que sirve de escaparate al proyecto y que permite a sus visitantes el acceso a los contenidos
Alianza2
públicos albergados en cualquiera de los nodos de la Plataforma. Además, se implementa
una estructura de portal en cada Comunidad Autónoma, denominada Portal CC.AA., que
permite crear instancias del mismo adaptándolas a las necesidades específicas.
NODO DE OBJETOS DIGITALES EDUCATIVOS
En la siguiente figura se representa la estructura del Nodo:
SISTEMA DE ALMACENAMIENTO
La naturaleza de la información manejada por la Plataforma es muy heterogénea y por ello
se propone utilizar al menos tres sistemas:

Directorio LDAP: en él se almacenará la información utilizada en los módulos de
autenticación.

Sistema de ficheros en disco: se utilizará para aquella información que, de forma
natural, se suele almacenar en archivos, por ejemplo: contenidos, metainformación LOM,
trazas del sistema de auditoria, logs, etc.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
2.3.2.
12

Base de datos: la mayor parte de la información manejada por la Plataforma será
almacenada en el sistema de ficheros. Parcialmente existirán datos que por su
naturaleza (carácter relacional), serán almacenados en una base de datos relacional.
Alianza2
CAPA DE ACCESO A DATOS
Alianza2
Este elemento de la arquitectura tiene como objetivo proporcionar a los módulos funcionales
un elevado nivel de abstracción sobre los detalles referentes a cómo los objetos persisten en
el sistema de almacenamiento. De esta forma la implementación de los módulos funcionales
MÓDULOS FUNCIONALES E INTERFAZ DE INTEROPERABILIDAD
Cada módulo funcional encapsula e implementa un conjunto de servicios que serán ofertados
al resto de elementos que componen el sistema, utilizando para ello una o varias interfaces
bien definidas.
Entre los servicios que se ofrecen, destacamos:
Componente
Descripción
Componente encargado de la orquestación de los diferentes servicios
lógicos que componen el nodo de forma que permita ofrecer al exterior
una capa de webservices, denominada Interfaz de interoperabilidad
con las funcionalidades de Presentar / Almacenar, Buscar / Mostrar y
Solicitar / Entregar.
Este componente será el encargado de recibir las peticiones del
exterior y transformarlas en el lenguaje entendible por cada uno de los
servicios lógicos que utilice, por ejemplo de VSQI a LQS.

Expone: Este componente ofrece un único interfaz hacia al exterior
con, al menos, los métodos anteriormente nombrados. Este
interfaz será consumido por los el resto de nodos que implementen
DRI
el protocolo DRI.

Consume / Utiliza: El componente para ofrecer su funcionalidad
se apoyará en los servicios de la capa de organización ofrecidos
por los componentes
o
Publicar,
con
el
objetivo
de
poder
realizar
la
funcionalidad de Presentar / Almacenar.
o
Buscar, con el objetivo de ofrecer el Buscar / Mostrar.
o
Entregar, con el fin de ofrecer la funcionalidad
necesaria y definida por DRI para el Solicitar /
Entregar.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
se centrará en la lógica de negocio.
13
Componente
Descripción
Componente encargado de la coreografía de los diferentes servicios
lógicos que compondrán el nodo de forma que se permita a
buscadores tipo Google, tener información acerca de los contenidos
Alianza2
digitales almacenados en el repositorio que expone el nodo cumpliendo
Alianza2
el protocolo. Para ello los metadatos que se van a devolver por parte
de este componente serán del tipo Dublín Core.
Al igual que el componente anterior la exposición del servicio hacia el
exterior será a través de webservices.

Expone: Este componente ofrece un interfaz único al exterior que
protocolo PMH.

Consume / Utiliza: Este componente consume servicios ofrecidos
por los componentes siguientes:
o
Buscar: Con el objetivo de obtener todos los objetos
digitales existentes dentro del repositorio que hayan
cambiado desde la última búsqueda que se realizó.
o
Validador / Transformador: Para transformar los
metadatos LOM-ES al formato soportado por el
protocolo PMH de Dublín Core.
Componente
encargado
de
ofrecer
servicios
de
búsqueda
y
transformar las diferentes búsquedas en el lenguaje entendible por el
servicio de Buscador / Indexador.

Expone: Este componente expone dos interfaces uno encargado
de las búsquedas locales, utilizado por los componentes DRI y
OAI-PMH, con el objetivo de devolver objetos únicamente
existentes en el nodo otro de búsquedas federadas utilizado por
las herramientas propias del sistema así como para las búsquedas
Buscar
internas. No obstante si desde la herramienta se decide que no se
hagan búsquedas federadas este componente será capaz de
utilizar la búsqueda local internamente.

Consume / Utiliza: Este componente consume servicios ofrecidos
por los componentes siguientes:
o
Indexador / Buscador: Con el objetivo de realizar las
búsquedas sobre el motor de búsqueda y los índices
en función de la petición que se reciba.
Componente encargado
Empaquetador
Empaquetación
de
de ofrecer
forma
que
servicios
gestiona
la
principalmente al
funcionalidad
de
empaquetado de un usuario en su propio lugar de trabajo dentro del
repositorio. Su ámbito llega hasta que el objeto digital es propuesto
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
será consumido únicamente por los sistemas que comprendan el
OAI-PMH
14
Componente
Descripción
para publicación y éste pasa al entorno del componente de
Publicación.

Expone: Este componente expone un único interfaz encargado de
Alianza2
gestionar las diferentes acciones que el usuario realice sobre el
Alianza2
interfaz de usuario. Así será el encargado de guardar y modificar
entre otros.

Consume / Utiliza: Este componente consume servicios ofrecidos
por los componentes siguientes:
o
Localizador: Con el objetivo de obtener en qué parte
o
Validador / Transformador: Para poder realizar las
validaciones correspondientes sobre el estándar de
empaquetado SCORM2004.
o
Catalogación: Se utilizará, por ejemplo, para el
empaquetador básico, ya que el sistema deberá ir
catalogando ciertos campos del contenido de forma
interna.
o
Publicación: Se utilizará, para indicar que un objeto ha
comenzado su ciclo de vida y por tanto se encuentra
en estado de CREACIÓN.
Componente encargado de ofrecer servicios al Gestor de Flujo de
forma que gestiona el flujo de publicación seguido por un contenido
digital.
También proporciona al componente DRI el servicio y la funcionalidad
que se expone en el interfaz de interoperabilidad de Presentar /
Almacenar.
Será el encargado de generar los identificadores MEC a asignar a los
ODEs que se publiquen.

Expone: Este componente expone dos interfaces uno encargado
de gestionar el flujo de publicación de los contenidos digitales
Publicación
existentes en el repositorio y de dar soporte a las solicitudes desde
la herramienta de publicación y el segundo interfaz se encarga de
dar soporte a las peticiones remotas de Presentar / Almacenar.

Consume / Utiliza: Este componente consume servicios ofrecidos
por los componentes siguientes:
o
Localizador: Con el objetivo de obtener en qué parte
del repositorio se va a almacenar el contenido.
o
Indexador / Buscador: Ya que si un objeto es publicado
en el repositorio éste debe ser localizable mediante
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
del repositorio se va a almacenar el contenido.
15
Componente
Descripción
una búsqueda por ello es necesario que el contenido
se indexe. Además si el contenido es despublicado o
eliminado se debe quitar del índice.
o
Alianza2
Validador / Transformador: Utilizado para validar los
Alianza2
objetos que una vez credos se va a proponer y/o a
publicar. Solo un objeto correcto y válido podrá ser
propuesto y / o publicado.
Componente encargado de ofrecer los servicios para poder consumir
los objetos digitales existentes en el repositorio. Estos objetos digitales
sea con secuencia guiada no condicionada o sin secuencia. Este último
caso se dará tanto si el contenido no soporta secuencia como si es
solicitado a través del componente DRI por cuestión de rendimiento.
Los objetos digitales también se podrán devolver en forma de PIF en
diferentes formatos SCORM 2004 (con o sin submanifiesto), SCORM
1.2 e IMS CP.
Además, este componente sirve de puente de información entre los
distintos módulos de presentación y el previsualizador. Así será
utilizado por parte del empaquetador, para dejar el ODE en fase de
creación para previsualizarlo.
Este módulo además permitirá las descargas de los ODEs disponibles
en la plataforma. Se llamará, por tanto desde el buscador.
Entregar

Expone: Este componente expone dos interfaces, uno encargado
de gestionar y entregar los paquetes a peticiones externas de
previsualización o a peticiones de paquetes PIF en cualquiera de
los formatos soportados. Y el otro interfaz encargado de dar
soporte a las peticiones internas y que por tanto podrá soportar las
secuencias guiadas no condicionadas.

Consume / Utiliza: Este componente consume servicios ofrecidos
por los componentes siguientes:
o
Localizador: Con el objetivo de obtener en qué parte
del repositorio se va a encuentra almacenado el
contenido.
o
Validador / Transformador: Utilizado para transformar
los
contenidos
digitales
empaquetados
en
el
repositorio, de SCORM 2004 a cualquiera de los otros
formatos soportados.
Componente encargado de ofrecer los servicios para poder catalogar,
Catalogación
según el estándar LOM-ES, los distintos contenidos generados y / o
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
se pueden previsualizar si la llamada proviene del previsualizador, ya
16
Componente
Descripción
almacenados en el repositorio.

Expone: Este componente expone un único interfaz utilizado por la
herramienta de Catalogación para dar respuesta a las peticiones
Alianza2
del usuario.

Alianza2
Consume / Utiliza: Este componente consume servicios ofrecidos
por los componentes siguientes:
o
Fuentes Taxonómicas: Lo utiliza para enlazar las
diferentes
fuentes
taxonómicas
y
vocabularios
controlados con el Catalogador así como para obtener
este componente.
o
Validador / Transformador: Este componente es
utilizado con el fin de poder validar contra el esquema
del LOM-ES que la catalogación realizada es la
correcta.
Componente encargado de ofrecer los servicios para poder realizar
operaciones sobre los contenidos que se publicarán en el portal,
entendiendo como contenidos, las noticias, los feeds y las descargas.
Este componente, por un lado dará soporte al portal de administración
por el cual se podrán introducir y dar de alta nuevos elementos de los
anteriormente enumerados y por otro lado al portal público de la
Contenidos
Portales
aplicación en el que los usuarios podrán visualizar las noticias y los
feeds o descargarse los recursos puestos a su disposición.

Expone: Este componente expone un único interfaz utilizado,
como se acaba de comentar, por el Portal de Administración y por
otro lado por el Portal público.

Consume / Utiliza: Este componente es autocontenido y toda la
información que necesita la posee en su interior por lo que no
consume ningún servicio.
Componente que implementa los servicios de la herramienta de
modificación introducida en el cambio C14. Permite configurar tareas
para la modificación en bloque de múltiples ODEs y se encarga de
ejecutar dichas tareas y generar informe de resultados.

Modificador
Expone: Este componente expone un único interfaz utilizado por la
capa de presentación de la Herramienta de modificación. El
interfaz expone métodos para la configuración / modificación
eliminación de tareas, ejecución y visualización de resultados.

Consume / Utiliza: Este componente consume servicios ofrecidos
por los componentes siguientes:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
la estructura educativa y curricular almacenada por
17
Componente
o
Descripción
Validador. Se utiliza para validar los ODEs que han
sido modificados por una tarea.
o
Publicador. En el caso de que un ODE modificado
Alianza2
estuviera publicado en el repositorio del nodo, el
Alianza2
publicador se encarga de su reindexación.
o
Fuentes Taxonómicas: Ofrece la información necesaria
para configurar modificaciones sobre catalogaciones
LOM-ES
(vocabularios
controlados
y
rutas
taxonómicas).
Planificador: Permite programar la ejecución diferida
de las tareas configuradas.
Componente que se encargará de la gestión de la valoración que se dé
por parte de los usuarios a los contenidos. La valoración es un campo
que influye en la indexación por ello se encargará también de reindexar
los objetos dentro del índice.

Expone: Este componente expone un único interfaz utilizado por el
sistema de reputación que permitirá dar de alta un comentario y
una valoración asociada a un ODE así como mostrar los
Valoración
comentarios previamente creados, de forma que el componente de
Informes pueda realizar consultas sobre este campo.

Consume / Utiliza: Este componente consume servicios ofrecidos
por los componentes siguientes:
o
Indexador / Buscador: Se utiliza para reindexar un
documento sobre el que se ha modificado su
valoración.
Componente que conforma un recubrimiento lógico del interfaz
propuesto por la librería de indexación y búsqueda de Apache
Lucene. Se encarga por tanto de la indexación de todos los ODE, así
como de proporcionar la búsqueda de los mismos. Esta búsqueda se
limita a la búsqueda local dentro del nodo, ya que la búsqueda
federada es controlada desde el elemento federador que es el
Indexador
Buscador
y
componente Buscar.

Expone: Este componente expone dos interfaces uno para que se
realicen búsquedas sobre los índices y otro, para, precisamente,
realizar los índices.

Consume / Utiliza: Este componente es auto contenido y conoce
los objetos a indexar y el lenguaje de búsqueda por tanto, no
necesita la utilización de ningún otro componente.
Fuentes
Taxonómicas
Componente que engloba la gestión y explotación de las fuentes
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
o
18
Componente
Descripción
taxonómicas, los tesauros, árboles curriculares y los vocabularios
controlados. Éstos se importan conforme a un esquema previamente
definido en formato IMS VDEX. Se utilizarán diferentes formatos
Alianza2
dependiendo de la naturaleza de la fuente taxonómica (organización
Alianza2
jerárquica o tesauros).
Además, permite realizar las traducciones de los elementos existentes
en dichos vocabularios controlados. Se usa, por tanto por el buscador
avanzado, para rellenar sus campos de búsqueda así como para
mostrar el árbol curricular.
Expone: Este componente expone dos interfaces, una para el
tratamiento de fuentes taxonómicas y otro para el de vocabularios
controlados. Ambos son utilizados por el componente Catalogación
con el objetivo de, por ejemplo, asignar un ODE a un determinado
objetivo curricular.

Consume / Utiliza: Este componente es auto contenido y conoce
cómo gestionar las diferentes taxonomías, tesauros y vocabularios
controlados.
Además de los servicios enumerados que son consumidos o utilizados por los componentes
anteriormente descritos, cabe destacar que todos ellos utilizarán el interfaz propuesto por el
componente de Seguridad para comprobar si quien accede está o no autorizado a realizar
una u otra determinada operación, así como el interfaz ofrecido por el componente de
Auditoria para dejar rastro de la operación realizada.
El despliegue de los componentes citados se realiza sobre el servidor de aplicaciones
mediante ficheros WAR. Gracias a la arquitectura SOA empleada algunos servicios
(ofrecidos por determinados WARs) podrían ser desplegados en diferentes servidores de
aplicaciones y todos los servicios que se necesitaran consumir o proveer se accederían a
través de los WebServices publicados.
Desde el punto de vista del servidor de aplicaciones, podemos ver el portal Agrega mediante
la clásica arquitectura de 3 niveles o capas:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico

19
Capa
Presentación
Web
Buscador
Empaquetador
Catalogador
Gestor
Flujo
Previsualizador
Visualizador
Contenidos
Portal
Alianza2
Portal
Administración
Modificador
Alianza2
Publicación Servicios Web
Capa
Negocio
Buscar
Empaquetación
Publicación
Entregar
Catalogación
Contenidos
Portal
Valoración
DRI
OAIPMH
Publicación Servicios Web
Validador
Capa
Datos
Indexador
Sistema de Ficheros
Auditoría
Planificador
V
Base de Datos
Admin
Usuarios
Fuentes
Taxonómicas
Localizador
LDAP
Los usuarios se conectan mediante el navegador a los módulos web (WARs desplegados)
que exponen la parte visual del portal. Cada módulo de la capa de presentación puede
consumir uno o más servicios de los publicados en la capa de negocio, quienes a su vez,
hacen uso de la capa de datos correspondiente. Dentro de la capa de negocio encontramos
módulos orquestadores que consumen uno o más subservicios para acometer su objetivo.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
A
20
3. BLOQUE II: COMPONENTES DE LA PLATAFORMA
3.1. INTRODUCCIÓN
Alianza2
En el presente bloque analizaremos todos los componentes que forman la plataforma,
Alianza2
describiremos la funcionalidad requerida, los ficheros de configuración destacables, los
scripts empleados durante la instalación y por último especificaremos como comprobar el
correcto funcionamiento de los mismos.
El portal Agrega, en función de la naturaleza de los datos a consultar o almacenar, hace uso
de 3 recursos diferentes a la hora de almacenar la información:

Ficheros en disco

Base de datos

Directorio LDAP
3.2.1.
SISTEMA DE FICHEROS
INTRODUCCIÓN
En función del número de recursos educativos a almacenar por parte del portal será
necesario disponer de un determinado espacio en disco. Los discos pueden ser montados
directamente en la máquina a través de cualquier array o librería de discos, conexiones SCSI
directas, etc. Los contenidos que se albergarán en el sistema de ficheros son:

Repositorio de ODEs: cada ODE estará formado por una estructura de meta información,
ficheros XML… y los recursos propios del objeto digital educativo, como pueden ser
imágenes, animaciones flash, videos, sonidos mp3, ogg…

Esquemas XML

Plantillas

Informes: reportes generados por la aplicación BIRT.

Miniaturas (previsualizaciones) de los objetos capturadas por la galería de imágenes.

Descargas disponibles desde la plataforma (herramienta offline…)

Logs
Comúnmente, en los CPDs se suele disponer de servidores dedicados que exportan vía NFS
los volúmenes lógicos definidos a partir de las librerías de discos que tienen conectados. En
el caso de la plataforma Agrega, asumiremos que existe un servidor con discos conectados
(no es tema de discusión de este manual cómo conectar los discos al servidor) que exportará
vía NFS el directorio compartido, directorio que montará tanto el servidor del JBoss como el
servidor web Apache.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
3.2. CAPA DE DATOS
21
NOTA: Si no existiera el servidor dedicado NFS con los discos compartidos, el espacio
estuviera disponible directamente desde la máquina del servidor de aplicaciones, y se
deseara que Apache pudiera acceder también al espacio para servir directamente los
contenidos, se tendría que aplicar de igual manera la política de exportación/importación
Alianza2
teniendo en cuenta que el exportador en lugar de ser el servidor NFS sería el servidor de
Alianza2
aplicaciones y que el importador sería únicamente el servidor Apache.
Servidor Aplicaciones
JBOSS/Tomcat
Red De Almacenamiento
Servidor de Archivos
NFS
En la figura anterior se representa cómo el servidor de archivos NFS exporta un directorio
tanto al servidor JBoss/Tomcat como al servidor Apache.
SERVIDOR NFS
El servidor de archivos NFS será un servidor con uno o varios discos de gran capacidad
conectados (usando LVM o no) con la capacidad de exportarlos vía NFS. Aconsejamos que
el sistema de ficheros de la unidad exportada sea ReiserFS o XFS (en un anexo posterior se
explica cómo conseguir soporte XFS en un sistema operativo GNU/Linux) debido a las
menores restricciones que se imponen en cuanto a máximo tamaño de ficheros, máximo
número de subdirectorios por directorio, etc.
Los archivos de configuración a tener en cuenta son:
1. /etc/exports
2. /etc/hosts.allow
3. /etc/hosts.deny
El contenido del fichero /etc/exports es:
<directorio> <ip1>(opciones1) <ip2>(opciones2)
#Ejemplo /export
10.0.0.0/8(rw,no_root_squash)
En donde:

<directorio> es el directorio que queremos compartir

<ip1> <ip2> son las direcciones IPs, o direcciones de red (A.B.C.D/mascara)
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Servidor Web
APACHE
22

Opciones: especificamos el acceso que la máquina a la que exportamos tendrá sobre el
directorio. Destacamos:
o
ro: montaríamos el directorio de solo lectura
o
rw: el cliente puede leer y escribir
o
no_root_squash: por defecto, si en la máquina cliente el usuario root crea un
Alianza2
Alianza2
fichero, en el servidor NFS se trata como si lo creara el usuario nobody. Si
seleccionamos la opción no_root_squash, si en la máquina cliente root crea
un fichero, en la máquina servidor será también creado con el usuario root.
o
sync: el comando de exportfs usa un comportamiento asíncrono, indicando al
cliente que la escritura del fichero se ha completado cuando NFS ha
de
gestionar
la
escritura
en
el
filesystem
local.
Este
comportamiento puede causar corrupción de datos si el servidor reinicia. El
flag sync previene este fallo.
Los ficheros /etc/hosts.allow y /etc/hosts.deny especifican direcciones IPs (también valen
rangos con máscara) que pueden utilizar los servicios especificados en nuestro servidor
NFS. Cuando un cliente se conecta, se realizan las siguientes comprobaciones en el
siguiente orden:

Primero se comprueba si el cliente que conecta se encuentra en el fichero hosts.allow. Si
es así se le permite el acceso.

Si no se encontraba en el fichero anterior, se comprueba si el cliente está especificado
en el fichero hosts.deny. En caso afirmativo, se le deniega el acceso.

Si el cliente no se encontraba ni en el fichero hosts.allow ni en el fichero hosts.deny, se le
permite el acceso.
En nuestro caso, con el fin de protegernos frente a escrituras no autorizadas en el disco
compartido (desde otras máquinas que no sean ni el servidor de aplicaciones ni el servidor
Apache), configuraríamos el fichero /etc/hosts.allow de la siguiente manera:
portmap: <ip_jboss>, <ip_apache>
lockd: <ip_jboss>, <ip_apache>
rquotad: <ip_jboss>, <ip_apache>
mountd: <ip_jboss>, <ip_apache>
statd: <ip_jboss>, <ip_apache>
Y el fichero /etc/hosts.deny denegando el acceso a todos los demás:
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
Una vez configurados los ficheros anteriores, deberemos tener un kernel 2.4.X o superior con
soporte NFS-server, los binarios del nfs-server (en cada distribución el paquete se llamará de
una manera u otra) y el proceso de arranque generalmente será:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
terminado
23
/etc/init.d/nfs start
Los procesos que se deben arrancar con el comando anterior son el portmapper y los 5
demonios: rpc.portmap, rpc.mountd, rpc.nfsd, rpc.statd, rpc.lockd y rpc.rquotad.
Alianza2
Alianza2
Para comprobar que se encuentra correctamente arrancado ejecutamos el comando:
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 629 status
100024 1 tcp 632 status
100011 1 udp 969 rquotad
100011 2 udp 969 rquotad
100011 1 tcp 972 rquotad
100011 2 tcp 972 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 udp 32768 nlockmgr
100021 3 udp 32768 nlockmgr
100021 4 udp 32768 nlockmgr
100021 1 tcp 32768 nlockmgr
100021 3 tcp 32768 nlockmgr
100021 4 tcp 32768 nlockmgr
100005 1 udp 994 mountd
100005 1 tcp 997 mountd
100005 2 udp 994 mountd
100005 2 tcp 997 mountd
100005 3 udp 994 mountd
100005 3 tcp 997 mountd
CLIENTE NFS
Como prerrequisito el kernel del sistema operativo del cliente NFS debe tener soporte para el
sistema de ficheros NFS. En caso de no tenerlo es necesario actualizar el kernel a uno que si
lo tenga.
Para configurar que se monten las unidades de red NFS automáticamente durante el
arranque es necesario configurar el fichero /etc/fstab agregando la siguiente línea:
# device
10.175.0.100:/export

mountpoint
/export
fs-type
nfs
options
defaults
dump
0
fsckorder
0
En device especificamos la dirección ip seguida del directorio compartido del
servidor NFS a montar.

En mountpoint especificamos el punto de anclaje local, es decir, en que directorio
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
rpcinfo -p localhost y deberíamos obtener una salida como la siguiente:
del cliente se va a montar el directorio de la unidad de red remota.
24

El fs-type ha de ser nfs.

En opciones especificamos que usaremos las opciones por defecto
La próxima vez que reiniciemos la máquina se montará automáticamente el directorio
Alianza2
remoto. Para comprobar que se realizará correctamente podemos ejecutar el comando:
Alianza2
“mount /export” para que se efectúe el montado en el momento.
ANEXO: SOPORTE XFS
XFS es un sistema de archivos de 64 bits con journaling de alto rendimiento creado por SGI.
estable).
Además, es posible aumentar la capacidad de sistemas de ficheros XFS: xfsgrowfs es ideal
para particiones LVM.
Para poder emplear XFS necesitamos satisfacer 2 requerimientos:

Kernel con soporte para el sistema de ficheros XFS

Paquete con utilidades para gestionar la partición XFS
Para comprobar si nuestro kernel tiene soporte XFS compilado como módulo podemos
ejecutar el siguiente comando:
ls /lib/modules/$(uname -r)/kernel/fs/xfs*
Si el comando anterior muestra en la salida xfs.ko significa que nuestro kernel tiene soporte.
Podría darse el caso en el cual el soporte XFS no estuviera compilado como módulo pero si
directamente (incluido en la imagen de kernel), para ello deberíamos comprobar el log de
arranque: dmesg | grep –i xfs
Una vez que tenemos soporte XFS en el kernel, necesitamos tener instalado el paquete
xfsprogs, que contiene las herramientas necesarias para poder crear y gestionar el sistema
de ficheros. Entre los comandos más importantes destacamos:

mkfs.xfs: crea el sistema de ficheros XFS.

fsck.xfs: comprueba que la partición no tiene errores.

xfs_growfs: permite redimensionar las particiones XFS aprovechando sus
capacidades LVM.
3.2.2.
BASE DE DATOS
INTRODUCCIÓN
El portal almacenará cierta información de naturaleza relacional en la base de datos. Por
ejemplo:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Se incorporó en la versión 2.4.25 del kernel de Linux (por considerarse suficientemente
25

Histórico de búsquedas realizadas (para su posterior explotación mediante
informes)

Comentarios

Información relacionada con las descargas

Noticias

Datos de los nodos de la federación

Tareas planificadas

Información sobre los Usuarios, Grupos y Roles

Etc
Alianza2
Alianza2
en principio la conexión a base de datos debería ser transparente de cara a los desarrollos.
Al haberse programado las sentencias SQL en el lenguaje HQL (propio de Hibernate), es
éste quien realiza las traducciones para los diferentes dialectos de base de datos: Oracle,
PostgreSQL, MySQL…
MySQL
Con el fin de ilustrar una base de datos en el manual, se escoge MySQL por su carácter de
software libre y su amplia instalación en la mayor parte de las comunidades.
Las conexiones a la base de datos se realizarán desde el servidor Apache (ayuda MediaWiki)
y desde el servidor de aplicaciones (portal Agrega).
FIREWALL
DMZ
Servidor Web
APACHE
:3306
FIREWALL
Interno
Red De Datos
Red De Aplicación
Servidor Aplicaciones
JBOSS/Tomcat
Servidor de BBDD
MYSQL
:3306
Red De Almacenamiento
Para el correcto funcionamiento del portal, se instalará la versión 5.0 o superior del servidor
MySQL. El proceso completo de instalación no es objeto de este manual, ya que se
encuentra ampliamente explicado tanto en el manual de instalación y operación de la
plataforma así como en la documentación oficial de MySQL (ver referencias al final del
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Puesto que la capa de persistencia del portal se realiza a través del framework Hibernate 3,
26
documento). Sin embargo, vamos a destacar archivos de configuración importantes,
procedimientos de creación de la base de datos y carga de los datos iniciales.
SERVIDOR MySQL
Alianza2
Una vez instalado el servidor MySQL (por ejemplo, versión 5.0.22 o superior) procederemos
Alianza2
de la siguiente manera:
1. Revisamos la configuración del fichero /etc/my.cnf
Por defecto en la instalación de MySQL existen varios archivos de configuración de
referencia para diferentes tamaños de bases de datos: my-small.cnf, my-medium.cnf, my-
fichero de configuración my-large.cnf. En el fichero my.cnf se configuran los siguientes
parámetros importantes, a destacar:
# Example MySQL config file for large systems.
#
# This is for a large system with memory = 512M where the system runs mainly
# MySQL.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/lib/mysql) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.
# The following options will be passed to all MySQL clients
[client]
#password
= your_password
port
= 3306
socket
= /var/lib/mysql/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
port
= 3306
socket
= /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 2560M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8
default-storage-engine=InnoDB
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
large.cnf, y my-huge.cnf. Asumiendo que tenemos 512 MBytes de memoria partiremos del
27
max_connections=250
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
Alianza2
Alianza2
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id
=1
# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) # the syntax is:
#
# CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
# MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
# where you replace <host>, <user>, <password> by quoted strings and
# <port> by the master's port number (3306 by default).
#
# Example:
#
# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
# MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
# start replication for the first time (even unsuccessfully, for example
# if you mistyped the password in master-password and the slave fails to
# connect), the slave will create a master.info file, and any later
# change in this file to the variables' values below will be ignored and
# overridden by the content of the master.info file, unless you shutdown
# the slave server, delete master.info and restart the slaver server.
# For that reason, you may want to leave the lines below untouched
# (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id
=2
#
# The replication master for this slave - required
#master-host = <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
28
#master-user = <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password = <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port = <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin
# Uncomment the following if you are using BDB tables
#bdb_cache_size = 64M
#bdb_max_lock = 100000
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:100M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 64M
innodb_log_file_size = 200M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[isamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
# Point the following paths to different dedicated disks
#tmpdir
= /tmp/
#log-update = /path-to-dedicated-directory/hostname
Alianza2
29
1. Arrancamos el demonio
En los casos de Linux, generalmente se ha creado un script de arranque en /etc/init.d/.
Ejecutamos el siguiente comando:
Alianza2
/etc/init.d/mysqld start
Alianza2
2. Agregamos una contraseña para el usuario root:
mysqladmin -u root password 'password'
3. Nos conectamos con el usuario root al servidor MySQL
mysql -u root –p –h <ip_mysql_server>
create database agrega;
5. Creamos el usuario agrega_user con permisos de inserción, modificación,
eliminación de registros y consulta de las tablas de la base de datos Agrega:
grant
insert,
update,
delete,
select
on
agrega_user@'somehost' identified by 'password';
agrega.*
to
flush privileges;
Donde somehost es la dirección IP o subred (por ejemplo: 10.1.2.*) desde la cual
queremos dejar acceder al usuario y donde password es la contraseña. Para mayor
seguridad especificaremos la IP desde la cual accede el servidor JBoss.
6. Creamos la base de datos para la ayuda (Mediawiki)
create database wikidb;
7. Creamos el usuario wiki_user con acceso de escritura, modificación, borrado y
consulta de las tablas de la base de datos wikidb:
grant
insert,
update,
delete,
select
on
wikidb.*
to
wiki_user@'somehost' identified by 'password';
flush privileges;
Especificaremos en somehost la dirección IP desde la cual accede el servidor Apache o
la subred en la cual se encuentran los servidores Apaches (en caso de tener más de
uno).
BASE DE DATOS: AGREGA
Habiendo creado ya la base de datos y el usuario agrega_user, durante la instalación del
nodo se ejecutaron los siguientes scripts SQL:

CrearTablas.sql
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
4. Creamos la base de datos para Agrega
30
El cometido del script consiste en crear toda la estructura de tablas necesarias para
el correcto funcionamiento del portal Agrega, además de crear los índices y las
contraints necesarias.

CargarDatos.sql
Alianza2
Una vez creadas todas las tablas, índices y restricciones, se procede a hacer una
carga inicial de datos necesarios (idiomas, localización de los índices, FAQs iniciales,
etc).
Alianza2
Los comandos SLQ empleados fueron:
Nótese que es necesario conectar con el usuario root (o cualquier otro con privilegios para la
creación de tablas) ya que el usuario agrega_user únicamente tiene permisos de inserción,
modificación, eliminación y consulta de registros pero no de creación o borrado de tablas.
Para comprobar que la creación del usuario y las inserciones han sido correctas, podemos
ejecutar (desde la máquina que se autorizó al crear al usuario si tiene instalado el cliente
mysql) los siguientes comandos:
mysql –u agrega_user –p –h <ip_mysql_server>
use agrega;
show tables;
BASE DE DATOS: AYUDA
Una vez creados tanto la base de datos wikidb como el usuario wiki_user, procedemos a
insertar tanto las tablas como los contenidos de las mismas a partir de un dump generado:
mysql -u root -p –h <ip_mysql_server> wikidb < wikidb.sql
De nuevo, al igual que en el caso anterior, debemos ejecutar la inserción del dump con el
usuario root puesto que wiki_user no tiene permisos de creación / borrado de tablas.
Para comprobar que la creación del usuario y las inserciones han sido correctas, podemos
ejecutar (desde la máquina que se autorizó al crear al usuario si tiene instalado el cliente
mysql) los siguientes comandos:
mysql –u wiki_user –p –h <ip_mysql_server>
use wikidb;
show tables;
ORACLE
Las conexiones a la base de datos Oracle se realizarán únicamente desde el servidor de
aplicaciones (portal Agrega).
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
mysql –u root –p –h <ip_mysql_server>
use agrega;
source CrearTablas.sql;
source CargarDatos.sql;
commit;
31
FIREWALL
DMZ
Servidor Web
APACHE
Alianza2
Alianza2
FIREWALL
Interno
Red De Datos
Red De Aplicación
Servidor Aplicaciones
JBOSS/Tomcat
Servidor de BBDD
Oracle
Red De Almacenamiento
Durante el proceso de instalación se ejecutaron los siguientes pasos:
1. Con un usuario con permisos de DBA se ejecuta el script de creación de tablespace y
usuario que se encuentra en el directorio bbdd_oracle:
 agrega_tablespace_user.sql
2. Con un usuario con permiso para la creación de tablas e índices debemos cargar los
scripts que se encuentran en el directorio bbdd_oracle, pudiéndose distinguir tres tipos
de scripts:
 bbdd_<modulo>.sql
Scripts de creación de las tablas, índices, restricciones…
 datos_<modulo>.sql
Scripts SQL para la inserción de datos iniciales necesarios en las tablas del portal.
Adicionalmente a los scripts anteriores se facilitan unos scripts para el borrado
de las tablas y restricciones existentes:

bbdd_<modulo>_drop.sql
Scripts para el borrado de las tablas, índices, restricciones…
3.2.3.
AUTENTICACIÓN LDAP
INTRODUCCIÓN
El modo de acceso a la aplicación y a los distintos módulos funcionales se realizará a través
del navegador web utilizando los protocolos HTTP y HTTPS para la autenticación del usuario
en el portal. El sistema pedirá un login y una clave al usuario que validará mediante la
operación Bind contra un directorio LDAP, el cual puede ser propio de la CCAA o interno del
nodo, en donde residirá por cada usuario un identificador único y una clave cifradas con la
función SHA-1.
Si la autenticación es correcta, el portal continuará con la carga adquiriendo los roles de la
base de datos (para la autorización de los accesos a los diferentes componentes del portal).
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
:1521
32
En caso contrario, se deniega el login y se notifica al usuario el error. Se controlará el tiempo
de sesión (timeout de sesión) del usuario, de tal manera que cuando el usuario no mantenga
actividad durante un periodo configurable entre 20 y 30 minutos, se le cerrará la sesión y se
le obligará a autenticarse de nuevo para reiniciar la sesión.
Alianza2
Alianza2
Desde la plataforma Agrega, únicamente desde el servidor de aplicaciones JBoss se
efectuarán las conexiones al servidor LDAP, típicamente escuchando en el puerto 389 tal y
como muestra la siguiente figura:
HTTP 80
HTTPS 443
FIREWALL
Interno
Red De Aplicación
Servidor de Directorios
OpenLDAP
Servidor Aplicaciones
JBOSS/Tomcat
BIND
:389
Red De Almacenamiento
Si existieran varios servidores de aplicación en cluster, todos y cada uno de ellos
establecerían la conexión con el servidor de directorios LDAP.
OPENLDAP
La información relativa a los usuarios utilizada por el proceso de autenticación se almacenará
en un directorio LDAP. Si la CCAA tuviera instalado un LDAP versión 3 se podría utilizar el
mismo. En el caso en el cual no se deseara reutilizar un LDAP existente o se prefiriera
instalar un nuevo LDAP, recomendamos OpenLDAP 2.2.13 o superior.
El proceso de instalación completo viene descrito en el manual de instalación y operación de
la plataforma y en la referencia (página oficial). Una vez instalado OpenLDAP, configuramos
el
servidor
mediante
el
archivo
de
configuración
/etc/openldap/slapd.conf:
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include
/etc/openldap/schema/core.schema
include
/etc/openldap/schema/cosine.schema
include
/etc/openldap/schema/inetorgperson.schema
presente
en
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Login:
Pass:
33

allow bind_v2
Permitimos conexiones por parte de clientes usando LDAPv2.

suffix "dc=agrega,dc=<nodo>,dc=es"
Especificamos el sufijo DN (Distinguished Name) para las consultas que será pasado a la
base de datos del LDAP. Se pueden especificar múltiples sufijos mediante múltiples
líneas y al menos una entrada es requerida por cada definición de base de datos.

rootdn "cn=Administrador,dc=agrega,dc=<nodo>,dc=es"
Mediante esta directiva especificamos el DN que no se encuentra sujeto a controles de
acceso o restricciones administrativos para operaciones sobre la base de datos.
Como norma general cambiaremos <nodo> por el nombre del nodo de la CCAA.

rootpw {password}
Especificamos la contraseña para el DN rootdn. Se puede especificar en texto plano:
rootpw secret
Aunque también se permite dar la password generada mediante la función hash con el
comando slappaswd:
slappasswd -s secret
Ejemplo:
rootpw {SSHA}ZKKuqbEKJfKSXhUbHG3fG8MDn9j1v4QN

directory /var/lib/ldap
Mediante esta directiva especificamos el directorio donde se almacenan los ficheros BDB
que contienen la base de datos y los índices asociados.
Una vez configurado el servicio de LDAP procedemos crear la base de datos mediante el
método offline. Para ello empleamos el comando:
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
include
/etc/openldap/schema/nis.schema
# Allow LDAPv2 client connections. This is NOT the default.
allow bind_v2
pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args
loglevel 256
#######################################################################
# ldbm and/or bdb database definitions
#######################################################################
database
bdb
suffix
"dc=agrega,dc=<nodo>,dc=es"
rootdn
"cn=Administrador,dc=agrega,dc=<nodo>,dc=es"
# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw
{password}
# rootpw
{crypt}ijFYNcSNctBYg
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory
/var/lib/ldap
# Indices to maintain for this database
index objectClass
eq,pres
index ou,cn,mail,surname,givenname
eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid
eq,pres,sub
index nisMapName,nisMapEntry
eq,pres,sub
34
slapadd -l cargaInicial.ldif
El contenido de la cargaInicial.ldif es:
Alianza2
dn: dc=agrega,dc=indra,dc=es
dc: agrega
objectClass: dcObject
objectClass: organization
o: agrega
Alianza2
dn: ou=users,dc=agrega,dc=indra,dc=es
ou: users
objectClass: top
objectClass: organizationalUnit
dn: dc=<sitio>,dc=agrega,dc=indra,dc=es
dc: <sitio>
objectClass: dcObject
objectClass: organization
o: <sitio>
dn: ou=usuarios,dc=<sitio>,dc=agrega,dc=indra,dc=es
ou: usuarios
objectClass: top
objectClass: organizationalUnit
dn: cn=administrador,ou=usuarios,dc=<sitio>,dc=agrega,dc=indra,dc=es
userPassword:: e1NIQX1OV29aSzNrVHNFeFVWMDBZd28xRzVqbFVLS3M9
objectClass: top
objectClass: person
sn: Administrador admin
cn: administrador
dn: ou=rol,dc=<sitio>,dc=agrega,dc=indra,dc=es
ou: rol
objectClass: top
objectClass: organizationalUnit
En donde se sustituirá <sitio> por el nombre del nodo de la CCAA. Gráficamente podemos
ver el contenido del LDIF:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
dn: cn=Administrador,dc=agrega,dc=indra,dc=es
objectClass: organizationalRole
cn: Administrador
35
Para comprobar el correcto funcionamiento de LDAP podemos usar un navegador de LDAP
como son LDAP Browser y Apache Directory Studio. La conexión se verá definida por los
siguientes parámetros:

IP del servidor LDAP

Puerto de conexión: normalmente 389

Bind DN: cn=Administrador,dc=agrega,dc=indra,dc=es

Bind Password: la contraseña que hemos especificado.
Alianza2
Alianza2
En la capa de aplicación encontramos 3 componentes fundamentales:

JDK 1.6: Es necesario disponer de la versión JDK 1.6 o superior para poder
ejecutar tanto el servidor de aplicaciones como la galería de imágenes.

Servidor de aplicaciones: el portal Agrega (desarrollo J2EE 1.4) se puede
desplegar sobre el servidor de aplicaciones JBoss así como sobre el contenedor
de Servlets Apache Tomcat junto con un servidor de colas Apache ActiveMQ.

Galería de imágenes: cada vez que se carga un ODE en la plataforma, se genera
una captura de pantalla (previsualización o thumbnail) del recurso, para ello, se
hace uso de diversas herramientas de software libre tales como ffmpeg, convert,
firefox…
La versión de Agrega referenciada en el manual es la 1.1.1.
3.3.1.
JDK 1.6
La versión mínima para ejecutar la plataforma es de Java 1.5, pero por razones de
rendimiento y actualizaciones se aconseja la utilización de la JDK 1.6u6 o superior. Una vez
instalada es importante modificar el perfil del usuario que arrancará el jboss configurando las
siguientes variables de entorno:
1. Se recomienda crear el enlace simbólico /opt/jdk que apunte al directorio real donde
se ha instalado la JDK con el fin de independizar las variables de entorno de la
versión de JDK instalada.
Por ejemplo: ln -s /usr/java/jdk1.6.0_06/ jdk
2. Editamos el /etc/profile añadiendo las dos exportaciones siguientes:
export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME/bin
Para comprobar que se ha instalado la JDK correctamente, basta con salir de la shell, hacer
de nuevo logging en el sistema y ejecutar el comando:
java -version
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
3.3. CAPA DE APLICACIÓN
36
CONFIGURANDO JAVA HOTSPOT VM
En las referencias especificadas para JDK se describen todos los parámetros y los efectos
producidos sobre la JVM, entre los más importantes destacamos:
Alianza2
Parámetro
-Xms
Descripción
Establecemos el tamaño mínimo de pila
-Xmx
Establecemos el tamaño máximo de pila
Alianza2
Tamaño de la generación permanente.
-XX:ThreadStackSize
Se necesita para la carga de los metadatos de las clases.
Tamaño de la pila de threads (en KBytes)
En cuanto a la memoria, veamos con un poco más de detalle la importancia de escoger
correctamente los valores -Xms y –Xmx:
En la figura apreciamos la diferencia entre el espacio reservado y el espacio virtual de la pila.
Al arrancar la JVM, todo el espacio de la pila es reservado. El tamaño del espacio reservado
se especifica mediante la opción –Xmx. Si el valor de –Xms es inferior que el valor –Xmx, no
todo el espacio reservado es inmediatamente volcado a la JVM. El espacio no volcado se
denomina “virtual” en la figura. Las diferentes partes de la pila (permanent generation,
tenured generation y young generation) pueden crecer mientras lo necesiten hasta el límite
de cada espacio virtual.
En la inicialización de la JVM, el tamaño máximo de espacio es virtualmente reservado pero
no reservado de la memoria física a menos que se necesite. El rango de espacio completo
reservado por un objeto en memoria se puede dividir dentro de la young generation y tenured
generation.
La young generation consiste en el eden más dos espacios survivor. Los objetos cuando son
creados son inicialmente ubicados en el eden. Un espacio survivor está vacío todo el tiempo,
y sirve como destino entre la copia de colecciones de objetos vivos en el eden y el otro
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
-XX:MaxPermSize
37
espacio survivor. Los objetos se copian entre los espacios survivor hasta que son lo
suficientemente viejos, momento en el cual son copiados a la tenured generation.
Existe una tercera generación denominada permanent generation. En ella se mantienen los
Alianza2
datos necesarios para la JVM que describen los objetos que no tienen una equivalencia
Alianza2
directa en el lenguaje Java, por ejemplo, los objetos que describen clases y métodos se
almacenan en la permanent generation.
Así pues, el tamaño total ocupado por la JVM será el valor Xmx + MaxPermSize (dicho valor,
nunca debe superar la memoria física real del servidor para evitar la swap).
se agregan 3 colectores adicionales. Cada uno está implementado o para enfatizar el
throughput de la aplicación o para minimizar los tiempos de pausa por la recolección de
basura. Por defecto, se emplea el Serial collector con el cual la recolección se realiza en un
único thread y es ejecutado en serie junto con la aplicación.
Los otros recolectores posibles son:
1. Throughput collector: emplea una versión paralela del recolector de basura de la
memoria young generation. Para habilitarlo hay que emplear la opción –
XX:+UseParallelGC desde la línea de comandos. La memoria tenured generation es
recolectada con el recolector serie estándar.
2. Concurrent low pause collector: se habilita usando la opción –Xincgc o XX:+UseConcMarkSweepGC desde la línea de comandos. Se emplea para
recolectar la tenured generation y lo realiza concurrentemente con la ejecución de la
aplicación. La aplicación se ve pausada cortos periodos de tiempo durante la
recolección.
3. Incremental low pause collector (train): no ha cambiado desde la versión 1.4.2 y
actualmente no se encuentra en desarrollo activo (no será soportado en futuras
releases probablemente). Para usarlo se habilita mediante la propiedad XX:+UseTrainGC.
NOTA: en sistemas de 64 bits donde los tamaños de páginas sean mayores se recomienda
usar el recolector Concurrent low pause collector.
Las recomendaciones oficiales de Sun para el uso de los distintos recolectores son las
siguientes:
Garbage
Collector
Throughput
collector
Recomendación
Se emplea cuando se desea mejorar el rendimiento de la aplicación y
disponemos de múltiples procesadores. Las recolecciones mayores o
completas son iguales que en el recolector serie, sin embargo, en un host
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Con respecto al recolector de basura (garbage collector, GC), en la plataforma 1.5 de Java
38
con N CPUs, usará N hilos recolectores para las recolecciones menores o
parciales.
Si la aplicación puede permitirse compartir los recursos de procesadores
Concurrent
con el recolector mientras se está ejecutando podemos beneficiarnos de
low pause
menores pausas durante la recolección. Típicamente las aplicaciones que
collector
tienen datos que permanecen en memoria durante bastante tiempo y con
Alianza2
Alianza2
uno o dos procesadores.
Incremental
concurrentemente por el recolector se divide en pequeñas porciones de
low pause
tiempo programadas entre las recolecciones de la memoria young
collector
generation. Es útil cuando tenemos aplicaciones que necesitan pausas
cortas y se ejecutan en máquinas con sólo 1 o 2 procesadores.
3.3.2.
SERVIDOR DE APLICACIONES
INTRODUCCIÓN
El portal Agrega es un desarrollo J2EE que puede ser desplegado en cualquier contenedor
de aplicaciones J2EE compatible (versión 1.4). Debido a las características técnicas, la
comunidad open source que existe a su alrededor, la estabilidad mostrada en entornos de
producción y las continuas mejoras y evoluciones hemos seleccionado a JBoss como el
servidor de aplicaciones de referencia.
NOTA: A lo largo de la sección, se hará referencia a $JBOSS_HOME como el directorio
donde se ha instalado el jboss; por ejemplo: /opt/jboss-4.0.5.GA/. El alias $TOMCAT_HOME
se empleará para hacer referencia al directorio donde se encuentra instalado Apache
Tomcat, por ejemplo: /opt/tomcat/apache-tomcat-5.5.27/.
En adelante se empleará el alias $APPSERVER_HOME para referirse a $JBOSS_HOME o
$TOMCAT_HOME según corresponda.
COMPROBACIONES PREVIAS DE SISTEMA
APERTURA DE FICHEROS
Se comprueba que no exista límite de apertura de ficheros (open files) con el comando
ulimit -a
Si existe alguna limitación se deben agregar las siguientes líneas en el fichero /etc/limits.conf:
* soft nofile
* hard nofile
65530
65535
MÁXIMO NÚMERO DE SOCKETS DE RED
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
El modo incremental se consigue gracias a que el trabajo realizado
39
Para comprobar el valor actual empleamos el siguiente comando:
sysctl -a |grep -i somaxconn
Si el límite son 128 deberemos ampliarlo a un valor superior a 1024 (se recomienda 4096).
Para ello, en el fichero /etc/sysctl.conf agregamos la línea:
Alianza2
net.core.somaxconn = 4096
También podemos cambiar en caliente el valor (para no tener que reiniciar el servidor)
Alianza2
mediante el comando: sysctl –w net.core.somaxconn=4096
NOTA: es necesario reiniciar el servidor para que ambos cambios efectuados sean tenidos
SERVIDOR DE APLICACIONES JBOSS
USUARIO Y GRUPO JBOSS
Se recomienda que el proceso de JBossAS sea lanzado por un usuario (diferente de root)
con permisos adecuados, así garantizaremos que el usuario pueda escribir en los diferentes
directorios necesarios para el correcto funcionamiento del portal.
Los pasos a dar serían los siguientes:
1. Creamos el grupo jboss
groupadd jboss
2. Creamos el usuario jboss en el grupo primario jboss (-g) con la consola bash (-s),
creando un home para el usuario si no existe (-m) en el home /opt/jboss (-d)
useradd -g jboss -s /bin/bash -m -d /opt/jboss jboss
3. Establecemos un password para el usuario jboss
passwd jboss
Para comprobar que los pasos se han realizado correctamente, podemos probar a entrar en
el host con el usuario jboss y la password establecida.
Directorio $JBOSS_HOME/bin. Scripts de arranque.
Dentro del directorio bin, JBoss almacena los scripts de arranque tanto para sistemas Linux
como para Windows (run.sh y run.bat respectivamente).
run.conf
Adicionalmente, existe un fichero denominado run.conf que contiene los parámetros a pasar
a la máquina virtual de Java (JVM) para el arranque del JBoss.
En concreto, la línea que nos interesa es:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
en cuenta.
40
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS="-Xms128m -Xmx512m
Dsun.rmi.dgc.server.gcInterval=3600000"
fi
-Dsun.rmi.dgc.client.gcInterval=3600000
-
Alianza2
Completamos dicha línea, eliminando los parámetros -Dsun.rmi.dgc.* y agregando otros
nuevos, quedando así:
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS="-Xms512m
Djava.awt.headless=true"
fi
Alianza2
–Xmx1536m
-XX:MaxPermSize=786m
-
que estamos indicando parámetros tales como las reservas de memoria, el comportamiento
de AWT, etc.
Una vez comprendido como la JVM hace uso de la memoria reservada, podemos aplicar
unas recomendaciones prácticas de los valores en función de la memoria total del sistema
(asumiendo que el mayor consumo de memoria en el servidor será el JBoss y no hay otros
servicios que hagan un uso intensivo de memoria como pueden ser una BD, un LDAP…)
Memoria física Servidor
1 GB
2 GB
2.5 GB
4 GB
-Xms
256m
512m
512m
512m
-Xmx
512m
1024m
1536m
2560m
-XX:MaxPermSize
384m
768m
768m
768m
Adicionalmente, en aquellos casos en los que la salida a los puertos 80 y 443 (HTTP y
HTTPS respectivamente) se realice a través de un proxy, es posible configurarlo
directamente sobre la JVM mediante las opciones siguientes:
# Proxy settings for JVM
JAVA_OPTS="$JAVA_OPTS
-Dhttp.proxyHost=<proxy_ip> -Dhttp.proxyPort=<proxy_port>
-Dhttp.proxyUser=<usuario> -Dhttp.proxyPassword=<pass>
-Dhttp.nonProxyHosts=localhost|<domino>|<cas-domino>"
NOTA: el portal, una vez cargado todos los módulos, con menos de 2 GB de RAM tendrá que
hacer uso de la memoria SWAP con la consiguiente pérdida de rendimiento que ello implica.
/etc/init.d/jboss y run.sh
Al realizar la instalación, en los sistemas Linux, en el directorio bin se encuentra el fichero
“jboss_init_redhat.sh”, fichero que se suele copiar al directorio /etc/init.d/ para el arranque y
parada del servidor. En el script, se añade una línea para que lea el fichero /etc/jboss.conf
que contiene las siguientes líneas:
JBOSS_HOME=/opt/jboss
JBOSS_USER=jboss
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Es fundamental configurar correctamente los parámetros de la JVM que arrancará JBoss, ya
41
El contenido del script /etc/init.d/jboss es el siguiente:
#!/bin/sh
#
# $Id: jboss_init_redhat.sh 46554 2006-07-28 10:29:13Z dimitris $
#
# JBoss Control Script
#
# To use this script run it as root - it will switch to the specified user
#
# Here is a little (and extremely primitive) startup/shutdown script
# for RedHat systems. It assumes that JBoss lives in /usr/local/jboss,
# it's run by user 'jboss' and JDK binaries are in /usr/local/jdk/bin.
# All this can be changed in the script itself.
#
# Either modify this script for your requirements or just ensure that
# the following variables are set correctly before calling the script.
Alianza2
#define where jboss is - this is the directory containing directories log, bin, conf etc
. /etc/jboss.conf
JBOSS_HOME=${JBOSS_HOME:-"/opt/jboss"}
#define the user under which jboss will run, or use 'RUNASIS' to run as the current user
JBOSS_USER=${JBOSS_USER:-"jboss"}
#make sure java is in your path
JAVAPTH=${JAVAPTH:-"/opt/jdk/bin"}
#configuration to use, usually one of 'minimal', 'default', 'all'
JBOSS_CONF=${JBOSS_CONF:-"default"}
#bind address for jboss services, by default bind to *all* NICs
JBOSS_HOST=${JBOSS_HOST:-"0.0.0.0"}
#define the classpath for the shutdown class
JBOSSCP=${JBOSSCP:-"$JBOSS_HOME/bin/shutdown.jar:$JBOSS_HOME/client/jnet.jar"}
#define the script to use to start jboss
JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh
$JBOSS_HOST"}
-c
$JBOSS_CONF
if [ "$JBOSS_USER" = "RUNASIS" ]; then
SUBIT=""
else
SUBIT="su - $JBOSS_USER -c "
fi
if [ -n "$JBOSS_CONSOLE" -a ! -d "$JBOSS_CONSOLE" ]; then
# ensure the file exists
touch $JBOSS_CONSOLE
if [ ! -z "$SUBIT" ]; then
chown $JBOSS_USER $JBOSS_CONSOLE
fi
fi
if [ -n "$JBOSS_CONSOLE" -a ! -f "$JBOSS_CONSOLE" ]; then
echo "WARNING: location for saving console log invalid: $JBOSS_CONSOLE"
echo "WARNING: ignoring it and using /dev/null"
JBOSS_CONSOLE="/dev/null"
fi
-b
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Alianza2
42
#define what will be done with the console log
JBOSS_CONSOLE=${JBOSS_CONSOLE:-"/dev/null"}
JBOSS_CMD_START="cd $JBOSS_HOME; $JBOSSSH"
JBOSS_CMD_STOP=${JBOSS_CMD_STOP:-"java
-classpath
org.jboss.Shutdown --shutdown"}
Alianza2
$JBOSSCP
Alianza2
if [ ! -d "$JBOSS_HOME" ]; then
echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME
exit 1
fi
echo JBOSS_CMD_START = $JBOSS_CMD_START
case "$1" in
start)
cd $JBOSS_HOME/bin
if [ -z "$SUBIT" ]; then
eval $JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &
else
$SUBIT "$JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &"
fi
;;
stop)
if [ -z "$SUBIT" ]; then
$JBOSS_CMD_STOP
else
$SUBIT "$JBOSS_CMD_STOP"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "usage: $0 (start|stop|restart|help)"
esac
Se han destacado 4 líneas en negrita:

./etc/jboss.conf
Especificamos que se lea el fichero con las variables de entorno ya comentadas
anteriormente.
 JAVAPTH=${JAVAPTH:-"/opt/jdk/bin"}
Indicamos el directorio donde se encuentran los binarios de la JDK.

JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh
-c
$JBOSS_CONF
-b
$JBOSS_HOST"}
Ejecutamos el script run.sh con los parámetros –c default (valor de la variable
JBOSS_CONF por defecto) y con el parámetro –b 0.0.0.0 (bind en todas las
direcciones IPs de la máquina).
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then
export PATH=$PATH:$JAVAPTH
fi
43
Si se deseara que JBoss solo escuchara en una interfaz de red de entre todas las
disponibles de la máquina deberíamos especificarle la variable de entorno
JBOSS_HOST en el fichero /etc/jboss.conf.

Alianza2
Alianza2
JBOSS_CMD_START="cd $JBOSS_HOME; $JBOSSSH"
Es importante destacar que se ha modificado la línea para que el path desde el cual
se ejecuta el JBoss sea el propio $JBOSS_HOME y no $JBOSS_HOME/bin como
Ficheros de configuración de JBoss
Los ficheros de configuración relevantes para la correcta configuración de la plataforma
Agrega son los siguientes:
Configuración de los conectores de JBoss: HTTP y AJP
En el fichero $JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/server.xml se
configuran los parámetros de los conectores HTTP y AJP:
<!-- A HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"/>
<!-- A AJP 1.3 Connector on port 8009 -->
<Connector port="8009" address="${jboss.bind.address}"
emptySessionPath="true" enableLookups="false" redirectPort="8443"
protocol="AJP/1.3" maxThreads="400" connectionTimeout="600000"/>
Con respecto al conector AJP, que es quien recibirá las peticiones de Apache, en la wiki
oficial de JBoss especificada en las referencias aconsejan una configuración de 200 threads
por CPU, por lo que para una máquina con 2 CPUs el valor recomendado sería
maxThreads=”400”. El tiempo máximo de conexión debe ser igual al valor configurado en los
workers de Apache (se describirá en detalle en la sección de Apache).
Veamos los parámetros más importantes de configuración de ambos conectores:
Parámetro
HTTP
Descripción
Valor por
defecto
La longitud máxima de la cola de conexiones
entrantes cuando todos los hilos que atienden
acceptCount
peticiones están en uso. Cualquier petición de
conexión que se reciba cuando todos los threads
100
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
especifica el fichero original de la distribución de JBoss.
44
estén en uso será rechazada.
El
número
de
milisegundos
que
el
conector
esperará, después de aceptar una conexión, hasta
connectionTimeout
que se le solicite la petición de URI.
60.000
(60 sg)
Alianza2
Este flag permite al contenedor de servlets usar un
disableUploadTimeout
tiempo máximo de espera diferente mientras se esta
Alianza2
true
ejecutando el servlet.
maxHttpHeaderSize
petición y de la respuesta (especificado en bytes).
4096
bytes
(4
KB)
Máximo número de peticiones HTTP que pueden ser
encoladas hasta que el servidor cierra la conexión.
Si se especifica un valor de 1 se desactivará el
maxKeepAliveRequests
HTTP/1.0 keep-alive y HTTP/1.1 keep-alive y
100
pipelining.
Si se especifica el valor -1 se permitirán infinitas
peticiones encoladas.
El máximo número de hilos procesadores de
peticiones sin usar que pueden existir hasta que el
maxSpareThreads
pool
de
hilos
comienza
a
parar
los
hilos
50
innecesarios.
El máximo número de hilos procesadores de
peticiones creados por el conector. Determina el
maxThreads
máximo número de peticiones simultáneas que
200
pueden ser procesadas.
Número
minSpareThreads
de
hilos
procesadores
de
peticiones
creados cuando el conector arranca.
4
El puerto TCP sobre el cual el conector creará el
port
socket servidor de Java esperando peticiones
-
entrantes.
AJP
Parámetro
Descripción
Valor por
defecto
El número de milisegundos que el conector esperará,
connectionTimeout
después de aceptar una conexión, hasta que se le
Infinito
solicite la petición de URI.
El máximo número de hilos procesadores de peticiones
maxSpareThreads
sin usar que pueden existir hasta que el pool de hilos
50
comienza a parar los hilos innecesarios.
maxThreads
El máximo número de hilos procesadores de peticiones
200
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Define el tamaño máximo de la cabecera HTTP de la
45
creados por el conector. Determina el máximo número
de peticiones simultáneas que pueden ser procesadas.
Número de hilos procesadores de peticiones creados
minSpareThreads
4
cuando el conector arranca.
Alianza2
El puerto TCP sobre el cual el conector creará el socket
port
Alianza2
-
servidor de Java esperando peticiones entrantes.
Datasources
Puesto que cada módulo que hace uso de la base de datos podría desplegarse en un
base de datos tiene su propio datasource definido.
En
JBoss
los
ficheros
datasources
se
definen
dentro
del
directorio
deploy
($JBOSS_HOME/server/default/deploy) y siempre acaban con el sufijo “–ds.xml”. En nuestro
caso, durante la instalación se habrá generado un fichero denominado “<sitio>-ds.xml” donde
<sitio> será el nombre de la CCAA. El contenido del fichero es el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/planificadorDS</jndi-name>
<connection-url>jdbc:mysql://ip_basedatos:3306/ccaa</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>usuario</user-name>
<password>password</password>
<exception-sorter-classname>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorterclass-name>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
…
Los parámetros a configurar son los destacados en negrita:

jndi-name: Nombre JNDI con el que se publica la conexión a base de datos.

connection-url: URL que especifica la conexión al servidor de base de datos.

En el caso de MySQL es: jdbc:mysql://ip_basedatos:puerto/base_datos

Para PostgreSQL es: jdbc:postgresql://ip_basedatos: puerto/base_datos

En el caso de Oracle es: jdbc:oracle:thin:@ip_oracle:1521:agrega
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
servidor JBoss diferente, atacando a una base de datos distinta, cada módulo con acceso a
46

driver-class: driver empleado para la conexión JDBC a la base de datos.

Para MySQL es com.mysql.jdbc.Driver

Para PostgreSQL es org.postgresql.Driver

Para Oracle (Thin) es oracle.jdbc.driver.OracleDriver

user-name: usuario de acceso a la base de datos.

password: contraseña de acceso a la base de datos.
Alianza2
Alianza2
NOTA: En el directorio $JBOSS_HOME/docs/examples/jca/ vienen ejemplos de datasources
para la mayoría de las bases de datos.
datasources asociados a los siguientes nombres JNDI:
<jndi-name>jdbc/planificadorDS</jndi-name>
<jndi-name>jdbc/modificadorDS</jndi-name>
<jndi-name>jdbc/contenidosportalDS</jndi-name>
<jndi-name>jdbc/publicacionDS</jndi-name>
<jndi-name>jdbc/LocalizadorDS</jndi-name>
<jndi-name>jdbc/indexadorDS</jndi-name>
<jndi-name>jdbc/buscarDS</jndi-name>
<jndi-name>jdbc/adminusuariosDS</jndi-name>
<jndi-name>jdbc/auditoriaDS</jndi-name>
<jndi-name>jdbc/valoracionDS</jndi-name>
<jndi-name>jdbc/driDS</jndi-name>
Para conseguir que las clases del driver JDBC de MySQL se encuentren disponibles para
JBoss, es necesario copiar el fichero mysql-connector-java-version.bin.jar al directorio lib
($JBOSS_HOME/server/default/lib).
Colas JMS
El portal Agrega, hace uso de colas JMS para las comunicaciones asíncronas en los
módulos. JBoss integra JBossMQ: varios servicios que trabajando juntos proveen servicios a
nivel de la JMS API a las aplicaciones clientes. Los principales servicios a tener en cuenta
son:
1. Invocation Layer
Servicios responsables de la gestión de los protocolos de comunicación
(bidireccionales) que los clientes usan para enviar y recibir los mensajes
concurrentemente. Cada servicio IL se asocial a una factoria de conexiones JMS
especificada bajo el árbol JNDI. JBossMQ provee los siguientes ILs:

UIL2 IL: Unified Invocation Layer version 2(UIL2).

JVM IL: Java Virtual Machine (JVM) Invocation Layer. Desarrollado para evitar la
sobrecarga TCP/IP cuando el cliente JMS está siendo ejecutado en la misma
máquina virtual que el servidor de colas (nuestro caso). El servicio IL usa
llamadas directas a métodos desde el servidor para servir a los clientes. Se
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
En concreto, si la instalación se realiza en un único JBoss se definirán los siguientes
47
incrementa así la eficiencia al no crearse ningún socket ni hilos para la
comunicación. Configuraremos así las colas para el portal Agrega.

HTTP IL: HTTP Invocation Layer (HTTPIL) permite el acceso del servicio
JBossMQ mediante los protocolos HTTP y HTTPs.
Alianza2
Alianza2
2. Security Manager
Servicio que controla el acceso a los destinos a partir de una lista de control de
acceso.
3. Destination Manager
4. Persistence Manager
Servicio que se encarga de la persistencia de los mensajes almacenados en las
colas.
5. Destinations: Queues y Topics
Un destino no es más que un objeto en el servidor JBossMQ que usan los clientes
para enviar y recibir los mensajes. Hay 2 tipos de destinos conforme a la API JMS:
Queue y Topics. Las referencias a los destinos creados se almacenan en el árbol
JNDI.

Queues: las colas siguen el paradigma punto a punto. Si un mensaje entra en
una cola y hay múltiples recibidores escuchando, sólo uno consumirá el mensaje
(al leer el mensaje éste sale de la cola).

Topics: se basan en el paradigma de la publicación/subscripción. Cuando un
cliente publica un mensaje al destino Topic, el mensaje es entregado a todos y
cada uno de los subscriptores de la cola (clientes que se encuentren subscritos a
la cola).
El portal de Agrega, necesita que existan los siguientes destinos en el fichero
$JBOSS_HOME/server/default/deploy/jms/jbossmq-destinations-service.xml:
…
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=A">
<depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=B">
<depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=C">
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Servicio que mantiene todos los destinos que se han creado.
48
En donde apreciamos que además de los destinos ya existentes por parte de JBoss, se han
agregado los destinos (colas Queue) de auditarQueue y modificador.
Para que los desarrollos puedan emplear el servicio JVM-IL es necesario agregar un alias en
el fichero $JBOSS_HOME/server/default/deploy/jms/jvm-il-service.xml, quedando el fichero
así:
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: jvm-il-service.xml 16662 2003-08-27 04:38:22Z patriot1burke $ -->
<server>
<!-- JBossMQ in memory "communication -->
<mbean code="org.jboss.mq.il.jvm.JVMServerILService"
name="jboss.mq:service=InvocationLayer,type=JVM">
<depends optional-attribute-name="Invoker">jboss.mq:service=Invoker</depends>
<attribute name="ConnectionFactoryJNDIRef">java:/ConnectionFactory</attribute>
<attribute name="XAConnectionFactoryJNDIRef">java:/XAConnectionFactory</attribute>
<attribute name="PingPeriod">0</attribute>
</mbean>
<mbean code="org.jboss.naming.NamingAlias"
name="jboss.mq:service=InvocationLayer,type=JVM">
<attribute name="FromName">JVMILConnectionFactory</attribute>
<attribute name="ToName">java:/ConnectionFactory</attribute>
<depends>jboss:service=Naming</depends>
</mbean>
</server>
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=D">
<depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=auditarQueue">
<depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=modificador">
<depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=ex">
<depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
…
49
ALIAS EN DIRECTORIOS
Hay dos módulos (RSS y la galería de imágenes) que necesitan acceder a los recursos que
se publican en la carpeta compartida. Puesto que se acceden directamente desde el JBoss
(no pasando por Apache), es necesario definir manualmente 2 alias para que accedan al
Alianza2
recurso real.
Alianza2
En
el
fichero
$JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/server.xml
<Host name="localhost"
autoDeploy="false" deployOnStartup="false" deployXML="false"
configClass="org.jboss.web.tomcat.security.config.JBossContextConfig"
>
<Context path="/rss" appBase=""
docBase="/export/ccaa/<sitio>/uploads/rss"
debug="99" reloadable="true">
</Context>
<Context path="/galeriaimg" appBase=""
docBase="/export/ccaa/<sitio>/uploads/galeriaimg/<sitio>"
debug="99" reloadable="true">
</Context>
Mediante la definición de estos dos alias conseguimos que cuando el módulo rss solicite
internamente un recurso a: http://localhost:8080/rss realmente acceda a los recurso de la
carpeta /export/ccaa/<sitio>/uploads/rss. Análogamente sucede para el alias de la galería de
imágenes.
LIBRERÍAS DEL JBOSS
JBoss tiene dos directorios de librerías, a conocer:

$JBOSS_HOME\lib
En el directorio lib contiene los JARs necesario para el set up del arranque del JBoss.
Dentro del directorio se encuentra un subdirectorio denominado endorsed en el cual,
durante la instalación se sobrescribieron los siguientes ficheros:

o
resolver.jar
o
serializer.jar
o
xalan.jar
o
xercesImpl.jar
o
xml-apis.jar
$JBOSS_HOME\server\default\delpoy\lib
Todos los ficheros JAR del directorio se cargarán por JBoss en el classpath
compartido por todos los módulos (WARs). En concreto, agregaremos tres jars
comunes a todos los módulos:

mysql-connector-java-5.0.4-bin.jar (para las conexiones con MySQL)
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
definimos los siguientes dos alias (rss y galeriaimg):
50

casclient-2.1.1-nossl.jar (autenticación por HTTP) o casclient-2.1.1.jar (si tenemos
certificado y atenticamos por HTTPs)

truezip-6.6.jar
Alianza2
SERVIDOR DE APLICACIONES: APACHE TOMCAT + APACHE ACTIVEMQ
Alianza2
USUARIO Y GRUPO TOMCAT
Se recomienda que los procesos de Tomcat y ActiveMQ sean lanzados por un usuario
(diferente de root) con permisos adecuados, así garantizaremos que el usuario pueda escribir
Los pasos a dar serían los siguientes:
1. Creamos el grupo tomcat
groupadd tomcat
2. Creamos el usuario tomcat en el grupo primario tomcat (-g) con la consola bash (-s),
creando un home para el usuario si no existe (-m) en el home /opt/tomcat (-d)
useradd -g tomcat -s /bin/bash -m -d /opt/tomcat tomcat
3. Establecemos un password para el usuario tomcat
passwd tomcat
Para comprobar que los pasos se han realizado correctamente, podemos probar a entrar en
el host con el usuario tomcat y la password establecida.
Directorio $TOMCAT_HOME/bin. Scripts de arranque.
Dentro del directorio bin, Tomcat almacena los scripts de arranque tanto para sistemas Linux
como para Windows (startup.sh y startup.bat respectivamente).
startup.sh
Con el de que el path desde el cual se usen las rutas relativas sea el $TOMCAT_HOME y no
$TOMCAT_HOME/bin, se aconseja modificar el fichero startup.sh de la siguiente manera:
cd ..
PRGDIR=/opt/apache-tomcat-5.5.27/bin
exec "$PRGDIR"/"$EXECUTABLE" start "$@"
catalina.sh
Adicionalmente, existe un fichero denominado catalina.sh que contiene los parámetros a
pasar a la máquina virtual de Java (JVM) para el arranque del JBoss.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
en los diferentes directorios necesarios para el correcto funcionamiento del portal.
51
En concreto, la línea que nos interesa es:
JAVA_OPTS="$JAVA_OPTS
Djava.awt.headless=true"
-Xms512M
-Xmx1536m
-XX:MaxPermSize=494M
-
Es fundamental configurar correctamente los parámetros de la JVM que arrancará Tomcat,
Alianza2
ya que estamos indicando parámetros tales como las reservas de memoria, el
Alianza2
comportamiento de AWT, etc.
Una vez comprendido como la JVM hace uso de la memoria reservada, podemos aplicar
Memoria física Servidor
1 GB
2 GB
2.5 GB
4 GB
-Xms
256m
512m
512m
512m
-Xmx
512m
1024m
1536m
2560m
-XX:MaxPermSize
384m
768m
768m
768m
NOTA: el portal, una vez cargado todos los módulos, con menos de 2 GB de RAM tendrá que
hacer uso de la memoria SWAP con la consiguiente pérdida de rendimiento que ello implica.
En aquellos casos en los que la salida a los puertos 80 y 443 (HTTP y HTTPS
respectivamente) se realice a través de un proxy, es posible configurarlo directamente sobre
la JVM mediante las opciones siguientes:
# Proxy settings for JVM
JAVA_OPTS="$JAVA_OPTS
-Dhttp.proxyHost=<proxy_ip> -Dhttp.proxyPort=<proxy_port>
-Dhttp.proxyUser=<usuario> -Dhttp.proxyPassword=<pass>
-Dhttp.nonProxyHosts=localhost|<domino>|<cas-domino>"
/etc/profile.d/tomcat.sh
Al realizar la instalación, en los sistemas Linux, en el directorio /etc/profile.d se almacenan
ficheros que suelen modificar las variables de entorno de todos los usuarios. Se recomienda
crear el fichero tomcat.sh en donde se defina la variable CATALINA_HOME de la siguiente
manera:
CATALINA_HOME=/opt/tomcat/apache-tomcat-5.5.27
Directorio $ACTIVEMQ_HOME/bin. Scripts de arranque.
Dentro del directorio bin, Apache ActiveMQ almacena los scripts de arranque.
activemq
Con el usuario tomcat deberemos ejecutar el script y dejarlo corriendo en background. Por
defecto levantará el servidor de colas y será accesible en el puerto 61616.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
unas recomendaciones prácticas de los valores en función de la memoria total del sistema:
52
Ficheros de configuración de Apache Tomcat
Los ficheros de configuración relevantes para la correcta configuración de la plataforma
Agrega son los siguientes:
Alianza2
Configuración de los conectores de Tomcat: HTTP y AJP
Alianza2
En el fichero $TOMCAT_HOME/conf/server.xml se configuran los parámetros de los
<Service
name="Catalina">
<Connector
port="8080"
redirectPort="8443"
minSpareThreads="25"
connectionTimeout="20000"
maxSpareThreads="75"
maxThreads="400">
</Connector>
<Connector
port="8009"
redirectPort="8443"
protocol="AJP/1.3"
maxThreads="400"
connectionTimeout="600000">
</Connector>
…
Con respecto al conector AJP, que es quien recibirá las peticiones de Apache, en la wiki
oficial de JBoss especificada en las referencias aconsejan una configuración de 200 threads
por CPU, por lo que para una máquina con 2 CPUs el valor recomendado sería
maxThreads=”400”. El tiempo máximo de conexión debe ser igual al valor configurado en los
workers de Apache (se describirá en detalle en la sección de Apache).
Veamos los parámetros más importantes de configuración de ambos conectores:
HTTP
Descripción
Parámetro
Valor por
defecto
La longitud máxima de la cola de conexiones
entrantes cuando todos los hilos que atienden
acceptCount
peticiones están en uso. Cualquier petición de
100
conexión que se reciba cuando todos los threads
estén en uso será rechazada.
El
connectionTimeout
número
de
milisegundos
que
el
conector
esperará, después de aceptar una conexión, hasta
que se le solicite la petición de URI.
60.000
(60 sg)
Este flag permite al contenedor de servlets usar un
disableUploadTimeout
tiempo máximo de espera diferente mientras se esta
true
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
conectores HTTP y AJP:
53
ejecutando el servlet.
Define el tamaño máximo de la cabecera HTTP de la
maxHttpHeaderSize
petición y de la respuesta (especificado en bytes).
4096
bytes (4
KB)
Máximo número de peticiones HTTP que pueden ser
Alianza2
encoladas hasta que el servidor cierra la conexión.
Alianza2
Si se especifica un valor de 1 se desactivará el
maxKeepAliveRequests
HTTP/1.0 keep-alive y HTTP/1.1 keep-alive y
100
pipelining.
Si se especifica el valor -1 se permitirán infinitas
maxSpareThreads
El máximo número de hilos procesadores de
peticiones sin usar que pueden existir hasta que el
pool de hilos comienza a parar los hilos
innecesarios.
El máximo número de hilos procesadores de
50
peticiones creados por el conector. Determina el
maxThreads
máximo número de peticiones simultáneas que
200
pueden ser procesadas.
Número
minSpareThreads
de
hilos
procesadores
de
peticiones
creados cuando el conector arranca.
4
El puerto TCP sobre el cual el conector creará el
port
socket servidor de Java esperando peticiones
-
entrantes.
AJP
Parámetro
Descripción
Valor por
defecto
El número de milisegundos que el conector esperará,
connectionTimeout
después de aceptar una conexión, hasta que se le
Infinito
solicite la petición de URI.
El máximo número de hilos procesadores de peticiones
maxSpareThreads
sin usar que pueden existir hasta que el pool de hilos
50
comienza a parar los hilos innecesarios.
El máximo número de hilos procesadores de peticiones
maxThreads
creados por el conector. Determina el máximo número
200
de peticiones simultáneas que pueden ser procesadas.
Número de hilos procesadores de peticiones creados
minSpareThreads
cuando el conector arranca.
4
El puerto TCP sobre el cual el conector creará el socket
port
servidor de Java esperando peticiones entrantes.
-
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
peticiones encoladas.
54
DATASOURCES
Puesto que cada módulo que hace uso de la base de datos podría desplegarse en un
servidor Tomcat diferente, atacando a una base de datos distinta, cada módulo con acceso a
base de datos tiene su propio datasource definido.
Alianza2
Alianza2
En Tomcat los ficheros datasources se definen dentro del fichero En el fichero
$TOMCAT_HOME/conf/server.xml definimos por cada contexto tanto las colas JMS como los
datasources a emplear por cada recurso (módulo WAR) que tenemos. A modo de ejemplo, el
contenido podría ser:
<Host
appBase="webapps"
name="localhost">
<Context
path="/catalogacion-1">
<Resource
name="DefaultDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/contenidosportal-F1">
<Resource
name="jdbc/contenidosportalDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/indexador-0.1">
<Resource
name="jdbc/indexadorDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/empaquetadorbasico-F1">
<Resource
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
…
55
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
name="jdbc/LocalizadorDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/RemotingGalleryServer">
</Context>
<Context
path="/valoracion-1">
<Resource
name="jdbc/valoracionDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/visualizadorcontenidos">
</Context>
<Context
path="/agregadorRSS-1.0">
<Resource
name="jdbc/buscarDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/cas">
</Context>
<Context
path="/entregar-1">
<Resource
name="DefaultDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/validador-1">
56
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<Resource
name="DefaultDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/adminusuarios">
<Resource
name="jdbc/adminusuariosDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/localizador-1">
<Resource
name="jdbc/LocalizadorDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/buscador">
</Context>
<Context
path="/ModificadorWeb">
</Context>
<Context
path="/PortalEmpaquetador">
</Context>
<Context
path="/oaipmh">
<Resource
name="DefaultDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
57
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
path="/auditoria">
<Resource
name="jdbc/auditoriaDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
<Resource
auth="Container"
description="my Queue"
name="jms/auditarQueue"
type="org.apache.activemq.command.ActiveMQQueue"
physicalName="auditarQueue"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"/>
</Context>
<Context
path="/fuentestaxonomicas-1">
<Resource
name="DefaultDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/planificador-1.0">
<Resource
name="jdbc/planificadorDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
<Resource
auth="Container"
description="my Queue"
name="jms/modificador"
type="org.apache.activemq.command.ActiveMQQueue"
physicalName="modificador"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"/>
<Resource
auth="Container"
description="my Queue"
name="jms/C"
type="org.apache.activemq.command.ActiveMQQueue"
physicalName="C"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"/>
</Context>
<Context
58
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
path="/buscar-1">
<Resource
name="jdbc/buscarDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/visualizador-1">
</Context>
<Context
path="/gestorFlujo">
</Context>
<Context
path="/catalogadorWeb">
</Context>
<Context
path="/modificador-1">
<Resource
name="jdbc/modificadorDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
<Resource
auth="Container"
description="my Queue"
name="jms/modificador"
type="org.apache.activemq.command.ActiveMQQueue"
physicalName="modificador"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"/>
</Context>
<Context
path="/portaladministracion">
</Context>
<Context
path="/dri-1">
<Resource
name="jdbc/driDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
</Context>
<Context
path="/publicacion-1">
<Resource
59
Dentro de cada contexto, se define el recurso de acceso a base de datos mediante:
<Resource
name="jdbc/publicacionDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
Los parámetros a configurar son los siguientes:

name: Nombre JNDI con el que se publica la conexión a base de datos.

url: URL que especifica la conexión al servidor de base de datos.

o
En el caso de MySQL es: jdbc:mysql://ip_basedatos:puerto/base_datos
o
Para PostgreSQL es: jdbc:postgresql://ip_basedatos:puerto/base_datos
o
En el caso de Oracle es: jdbc:oracle:thin:@ip_oracle:1521:agrega
driverClassName: driver empleado para la conexión JDBC a la base de datos.
o
Para MySQL es com.mysql.jdbc.Driver
o
Para PostgreSQL es org.postgresql.Driver
o
Para Oracle (Thin) es oracle.jdbc.driver.OracleDriver

username: usuario de acceso a la base de datos.

password: contraseña de acceso a la base de datos.
En concreto, si la instalación se realiza en un único Tomcat se definirán los siguientes
datasources asociados a los siguientes nombres JNDI:
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
name="jdbc/publicacionDS"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="user"
maxWait="5000"
driverClassName="oracle.jdbc.driver.OracleDriver"
password="pass"
url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/>
<Resource
auth="Container"
description="my Queue"
name="jms/A"
type="org.apache.activemq.command.ActiveMQQueue"
physicalName="A"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"/>
</Context>
<Context
path="/TaggingWeb">
</Context>
</Host>
</Engine>
</Service>
</Server>
60
name=“jdbc/planificadorDS”
name=“jdbc/modificadorDS”
name=“jdbc/contenidosportalDS”
name=“jdbc/publicacionDS”
name=“jdbc/LocalizadorDS”
name=“jdbc/indexadorDS”
name=“jdbc/buscarDS”
name=“jdbc/adminusuariosDS”
name=“jdbc/auditoriaDS”
name=“jdbc/valoracionDS”
name=“jdbc/driDS”
Alianza2
Alianza2
Para conseguir que las clases del driver JDBC se encuentren disponibles para Tomcat, es
directorio lib ($TOMCAT_HOME/common/lib/).
Colas JMS
El portal Agrega, hace uso de colas JMS para las comunicaciones asíncronas en los
módulos. En el caso de emplear el contenedor de servlets Apache Tomcat, es necesario
instalar adicionalmente un servidor de colas. Por facilidad y compatibilidad se aconseja usar
Apache ActiveMQ.
Las colas destino se definen en el fichero $TOMCAT_HOME/conf/server.xml por cada
contexto (módulo war desplegado). En cada resource se define la conexión a la cola JMS de
la siguiente manera:
<Resource
auth="Container"
description="my Queue"
name="jms/modificador"
type="org.apache.activemq.command.ActiveMQQueue"
physicalName="modificador"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"/>
ALIAS EN DIRECTORIOS
Hay dos módulos (RSS y la galería de imágenes) que necesitan acceder a los recursos que
se publican en la carpeta compartida. Puesto que se acceden directamente desde el Tomcat
(no pasando por Apache), es necesario definir manualmente 2 alias para que accedan al
recurso real.
En el fichero $TOMCAT_HOME/conf/server.xml definimos los siguientes dos alias (rss y
galeriaimg):
<Context path="/rss" appBase=""
docBase="/export/ccaa/<sitio>/uploads/rss"
debug="99" reloadable="true">
</Context>
<Context path="/galeriaimg" appBase=""
docBase="/export/ccaa/<sitio>/uploads/galeriaimg/<sitio>"
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
necesario copiar el fichero conector (mysql-connector-java-version.bin.jar, ojdbc14.jar…) al
61
debug="99" reloadable="true">
</Context>
Mediante la definición de estos dos alias conseguimos que cuando el módulo rss solicite
internamente un recurso a: http://localhost:8080/rss realmente acceda a los recurso de la
Alianza2
carpeta /export/ccaa/<sitio>/uploads/rss. Análogamente sucede para el alias de la galería de
Alianza2
imágenes.
LIBRERÍAS DEL TOMCAT
En Tomcat existen dos directorios de librerías, a conocer:
$TOMCAT_HOME\common\lib
El directorio contiene los JARs necesario para arrancar los contextos y los
conectores especificados.

o
activation.jar
o
activemq-all-5.1.0.jar
o
commons-el.jar
o
commons-logging.jar
o
commons-pool-1.4.jar
o
hibernate3.jar
o
hsqldb.jar
o
hsqldb-plugin.jar
o
jasper-compiler.jar
o
jasper-compiler-jdt.jar
o
jasper-runtime.jar
o
javax.servlet.jar
o
javax.servlet.jsp.jar
o
jboss-j2ee.jar
o
jboss-jaxrpc.jar
o
jsp-api.jar
o
log4j.jar
o
mail.jar
o
mysql-connector-java-5.0.4-bin.jar
o
naming-factory-dbcp.jar
o
naming-factory.jar
o
naming-resources.jar
o
ojdbc14.jar
$TOMCAT_HOME\shared\lib
Se encuentran las librerías que se comparten entre los módulos WAR. En el caso de
Agrega se usarán las siguientes:

antlr-2.7.6.jar
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico

62
autonumber-plugin.jar

bcel.jar

bindingservice-plugin.jar

bsf.jar

bsh-1.3.0.jar

bsh-deployer.jar

casclient-2.1.1-nossl.jar

commons-collections.jar

commons-httpclient.jar

dom4j.jar

javassist.jar

jaxen.jar

jboss-common.jar

jmx-adaptor-plugin.jar

jnpserver.jar

joesnmp.jar

jpl-pattern.jar

jpl-util.jar

log4j-snmp-appender.jar

mail-plugin.jar

properties-plugin.jar

resolver.jar

scheduler-plugin-example.jar

scheduler-plugin.jar

serializer.jar

truezip-6.6.jar

wsdl4j.jar

xalan.jar

xercesImpl.jar

xml-apis.jar

xmlentitymgr.jar
Nota: casclient-2.1.1-nossl.jar (autenticación por HTTP) o casclient-2.1.1.jar (si tenemos
certificado y atenticamos por HTTPs)
REDIRECCIÓN TRÁFICO 8080
En el caso en el cual tanto Apache como el servidor de aplicaciones se encuentren en
máquinas diferentes, será necesario que todo el tráfico de salida del servidor de aplicaciones
con destino la misma máquina (localhost) puerto 80 sea redirigido al puerto 8080. Para ello,
deberemos aplicar una regla de iptables (kernel 2.4 o superior) o ipchains (kernel 2.2).
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico

63
En la mayor parte de los sistemas Linux la forma de proceder es la siguiente:
1. Con el usuario root, ejecutamos:
iptables -t nat -A OUTPUT -p tcp --destination 127.0.0.1/32 -Alianza2
dport 80 -j DNAT --to-destination 127.0.0.1:8080
2. Comprobamos su correcta ejecución con el comando: iptables -L -n -v -t
Alianza2
nat
3. Si deseamos que la configuración permanezca residente en el próximo arranque,
podemos ejecutar iptables-save > /etc/sysconfig/iptables y comprobar
que se arrancará en el runlevel consultando /etc/rc.d/rc3.d/SXXiptables (en el caso
Directorio $APPSERVER_HOME/informes
El directorio informes almacena en su interior los siguientes directorios:
1. birt-runtime-2_2_1_1
Para la generación de informes online la plataforma hace uso de Birt. Los binarios del
sistema de reportes Birt se almacenan ahí.
2. plantillasInformes
Las plantillas a partir de las cuales Birt genera los informes se encuentran en esta
carpeta.
NOTA: para la correcta generación de las imágenes de algunos informes es necesario añadir
a la máquina virtual de Java (en el script de arranque del servidor de aplicaciones) el
parámetro: -Djava.awt.headless=true
Directorio $APPSERVER _HOME/indices
En el directorio se almacenan los índices generados por Lucene para los diferentes idiomas,
existiendo un índice por cada idioma en los que se encuentra disponible la plataforma.
Apache Lucene es un motor de búsquedas de alto rendimiento escrito íntegramente en Java
que nos permite realizar búsquedas completas por diferentes criterios textuales.
Al encontrarse la aplicación disponible en 6 idiomas aparecen 6 índices (subdirectorios):
Idioma
Catalán
Inglés
Español
Euskera
Gallego
Valenciano
Subdirectorio índices
ca_CA_simple.id
en_EN_simple.id
es_ES_simple.id
eu_EU_simple.id
gl_GL_simple.id
va_VA_simple.id
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
de runlevel 3).
64
Durante los procesos de backup y mantenimiento de la plataforma será de vital importancia
hacer un backup de los índices.
Directorio $APPSERVER/uploads
Alianza2
Alianza2
El directorio de uploads es el directorio donde se almacenarán los ficheros necesarios para la
plataforma (esquemas para las validaciones, plantillas, rss, etc) y los ficheros que se irán
generando a medida que se use la plataforma (descargas disponibles, repositorio con los
ODEs cargados, resultados de la elaboración de algunos informes, directorio de taller para la
Este directorio es el que tendrá un tamaño elevado que variará principalmente en función de:

Los ODEs creados en el taller.

Los ODEs publicados (tamaño y número) en el repositorio.

Las descargas disponibles desde la plataforma.
El directorio, en general, no será local a la máquina de JBoss, sino que el espacio a usar
será accedido remotamente vía NFS, siendo gestionado por un servidor diferente capaz de
asignar o desasignar capacidad al mismo dinámicamente mediante un LVM o similar.
La estructura de subdirectorios que se presenta en el directorio uploads es la siguiente:
descargas
destinoInformesDir
destinoInformesFederadosDir
galeriaimg/common (contiene los iconos de las imágenes por defecto)
galeriaimg/<sitio> (se generarán las previsualizaciones de los ODEs)
html (con contenido inicial)
imagenesInformes
informesPortada
licencias (con contenido inicial)
modificador
noticias
repositorio
rss (con contenido inicia)
schemas (con contenido inicial)
schemasImscp (con contenido inicial)
schemasScorm12 (con contenido inicial)
schemasVdex (con contenido inicial)
searchPlugin (con contenido inicial)
sitemaps/backup
sitemaps/estatico (con contenido inicial)
taller
utilidades (con contenido inicial)
xmls (con contenido inicial)
xslt (con contenido inicial)
descargas
Se albergan todas las descargas disponibles desde el portal Agrega.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
creación de ODEs por parte de los usuarios del portal, etc).
65
destinoInformesDir
Contiene los informes generados por la plataforma.
Alianza2
Alianza2
destinoInformesFederadosDir
Contiene los informes federados generados por la plataforma.
galeriaimg
ejemplo, el thumbnail (mini captura) para los recursos mp3, doc, pdf…
En el subdirectorio <sitio> (el nombre de la CCAA) se almacenan todas las capturas de los
recursos (ODEs) tomadas por la plataforma durante el proceso de carga.
html
Almacena ciertos contenidos html estáticos, imágenes, css…
imagenesInformes
Todas las imágenes de los informes que se generen se guardarán en esta carpeta.
informesPortada
Los informes accesibles desde la portada (páginas html) se salvarán en esta ruta.
licencias
Los ficheros de licencia que se incluyen en los ODE en el momento de publicarlos en el
repositorio. Están almacenados en un arbol de directorios que relaciona cada licencia (fichero
licencia.txt) con su identificador LOM-ES.
modificador
El modificador es un módulo que permite cambiar masivamente ODEs del portal. Por cada
tarea modificación que realicemos, almacenará la configuración de la modificación y los logs
de las modificaciones realizadas.
noticias
Si las noticias que se suben contienen imágenes, éstas se subirán a este directorio.
repositorio
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
En el subdirectorio common se encuentran los iconos de las imágenes por defecto (por
66
Este directorio junto con el taller serán los que generalmente más espacio en disco ocuparán.
En el se encuentran todos los ODEs publicados en el portal Agrega descomprimidos.
rss
Alianza2
Los rss generados por la plataforma permanecerán en éste directorio (ficheros XML).
Alianza2
Inicialmente este directorio contiene doce ficheros OPML (extensión .opml): un grupo de seis
ficheros para RSS y un grupo de seis para Atom.
schemas, schemasImscp, schemasScorm12, schemasVdex
recursos en los formatos Scorm 2004, Scorm 1.2 e IMS-CP.
searchPlugin
En el directorio tenemos el fichero searchPlugin.xml, que permite instalar un buscador de
Agrega en nuestra barra de buscadores del navegador. El contenido del XML es el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>Agrega-<sitio></ShortName>
<Description>Busqueda en Agrega</Description>
…
<InputEncoding>UTF-8</InputEncoding>
<Url type="text/html"
template="http://<sitio>.agrega.indra.es/buscador/ListarODECU/ListarODECU.do?busca
dorGeneral={searchTerms}&tipoBusqueda=01"/>
</OpenSearchDescription>
Los parámetros a tener en cuenta en cada CCAA son el nombre corto y la URL a la que se
atacará para realizar la búsqueda.
sitemaps
En
el
directorio
de
sitempas/estatico/
se
almacenan
los
ficheros
robots.txt
y
sitemapPortada.xml. El fichero robots.txt define las políticas de permitir el acceso o denegarlo
a los robots que se conecten a la página de agrega.
El segundo fichero, sitemapPortada.xml, define las principales URLs del portal para permitir
que los robots buscadores conozcan mejor el portal agrega para indexar los contenidos del
mismo. Es importante que la URL a la que apunta la tag <loc> sea correcta.
<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84
http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
<url>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Contienen diferentes esquemas necesarios para las validaciones y empaquetados de los
67
<loc>http://<sitio>.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do</loc>
<lastmod>2008-05-19</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
…
Alianza2
Alianza2
En el directorio uploads/sitemaps/ la plataforma irá generando los ficheros sitemaps para la
portada (sitemapPortada.xml) y para todos los recursos publicados (sitemap1.xml,
sitemap2.xml…). Para que cualquier buscador encuentre todos los sitemaps publicados se
generará también un fichero llamado sitemap-index.xml que contendrá una referencia a
taller
Por cada usuario existirá una carpeta (que será la carpeta personal del portal). Cada usuario
podrá crear, catalogar y empaquetar tantos ODEs como desee (en futuras actualizaciones de
Agrega existirá el concepto de cuota).
Para que un recurso ODE pueda ser publicado, previamente ha de ser creado, catalogado y
propuesto para publicación. Hasta que no se publique, el ODE permanecerá en la carpeta
personal. Al contener la carpeta taller todos los recursos pendientes de ser publicados, el
tamaño total de la carpeta variará en función del número y tamaño de los ODEs que alberga
en su interior.
utilidades
Contiene diverso contenido web:

AgregaSlider (código flash para hacer referencia a Agrega desde otros sitios)

ContenidoDinámico: imagen que se genera dinámicamente por la plataforma (selección
de una captura de un ODE aleatoriamente)
xmls
Conjunto de ficheros XML que definen las taxonomías, tesauros, árbol curricular y
vocabularios.
xslt
Plantillas para convertir a los formatos SCORM 1.2 e IMS-CP.
FICHEROS DE CONFIGURACIÓN DEL PORTAL AGREGA
En el directorio $JBOSS_HOME/server/default/conf o $TOMCAT_HOME/common/classes
encontramos los archivos de configuración del JBoss y del portal Agrega. En concreto, los
ficheros de configuración de Agrega son:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
tantos sitemaps como sean necesarios.
68
agrega.properties
El contenido más relevante del fichero es el que se muestra a continuación, hemos dividido
en partes la estructura del mismo para intercalar las explicaciones:
########## Variables de configuracion del correo ##########
hostSmtp=servidor_correo
debug=true
#Direccion de correo del sistema, se utilizara como from en el servicio Recuerdo Clave
fromSender=usuario@dominio
ldapExternal=false
########## Correo del administrador del servidor ldap externo ######
adminLdapExternal=administrador_ldap@dominio
########## Autenticacion de correo ####
autentication=true
userSmtp=usuario
passwordSmtp=password
Configuramos el servidor de correo, especificando el hostSmtp, el formSender que se utiliza
como campo from, el userSmtp y passwordSmtp empleados para el envío de mensajes (si la
authentication está puesta a true).
Con respecto al LDAP, podemos configurar:

ldapExternal=true
Si especificamos la variable a true, indicamos que el LDAP será de solo lectura (no
escritura), por lo que, cada vez que un usuario se de de alta en el portal, se enviará un
mail automáticamente al administrador del LDAP (adminLdapExternal) solicitándole que
realice el alta manual en el LDAP.

ldapExternal=false
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
agrega.properties
authbackend.properties
cas.properties
dependentServer_EN.properties
dependentServer.properties
generacionContenidos.properties
i18n_ca.properties
i18n_en.properties
i18n_es.properties
i18n_eu.properties
i18n_gl.properties
i18n.properties
i18n_va.properties
importedServices.properties
log4j.xml
springldap.xml
traduccionesBuscador_ca.properties
traduccionesBuscador_en.properties
traduccionesBuscador_es.properties
traduccionesBuscador_eu.properties
traduccionesBuscador_gl.properties
traduccionesBuscador_va.properties
69
En caso de especificar el valor a false, cada vez que se crea, borra o modifica un usuario
del portal Agrega, los cambios se verán reflejados automáticamente en el LDAP.
Especificamos el idioma seleccionado por defecto, la zona horaria y el nombre de los roles
presentes.
########## Ip del servicio de auditoria
admin.ws.host=url_nodo
admin.ws.puerto=8080
admin.ws.subdominio=
admin.host=url_nodo
admin.puerto=8080
admin.subdominio=
path_logs=/opt/jboss/server/default/log
logs_no_borrar=server.log,agrega.log,boot.log
# Parametro que indica si queremos o no queremos auditoria
auditoria=SI
Se especifican el host y el puerto de los webservices de auditoría y administración de
usuarios. Además, se define el directorio donde se encontrarán los logs (para ser mostrados
desde el módulo de la aplicación) así como si se desea o no habilitar la auditoría.
Adicionalmente se permite definir un path a colgar al dominio tanto para el portal como para
los webservices (ej: http://www.miservidor.com/agrega/)
########################################################
###### Configuración para los informes
######
########################################################
#Librerías de Birt
birtDir=informes/birt-runtime-2_2_1_1/ReportEngine/
#Plantillas de los informes
informesDir=informes/plantillasInformes/
#Directorio donde se guardarán todos los informes federados
destinoInformesFederadosDir=uploads/destinoInformesFederadosDir/
#Directorio donde se guardarán todos los informes
destinoInformesDir=uploads/destinoInformesDir/
#Directorio donde se copiaran las imagenes de los diagramas
imgBirtDir=uploads/imagenesInformes/
#path del servidor que enlazara al directorio de las imagenes
staticImgDir=/imagenesInformes/
#Path de los informes 'Mas' de la portada
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
########## Idioma
idioma.selected=es
zona_horaria=CEST
##########################################
####### Roles de usuarios
##############
##########################################
# Usuario administrador que no podra ser eliminado
rol_administrador=ADMINISTRADOR
#Nombre del rol que tiene permiso para publicar
rol_publicador=PUBLICADOR
#Nombre del rol que tiene permiso para catalogar
rol_catalogador=CATALOGADOR
#Nombre del rol que tiene permiso para empaquetar
rol_empaquetador=DOCENTE
70
Diversos parámetros para la configuración de los informes generados por el runtime de Birt.
La mayor parte de los nombres los hace autodescriptivos.
#########################################################
####### Configuración para la galería de imágenes #######
#########################################################
#host o IP de la máquina en la que se encuentra el servico que genera las imagenes
galeriaimg.server.ip=localhost:8080
#URL del servicio
galeriaimg.service.url=RemotingGalleryServer/remoting/RemotingGalleryService
#Inicio de la ruta relativa (alias de apache) donde se encuentran accesibles las imágenes del
nodo
galeriaimg.path.image=/galeriaimg
#Inicio de la ruta relativa (alias de apache) donde se encuentran accesibles las imágenes
comunes
galeriaimg.common.image=/imgcommon
#Extensión de la imagen que se genera
galeriaimg.image.ext=.png
#Extensiones con icono por defecto
galeriaimg.image.common.ext=MP3,WAV,WMA,AIFF,OGG,TAR,RAR,ZIP,TGZ,PPT,PDF,XL
S,DOC,PPS
#Extensiones fotografiables, para sacar la foto
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
pathInformesPortada=informesPortada/
##### Configuración de los informes 'Mas' de la Portada ######
destinoInformesMasDir=uploads/informesPortada/
#Número máximo de elementos que presentará cada tipo de informe
rangoInformesPortada=10
#Número de días para los cuales se quiere calcular los informes 'Mas' de la portada
diasAnterioresInformesPortada=7
#Primer sufijo que se añadirá al nombre de los informes 'Mas' de la Portada que contienen
información de más de un día (relacionado con diasAnterioresInformesPortada)
nombreInformesPortadaSemanales=-semanal
#Segundo sufijo
dias=dias
#Nombre de los ficheros que contienen los informes
estadoOdes=Informe_Estado_de_ODEs
operacionesRealizadas=Informe_de_Operaciones_Realizadas
nivelAgregacion=Informe_de_Nivel_de_Agregacion
coberturaCurricular=Informe_de_Cobertura_Curricular
terminosBusqueda=Informe_de_Terminos_mas_Buscados
odesUsuario=Informe_ODEs_de_un_Usuario
odesLicencias=Informe_Licencias_de_ODEs
usuarios=Informe_de_los_Usuarios
procesosPlanificados=Informe_de_Procesos_Planificados
masValorado=Informe_ODEs_mas_Valorados
masMostrado=Informe_ODEs_mas_Mostrados
masPrevisualizado=Informe_ODEs_mas_Previsualizados
masDescargado=Informe_ODEs_mas_Descargados
tamanio=Informe_ODEs_mas_Grandes
#Nombre del informe con el catálogo de Agrega
informeCatalogo=CatalogoAgrega
odesIdiomaFederada=Informe_Federado_de_ODEs_por_Idioma
odesPublicadosFederada=Informe_Federado_de_ODEs_Publicados
nivelAgregacionFederada=Informe_Federado_de_Nivel_de_Agregacion
coberturaCurricularFederada=Informe_Federado_de_Cobertura_Curricular
71
galeriaimg.image.common.ext.fot=AVS,BMP,CUR,DCX,GIF,ICO,JNG,JPEG,JPG,PBM,PCL,
PCX,PIX,PNG,TGA,TIFF,3g2,3gp,MTV,asf,avi,avs,dv,dvd,ffm,flac,flic,flv,gxf,h264,m4v,matros
ka,mjpeg,mov,mp4,mpeg,mpeg1video,mpeg2video,mpegvideo,mxf,svcd,vcd,html,swf,htm
#Ruta disco imagenes icono por defecto relativa al path del nodo
galeriaimg.image.common.path=uploads/galeriaimg/common
Alianza2
#Lista de rutas a concatenar al localizador
#NOTA:Recordar que la ruta del localizador es relativa al servidor
#en el que se encuentra
<sitio>.path=/export/<sitio>
Con respecto a la galería de imágenes, primero configuramos la IP, puerto y URL donde
atacar
el
servicio
(normalmente
localhost:8080,
RemotingGalleryServer/remoting/RemotingGalleryService). Posteriormente se especifican
diversos parámetros, tales como todos los paths donde encontrar los iconos por defecto, las
imágenes generadas, listas de ficheros de extensiones que mostrarán un icono por defecto…
Los binarios generateimg.sh y resizeimg.sh que capturan las imágenes se verán en detalle
en la sección de la galería de imágenes.
###############################
####### Catalogos Agrega #######
###############################
catalogo.agrega=Plataforma Agrega
catalogo.mec=Catálogo unificado mec-red.es-ccaa de identificación de ODE
Nombres especificados en los catálogos.
#################################
######Configuración RSS##########
#################################
rss=/rss
host=url_host
rss.path=uploads/rss/
El modulo de RSS hace uso de 3 propiedades, la que dependerá en cada CCAA será la
propiedad host.
#######################################
###Configuración Plugin de búsqueda####
#######################################
searchPlugin=/searchPlugin
Alias de apache donde se encontrará el fichero del searchPlugin.xml
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
# Ruta relativa donde se generan las imagenes
# Se usa para chequear si la imagen se ha generado o no
path.generatedimgs=uploads/galeriaimg/
# ruta relativa del fichero de generacion imagenes
script.html.generatedimgs=./bin/generateimg.sh
# ruta relativa del fichero de generacion imagenes
script.img.generatedimgs=./bin/resizeimg.sh
# Lista de extensiones que no deben abrir el firefox
img.resize.extension=gif,jpg,jpeg,jpe,tiff,tif,cmu,pnm,pbm,pgm,ppm,rgb,xbm,xpm,bmp
72
#######################################
#####Identificador único de nodo#######
#######################################
idNodo=NODO20080422102550
Alianza2
Cada nodo debe poseer un identificador único que se asigna en la instalación.
Alianza2
#######################################
########Flag para nodo neutro##########
#######################################
neutro=false
En las comunidades este flag deberá estar siempre a false, controla las plantillas y opciones
###################################
########## Generacion Dinamica#####
###################################
#URL de la imagen dinamica
urlImagenDefecto=utilidades/contenidoDinamico/imagenPorDefecto.jpg
urlImagenDefectoGrande=utilidades/imagenPorDefectoGrande.jpg
urlImagenDinamicaDisco=utilidades/contenidoDinamico/imagenDinamica.png
pathImagenDinamicaDisco=uploads/utilidades/contenidoDinamico/imagenDinamica.png
pathImagenDefectoGrande=uploads/utilidades/imagenPorDefectoGrande.jpg
Para la generación dinámica de las imágenes del portal se hace uso de las propiedades
anteriores, simplemente especifican los directorios donde encontrar las imágenes por defecto
y los directorios donde se almacenarán las capturas aleatorias elegidas.
######## Correo de registro del cas ############################
# Correo del usuario que se encargará de dar de alta a los usuarios
correoCas=usuario@domino
Cuando un usuario desee darse de alta en el portal, deberá enviar un correo a la dirección
que aparece en la ventana de acceso al portal. En cada CCAA apuntará al administrador de
los usuarios del mismo.
######### Tiempo extendido
################
timeout.extendido=86400
de
sesion
para
empaquetador
(segundos
)
Tiemout definido especialmente para el empaquetador (en segundos). Se debe a que los
tiempos medios de empaquetación suelen ser mucho mayores que los timeouts de sesión.
######### Esquema de metadatos LOM-ES ##############################
esquemaDeMetadatos=LOM-ESv1.0
Versión de esquema de metadatos empleada.
######## Atributos de configuracion del servidor oai-pmh #########
urlRepositorio=http://pruebas.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do
nombreRepositorio=Agrega
emailAdmin=usuario@domino
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
del portal.
73
Propiedades de configuración para el servidor oai-pmh.
######## configuracion entregar #########
# tiempo, en milisegundos, que se mantiene un ode publicado y empaquetado para exportar
sin volver a generarlo
# 604800000 = una semana
tiempolimite=604800000
Alianza2
Alianza2
Configuramos el tiempo que se mantiene un ODE publicado y empaquetado para ser
exportado sin necesidad de volver a generarlo.
Directorio donde se ubicará el fichero changelog.html, el cual contiene los cambios entre las
diferentes versiones.
#############################
########## Contacto #########
#############################
contacto_mail=usuario@domino
contacto_telefono=91 111 22 33
##########Activar opcion de incidencias de contacto(true-activar,false-desactivar)
contacto_incidencias_activar=false
Cuando un usuario accede a la página de contacto del portal, se le mostrarán los datos
suministrados por estas 3 propiedades: el contacto por mail y por teléfono se visualizarán
siempre, mientras que la gestión de incidencias puede ser activada o desactivada. Por
defecto para todas las CCAA el campo relacionado con las incidencias estará inicialmente a
false, únicamente se marcaría a true si la CCAA habilita un sistema de gestión de incidencias
para sus usuarios.
###### configuracion del cas ##########
#si su valor es 'no' no se va a sacar la informacion del registro
registroCas=si
Flag para indicar si deseamos o no mostrar la información de registro al acceder a la página
de autenticación del portal.
######### Configuración del
#####################
usaProxy=false
hostProxy=url_proxy
portProxy=8080
usuarioProxy=proxy_usuario
claveProxy=proxy_pass
proxy
de
la
máquina
donde
se
instale
Agrega
En caso de necesidad de salir hacia Internet a través de un Proxy podemos configurar el
host, puerto, usuario y contraseña de acceso.
######## Timeout de la cookie de OpenId (segundos) ##############
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
########### enlace a changeLog
pathChangeLog=/utilidades/changelog.html
74
timeoutCookieOpenId=1800
Configuramos el valor de tiempo máximo de validez de la cookie de autenticación cuando se
emplea OpenID.
Alianza2
######### valor cuota defecto ############
valorCuotaDefecto=5
Alianza2
Tamaño en MB de la cuota por defecto.
Número de versión de la aplicación.
##########Refresco contenidos estáticos de portada 3 horas
tiempoRefresco=180000
Tiempo de refresco de los datos de objetos y usuarios visibles en la portada de Agrega (en
segundos).
##########Número de etiquetas en la nube de tags
numeroTags=13
Numero de etiquetas mostrado en la nube de tags de la portada de Agrega.
######## Para las licencias######
url_licencias=uploads/licencias
Ruta al directorio donde se almacenan los ficheros licencia.txt para la publicación.
################ VISUALIZADOR #####################
zoho.key=847da91d5562a2a51193f65ef0962439
Clave requerida para el uso del servicio externo Zoho (http://www.zoho.com).
######## Configuración del enlace 'Informes' del menu lateral generico ##########
informesPortada=true
Permite habilitar / deshabilitar el enlace de Informes disponible en la portada de Agrega.
authbackend.properties
Define los parámetros necesarios para la autenticación contra el LDAP por parte del módulo
CAS:
ibuilder.security.ldap.url=ldap://servidor_ldap:389/dc=pruebas,dc=agrega,dc=indra,dc=es
ibuilder.security.ldap.managerDN=cn=Administrador,dc=agrega,dc=indra,dc=es
ibuilder.security.ldap.managerPwd=password
ibuilder.security.ldap.userSearchBase=ou=usuarios
ibuilder.security.ldap.userSearchFilter=(cn={0})
ibuilder.security.ldap.groupRoleAttribute=cn
ibuilder.security.ldap.groupSearchBase=ou=roles
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
##########Version de la aplicacion
version=1.2.0
75
cas.http.url=http://cas-nodo.agrega.indra.es/cas
http.server=http://nodo.agrega.indra.es
Se debe proporcionar la url de conexión al servidor LDAP especificando el base DN.
También se debe especificar el usuario manager para poder crear, borrar, modificar los
Alianza2
usuarios en el LDAP.
Alianza2
Por último, el módulo CAS necesita conocer cuál es la URL del cas y la URL del portal.
cas.properties
nodo:
entorno=nodo.agrega.indra.es
dependentServer.properties y dependentServer_EN.properties
server.on=nodo
nodo.server.id=es_nodo_20080422121523455
nodo.ccaa=nombre_largo_nodo
Se configura el nombre del nodo asignado al servidor y un identificador único para el
servidor. Mediante la clave <nodo>.ccaa podemos especificar el nombre largo del nodo.
A continuación vienen unos parámetros configurados de serie con las comunidades:
redes.nodo=MEC
ute.nodo=MEC
cnice.nodo=MEC
andalucia.nodo=AN
aragon.nodo=AR
asturias.nodo=AS
baleares.nodo=BA
canarias.nodo=IC
cantabria.nodo=CB
castillalamancha.nodo=CM
castillayleon.nodo=CL
catalunya.nodo=CT
extremadura.nodo=EX
galicia.nodo=GA
larioja.nodo=LR
madrid.nodo=MA
murcia.nodo=MU
navarra.nodo=NA
valencia.nodo=CV
ccaas=Junta de Andalucía,Comunidad Autónoma de Aragón,Comunidad del Principado de
Asturias,Comunidad Autónoma de Canarias,Comunidad Autónoma de Cantabria, Junta de
Castilla la Mancha,Junta de Castilla y Leon,Generalitat de Catalunya,Junta de
Extremadura,Xunta de Galicia,Comunidad Autónoma de La Rioja,Comunidad de
Madrid,Comunidad Autónoma de Murcia,Comunidad Foral de Navarra,Generalitat Valenciana
nodos=MEC,AN,AR,AS,IC,CB,CM,CL,CT,EX,GA,LR,MA,MU,NA,CV
urlNodo=http://url_nodo
urlConsejeriaNodo={url_consejería | #}
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
El fichero cas.properties únicamente contiene una línea en la que se especifica la URL del
76
Además de especificar la url del nodo, es necesario especificar la ccca.path que sea al
directorio anterior a uploads/galeriaimg para el correcto funcionamiento de la galería de
imágenes. La propiedad urlConsejeríaNodo permite especificar una URL a la que se redije al
usuario cuando pincha en el logo de la Comunidad Autónoma (en el caso de que el nodo
corresponda a una comunidad autónoma). En caso de que no se desee asignarle un valor,
de debe dejar con el valor #.
El fichero dependentServer_EN.properties es el mismo pero internacionalizado al inglés.
generacionContenidos.properties
##########################################################################
############################
# ATRIBUTOS DE LA TAREA DE GENERACIÓN DEL ODE
# DE LA PORTADA
##########################################################################
############################
#D : diaria, M: mensual, A:anual
periocidadOdePortada=H
horaTareaOde=1
minutoTareaOde=0
segundoTareaOde=0
Definimos con estas propiedades la periodicidad con la que se va a seleccionar un ODE
cualesquiera del repositorio, para generarse la captura diaria.
periodicidadOdePortada puede valer “M”, “D” y “H” (Mensual, Diaria, Horaria). En el caso de
periodicidad Horaria no aplican el resto de propiedades. Si especificamos la periodicidad
Diaria es necesario especificar la Hora, Minuto y el Segundo en el cual se lanzará la tarea de
generación del ODE.
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
#Usado para Galeria de Imagenes
#Lista de rutas a concatenar al localizador
#NOTA:Recordar que la ruta del localizador es relativa al servidor
#en el que se encuentra
redes.path=/export/ccaa/redes
madrid.path=/export/ccaa/madrid
andalucia.path=/export/ccaa/andalucia
aragon.path=/export/ccaa/aragon
asturias.path=/export/ccaa/asturias
canarias.path=/export/ccaa/canarias
cantabria.path=/export/ccaa/cantabria
castillayleon.path=/export/ccaa/castillayleon
catalunya.path=/export/ccaa/catalunya
extremadura.path=/export/ccaa/extremadura
galicia.path=/export/ccaa/galicia
larioja.path=/export/ccaa/larioja
murcia.path=/export/ccaa/murcia
navarra.path=/export/ccaa/navarra
valencia.path=/export/ccaa/valencia
77
A partir de aquí, el fichero especifica diversas propiedades para la generación de los ficheros
Sitemaps (ficheros XML que definen las URL que visita cada bot que nos navega para
indexar los contenidos del portal, por ejemplo google-bot).
Alianza2
##########################################################################
############################
# ATRIBUTOS DEL FICHERO SITEMAP #
##########################################################################
############################
###########
Nº de entradas (url) que contendrá como máximo cada fichero sitemap.xml
############
# Numero entradas <url> en el fichero sitemap.xml no debe superar las 50.000 urls ni
tampoco los 10MB
numeroEntradas=3000
###########
Nombre de los ficheros sitemap y sitemapIndex
##################################
# Nombre de los ficheros sitemap
ficheroSiteMap=sitemap
# Nombre del fichero sitemapindex
ficheroSiteMapIndex=sitemap-index
###########
Extensión de los ficheros sitemap y sitemapIndex
#############################
extensionFicheroSiteMap=xml
Especificamos que el número de entradas por fichero sea de 3000, la periodicidad de
actualización será mensual y el fichero índice que contiene todos los ficheros sitemaps se
denomina sitemap-index.html.
###########
Schema sitemap y sitemapIndex
#############################
schemaSitemap=http://www.google.com/schemas/sitemap/0.84
schemaSitemapXsi=http://www.w3.org/2001/XMLSchema-instance
schemaSitemapLocation=http://www.google.com/schemas/sitemap/0.84
http://www.google.com/schemas/sitemap/0.84/sitemap.xsd
schemaSitemapIndex=http://www.sitemaps.org/schemas/sitemap/0.9
schemaSitemapIndexXsi=http://www.w3.org/2001/XMLSchema-instance
schemaSitemapIndexLocation=http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd
Diversos schemas necesarios para la generación de los sitemaps.
###########
Directorios de los ficheros sitemap y sitemapIndex
#############################
# Url donde se dejarán los ficheros sitemap.xml. Deberá almacenarse en un directorio de tal
manera que
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
###########
Periodicidad de cambio del repositorio
##########################
# Los valores posibles son (always hourly daily weekly monthly yearly never)
periodicidad=monthly
Alianza2
78
# la url de acceso sea http://tudominio/sitemap.xml
urlSiteMap=uploads/sitemaps/
# Url donde se dejarán los ficheros backup de los ficheros sitemap
urlSiteMapBackup=uploads/sitemaps/backup/
# Url donde se dejará el fichero sitemap con las url de la portada
urlSiteMapPortada=uploads/sitemaps/estatico/
Alianza2
Alianza2
Directorios donde se almacenarán los ficheros sitemaps y el sitemap-index. Además, cuando
###############
Url de la ficha de los odes
############################
# Protocolo de las fichas de los odes
protocoloHttp=http://
# Url de la ficha del ode
buscadorFicha=/ODE/
# Carácter separador de la url (el formato de la url de la ficha será con urls cortas:
http://dominio/ODE/idioma/idOde)
separador=/
Diversos parámetros necesarios para generar la URL que acceda a la ficha de los ODEs.
###############
Prioridad asociada al nivel de agregación
#############################
# nivel_agregacion_ode=prioridad
1=0.2
2=0.4
3=0.7
4=1
Los ODEs de la plataforma tienen asociado un nivel de agregación (complejidad del objeto, a
mayor nivel mayor complejidad). Existen 4 niveles de agregación, las propiedades nos
permiten configurar los pesos asociados a los objetos en función de su nivel de agregación
cuando se escriban las preferencias en el fichero sitemap.
############## Variables de configuracion de la tarea programada de generación de
sitemap.xml ######
#D : diaria, M: mensual, A:anual
periodicidadTarea=D
horaTarea=1
minutoTarea=0
segundoTarea=0
Por ultimo, se define la periodicidad de la generación de los ficheros sitemaps. El
comportamiento es el mismo
i18n_ca.properties, i18n_en.properties, i18n_es.properties,
i18n_eu.properties,
i18n_gl.properties,
i18n.properties, i18n_va.properties
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
se generan los nuevos sitemaps se mueven los anteriores al directorio backup especificado.
79
El fichero i18n.properties contiene los idiomas en los que podrán realizar las búsquedas, el
idioma por defecto del portal y el idioma secundario:
# Lista de idiomas buscables de la plataforma.
idiomas.buscables=es,ca,en,eu,gl,va
# Lista de idiomas en los que se puede mostrar la plataforma
idiomas.plataforma=es,ca,en,eu,gl,va
# Idioma por defecto en el que se muestra la plataforma
idioma.por.defecto=es
# Idiomas traducibles: todos los idiomas para los que tenemos traduccion. En cada bundle
# tendra que estar cada idioma de esta lista traducido
idiomas.traducibles=es,ca,en,eu,gl,va
idioma.secundario=
Alianza2
Alianza2
Por ejemplo, el fichero i18n_en.properties:
#Idiomas por parejas ISO=Nombre Idioma y Nombre Idioma=ISO
es=spanish
spanish=es
ca=catalan
catalan=ca
en=english
english=en
eu=basque
basque=eu
gl=galician
galician=gl
va=valencian
valencian=va
importedServices.properties
Si algún servicio no se despliega en la misma máquina, será necesario especificar la URL
donde se publica el servicio remoto en el fichero. Por defecto, al encontrarse todos los
servicios desplegados en el mismo servidor de aplicaciones el fichero tendrá todas las
propiedades vacías como se muestra a continuación:
srvAdminUsuariosServicePort=
srvAgregadorRssServicePort=
srvAuditaPublicacionServicePort=
srvAuditoriaServicioPort=
srvAuditoriaValoracionServicePort=
srvAuditoriaIndexadorServicePort=
srvBuscarFederadaServicePort=
srvBuscadorServicePort=
srvBuscarServicePort=
srvCatalogacionBasicaServicePort=
srvCatalogacionAvanzadaServicePort=
srvDescargasPort=
srvEmpaquetadorBasicoServicePort=
srvEntregarServicePort=
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Cada fichero i18n_XX.properties contiene los nombres de los idiomas internacionalizados.
80
log4j.xml (JBoss)
Para generar los logs el portal hace uso de Log4j. En el fichero de configuración ubicado en
$JBOSS_HOME/server/default/conf/log4j.xml definimos los siguientes “appenders”:
FILE, ServiceErrors y agrega.
<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/server.log"/>
<param name="Append" value="true"/>
<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<!-- Rollover at the top of each hour
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
-->
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
<!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-->
</layout>
</appender>
<appender
class="org.jboss.logging.appender.DailyRollingFileAppender">
name="ServiceErrors"
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
srvEstructurasEducativasServicePort=
srvFachadaAgregarServicePort=
srvFaqServicePort=
srvGeneracionDinamicaServicePort=
srvGestionSqiServicePort=
srvGestorArchivosServicePort=
srvGestorManifestServicePort=
srvHerramientaModificacionPort=
srvIndexadorServicePort=
srvInformeServicePort=
srvLocalizadorServicePort=
srvLogServicePort=
srvMonitorizarServicePort=
srvNodoServicePort=
srvNoticiasServicePort=
srvPlanificadorServicePort=
srvPublicacionServicePort=
srvRegistroPlanificadorServicePort=
srvSitemapServicePort=
srvTaggingServerPort=
srvTaxonomiaServicePort=
srvTesaurosServicesPort=
srvValidadorServicePort=
srvValidadorVDEXServicePort=
srvValoracionServicePort=
srvVocabulariosControladosServicePort=
descomprimeYvalidaPort=http://localhost:8080/herramientaoffline/services/DescomprimeYvali
da
81
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/service-error.log"/>
<param name="Append" value="true"/>
<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
Alianza2
Alianza2
<!-- Rollover at the top of each hour
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
-->
<!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-->
</layout>
</appender>
<appender name="agrega" class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/agrega.log"/>
<param name="Append" value="true"/>
<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<!-- Rollover at the top of each hour
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
-->
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
<!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-->
</layout>
</appender>
Se
ha
especificado
que
${jboss.server.log.dir}/fichero.log,
los
que
logs
se
se
almacenen
corresponde
en
con
el
directorio
el
directorio
$JBOSS_HOME/server/default/log. En la configuración de los “appenders”, se ha hecho uso
de la clase org.jboss.logging.appender.DailyRollingFileAppender para que roten diariamente
con los patrones que aparecen en el fichero de configuración.
Los niveles de verbosidad y paquetes se configuran en las secciones siguientes:
<category name="org.springframework">
<priority value="INFO"/>
</category>
<category name="ServiceErrorsLogger">
<priority value="ERROR" />
<appender-ref ref="ServiceErrors"/>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
82
</category>
<category name="es.pode">
<priority value="INFO"/>
<appender-ref ref="agrega"/>
</category>
Alianza2
Alianza2
<category name="es.agrega">
<priority value="INFO"/>
<appender-ref ref="agrega"/>
</category>
En las categorías especificamos el paquete Java, la prioridad a mostrar (DEBUG, INFO,
escribirán los logs de las clases pertenecientes al paquete.
Todos los loggers heredan de la categoría raíz, definida de la siguiente manera:
<root>
<priority value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
Si queremos cambiar la prioridad de todas las clases por defecto a INFO, es importante
introducir la línea “<priority value ="info" />” dentro de la sección root previa.
Los
valores
almacenados
en
las
categorías
citadas
anteriormente
prevalecen
sobrescribiendo los valores de la categoría root.
log4j.properties (Tomcat)
Por
defecto
los
logs
se
almacenan
en
$TOMCAT_HOME/logs.
$TOMCAT_HOME/common/classes/log4j.properties
definimos
los
En
el
appenders
fichero
con
la
ubicación y la política de rotado:
log4j.rootLogger=INFO, R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/tomcat.log
log4j.appender.R.MaxFileSize=100MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.logger.es.pode=INFO,R
log4j.logger.es.agrega=INFO,R
Además del fichero catalina.log que deja por defecto Apache Tomcat, especificamos el
aprender R que apunta al fichero tomcat.log, rotando el fichero cada 100 MB y dejando un
histórico de 10 ficheros. El nivel por defecto de la categoría raiz es INFO así como el de los
paquetes es.pode y es.agrega.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
WARN, ERROR, FATAL) y podemos especificar uno o más appenders en los que se
83
Los niveles de verbosidad y paquetes se configuran en la siguiente sección:
log4j.logger.es.pode=INFO,R
log4j.logger.es.agrega=INFO,R
En las categorías especificamos el paquete Java, la prioridad a mostrar (DEBUG, INFO,
Alianza2
WARN, ERROR, FATAL) y podemos especificar uno o más appenders en los que se
Alianza2
escribirán los logs de las clases pertenecientes al paquete.
springldap.xml
En el fichero de configuración springldap.xml definimos la conexión al LDAP por parte de los
El contenido, deberá reflejar la estrucuta del LDAP de cada CCAA, a modo de ejemplo
mostramos el fichero plantilla usado:
<?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="contextSource"
class="org.springframework.ldap.support.LdapContextSource">
<property name="url"
value="ldap://ldapserver:389/ou=usuarios,dc=<nodo>,dc=agrega,dc=indra,dc=es" />
<property name="userName" value="cn=Administrador,dc=agrega,dc=indra,dc=es" />
<property name="password" value="contraseña"/>
</bean>
<bean id="ldapTemplate" class="org.springframework.ldap.LdapTemplate">
<constructor-arg ref="contextSource" />
</bean>
<bean id="ldapContact"
class="es.pode.adminusuarios.negocio.comun.LDAPContactDAO">
<property name="ldapTemplate" ref="ldapTemplate" />
</bean>
</beans>
Las líneas resaltadas son:

url: Especificamos la URL de conexión al LDAP en donde se buscarán los usuarios. Se
ha especificado la base a partir de la cual se realizarán todas las operaciones del LDAP.

userName: usuario que sera usado para obtener el contexto autenticado. Corresponde
con el DN del usuario Administrador.

password: contraseña del usuario administrador
traduccionesBuscador_ca.properties,
traduccionesBuscador_en.properties,
traduccionesBuscador_es.properties,
traduccionesBuscador_eu.properties,
traduccionesBuscador_gl.properties,
traduccionesBuscador_va.properties
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
módulos del portal para autenticarse.
84
Diversos properties con traducciones comunes para el buscador.
DESPLIEGUE DEL APLICATIVO: WARS
Alianza2
JBossAS
Alianza2
Tanto los servicios como los módulos web se deben desplegar en el directorio
$JBOSS_HOME/server/default/deploy/agrega/
1 adminusuarios-1.0.war
2 agregadorRSS-1.0.war
3 auditoria-1.0.war
4 buscador-1.war
5 buscar-1.war
6 cas.war
7 catalogacion-1.war
8 catalogadorWeb-1.war
9 contenidosportal-F1.war
10 dri-1.war
11 empaquetadorbasico-F1.war
12 entregar-1.war
13 fuentestaxonomicas-1.war
14 gestorflujo-1.war
15 indexador-0.1.war
16 localizador-1.war
17 modificador-1.war
18 ModificadorWeb-1.war
19 oaipmh-1.0.war
20 planificador-1.0.war
21 portaladministracion-F1.war
22 PortalEmpaquetador-F1.war
23 publicacion-1.war
24 RemotingGalleryServer.war
25 reputacion-1.war
26 TaggingWeb-1.war
27 valoracion-1.war
28 visualizador-1.war
29 visualizadorcontenidos-F1.war
Una vez arrancado el JBossAS, los JSPs compilados (servlets generados) se encontrarán
disponibles en el directorio:
$JBOSS_HOME/server/default/work/jboss.web/localhost
El contenido de clases, librerías, ficheros XML de configuración… de los WARs se
desplegará en el directorio: $JBOSS_HOME/server/default/tmp/deploy
Cada vez que se quiera desplegar un módulo, sobrescribiendo uno actual, podemos realizar
la tarea de dos maneras:
1. Copiamos el WAR en caliente (hot deploy): sin parar el servidor de aplicaciones
JBoss, después de haber realizado un backup del war, copiamos el nuevo sobre el
viejo, produciéndose las tareas de undeploy y dedeploy del módulo. JBoss escanea
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Los wars correspondientes a la versión 1.1.1 son:
85
el directorio de los wars para detectar los cambios cada cierto tiempo, la
configuración
del
scanner
se
encuentra
en
$JBOSS_HOME/server/default/conf/jboss-service.xml
Alianza2
<mbean code="org.jboss.deployment.scanner.URLDeploymentScanner"
name="jboss.deployment:type=DeploymentScanner,flavor=URL">
<!-- A flag to disable the scans -->
<attribute name="ScanEnabled">true</attribute>
Se define mediante la propiedad ScanEnabled si está o no habilitado el mbean de
JBoss, y mediante la propiedad de ScanPeriod definimos en milisegundos el tiempo
entre comprobaciones de nuevos wars o modificaciones de los existentes.
2. Copia del WAR habiendo parado el JBoss: una vez detenido el servicio del JBoss,
procedemos a sobrescribir el WAR, borrar los directorios temporales citados
anteriormente y arrancamos de nuevo el servicio. Es el método más limpio y
recomendado para las actualizaciones de la plataforma.
Apache Tomcat
Los wars de agrega se encuentran en la siguiente carpeta ubicada en el directorio de
Tomcat: $TOMCAT_HOME/webapps.
En el caso de Tomcat los wars poseerán los siguientes nombres:
1 adminusuarios.war
2 agregadorRSS-1.0.war
3 auditoria.war
4 buscador.war
5 buscar-1.war
6 cas.war
7 catalogacion-1.war
8 catalogadorWeb.war
9 contenidosportal-F1.war
10 dri-1.war
11 empaquetadorbasico-F1.war
12 entregar-1.war
13 fuentestaxonomicas-1.war
14 gestorFlujo.war
15 indexador-0.1.war
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<!-- Uncomment (and comment/remove version below) to enable usage of the
DeploymentCache
<depends optional-attributename="Deployer">jboss.deployment:type=DeploymentCache</depends>
-->
<depends optional-attributename="Deployer">jboss.system:service=MainDeployer</depends>
…
…
<!-- Frequency in milliseconds to rescan the URLs for changes -->
<attribute name="ScanPeriod">60000</attribute>
Alianza2
86
localizador-1.war
modificador-1.war
ModificadorWeb.war
oaipmh.war
planificador-1.0.war
portaladministracion-F1.war
PortalEmpaquetador.war
publicacion-1.war
RemotingGalleryServer.war
TaggingWeb.war
validador-1.war
valoracion-1.war
visualizador-1.war
visualizadorcontenidos.war
3.3.3.
Alianza2
Alianza2
GALERÍA DE IMÁGENES
INTRODUCCIÓN
La galería de imágenes es invocada desde el módulo publicador a través del protocolo RMI
tal y como se muestra en la siguiente figura:
COLA JMS
Publicación
RMI
RemotingGalleryServer
$fileType == "video"
else
$fileType == "image"
convert
¡BOOM!
Firefox
+
import
ffmpeg
El publicador, por cada elemento publicado, inserta un mensaje en una cola JMS.
Asíncronamente un listener va consumiendo los mensajes de la cola JMS y vía RMI invoca al
módulo de la galería de imágenes. En el mensaje RMI se intercambia la siguiente
información:

URL del fichero del recurso (en disco) a capturar.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
16
17
18
19
20
21
22
23
24
25
26
27
28
29
87

Directorio donde almacenar la captura

Nombre del fichero donde se guardará la captura.
La galería de imágenes, una vez que ha recibido la información del recurso del ODE a
Alianza2
capturar, el directorio y fichero a generar, invoca una shell del sistema ejecutando el fichero
Alianza2
generateimg.sh o resizeimg.sh (disponibles en el directorio $JBOSS_HOME/bin). El
función del tipo de contenido los scripts capturarán la imagen de una u otra manera.
NOTA: tanto los directorios como los scripts a invocar son configurables en el fichero
SCRIPTS EJECUTADOS
Existen dos scripts que pueden ser ejecutados. Si la aplicación de antemano conoce que el
recurso es una imagen, invocará directamente al script resizeimg.sh. En caso contrario,
se ejecuta el script generateimg.sh.
resizeimg.sh
El contenido del script resizeimg.sh es el siguiente:
#!/bin/bash
# constantes
UPLOADS_PATH=uploads/galeriaimg;
IMAGE_FINAL_SIZE=100x100;
echo "Parametros = [$1] [$2] [$3]"
if test -z $1
then
echo "Falta el primer parametro obligatorio de la llamada"
exit
fi
if test -z $2
then
echo "Falta el segundo parametro obligatorio de la llamada"
exit
fi
if test -z $3
then
echo "Falta el tercer parametro obligatorio de la llamada"
exit
fi
MD5PATH=`md5sum --string $1 |cut -b1-2`
mkdir -p $UPLOADS_PATH/$3/$MD5PATH/$1/
#echo "Copio el fichero [$2] en [$UPLOADS_PATH/$3/$MD5PATH/$1/]"
#cp $2 $UPLOADS_PATH/$3/$MD5PATH/$1/
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
agrega.properties.
88
echo "Convirtiendo la imagen $2 al formato JPG en
$UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg ..." `date`
convert -resize 800x600 "$2" $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg
echo "[OK] Imagen convertida correctamente" `date`
Alianza2
echo "Generando imagen reducida $UPLOADS_PATH/$3/$MD5PATH/$1/$1.png ..." `date`
convert -resize $IMAGE_FINAL_SIZE $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg
$UPLOADS_PATH/$3/$MD5PATH/$1/$1.png
echo "[OK] Imagen reducida generada correctamente" `date`
Alianza2
El script, habiendo recibido los 3 parámetros necesarios, ejecuta el comando convert (de
ImageMagick) redimensionando la imagen primero a 800x600 y luego a 100x100. De esta
generateimg.sh
Cuando no se conoce de antemano el formato del recurso a capturar, se invoca este script.
El contenido del mismo es:
#!/bin/bash
# constantes
videoDelayCaptureInSeconds=3;
UPLOADS_PATH=uploads/galeriaimg;
IMAGE_FINAL_SIZE=100x100;
echo "Parametros = [$1] [$2] [$3]"
if test -z $1
then
echo "Falta el primer parametro obligatorio de la llamada"
exit
fi
if test -z $2
then
echo "Falta el segundo parametro obligatorio de la llamada"
exit
fi
if test -z $3
then
echo "Falta el tercer parametro obligatorio de la llamada"
exit
fi
MD5PATH=`md5sum --string $1 |cut -b1-2`
mkdir -p $UPLOADS_PATH/$3/$MD5PATH/$1/
fileType=`file -bi "$2" | awk -F'/' '{print $1}'`
echo "FileType is: '$fileType'"
if [ $fileType == "image" ]
then
echo "Convirtiendo la imagen $2 al formato JPG en
$UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg ..." `date`
convert "$2" $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg
echo "[OK] Imagen convertida correctamente" `date`
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
forma, se generan 2 imágenes, una grande y otra pequeña (la que se muestra en la ficha).
89
echo "Generando imagen reducida $UPLOADS_PATH/$3/$MD5PATH/$1/$1.png ..." `date`
convert -resize $IMAGE_FINAL_SIZE $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg
$UPLOADS_PATH/$3/$MD5PATH/$1/$1.png
echo "[OK] Imagen reducida generada correctamente" `date`
Con ayuda del comando file y awk obtenemos el tipo de recurso que deseamos capturar. En
principio, el script analiza 3 posibilidades (tal y como se refleja en la figura inicial):
1. fileType=image
Si el tipo de fichero es imagen, capturamos la misma redimensionándola primero a
800x600 mediante el comando convert de ImageMagick.
2. fileType=video
Si el tipo de fichero es un video, hacemos uso del programa FFmpeg capturando el
segundo especificado por la propiedad videoDelayCaptureInSeconds (por defecto 3
segundos)
3. Cualquier otro caso
Si el tipo de fichero no es ni imagen ni video, la única forma para generar una captura
de pantalla consiste en abrir un navegador web con diversos plugins instalados
(firefox en fullscreen) y tomar una captura de pantalla del mismo firefox. Para ello,
hacemos uso de: firefox y un sistema de frame buffer virtual Xvfb.
Por último, capturada la imagen grande la redimensionamos a 100x100 para generar la
imagen pequeña (la que aparece junto a la ficha del recurso).
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
elif [ $fileType == "video" ]
then
echo "Capturando del video a los $videoDelayCaptureInSeconds segundos a una
imagen JPG..." `date`
ffmpeg -i "$2" -y -ss $videoDelayCaptureInSeconds -t 0.01 -f mjpeg
$UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg
echo "[OK] Video capturado correctamente" `date`
else
echo "Capturando el fichero $2 desde un navegador..." `date`
Xvfb :1 -fp
/usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/75dp
i/ -screen 0 1280x800x24 &
DISPLAY=:1 /opt/firefox/firefox -no-remote -height 800 -width 1280 file:"$2" &
sleep 5
DISPLAY=:1 import -window root
$UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg
killall firefox-bin
killall firefox
killall run-mozilla
killall run-mozilla.sh
killall Xvfb
echo "[OK] Ventana de navegador capturada correctamente" `date`
fi
90
SOFTWARE REQUERIDO
El software necesario para que funcionen los scripts anteriores es:

awk

Xvfb

ImageMagick

FFmpeg

Xfonts-100dpi

Xfonts-75dpi

Xfonts-base

Plugin de flash para el mozilla-firefox
Alianza2
Durante la instalación de Firefox, se habrán seguido los siguientes pasos:

Descarga de firefox de la propia Web de mozilla-firefox y descompresión en el directorio
/opt/firefox.
o
wget http://download.mozilla.org/?product=firefox2.0.0.14&os=linux&lang=es-ES

Descarga del plugin de Adobe flash player.

Creamos el enlace simbólico al plugin de flash (ejemplo, particularizar con las rutas
reales):
ln
-s
/usr/lib/mozilla/plugins/libflashplayer.so
libflashplayer.so
 Con el usuario que arranque del servidor de aplicaciones, escribimos en su home el
directorio “.mozilla”, que contiene toda la configuración de firefox ya establecida (se
facilita el fichero firefoxConf.tar)

Modificamos el fichero extensions.ini en la línea “Extension2” para que apunte al path
correcto donde se encuentra el home del usuario jboss (o tomcat) y los archivos que
hemos desplegado.
o
cd ~/.mozilla/firefox/a6czhy0t.default/
o
Editamos la línea:
o
Extension2=/opt/jboss/.mozilla/firefox/a6czhy0t.default/e
xtensions/{bfe3406c-6f31-4789-86d5-efa50e12c9eb}
Los plugins instalados y configurados en firefox son:
-
Adobe flash plugin (Shockwave Flash)
-
Plugin fullscreen (full_fullscreen-2.0-fx.xpi)
3.4. CAPA DE SERVIDOR WEB
En la capa del servicio web podemos distinguir al menos 3 componentes fundamentales:

Servidor web: con el fin de atender todas las peticiones y los componentes estáticos
tales como imágenes, CSS, JS, disponemos de un servidor web Apache 2.X instalado.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Alianza2
91

Ayuda Mediawiki: la ayuda se basa en el popular software libre Mediawiki. Se trata de
una aplicación PHP disjunta del portal instalada directamente sobre Apache.

Proxy cache: para aquellos contenidos que sean susceptibles de ser almacenados en
caché tales como imágenes, CSS, JS, e incluso algunos contenidos (ODEs) solicitados
Alianza2
muy a menudo, se propone el uso de un Proxy cache como Squid. Otras opciones como
Alianza2
habilitar el módulo de caché de Apache o la caché cualquier otro servidor web serían
totalmente válidas.
3.4.1.
APACHE 2
Dada la naturaleza de software libre y el presente uso en la mayoría de las CCAA, se ha
escogido Apache 2.x como servidor web. Durante la instalación, en caso de no existir un
Apache previo, se habrá instalado la última versión estable de Apache 2.0.X (siendo a fecha
de la escritura del manual la versión 2.0.63 la última versión estable).
En caso de existir ya instalado un servidor web Apache, simplemente se seguirán las guías
de configuración recomendadas por JBoss y se creará el virtual host necesario.
Con respecto a las conexiones, recordamos que los usuarios se conectarán desde Internet al
Apache (puerto 80 y puerto 443 para HTTPS). El servidor HTTPd establecerá conexiones
mediante el conector AJP con el servidor de aplicaciones (puerto 8009), y también abrirá
conexiones a la base de datos para la MediaWiki. Gráficamente podemos verlas en la
siguiente figura:
INTERNET
:80
:443
Router
FIREWALL
DMZ
Servidor Web
APACHE
:3306
:8009
Red De Datos
Red De Aplicación
FIREWALL
Interno
Servidor de BBDD
MYSQL
Servidor Aplicaciones
JBOSS / Tomcat
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
INTRODUCCIÓN
92
MÓDULOS APACHE NECESARIOS
La configuración del vhost va a hacer uso de al menos los siguientes módulos de Apache:

modules/mod_alias.so

modules/mod_rewrite.so

modules/mod_jk.so
Alianza2
Alianza2
El modulo mod_jk estable recomendado para entornos de producción es la versión jk-1.2.26.
Generalmente los dos primeros módulos siempre vienen instalados y habilitados en el fichero
manualmente.
FICHEROS DE CONFIGURACIÓN
httpd.conf
Normalmente la ruta del fichero será /etc/httpd/conf/httpd.conf. La configuración
habilitada en cada CCAA será distinta, sin embargo, podemos referenciar los parámetros de
configuración que afectan o directamente que son necesarios por el portal Agrega:
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On
Con este parámetro habilitamos las conexiones persistentes.
Mediante el comando httpd –V podemos comprobar cómo se encuentra configurado el
servidor MPM de Apache. Un ejemplo de la salida del comando es la siguiente:
Server version: Apache/2.0.52
Server built:
May 24 2006 11:45:10
Server's Module Magic Number: 20020903:9
Architecture:
32-bit
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
…
Si el server MPM configurado es prefork, desde la wiki oficial de JBoss donde se especifica la
configuración óptima para el módulo mod-jk se aconseja el valor de 200 clientes por cada
CPU que tenga el servidor. En el caso de un servidor con 2 procesadores se aconsejarían los
siguientes valores:
<IfModule prefork.c>
StartServers
20
MinSpareServers 20
MaxSpareServers 20
ServerLimit
400
MaxClients
400
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
de configuración de Apache, mientras que el último suele ser necesario instalarlo
93
MaxRequestsPerChild 0
</IfModule>
Si en lugar de prefork la configuración del server MPM es worker, modificaríamos las
siguientes líneas:
Alianza2
Alianza2
Posteriormente, comprobamos que se encuentren cargados los siguientes módulos:
LoadModule deflate_module modules/mod_deflate.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule jk_module modules/mod_jk.so
El modulo mod-jk podría no estar configurado directamente en el httpd.conf y ser configurado
en ficheros “.conf” independientes en el directorio /etc/httpd/conf.d/ si se encuentran
presentes por ejemplo las líneas:
Include conf.d/*.conf
Include vhosts.d/*.conf
En este caso estamos especificando también el directorio donde se almacenarán los ficheros
que definen los virtual hosts (/etc/httpd/vhosts.d/).
worker.properties
En el directorio /etc/httpd/conf se suele almacenar el fichero que contiene la definición de los
workers del módulo mod-jk donde se definen las conexiones entre el Apache y el servidor de
aplicaciones JBoss. Su contenido es el siguiente:
worker.list=<nodo>
worker.<nodo>.host=<ip_jboss>
worker.<nodo>.type=ajp13
worker.<nodo>.port=8009
worker.<nodo>.connect_timeout=10000
worker.<nodo>.prepost_timeout=10000
worker.<nodo>.socket_timeout=10
#This value must equal server.xml's connectionTimeout of 10 minutes
worker.<nodo>.connection_pool_timeout=600
En donde:

<nodo> será el nombre de la CCAA donde nos encontremos, pero puede tener cualquier
valor.

<ip_jboss> es la dirección IP donde escucha el conector AJP del JBoss.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<IfModule worker.c>
StartServers
2
MaxClients
400
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
94

Los tiempos máximos de espera son los aconsejados en la wiki oficial de JBoss para
situaciones de alta carga. El valor del connection_pool_timeout ha de ser igual al valor
configurado en el fichero server.xml del JBoss (cuidado que este tiempo se define en
segundos y el otro en milisegundos).
Alianza2
Alianza2
mod_jk.conf
En el caso de especificar el fichero de mod_jk.conf en el directorio conf.d mediante la
# Load mod_jk module
# Specify the filename of the mod_jk lib
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties
JkWorkersFile "/etc/httpd/conf/workers.properties"
# Where to put jk logs
JkLogFile "/var/log/httpd/mod_jk.log"
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicates to send SSK KEY SIZE
# Note: Changed from +ForwardURICompat.
# See http://tomcat.apache.org/security-jk.html
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat
JkRequestLogFormat "%w %V %T"
# Mount your applications
#JkMount /__application__/* loadbalancer
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
# /examples/*=loadbalancer
#JkMountFile conf/uriworkermap.properties
# Add shared memory.
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly
# Note: Replaced JkShmFile logs/jk.shm due to SELinux issues. Refer to
# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225452
JkShmFile run/jk.shm
Las tres líneas resaltadas son aquellas susceptibles a ser modificadas en cada CCAA,
especificando:

La ubicación del módulo y el nombre del mismo.

La ruta completa al fichero worker.properties.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
sentencia include en el httpd.conf, el fichero mod_jk.conf tendría el siguiente contenido:
95

Fichero de log del módulo mod_jk.
vhost
Alianza2
En el directorio /etc/httpd/vhosts.d/ se creará un virtual host diferente en cada CCAA. La
plantilla desde la que se parte durante la instalación es la que sigue a continuación:
Alianza2
Definimos el virtual host que escucha en todas las direcciones ip, puerto 80. Especificamos el
DocumentRoot del virtual host apuntando al directorio uploads del portal (normalmente será
un directorio dentro del disco compartido por NFS).
Por último, definimos el ServerName y ServerAlias del nodo con los valores adecuados.
Alias /static/css
Alias /static
Alias /log
Alias /wiki
Alias /wiki-ca
Alias /wiki-en
Alias /wiki-eu
Alias /wiki-gl
Alias /wiki-va
/opt/static/ccaa/<sitio>/css
/opt/static/common
/opt/log/<sitio>
/export/wiki/wiki
/export/wiki/wiki-ca
/export/wiki/wiki-en
/export/wiki/wiki-eu
/export/wiki/wiki-gl
/export/wiki/wiki-va
Definimos los siguientes alias:

Si deseamos que Apache sirva el contenido estático del portal (imágenes comunes,
logos, plantillas, CSS, JS…) es necesario crear los alias static y static/css a los
directorios que contienen los estáticos facilitados durante la instalación. En caso
contrario, sería necesario añadir la línea siguiente en la sección de configuración de
los puntos de montaje mod-jk:
JkMount
/static/*
<nodo>
 Puesto que los logs se almacenarán por lo general en una partición diferente a la del
servidor de aplicaciones (para evitar que se llene el espacio en disco), la aplicación
necesita que el alias del vhost /log apunte al directorio donde se almacenan
realmente los logs del servidor de aplicaciones.

La ayuda, necesita tantos alias como wikis internacionalizadas existen. Recordamos
que se trata de una aplicación PHP y apuntará al directorio donde se encuentren
instaladas.
Alias /taller
/export/ccaa/<sitio>/uploads/taller
Alias /noticias
/export/ccaa/<sitio>/uploads/noticias
Alias /repositorio /export/ccaa/<sitio>/uploads/repositorio
Alias /galeriaimg /export/ccaa/<sitio>/uploads/galeriaimg/<sitio>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<VirtualHost *:80>
DocumentRoot "/export/ccaa/<sitio>/uploads"
ServerName <nodo>
ServerAlias <nodo> <nodo>.agrega.indra.es
96
Alias /imgcommon
/export/ccaa/<sitio>/uploads/galeriaimg/common
Alias /imagenesInformes /export/ccaa/<sitio>/uploads/imagenesInformes
Alias /rss
/export/ccaa/<sitio>/uploads/rss
Alias /utilidades /export/ccaa/<sitio>/uploads/utilidades
Alias /searchPlugin /export/ccaa/<sitio>/uploads/searchPlugin
Alias /sitemaps /export/ccaa/<sitio>/uploads/sitemaps
Alias /informesPortada /export/ccaa/<sitio>/uploads/informesPortada
Alias /descargas
/export/ccaa/<sitio>/uploads/descargas
Alias /export
/export/ccaa/<sitio>/uploads/export
Alianza2
Alianza2
Definimos el resto de los alias usados en el portal. La mayor parte de ellos apuntan a
# security
# forbid default access to filesystem locations
<Directory />
Order Deny,Allow
Deny from all
Options FollowSymLinks
AllowOverride None
php_flag engine off
</Directory>
Definimos el directorio raíz configurado mediante los parámetros:

Deny from all
No permitimos conexiones al directorio DocumentRoot

AllowOverride None
Ignoramos los ficheros .htaccess para evitar que sobrescriban políticas de seguridad.

php_flag engine off
Desactivamos la ejecución de código php. Evitamos que alguien pueda subir
recursos ODEs con código PHP malicioso y pueda ejecutarlos.
<Directory "/opt/static">
Order Deny,Allow
Allow from all
Options FollowSymLinks
AllowOverride None
php_flag engine off
</Directory>
<Directory "/export/ccaa/<sitio>/uploads">
Order Deny,Allow
Allow from all
AllowOverride None
Options FollowSymLinks
php_flag engine off
</Directory>
Se definen los directorios del /opt/static y directorio uploads.
<Directory "/export/wiki/wiki/">
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
directorios contenidos dentro de uploads.
97
A continuación, se han definido todos los directorios donde se encuentran instaladas las
MediaWiki. Es importante destacar que es necesario habilitar el php_flag engine puesto que
se trata de un software PHP.
RewriteEngine on
RewriteRule ^/robots.txt$ /sitemaps/robots.txt [L,PT]
RewriteRule ^/sitemap.xml$ /sitemaps/sitemap-index.xml [L,PT]
RewriteRule ^/sitemap(.*).xml$ /sitemaps/sitemap$1.xml [L,PT]
RewriteRule ^/$ /visualizadorcontenidos/ [R=permanent,L]
RewriteRule ^/layout/(.*) /visualizador-1/layout/$1 [L,PT]
#RewriteRule ^/idODE/([a-z_][0-9]+)/ /visualizador1/Visualizar/Visualizar.do?identificador=$1&secuencia=false [L,PT]
RewriteRule ^/idODE/(.*) /visualizador1/Visualizar/Visualizar.do?identificador=$1&secuencia=false [L,PT]
# ODE/<idioma>/<identificadorODE> ---- Example:
http://mantenimiento.agrega.indra.es/ODE/es/es-mec_20080206_3_9220808
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Options None
AllowOverride None
Order Deny,Allow
Allow from all
php_flag engine on
</Directory>
<Directory "/export/wiki/wiki-ca/">
Options None
AllowOverride None
Order Deny,Allow
Allow from all
php_flag engine on
</Directory>
<Directory "/export/wiki/wiki-en/">
Options None
AllowOverride None
Order Deny,Allow
Allow from all
php_flag engine on
</Directory>
<Directory "/export/wiki/wiki-eu/">
Options None
AllowOverride None
Order Deny,Allow
Allow from all
php_flag engine on
</Directory>
<Directory "/export/wiki/wiki-gl/">
Options None
AllowOverride None
Order Deny,Allow
Allow from all
php_flag engine on
</Directory>
<Directory "/export/wiki/wiki-va/">
Options None
AllowOverride None
Order Deny,Allow
Allow from all
php_flag engine on
</Directory>
98
RewriteRule ^/ODE/(.+)/(.+)$
/buscador/DetallarODECU/DetallarODECU.do?idioma=$1&identificadorODE=$2 [L,PT]
RewriteRule ^(.+)\\(.+)$ $1/$2 [PT]
# visualizar/<identificadorODE>/<sequence> ---- Example:
http://mantenimiento.agrega.indra.es/visualizar/es-mec_20080206_3_9220808/false
RewriteRule ^/visualizar/(.+)/(.+)/(.+)$ /visualizador1/Visualizar/Visualizar.do?idioma=$1&identificador=$2&secuencia=$3 [L,PT]
# Reglas de rewriting para las NOTICIAS
RewriteRule ^/portada/noticias/(.+)/(.+)$
/visualizadorcontenidos/Portada/NoticiasVer.do?id=$2 [PT,L]
RewriteRule ^/portada/noticiasCategorias/(.+)/(.+)$
/visualizadorcontenidos/Portada/NoticiasCategoria.do?idCategoria=$2 [PT,L]
RewriteRule ^/noticias$ /visualizadorcontenidos/Noticias/Noticias.do [PT,L]
RewriteCond %{QUERY_STRING} ^idCategoria(.+)&(.+)$
RewriteRule ^/noticias/categorias/(.+)/(.+)$
/visualizadorcontenidos/Noticia/NoticiaCategoria.do?idCategoria%1&%2 [PT,L]
RewriteCond %{QUERY_STRING} ^(.+)&idCategoria(.+)$
RewriteRule ^/noticias/categorias/(.+)/(.+)$
/visualizadorcontenidos/Noticia/NoticiaCategoria.do?%1&idCategoria%2 [PT,L]
RewriteRule ^/noticias/categorias/(.+)/(.+)$
/visualizadorcontenidos/Noticia/NoticiaCategoria.do?idCategoria=$2 [PT,L]
Definimos un conjunto de RewriteRules para facilitar las URLs y su almacenamiento como
favoritos en sistemas externos. El formato de una RewriteRule es:
RewriteRule Pattern Substitution [Flags]
Donde los flags más comunes son:

Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
# rewrite rule para los flash
RewriteRule ^/visualizar/es/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L]
RewriteRule ^/visualizar/es/(.+)\.html$ /visualizador-1/$1\.html [PT,L]
RewriteRule ^/visualizar/es/(.+)\.js$ /visualizador-1/$1\.js [PT,L]
RewriteRule ^/visualizar/es/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L]
RewriteRule ^/visualizar/en/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L]
RewriteRule ^/visualizar/en/(.+)\.html$ /visualizador-1/$1\.html [PT,L]
RewriteRule ^/visualizar/en/(.+)\.js$ /visualizador-1/$1\.js [PT,L]
RewriteRule ^/visualizar/en/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L]
RewriteRule ^/visualizar/eu/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L]
RewriteRule ^/visualizar/eu/(.+)\.html$ /visualizador-1/$1\.html [PT,L]
RewriteRule ^/visualizar/eu/(.+)\.js$ /visualizador-1/$1\.js [PT,L]
RewriteRule ^/visualizar/eu/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L]
RewriteRule ^/visualizar/ca/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L]
RewriteRule ^/visualizar/ca/(.+)\.html$ /visualizador-1/$1\.html [PT,L]
RewriteRule ^/visualizar/ca/(.+)\.js$ /visualizador-1/$1\.js [PT,L]
RewriteRule ^/visualizar/ca/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L]
RewriteRule ^/visualizar/va/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L]
RewriteRule ^/visualizar/va/(.+)\.html$ /visualizador-1/$1\.html [PT,L]
RewriteRule ^/visualizar/va/(.+)\.js$ /visualizador-1/$1\.js [PT,L]
RewriteRule ^/visualizar/va/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L]
RewriteRule ^/visualizar/gl/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L]
RewriteRule ^/visualizar/gl/(.+)\.html$ /visualizador-1/$1\.html [PT,L]
RewriteRule ^/visualizar/gl/(.+)\.js$ /visualizador-1/$1\.js [PT,L]
RewriteRule ^/visualizar/gl/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L]
L: Last Rule. Si la regla se ejecutó, no se ejecutan más reglas posteriormente.
99

PT: Pass Through al próximo controlador. Permite el post-procesamiento de la salida
de la rewrite rule usando Alias, ScriptAlias, Redirect…
#JkLogLevel debug
Alianza2
/visualizadorcontenidos/*
<nodo>
/PortalEmpaquetador/*
<nodo>
/catalogadorWeb/*
<nodo>
/visualizador-1/*
<nodo>
/portaladministracion/*
<nodo>
/buscador/*
<nodo>
/dri-1/*
<nodo>
/gestorFlujo/*
<nodo>
/buscar-1/*
<nodo>
/reputacion/*
<nodo>
/auditoria/*
<nodo>
/ModificadorWeb/*
<nodo>
/oaipmh/*
<nodo>
Definimos los módulos que se conectarán al JBoss presente en el <nodo> definido en el
worker.properties. Toda petición que se dirija a cualquiera de estos paths en la URL, será
redirigida la petición hacia el JBoss a través del conector AJP.
LogFormat "%h %l %u %t \"%r\" %>s %b" extendedlog
CustomLog logs/<sitio>_access.log extendedlog
ErrorLog logs/<sitio>_error.log
</VirtualHost>
Definimos el virtual host asociado al cas (módulo de autenticación que nos proporciona single
sign on), que podría encontrarse en otro servidor, aunque normalmente residirá en el mismo
que el portal.
<VirtualHost *:80>
ServerName cas-<nodo>.agrega.indra.es
JkMount /cas/*
<nodo>
Alias /static/css /opt/static/ccaa/<sitio>/css
Alias /static
/opt/static/common
LogFormat "%h %l %u %t \"%r\" %>s %b" extendedlog
CustomLog logs/<sitio>_access.log extendedlog
ErrorLog logs/<sitio>_error.log
</VirtualHost>
Por ultimo se define un virtual host para el cas mediante protocolo seguro (HTTPS, 443):
<VirtualHost *:443>
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
JkMount
JkMount
JkMount
JkMount
JkMount
JkMount
JkMount
JkMount
JkMount
JkMount
JkMount
JkMount
JkMount
100
ServerName cas-<nodo>.agrega.indra.es
JkMount /cas/*
<nodo>
Alias /static/css /opt/static/ccaa/<sitio>/css
Alias /static
/opt/static/common
Alianza2
Alianza2
LogFormat "%h %l %u %t \"%r\" %>s %b" extendedlog
CustomLog logs/<sitio>_access.log extendedlog
ErrorLog logs/<sitio>_error.log
</VirtualHost>
AYUDA MEDIAWIKI
INTRODUCCIÓN
La ayuda de la plataforma Agrega hace uso de la aplicación basada en software libre
MediaWiki. La aplicación MediaWiki 1.12.0 habrá sido instalada durante el proceso de
instalación del nodo. Para el correcto funcionamiento, requiere PHP 5 o superior y la
conexión a una base de datos MySQL.
Por todo ello, se trata de una aplicación disjunta del portal con una base de datos diferente a
la del portal, no compartiéndose directamente información entre ambas aplicaciones.
PROCESO DE INSTALACIÓN
Durante la instalación, en un directorio visible desde la máquina de Apache y habiendo
configurado el soporte para PHP 5 o superior, se descomprimirán los binarios de la
aplicación Mediawiki por ejemplo en el directorio /export/wiki.
Se recomienda que el dueño del directorio sea el usuario que ejecuta Apache en la máquina.
Una vez descomprimidos los binarios, en la base de datos crearemos una nueva entrada
para la wiki, por ejemplo: base de datos wikidb. A través de un dump proporcionado
procederemos a volcar toda la información, tablas e índices necesarios mediante el
comando:
mysql -u root -p wikidb < wikidb.sql
Se habrá creado un usuario de acceso a la base de datos de la wiki con permisos de
inserción, modificación y borrado de entradas en las tablas, pero no con privilegios de
modificación de los esquemas mediante el comando:
grant
insert,
update,
delete,
select
wiki_user@'localhost' identified by 'password'
on
wikidb.*
to
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
3.4.2.
101
FICHEROS DE CONFIGURACIÓN
Los únicos 2 ficheros a tener en cuenta para la correcta configuración de la MediaWiki son
los siguientes:
Alianza2
Alianza2
/export/wiki/LocalSettings.php
Almacena toda la configuración de la wiki, entre los parámetros más importantes destacamos
$wgDBserver
= "servidor";
$wgDBname
= "wikidb";
$wgDBuser
= "usuario_wiki";
$wgDBpassword
= "pass_wiki";
$wgDBprefix
= "";
$wgDBtype
= "mysql";
Especificamos el servidor que contiene la BD, el nombre de la base de datos, el usuario y
password de la conexión y el tipo de base de datos al que nos conectamos.
$wgLanguageCode = "Es";
Dado que existirá una wiki por cada idioma, en cada instalación MediaWiki se deberá
especificar el idioma correspondiente, pudiendo tomar los siguientes valores:
Idioma
Castellano
Catalán
Euskera
Gallego
Inglés
Valenciano
Prefijo
Es
Ca
Eu
Gl
En
Ca
vhost especificado en Apache
Recordamos que se debe definir tanto el Alias como el Directorio donde se encuentre
instalada la MediaWiki con permisos de ejecución php. Asumiendo que la wiki se encuentra
instalada en /export/wiki/wikies:
Alias /wiki
/export/wiki/wikies
<Directory "/export/wiki/wikies/">
Options None
AllowOverride None
Order Deny,Allow
Allow from all
php_flag engine on
</Directory>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
los siguientes:
102
INTERNACIONALIZACIÓN
Existirán tantas MediaWiki instaladas como idiomas internacionalizados deseemos ofrecer.
Por defecto se habrán instalado 6 MediaWiki, para los idiomas castellano, catalán, euskera,
gallego, inglés y valenciano.
Alianza2
Alianza2
Idioma
Castellano
Catalán
Euskera
Gallego
Inglés
Valenciano
3.4.3.
Prefijo
/wiki
/wiki-ca
/wiki-eu
/wiki-gl
/wiki-en
/wiki-va
PROXY CACHE: SQUID
INTRODUCCIÓN
En algunas ocasiones, puede ser conveniente instalar un Proxy caché intermedio (antes de
Apache) para almacenar aquellas peticiones que se repitan muchas veces a lo largo del
tiempo. Las respuestas del portal HTTP se encuentran bien formadas y permiten su
almacenamiento tanto en la caché del navegador como en las caches intermedias existentes.
Veamos la siguiente figura:
INTERNET
:80
:443
SISTEMAS
CACHE
ISP
Router
Proxy Cache
SQUID
FIREWALL
DMZ
Servidor Web
APACHE
:8009
Red De Aplicación
FIREWALL
Interno
Servidor Aplicaciones
JBOSS / Tomcat
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Los alias que usará el portal para redirigir a la ayuda serán:
103
Un usuario, el cual posee una cache de navegación habilitada para no volver a pedir aquellos
ficheros que no se han modificado desde la última vez que se solicitaron, se conecta a través
de un proveedor de servicios de Internet (ISP), quien suele disponer de pooles de cache
bastante extensos con el fin de limitar el tráfico saliente de su red hacia Internet. Si el recurso
Alianza2
solicitado no se encuentra en la cache del ISP se pedirá a través de Internet el recurso,
Alianza2
llegando finalmente a la CCAA la petición.
Como norma general aconsejamos que exista una cache lo más cerca al usuario como sea
posible, para evitar tráfico por las redes y tiempos de respuesta mayores. Por ello, la cache
más efectiva es primero la del navegador del usuario, luego al del ISP y por último la de la
Las cabeceras HTTP que controlan la posibilidad de Cache o no son:

Peticiones salientes:
If-modified-since

Respuestas:
Last-Modified
Cache-Control
Expires
Veamos un ejemplo real capturado con el plugin de Firefox Live HTTP Headers. Si borramos
la caché del usuario y solicitamos al portal redes la página inicial vemos el siguiente tráfico
intercambiado:
http://redes.agrega.indra.es/
GET / HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
HTTP/1.x 301 Moved Permanently
Date: Tue, 30 Sep 2008 07:56:31 GMT
Server: Apache/2.0.52 (Red Hat)
Location: http://redes.agrega.indra.es/visualizadorcontenidos/
Content-Length: 348
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
---------------------------------------------------------http://redes.agrega.indra.es/visualizadorcontenidos/
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
CCAA.
GET /visualizadorcontenidos/ HTTP/1.1
104
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
GET
/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67D9BCC35F09C7EF4DF05
21D48 HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:31 GMT
Server: Apache/2.0.52 (Red Hat)
X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0
date=200610162339)/Tomcat-5.5
Content-Language: es-ES
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html;charset=ISO-8859-1
---------------------------------------------------------http://redes.agrega.indra.es/static/img/favicon.ico
GET /static/img/favicon.ico HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
HTTP/1.x 302 Movido temporálmente
Date: Tue, 30 Sep 2008 07:56:31 GMT
Server: Apache/2.0.52 (Red Hat)
X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0
date=200610162339)/Tomcat-5.5
Set-Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48; Path=/
Location:
http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67
D9BCC35F09C7EF4DF0521D48
Content-Length: 0
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/html;charset=ISO-8859-1
---------------------------------------------------------http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67
D9BCC35F09C7EF4DF0521D48
Alianza2
105
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
GET /static/js/plantilla.js HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: */*
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67
D9BCC35F09C7EF4DF0521D48
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:31 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Thu, 07 Aug 2008 10:40:44 GMT
Etag: "f0202-33d-5235a300"
Accept-Ranges: bytes
Content-Length: 829
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: application/x-javascript
---------------------------------------------------------http://redes.agrega.indra.es/static/css/red.css
GET /static/css/red.css HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: text/css,*/*;q=0.1
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67
D9BCC35F09C7EF4DF0521D48
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:31 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 11 Aug 2008 11:21:52 GMT
Etag: "f02cb-e36-5cadd400"
Accept-Ranges: bytes
Content-Length: 3638
Keep-Alive: timeout=15, max=97
Connection: Keep-Alive
Content-Type: text/plain
---------------------------------------------------------http://redes.agrega.indra.es/static/js/plantilla.js
106
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:31 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Thu, 07 Aug 2008 10:11:36 GMT
Etag: "f0209-32191-ea054600"
Accept-Ranges: bytes
Content-Length: 205201
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/css
---------------------------------------------------------http://redes.agrega.indra.es/static/js/mootools.js
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Thu, 05 Jun 2008 11:56:00 GMT
Etag: "f0201-a8c3-761b400"
Accept-Ranges: bytes
Content-Length: 43203
Keep-Alive: timeout=15, max=96
Connection: Keep-Alive
Content-Type: application/x-javascript
---------------------------------------------------------http://redes.agrega.indra.es/static/js/calendar.rc4.js
GET /static/js/calendar.rc4.js HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: */*
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67
D9BCC35F09C7EF4DF0521D48
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
GET /static/js/mootools.js HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: */*
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67
D9BCC35F09C7EF4DF0521D48
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
107
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Tue, 05 Aug 2008 15:43:46 GMT
Etag: "f01fc-88df-52423080"
Accept-Ranges: bytes
Content-Length: 35039
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: application/x-javascript
---------------------------------------------------------http://redes.agrega.indra.es/static/img/senal.gif
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Tue, 27 May 2008 08:57:22 GMT
Etag: "f036a-166-7bf7a080"
Accept-Ranges: bytes
Content-Length: 358
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/buscador_widget.gif
GET /static/img/buscador_widget.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Tue, 27 May 2008 08:56:40 GMT
Etag: "f029f-4de-7976c200"
Accept-Ranges: bytes
Content-Length: 1246
Keep-Alive: timeout=15, max=95
Connection: Keep-Alive
Content-Type: image/gif
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
GET /static/img/senal.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
108
---------------------------------------------------------http://redes.agrega.indra.es/static/img/cabecera.jpg
GET /static/img/cabecera.jpg HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
GET /static/img/barrita.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 30 Oct 2006 15:44:32 GMT
Etag: "f0292-2d-255b3800"
Accept-Ranges: bytes
Content-Length: 45
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/06_ingles.gif
GET /static/img/06_ingles.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Thu, 01 Mar 2007 17:15:36 GMT
Etag: "f02a2-146-a3acfe00"
Accept-Ranges: bytes
Content-Length: 326
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: image/jpeg
---------------------------------------------------------http://redes.agrega.indra.es/static/img/barrita.gif
Alianza2
109
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
GET /static/img/04_valenciano.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 26 May 2008 16:23:40 GMT
Etag: "f0281-4c-9a381b00"
Accept-Ranges: bytes
Content-Length: 76
Keep-Alive: timeout=15, max=97
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/05_vasco.gif
GET /static/img/05_vasco.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 26 May 2008 16:24:20 GMT
Etag: "f0285-5e-9c9a7500"
Accept-Ranges: bytes
Content-Length: 94
Keep-Alive: timeout=15, max=94
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/04_valenciano.gif
Alianza2
110
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 26 May 2008 16:23:58 GMT
Etag: "f0283-5a-9b4ac380"
Accept-Ranges: bytes
Content-Length: 90
Keep-Alive: timeout=15, max=97
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/03_gallego.gif
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 26 May 2008 16:23:00 GMT
Etag: "f027f-50-97d5c100"
Accept-Ranges: bytes
Content-Length: 80
Keep-Alive: timeout=15, max=93
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/02_catalan.gif
GET /static/img/02_catalan.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 26 May 2008 16:22:34 GMT
Etag: "f027d-3d-96490680"
Accept-Ranges: bytes
Content-Length: 61
Keep-Alive: timeout=15, max=96
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
GET /static/img/03_gallego.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
111
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/01_castellano.gif
Alianza2
es-ES;
rv:1.9.0.1)
es-ES;
rv:1.9.0.1)
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 26 May 2008 16:21:26 GMT
Etag: "f027b-3a-923b6d80"
Accept-Ranges: bytes
Content-Length: 58
Keep-Alive: timeout=15, max=96
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/logo_redes.gif
GET /static/img/logo_redes.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Thu, 06 Mar 2008 10:32:38 GMT
Etag: "f0337-153d-41ae1d80"
Accept-Ranges: bytes
Content-Length: 5437
Keep-Alive: timeout=15, max=92
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/barra_general.gif
GET /static/img/barra_general.gif HTTP/1.1
Host: redes.agrega.indra.es
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
GET /static/img/01_castellano.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
112
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Fri, 02 Mar 2007 18:19:00 GMT
Etag: "f028f-40b-a440cd00"
Accept-Ranges: bytes
Content-Length: 1035
Keep-Alive: timeout=15, max=95
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/barra_general_der.gif
GET /static/img/barra_general_der.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Fri, 02 Mar 2007 18:24:36 GMT
Etag: "f0290-108-b847c100"
Accept-Ranges: bytes
Content-Length: 264
Keep-Alive: timeout=15, max=95
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/bullet_off.gif
GET /static/img/bullet_off.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
NT
5.1;
es-ES;
rv:1.9.0.1)
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Alianza2
113
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Fri, 02 Mar 2007 12:14:40 GMT
Etag: "f029d-43-8d4bac00"
Accept-Ranges: bytes
Content-Length: 67
Keep-Alive: timeout=15, max=91
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/dest_01.jpg
Alianza2
es-ES;
rv:1.9.0.1)
es-ES;
rv:1.9.0.1)
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Thu, 01 Mar 2007 17:12:36 GMT
Etag: "f02b8-2aa4-98f26900"
Accept-Ranges: bytes
Content-Length: 10916
Keep-Alive: timeout=15, max=94
Connection: Keep-Alive
Content-Type: image/jpeg
---------------------------------------------------------http://redes.agrega.indra.es/static/img/imagen_00.jpg
GET /static/img/imagen_00.jpg HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Tue, 24 Jun 2008 10:42:56 GMT
Etag: "f030c-140fd-390f4c00"
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
GET /static/img/dest_01.jpg HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
114
Accept-Ranges: bytes
Content-Length: 82173
Keep-Alive: timeout=15, max=94
Connection: Keep-Alive
Content-Type: image/jpeg
---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_gobierno.gif
Alianza2
es-ES;
rv:1.9.0.1)
es-ES;
rv:1.9.0.1)
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 02 Jun 2008 08:10:14 GMT
Etag: "f0277-b9e-86740580"
Accept-Ranges: bytes
Content-Length: 2974
Keep-Alive: timeout=15, max=90
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_mepd.gif
GET /static/img/00_logo_mepd.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 02 Jun 2008 08:11:14 GMT
Etag: "f0278-74f-8a078c80"
Accept-Ranges: bytes
Content-Length: 1871
Keep-Alive: timeout=15, max=93
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_red.jpg
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
GET /static/img/00_logo_gobierno.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
115
es-ES;
rv:1.9.0.1)
Alianza2
Alianza2
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 21 Apr 2008 07:33:06 GMT
Etag: "f027a-5d1-1c51b080"
Accept-Ranges: bytes
Content-Length: 1489
Keep-Alive: timeout=15, max=89
Connection: Keep-Alive
Content-Type: image/jpeg
---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_avanza.jpg
GET /static/img/00_logo_avanza.jpg HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
es-ES;
rv:1.9.0.1)
es-ES;
rv:1.9.0.1)
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 21 Apr 2008 07:33:44 GMT
Etag: "f0274-6bc-1e958600"
Accept-Ranges: bytes
Content-Length: 1724
Keep-Alive: timeout=15, max=92
Connection: Keep-Alive
Content-Type: image/jpeg
---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_mitc.gif
GET /static/img/00_logo_mitc.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
NT
5.1;
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
GET /static/img/00_logo_red.jpg HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
116
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 02 Jun 2008 08:11:38 GMT
Etag: "f0279-650-8b75c280"
Accept-Ranges: bytes
Content-Length: 1616
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_europa.gif
es-ES;
rv:1.9.0.1)
es-ES;
rv:1.9.0.1)
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Mon, 02 Jun 2008 08:12:28 GMT
Etag: "f0276-906-8e70b300"
Accept-Ranges: bytes
Content-Length: 2310
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: image/gif
---------------------------------------------------------Si volvemos a solicitar la misma página las peticiones realizadas son:
http://redes.agrega.indra.es/
GET / HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 301 Moved Permanently
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
GET /static/img/00_logo_europa.gif HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://redes.agrega.indra.es/static/css/red.css
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
117
Date: Tue, 30 Sep 2008 08:12:36 GMT
Server: Apache/2.0.52 (Red Hat)
Location: http://redes.agrega.indra.es/visualizadorcontenidos/
Content-Length: 348
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
---------------------------------------------------------http://redes.agrega.indra.es/visualizadorcontenidos/
Alianza2
es-ES;
rv:1.9.0.1)
HTTP/1.x 302 Movido temporálmente
Date: Tue, 30 Sep 2008 08:12:36 GMT
Server: Apache/2.0.52 (Red Hat)
X-Powered-By:
Servlet
2.4;
JBoss-4.0.5.GA
(build:
CVSTag=Branch_4_0
date=200610162339)/Tomcat-5.5
Location: http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do
Content-Length: 0
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/html;charset=ISO-8859-1
---------------------------------------------------------http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do
GET /visualizadorcontenidos/Portada/Portada.do HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 08:12:36 GMT
Server: Apache/2.0.52 (Red Hat)
X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0
date=200610162339)/Tomcat-5.5
Content-Language: es-ES
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html;charset=ISO-8859-1
----------------------------------------------------------
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
GET /visualizadorcontenidos/ HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Alianza2
118
Apreciamos que al no haber cambiado los CSS ni las imágenes, no se han vuelto al
descargar del servidor, el navegador tiene los CSS, imágenes y JS almacenados en la
cache.
Alianza2
Cuando descargamos un objeto, vemos que se devuelve la siguiente respuesta HTTP:
Alianza2
GET
/buscador/DescargarODECU/SeleccionarTipoFormatoAceptar.do?formato=descargar.format
os.SCORM_2004_VALUE&idioma=es&titulo=Clasifica+aparatos+y+Palabras+locas&identific
adorODE=es_20071214_2_0102201&tipoLayoutBuscador=BUSCADOR HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
http://redes.agrega.indra.es/buscador/DescargarODECU/DescargarODECU.do?identificador
ODE=es_20071214_2_0102201&idioma=es&tipoLayoutBuscador=BUSCADOR&mostrarVuel
ta=true
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
HTTP/1.x 302 Movido temporálmente
Date: Tue, 30 Sep 2008 08:25:05 GMT
Server: Apache/2.0.52 (Red Hat)
X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0
date=200610162339)/Tomcat-5.5
content-disposition: attachment;filename=Clasifica_aparatos_y_Palabras_locas.zip
Cache-Control: public
Expires: Wed, 01 Oct 2008 08:25:09 GMT
Location:
http://redes.agrega.indra.es/repositorio/13062008/temp/SCORM_2004/Clasifica_aparatos_y_
Palabras_locas.zip
Content-Length: 0
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: application/zip;charset=ISO-8859-1
---------------------------------------------------------http://redes.agrega.indra.es/repositorio/13062008/temp/SCORM_2004/Clasifica_aparatos_y_
Palabras_locas.zip
GET /repositorio/13062008/temp/SCORM_2004/Clasifica_aparatos_y_Palabras_locas.zip
HTTP/1.1
Host: redes.agrega.indra.es
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
http://redes.agrega.indra.es/buscador/DescargarODECU/SeleccionarTipoFormatoAceptar.do
?formato=descargar.formatos.SCORM_2004_VALUE&idioma=es&titulo=Clasifica+aparatos+
y+Palabras+locas&identificadorODE=es_20071214_2_0102201&tipoLayoutBuscador=BUSC
ADOR
119
Keep-Alive: 300
Connection: keep-alive
Referer:
http://redes.agrega.indra.es/buscador/DescargarODECU/DescargarODECU.do?identificador
ODE=es_20071214_2_0102201&idioma=es&tipoLayoutBuscador=BUSCADOR&mostrarVuel
ta=true
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
Observamos que haciendo la petición el 30 de Septiembre de 2008 a las 08:25 GMT, se nos
devuelve un objeto que caduca el día siguiente y cuya fecha de modificación ha sido el
instante actual en el que se acaba de crear. Si solicitamos de nuevo el fichero habrá sido
cacheado por las caches intermedias que existan y no se detectará cambio hasta el día
siguiente.
CONFIGURACIÓN SQUID
En función de número de conexiones simultáneas y descargas que tengamos en la CCAA,
podría ser necesario habilitar SQUID como Proxy transparente cacheando los contenidos
devueltos por el portal para evitar que las peticiones lleguen hasta Apache o incluso al propio
JBossAS. Para ello, si se ha instalado Squid 3 el fichero de configuración es el siguiente:
/etc/squid3/squid.conf
Los parámetros más importantes son:
http_port 3128 transparent
Es el puerto por el que el proxy va a recibir las peticiones http de los clientes. El puerto por
defecto para Squid es el 3128. La opción "transparent" es imprescindible si lo que queremos
es que Squid actúe de forma transparente, esto es, sin tener que configurar el proxy en cada
uno de los navegadores de los clientes.
icp_port 3130
Puerto por el que Squid hace las consultas ICP (Internet Caché Protocol) a la caché. El
puerto estándar UDP para ICP es el 3130.
dns_nameservers 192.168.10.2 192.168.10.1
Servidores DNS que debe utilizar Squid.
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 08:25:09 GMT
Server: Apache/2.0.52 (Red Hat)
Last-Modified: Tue, 30 Sep 2008 08:25:08 GMT
Etag: "39686b8-8728c-b8b26100"
Accept-Ranges: bytes
Content-Length: 553612
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: application/zip
----------------------------------------------------------
Alianza2
120
cache_dir ufs /var/spool/squid 100 16 256
Con este parámetro indicamos donde queremos que se almacene la caché de Squid.

ufs: Es el tipo de almacenamiento donde se van a almacenar los datos.

100: Tamaño máximo de la caché de Squid en MB.

16: Número máximos de directorios en el nivel 1 del árbol de directorios de la caché.

256: Número máximo de directorios en el nivel 2 del árbol de directorios de la caché.

Normalmente se almacena por defecto en /var/spool/squid3/.
Alianza2
Alianza2
localizados en /var/log/squid3/.
hierarchy_stoplist cgi-bin ?
Este parámetro es útil cuando tenemos varias cachés interconectadas (hermanas, hijas,...).
Las URL's que contengan las palabras o cadenas especificadas en este parámetro se irán a
buscar directamente a la caché propia del servidor y no a otra de las cachés que pudiera
haber.
refresh_pattern ^ftp:
1440 20%
10080
refresh_pattern ^gopher:
1440 0%
1440
refresh_pattern .
0
20%
4320
 El primer valor (min) indica el tiempo mínimo con el cual un objeto se considera reciente
(fresh).

El segundo valor (percent) indica el porcentaje de la edad del objeto con el que es
considerado reciente (fresh).

El tercer valor (max) indica el tiempo máximo con el cual un objeto se seguirá
considerando reciente (fresh).
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80
# http
acl Safe_ports port 21
# ftp
acl Safe_ports port 443
# https
acl Safe_ports port 70
# gopher
acl Safe_ports port 210
# wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280
# http-mgmt
acl Safe_ports port 488
# gss-http
acl Safe_ports port 591
# filemaker
acl Safe_ports port 777
# multiling http
acl CONNECT method CONNECT
acl mipc src 172.22.44.112/255.255.255.0
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
cache_access_log /var/log/squid3/access.log
cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log
Estos parámetros permiten especificar la ubicación de los logs de Squid. Por defecto están
121
Las "acl" en Squid (Access Control List) sirven para definir controles de acceso de equipos,
puertos, conexiones... La sintaxis es la siguiente: "acl
nombre_acl
tipo_acl
descripción".
Alianza2
También se pueden especificar mediante ficheros con la siguiente sintaxis: acl nombre_acl
Alianza2
tipo_acl "fichero_de_descripciones" (por ejemplo un grupo de muchos equipos o redes).

src: Especifica una dirección origen de una conexión en formato IP/máscara.

dst: Específica una dirección destino de una conexión en formato IP/máscara.

port: Sirve para especificar un puerto.

proto: Sirve para indicar un protocolo en concreto.

method: Especifica un método HTTP en concreto (POST CONNECT GET REQUEST...)
cache deny QUERY
Indica que no se deben cachear las URL's del ACL indicado (en este caso el ACL se llama
QUERY y puede estar declarada por ejemplo como "acl QUERY urlpath_regex cgibin \?").
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow all
http_access allow mipc
http_access deny all
Sirve para permitir/denegar/administrar el acceso de las "acl" definidas anteriormente.
http_reply_access allow all
Se usa como complemento al parámetro "http_access" para refinar el control de acceso al
Squid.
icp_access allow all
Permite establecer en las "acl's" los permisos para las peticiones ICP.
CONFIGURACIÓN EN EL SO PARA LAS REDIRECCIONES
Si deseamos redirigir el tráfico que llega desde una determinada interfaz de red por el puerto
80 al puerto de Squid, podemos con iptables ejecutar el siguiente comando:
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j
REDIRECT --to-port 3128
Redirigimos todas las peticiones que se reciben en el servidor en la interfaz eth0 por el
puerto 80 al puerto 3128 que es configurado previamente en Squid. Podemos comprobar que
se ha establecido correctamente la regla con:
iptables -t nat -L
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Tipos de acl:
122
Además debemos activar el reenvío de paquetes en el kernel. Esto lo hacemos mediante el
siguiente comando:
echo 1 > /proc/sys/net/ipv4/ip_forward
Alianza2
Para comprobar que Squid está cacheando podemos ver que los directorios donde se ha
Alianza2
establecido que se cachee (por defecto /var/spool/squid/) van aumentando de tamaño a
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
medida que se navega a través del proxy.
123
4. BLOQUE III: OPERACIÓN Y MANTENIMIENTO DE
LA PLATAFORMA
Asumiendo la instalación de la plataforma Agrega en sistemas operativos Linux, vamos a ver
Alianza2
los comandos, ficheros, logs… necesarios para la operación y mantenimiento de la
Alianza2
plataforma.
4.1. ARRANQUE Y PARADA DE LOS APLICATIVOS
En el directorio /etc/init.d/ se encuentran todos los “scripts” que facilitan el arranque y la
y "restart”.
4.1.1.
JBOSS
Arranque:
/etc/init.d/jboss start
Parada:
/etc/init.d/jboss stop
Para comprobar si se encuentra el JBoss arrancado podemos ejecutar el comando:
ps auxww | grep –i java
Obteniéndose una salida similar a la siguiente:
jboss
13135
0.6 29.8 2707440 760348 ?
Sl
Sep29
6:24
/opt/jdk/bin/java -Dprogram.name=run.sh -server -Xmn100M -Xms512M Xmx1536M
-XX:MaxPermSize=786M
-Djava.awt.headless=true
Djava.endorsed.dirs=/opt/jboss-redes/lib/endorsed
-classpath
/opt/jboss-redes/bin/run.jar:/opt/jdk/lib/tools.jar org.jboss.Main -c
default -b 0.0.0.0
Es importante destacar que en el script de arranque de init.d de JBoss se encuentren
presentes los siguientes parámetros:

-c default
o
o

-b 0.0.0.0
o
Especificamos que la configuración a usar sea la default, por lo que se
accederá a $JBOSS_HOME/server/default/deploy.
En casos de clustering de JBoss se recomienda arrancar con “all” en lugar
de “default”.
Especificamos que JBoss haga bind en todas las interfaces de red. En cada
CCAA dicho parámetro podrá ser ajustado para que JBoss únicamente
escuche en la red por la que provienen las conexiones de Apache.
Después de ejecutar el comando de stop, cuando realmente finalice el servicio podremos
apreciar en los logs del servidor JBoss la siguiente traza:
2008-09-29 19:54:06,452 INFO [org.jboss.system.server.Server] Shutdown complete
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
parada de los servicios. Estos “scripts” comúnmente aceptan como argumentos "start", "stop"
124
ELIMINACIÓN DESPLIEGUES ANTERIORES
Si vamos a actualizar la versión de Agrega, es conveniente limpiar previamente todos los
Alianza2
despliegues anteriores (tanto clases como JSPs) mediante los siguientes pasos:

Paramos el servidor de aplicaciones JBoss.

Borramos el contenido del directorio:

$JBOSS_HOME/server/default/tmp/deploy/

Borramos el contenido del directorio:

$JBOSS_HOME/server/default/work/jboss.web/localhost/

Desplegamos los nuevos WARS, properties, etc.

Arrancamos el servidor de aplicaciones JBoss.
4.1.2.
TOMCAT
Arranque:
$TOMCAT_HOME/bin/startup.sh
Parada:
$TOMCAT_HOME/bin/shutdown.sh
Para comprobar si se encuentra Tomcat arrancado podemos ejecutar el comando:
ps auxww | grep –i java
ELIMINACIÓN DESPLIEGUES ANTERIORES
Si vamos a actualizar la versión de Agrega, es conveniente limpiar previamente todos los
despliegues anteriores (tanto clases como JSPs) mediante los siguientes pasos:

Paramos el servidor de aplicaciones Tomcat.

Borramos todos los wars (y sus directorios) que se encuentren en el directorio:
o
$TOMCAT_HOME/webapps/

Desplegamos los nuevos WARS, properties, etc.

Arrancamos el servidor Tomcat.
4.1.3.
SERVIDOR DE COLAS APACHE ACTIVEMQ
Arranque:
nohup $ACTIVEMQ_HOME/bin/activemq &
Parada: para detener el servicio debemos buscar el PID asociado y enviarle la señal de
finzalicación mediante el comando
kill -3 <PID>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Alianza2
125
Para comprobar si se encuentra Tomcat arrancado podemos ejecutar el comando:
ps auxww | grep –i java
4.1.4.
Alianza2
SERVIDOR WEB APACHE
Alianza2
Arranque:
/etc/init.d/httpd start
Parada:
/etc/init.d/httpd stop
/etc/init.d/httpd graceful
Para comprobar si se encuentra Apache arrancado podemos ejecutar el comando:
ps auxww | grep –i httpd
Obteniéndose una salida similar a la siguiente:
apache
28745
/usr/sbin/httpd
apache
849
/usr/sbin/httpd
…
4.1.5.
0.0
0.0
0.9
1.7
28780
36688
9368
18288
?
S
09:54
0:00
?
S
10:54
0:00
MySQL
Arranque:
/etc/init.d/mysql start
Parada:
/etc/init.d/mysql stop
Para comprobar si se encuentra el servicio de base de datos MySQL arrancado podemos
ejecutar el comando:
ps auxww | grep –i mysqld
Obteniéndose una salida similar a la siguiente:
mysql
2754
2.5 11.9 2412144 311028 ?
Sl
Sep29
24:31
/usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql -pid-file=/var/lib/mysql/database.agrega.indra.es.pid --skip-externallocking --port=3306 --socket=/var/lib/mysql/mysql.sock
4.1.6.
LDAP
Arranque:
/etc/init.d/ldap start
Parada:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Recarga en caliente de la configuración sin pérdida de servicio:
/etc/init.d/ldap stop
126
Para comprobar si se encuentra el servicio de directorio LDAP arrancado podemos ejecutar
el comando:
ps auxww | grep –i slapd
Alianza2
Obteniéndose una salida similar a la siguiente:
ldap
29512
0.0
0.3 27660 3736 ?
/usr/sbin/slapd -u ldap -h ldap:/// -s 9
4.1.7.
Ssl
Sep28
Alianza2
0:00
SERVIDOR NFS
/etc/init.d/nfs start
Parada:
/etc/init.d/nfs stop
Para comprobar si se encuentra el servicio de exportación NFS arrancado podemos ejecutar
el comando:
ps auxww | grep –i nfsd
Obteniéndose una salida similar a la siguiente:
root
root
2925
2926
0.1
0.1
0.0
0.0
0
0
0 ?
0 ?
S
S
Mar04 350:01 [nfsd]
Mar04 349:45 [nfsd]
4.2. FICHEROS DE LOG
La ubicación de todos los ficheros de log son configurables desde sus respectivos ficheros de
configuración que ya han sido explicados en las secciones previas. En este apartado vamos
a tratar la configuración del directorio donde se almacenarán los logs y la gestión que
debemos hacer de los mismos (rotado automático o no, backup, borrado manual…).
4.2.1.
JBOSS
Por defecto los logs se almacenan en $JBOSS_HOME/server/default/log. En el fichero
$JBOSS_HOME/server/default/conf/log4j.xml definimos los appenders con la
ubicación y la política de rotado.
<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/server.log"/>
<param name="Append" value="true"/>
<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
En el ejemplo, se ha definido el fichero server.log que se ubicará en el directorio de
jboss.server.log.dir (actualmente $JBOSS_HOME/server/default/log). El fichero rotará cada
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Arranque:
127
media noche ya que el DatePattern aplicado consiste en concatenar al fichero de log la fecha
en formato yyyy-MM-dd.
Ejemplo:
Alianza2
El log server.log a partir de las 00:00h, si sucede un evento que deba escribir en el log
Alianza2
disparará
el
rotado
automático
pasando
a
renombrarse
el
fichero
server.log
a
server.log.2008-09-30 y se creará un nuevo fichero server.log.
<category name="ServiceErrorsLogger">
<priority value="ERROR" />
<appender-ref ref="ServiceErrors"/>
</category>
<category name="es.pode">
<priority value="INFO"/>
<appender-ref ref="agrega"/>
</category>
<category name="es.agrega">
<priority value="INFO"/>
<appender-ref ref="agrega"/>
</category>
En las categorías especificamos el paquete Java, la prioridad a mostrar (DEBUG, INFO,
WARN, ERROR, FATAL) y podemos especificar uno o más appenders en los que se
escribirán los logs de las clases pertenecientes al paquete.
Todos los loggers heredan de la categoría raíz, definida de la siguiente manera:
<root>
<priority value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
Si queremos cambiar la prioridad de todas las clases por defecto a INFO, es importante
introducir la línea “<priority value ="info" />” dentro de la sección root previa.
Los
valores
almacenados
en
las
categorías
citadas
anteriormente
prevalecen
sobrescribiendo los valores de la categoría root.
4.2.2.
Por
defecto
TOMCAT
los
logs
se
almacenan
en
$TOMCAT_HOME/logs.
En
el
fichero
$TOMCAT_HOME/common/classes/log4j.properties definimos los appenders con la
ubicación y la política de rotado:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Los niveles de verbosidad y paquetes se configuran en las secciones siguientes:
<category name="org.springframework">
<priority value="INFO"/>
</category>
128
log4j.rootLogger=INFO, R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=${catalina.home}/logs/tomcat.log
log4j.appender.R.MaxFileSize=100MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
Alianza2
Alianza2
log4j.logger.es.pode=INFO,R
log4j.logger.es.agrega=INFO,R
Además del fichero catalina.log que deja por defecto Apache Tomcat, especificamos el
aprender R que apunta al fichero tomcat.log, rotando el fichero cada 100 MB y dejando un
histórico de 10 ficheros. El nivel por defecto de la categoría raiz es INFO así como el de los
Los niveles de verbosidad y paquetes se configuran en la siguiente sección:
log4j.logger.es.pode=INFO,R
log4j.logger.es.agrega=INFO,R
En las categorías especificamos el paquete Java, la prioridad a mostrar (DEBUG, INFO,
WARN, ERROR, FATAL) y podemos especificar uno o más appenders en los que se
escribirán los logs de las clases pertenecientes al paquete.
4.2.3.
APACHE
Una vez confirmado que se encuentra presente el módulo en la configuración de Apache
(httpd.conf) LoadModule
log_config_module
modules/mod_log_config.so, en
cada fichero de configuración del virtual host especificamos tanto el formato de log a emplear
como el fichero donde almacenarlo.
LogFormat "%h %l %u %t \"%r\" %>s %b" extendedlog
CustomLog logs/<sitio>_access.log extendedlog
ErrorLog logs/<sitio>_error.log
Con las líneas anteriores definimos el formato de log denominado “extendedlog” que estará
formado por la cadena:
Opción
%h
Descripción
Remote Host
Remote logname (from identd, if supplied). This will return a dash unless
%l
IdentityCheck is set On.
%u
Remote user (from auth; may be bogus if return status (%s) is 401)
%t
Time the request was received (standard english format)
%r
First line of request
Status. For requests that got internally redirected, this is the status of the *original*
%>s
%b
request --- %...>s for the last.
Size of response in bytes, excluding HTTP headers. In CLF format, i.e. a '-' rather
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
paquetes es.pode y es.agrega.
129
than a 0 when no bytes are sent.
Un ejemplo de traza de log de acceso sería la siguiente:
172.22.52.81 - - [21/Oct/2008:10:48:37 +0200] "GET
/visualizadorcontenidos/AcercaDeAgrega/AcercaDeAgrega.do HTTP/1.1"
200 13701 "redes.agrega.indra.es"
"http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.
do;jsessionid=F6C5CD845FC095CD37BA0096495AFA31" "Mozilla/5.0
(Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.3) Gecko/2008092417
Firefox/3.0.3" 50542
Alianza2
Alianza2
Posteriormente definimos que el log <sitio>_access.log use el formato del extendedlog, por lo
Las trazas de error de Apache al acceder al nodo se reflejarán en el fichero <sitio>_error.log.
Mod_jk
En el fichero mod_jk.conf definimos el directorio, fichero, nivel y formato del log mediante las
sentencias:
# Where to put jk logs
JkLogFile "/var/log/httpd/mod_jk.log"
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
De esta forma, en el directorio /var/log/httpd/mod_jk.log aparecerán las entradas en las que
se define la fecha del acceso, el nodo al que se accede y el tiempo necesario para servir la
petición (desde que se envía al JBoss hasta que se retorna a Apache). Un ejemplo de traza
podría ser el siguiente:
[Mon Oct
0.173134
20
4.2.4.
17:04:50
2008]contenidos
contenidos.proyectoagrega.es
MySQL
Si en el fichero de configuración my.cnf se ha habilitado la opción “log-bin” (generalmente
especificamos logbin=mysql-bin para que los ficheros de log se nombren con el valor
especificado) se podrán auditar posteriormente los logs en /var/lib/mysql/.
Por defecto, existirá un log de error asociado a la base de datos Agrega, y si se ha habilitado
la opción de los logs binarios, existirán diversos ficheros /var/lib/mysql/mysql-bin.000XYZ.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
que en /var/log/httpd/ aparecerá un fichero llamado <sitio>_access.log.
130
Para poder visualizar el contenido de los ficheros, es necesario hacer uso de la aplicación
mysqlbinlog proporcionada junto a la BD. La sintaxis es:
mysqlbinlog log_file
Alianza2
Alianza2
NOTA: es conveniente tener en cuenta que si se habilita la opción de log-bin es necesario
controlar el tamaño y número de ficheros de log generados por la aplicación, ya que contiene
todas las sentencias SQL ejecutadas sobre la BD.
LDAP
En el archivo slapd.conf se especifica el nivel de registro de los logs mediante el parámetro
loglevel. Para especificar el fichero donde almacenar los logs es necesario saber que
OpenLDAP por defecto envía su información de registro al demonio del sistema syslog
(syslogd) bajo el canal LOCAL4. Para poder almacenar la información en un fichero que
nosotros especifiquemos es necesario modificar el archivo /etc/syslog.conf, agregando una
línea como la siguiente:
local4.*
/var/log/openldap
De esta manera, conseguimos que los logs de OpenLDAP se almacenen en el fichero
/var/log/openldap.
NOTA: el cambio en el fichero syslog.conf requiere reiniciar la máquina para que los cambios
tengan efecto.
4.3. BACKUPS
En esta sección trataremos de identificar aquellos contenidos que es conveniente tener un
backup. El manual pretende ser una guía resaltando las áreas a salvaguardar, no un
procedimiento firme y único para la realización de los backup. En cada comunidad, existirá ya
previamente un proceso de backup y deberá seguirse y respetarse, añadiendo ahora los
nuevos ficheros, configuraciones, BD que soportan el portal Agrega.
4.3.1.
BASE DE DATOS
Tanto en el caso de actualizaciones de Agrega que afecten a base de datos como cada
cierto período de tiempo es conveniente realizar una backup de la base de datos.
Los backups podrían ser deltas o completos. En función de la base de datos existirán unos u
otros procedimientos aconsejados.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
4.2.5.
131
En el caso de la instalación de Agrega sobre una base de datos MySQL, para realizar un
backup completo de la BD (tanto tablas como datos) se aconseja el siguiente procedimiento:
mysqldump --opt -c -e -Q –h $HOST --hex-blob -u usuario -ppassword $DBNAME >
Alianza2
$BACKUP_DIR/$DATABASE-dump-$FECHA.sql
Alianza2
Si únicamente deseamos las sentencias insert (los datos pero no la estructura de las tablas)
podemos ejecutar el siguiente comando:
mysqldump -u $USUARIO -p -h $HOST --insert-ignore -c --no-create-db --no-create-info -skip-add-locks
--extended-insert=false
--hex-blob
-B
$DATABASE
>
En el caso del backup completo, para restaurar un backup habría que borrar la base de
datos, crearla y posteriormente importar el dump:
1. Nos conectamos con el usuario administrador de la base de datos y ejecutamos:
drop $DATABASE;
create $DATABASE;
2. Desde la shell del SO, ejecutamos:
mysql –h $HOST -u $USUARIO -p < $BACKUP_DIR/$DATABASE-dump$FECHA.sql
4.3.2.
OPENLDAP
En el caso de haber instalado OpenLDAP, existen varias alternativas para hacer el backup
del contenido del mismo. Para asegurar la consistencia del ldif generado, es necesario parar
el servicio de LDAP previamente.
Si se está empleando bdb, el comando sería:
/usr/sbin/slapcat -v -l $BACKUP_DIR/ldap.ldif
Si se esta usando lbdm:
/usr/sbin/ldbmcat -n /var/lib/ldap/id2entry.gdbm >
BACKUP$DIR/ldap.ldif
Para hacer una restauración completa a partir del ldif generado los pasos serían los
siguientes:
1. Paramos el demonio slapd (/etc/init.d/ldap stop).
2. Borramos todos los datos del ldap (/var/lib/ldap).
3. Cargamos los datos del ldif mediante el comando: slapadd
backup.ldif
4. Regeneramos los índices con slapindex
5. Reiniciamos el demonio del ldap (/etc/init.d/ldap start)
–v
–c
–l
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
$BACKUP_DIR/$DATABASE-dump-$FECHA.sql
132
4.3.3.
MÓDULOS WAR
La mayor parte de las actualizaciones de Agrega llevarán asociadas la modificación de uno o
más módulos WAR de la plataforma. Por ello, se recomienda hacer un backup del directorio
Alianza2
$JBOSS_HOME/server/default/deploy/agrega o $TOMCAT_HOME/webapps/*.war
Alianza2
Es conveniente destacar que los módulos WAR ya se encuentran en formato ZIP, por lo que
intentar aplicar cualquier algoritmo de compresión apenas reducirá el espacio. Si bien, para
agrupar todos los módulos en un mismo fichero se puede emplear el TAR de Linux.
tar cvfp $BACKUP_DIR/backup.tar
$JBOSS_HOME/server/default/deploy/agrega/*.war
4.3.4.
ÍNDICES
Un componente fundamental de la plataforma son los índices. Las políticas de backup
sugeridas son:


Es altamente recomendable hacer un backup de los índices todos los días, a una hora en
la que no existan operaciones pendientes en disco tales como carga de ODEs,
generación de informes, etc.
Cada vez que se haga una parada y arranque de la aplicación para efectuar alguna
migración o actualización, es obligatorio salvaguardar la información de los índices una
vez que el servidor de aplicaciones se encuentra parado.
El comando empleado para realizar el backup de los índices podría ser:
tar cvfp $BACKUP_DIR/indices.tar $JBOSS_HOME/indices/*
4.3.5.
INFORMES
El directorio $JBOSS_HOME/informes es susceptible de ser salvaguardado. En algunas
ocasiones, las actualizaciones de Agrega conllevarán la modificación de algunas plantillas
que
se
emplean
en
la
elaboración
de
los
informes
y
cuya
ubicación
es
$JBOSS_HOME/informes/plantillasInformes.
4.3.6.
FICHEROS DE CONFIGURACIÓN DEL PORTAL
Debido a que los ficheros de configuración del portal contienen información tal como la
dirección IP del servidor de LDAP, la IP del servidor de base de datos, periodicidad de la
generación de informes, etc no sólo en cada actualización de Agrega se modificarán los
ficheros de configuración del portal, sino también en cada modificación que la comunidad
realice sobre los elementos de la infraestructura. Por todo ello, es conveniente hacer backups
antes de realizar cualquier modificación en los ficheros del portal.
El comando a emplear podría ser el siguiente:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
A modo de ejemplo:
133
tar czvfp $BACKUP_DIR/conf.tar.gz $JBOSS_HOME/server/default/conf
4.3.7.
ESTÁTICOS
Alianza2
En los procesos de actualización de la plataforma se actualizarán los ficheros estáticos (CSS,
JS, JPG…) siendo necesario la realización de un backup previo a la actualización.
Alianza2
El directorio a salvaguardar será aquel especificado en el alias del virtual host de Apache.
Asumiendo que es /opt/static el backup se podría realizar mediante el comando:
4.3.8.
PROGRAMACIÓN DE BACKUPS EN CRON
Una vez completados los “scripts” de backups, editamos el fichero crontab para añadir
nuestras tareas. Ejecutamos el comando crontab –e
# Ejecuta un script que realiza un backup de la base de datos el primer día de cada mes a las
22:00
0 22 1 * * /home/backup/script_bd.sh
# Más ejemplos
0 2 * * 1-6 sh /raid/Backups_Data/pruebas/MyBackup.sh Diario
0 2 * * 0 sh /raid/Backups_Data/pruebas/MyBackup.sh Semanal
0 2 1 * * sh /raid/Backups_Data/pruebas/MyBackup.sh Mensual
El momento de ejecución se especifica de acuerdo con la siguiente tabla:
Minutos: (0-59)
Horas: (0-23)
Días: (1-31)
Mes: (1-12)
Día de la semana: (0-6), siendo 1=Lunes, 2=Martes,... 6=sábado y 0=Domingo
Para especificar todos los valores posibles de una variable se utiliza un asterisco (*).
4.4. MODIFICACIONES
FRECUENTES
FRENTE
A
CAMBIOS
El objetivo de la sección es conocer exactamente los ficheros a modificar frente a las
modificaciones frecuentes que suelen ocurrir en los entornos de producción. A modo de
ejemplo las modificaciones más comunes son: cambio de IP de la base de datos, cambio de
los datos de acceso al LDAP, cambio de usuario o contraseña de conexión a la base de
datos…
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
tar czvfp $BACKUP_DIR/estaticos.tar.gz /opt/static
134
4.4.1.
MODIFICACIÓN DE LA BASE DE DATOS DEL
PORTAL AGREGA
MODIFICACIÓN DE LA DIRECCIÓN IP
Alianza2
Aunque normalmente la dirección especificada de la BD suele ser un alias, en caso de
Alianza2
haberse especificado manualmente implicaría cambiar el fichero donde se definen los
datasources:
$JBOSS_HOME/server/default/deploy/<nodo>-ds.xml
MODIFICACIÓN DE USUARIO / CONTRASEÑA
Por cada datasource definido en el fichero
$JBOSS_HOME/server/default/deploy/<nodo>-ds.xml
o
en
el
fichero
$TOMCAT_HOME/conf/server.xml se deberá revisar la configuración de acceso.
4.4.2.
MODIFICACIÓN DE LA BASE DE DATOS DE LA
AYUDA MEDIAWIKI
En caso de modificarse alguno de los parámetros de acceso a la base de datos que contiene
la ayuda MediaWiki, será necesario revisar el fichero LocalSettings.php y modificar los
parámetros que correspondan:
$wgDBserver
= "localhost";
$wgDBname
= "db";
$wgDBuser
= "user";
$wgDBpassword
= "pass";
4.4.3.
CAMBIO DE DATOS DE CONEXIÓN AL LDAP
Los datos de la conexión a LDAP se especifican en dos ficheros de configuración:

$JBOSS_HOME/server/default/conf/authbackend.properties

$JBOSS_HOME/server/default/conf/springldap.xml
En el caso de Tomcat serían:

$TOMCAT_HOME/common/classes/authbackend.properties

$TOMCAT_HOME/common/classes/springldap.xml
4.4.4.
CAMBIO DE IP DEL SERVIDOR DE APLICACIONES
En el caso de cambiar la IP del servidor servidor de aplicaciones, si siempre se ha hecho
referencia al alias definido en el /etc/hosts no será necesario realizar ninguna modificación
(salvo la actualización en el hosts). En caso contrario, será necesario revisar el fichero:

/etc/httpd/conf/workers.properties
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
$TOMCAT_HOME/conf/server.xml
135
4.4.5.
CAMBIO DE IP DEL SERVIDOR WEB APACHE
En caso de haber cambiado la IP del servidor web Apache, será necesario tenerlo en cuenta
Alianza2
en el fichero /etc/hosts del servidor de aplicaciones.
Alianza2
4.5. TAREAS PLANIFICADAS
La plataforma dispone de un planificador de tareas basado en Quartz. El planificador permite

Carga de ODEs: Permite cargar al repositorio nuevos objetos educativos.

Reindexado: Borra los índices del nodo para rehacerlos.

Eliminar ODEs: Lanza un borrado de objetos del repositorio.

Generación de informes: Genera de forma programada un informe del tipo especificado.
El uso de Quartz permite una gestión eficiente de tareas planificadas que incluye la ejecución
diferida de tareas (periódicas o no) y recuperación de tareas en caso de caída del servidor.
Para ello, Quartz usa un modelo en base de datos propio que se carga con el resto de
esquemas de datos de la plataforma.
4.5.1.
PARÁMETROS DE CONFIGURACIÓN DEL
PLANIFICADOR
Las tareas de informes del planificador usan una serie de parámetros de configuración
contenidos en el fichero agrega.properties (ver sección 0). Estas propiedades permiten
definir los directorios donde se almacenan los informes y los nombres de los ficheros
asociados a cada tipo de informe.
4.5.2.
TAREAS
A continuación se describen los tipos de tareas disponibles en la versión 1.1.1 de Agrega y lo
recursos utilizados por dichas tareas en el servidor.
CARGA DE ODES
La carga de ODEs permite a un usuario administrador de la plataforma cargar contenidos al
repositorio del nodo.
Para poder realizar una carga de ODEs el usuario administrador necesita tener disponibles
tres carpetas en el servidor. Estas carpetas deben tener permisos de lectura y escritura para
el usuario de arranque del servidor de aplicaciones, y deben estar creadas en el momento de
configurar la tarea. Dichas carpetas son:

Carpeta de ODEs: En esta carpeta se almacenan los objetos en formato comprimido que
el usuario administrador desea cargar al repositorio. En la versión actual (en el momento
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
programar tareas de mantenimiento de la plataforma y del repositorio:
136
de escribir este manual) sólo se cargan los ODEs que estén a primer nivel, no se
exploran las subcarpetas.

Carpeta de ODEs correctos: Esta carpeta contiene los ODEs que la plataforma ha
cargado correctamente al repositorio tras la ejecución de la tarea.

Alianza2
Carpeta de ODEs erróneos: Esta carpeta contiene los ODEs que la plataforma no ha
Alianza2
podido cargar debido a errores de validación de los objetos o a problemas en la
aplicación.
REINDEXADO
índices de la plataforma (ver sección 0).
El reindexado supone borrar el índice actual y rehacerlo desde cero, por lo que es vital
mantener backups de los índices para poder restaurarlos en caso de problemas.
ELIMINACIÓN DE ODES
La tarea de eliminación de ODEs elimina físicamente del servidor aquellos ODEs que
previamente han sido despublicados por un usuario administrador.
INFORMES
Las tareas restantes disponibles en el planificador corresponden a la generación de algún
tipo de informe (Estado de los contenidos digitales educativos, Operaciones realizadas, Nivel
de agregación, Cobertura curricular, etc). La plataforma gestiona de forma automática la
generación de los informes y permite su consulta desde el portal de administración. Los
ficheros físicos creados en el servidor están definidos en la configuración (fichero
agrega.properties).
4.6. GENERACIÓN AUTOMÁTICA DE FICHEROS
Dentro de la plataforma Agrega se encuentran configuradas por defecto unas tareas
planificadas que permiten la generación periódica de algunos ficheros del portal, entre ellos
se encuentran los informes de la portada, los ficheros de sitemaps, el contenido dinámico de
la plataforma, los ficheros rss y el catálogo de contenidos de Agrega.
A continuación se detallan cada una de las tareas.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
El usuario administrador de la plataforma puede programar un reindexado sobre uno de los
137
4.6.1.
GENERACIÓN DE LOS INFORMES DE PORTADA
Tarea automática de generación de los informes de la portada pública de Agrega. Los
informes generados recogen información de los contenidos digitales educativos que más
Alianza2
veces se ha mostrado su ficha de búsqueda, los que más veces han sido previsualizados,
descargados, los ODEs más valorados o los términos más buscados.
Alianza2
Este proceso es lanzado por la plataforma todos los días a las cuatro de la mañana y por
defecto genera unos ficheros con la información del día anterior y otros con la información de
los siete días anteriores. Este último parámetro al igual que el nombre de los ficheros y el
pueden modificar dentro del fichero agrega.properties.
4.6.2.
GENERACIÓN DE LOS FICHEROS SITEMAP
Tarea de generación de los ficheros de sitemaps que serán utilizados por Google para
indexar los contenidos de la plataforma Agrega.
Por defecto se lanza todos los días a la una de la mañana. Estos dos valores junto con el
número de entradas que tendrá cada fichero sitemap y el nombre de los ficheros se pueden
modificar en el fichero generacionContenidos.properties.
4.6.3.
GENERACIÓN DEL CONTENIDO DINÁMICO DE LA
PLATAFORMA
Esta tarea programada genera el contenido dinámico de la plataforma, es decir, realiza la
selección de una captura de un ODE aleatoriamente.
Por defecto se lanza todos los días cada hora. Tanto la periodicidad como la hora en la que
se
lanza
son
valores
configurables
dentro
del
fichero
generacionContenidos.properties.
4.6.4.
GENERACIÓN DEL CATÁLOGO
Tarea de generación automática del catálogo de contenidos de Agrega con todos los
contenidos digitales educativos con nivel de agregación mayor o igual que tres.
Por defecto esta tarea se lanza una vez al mes a las cinco de la mañana. El fichero
resultante con el catálogo se almacena en el directorio referenciado por el atributo
destinoInformesDir del fichero agrega.properties.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
número de contenidos digitales que como máximo saldrán en cada uno de los informes se
138
4.6.5.
GENERACIÓN DE RSS
Esta tarea genera los ficheros rss con las últimas diez noticias, los últimos diez ODEs
publicados y los contenidos digitales educativos más descargados, más previsualizados y
Alianza2
más mostrados en la última semana, en el último mes y el último año.
Alianza2
Por defecto se lanza todos los días a las dos de la mañana. Los ficheros generados se
almacenan
en
el
directorio
referenciado
por
el
atributo
rss.path
del
fichero
agrega.properties.
En la presente sección trataremos de citar las mínimas recomendaciones de seguridad tanto
para JBoss como para Apache. A nivel de base de datos bastaría con filtrar el acceso de los
usuarios por IPs a la misma.
4.7.1.
SEGURIDAD EN JBOSS
A continuación se describen los pasos a seguir para asegurar la Consola JMX y la Consola
Web del JBoss.
ASEGURAR LA CONSOLA JMX
Restringimos el acceso a la consola JMX con un usuario y contraseña, para ello seguimos
los siguientes pasos:
1. Localizar el directorio jmx-console.war, por defecto está en:
$JBOSS_HOME/server/default/deploy
2. Editar el archivo web.xml que está bajo el directorio jmx-console.war/WEB-INF y
descomentar los bloques de seguridad quedando así:
<!-- A security constraint that restricts access to the HTML JMX console
to users with the role JBossAdmin. Edit the roles to what you want and
uncomment the WEB-INF/jboss-web.xml/security-domain element to enable
secured access to the HTML JMX console. -->
<security-constraint>
<web-resource-collection>
<web-resource-name>HtmlAdaptor</web-resource-name>
<description>An example security config that only allows users with the
role JBossAdmin to access the HTML JMX console web application
</description>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>JBossAdmin</role-name>
</auth-constraint>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
4.7. SEGURIDAD
139
</security-constraint>
3. Editar el fichero jboss-web.xml y descomentar también el elemento security-domain
como sigue:
Alianza2
<jboss-web>
<!-- Uncomment the security-domain to enable security. You will
need to edit the htmladaptor login configuration to setup the
login modules used to authentication users. -->
<security-domain>java:/jaas/jmx-console</security-domain>
</jboss-web>
4. Localizar
los
dos
ficheros
de
propiedades
llamados
Alianza2
como
jmx-console-
configuración del servidor, bajo el subdirectorio props. Un ejemplo de está
localización sería: /server/default/conf/props.
5. En jmx-console-users.properties, añadir/cambiar la combinación usuario/contraseña.
6. En jmx-console-roles.properties, añadir los roles asignados a los usuarios que se han
añadido o cambiado en el paso anterior. Recordar añadir el role JBossAdmin a los
usuarios los cuales estén usando la jmx-console.
7. Por último, cuando se arranque ahora el servidor de aplicaciones JBoss y se trate de
acceder a la jmx-console se debe obtener un pop up solicitando el usuario y
contraseña.
ASEGURAR LA CONSOLA WEB
Restringimos el acceso a la Consola Web con usuario y contraseña: el proceso es similar al
anterior. En el directorio /deploy localizamos management/web-console.war y realizamos los
mismos cambios en WEB-INF/web.xml, WEB-INF/jboss-web.xml y en los ficheros de
propiedades de usuarios y grupos.
4.7.2.
SEGURIDAD EN TOMCAT
Las recomendaciones generales para aumentar la seguridad en Tomcat son las siguientes:

El dueño del directorio $TOMCAT_HOME (y todos los subdirectorios y ficheros) debería
ser el usuario tomcat con grupo tomcat.

Los ficheros de $TOMCAT_HOME/conf deben ser de sólo lectura (modo 400).

Eliminar antes de instalar Agrega todos los ficheros de $TOMCAT_HOME/webapps
(balancer, jsp-examples…).

Eliminar
los
contenidos
de
$TOMCAT_HOME/server/webapps/
(manager,
host-
manager…).

Cambiar los usuarios y passwords del fichero $TOMCAT_HOME/conf/tomcat-users.xml.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
users.properties y jmx-console-roles.properties que estarán en el directorio conf de la
140
4.7.3.
SEGURIDAD EN APACHE
Las recomendaciones generales en cuanto a la seguridad de Apache son las siguientes:

Se recomienda estar al día en los últimos parches de seguridad para continuar con la
Alianza2
optimización de seguridad.
Alianza2

Apache debe funcionar bajo su propia cuenta y grupo de usuario. Algunas versiones de
Apache corren bajo el usuario nobody, esto compromete mucho su seguridad.

Es necesario instalar PHP como un módulo de Apache, en lugar de CGI, para dotar al

Asegurar que los archivos a los que se accede son los deseados. No deseamos que se
pueda acceder a los directorios que no tengan permisos para ello.

En la configuración de los virtual hosts, se definen las restricciones anteriores, por
ejemplo:
# security
# forbid default access to filesystem locations
<Directory />
Order Deny,Allow
Deny from all
AllowOverride None
php_flag engine off
</Directory>
<Directory "/export/ccaa/<sitio>/uploads">
Order Deny,Allow
Allow from all
AllowOverride None
php_flag engine off
</Directory>
<Directory "/export/wiki/wiki/">
Options None
AllowOverride None
Order Deny,Allow
Allow from all
php_flag engine on
</Directory>
1. En el primer tag <Directory /> con la sentencia Deny from all se prohíbe por
defecto el acceso a los directorios. Posteriormente se especifican dos bloques
<Directory> permitiendo el acceso a las áreas que definimos.
2. La directiva php_flag engine on/off se utiliza para sitios que quieran activar o
desactivar el intérprete de PHP en función del directorio o del virtual host. En nuestro
caso debemos evitar ejecutar contenido PHP a excepción de la ayuda MediaWiki.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
sistema de una mayor seguridad, y también más potencia.
141
3. La directiva Options
None desactiva todas las opciones: no permitiendo la
ejecución de CGI, ni explorar directorios, ni seguir enlaces simbólicos y desactiva los
includes.
Alianza2
Alianza2
4. Por último, la directiva AllowOverride None desactiva el acceso a los archivos
.htaccess.
Puesto que MediaWiki es un software wiki libre escrito originalmente para Wikipedia, se
encuentra en continua evolución y corrección de incidencias de seguridad. Se aconseja
visitar habitualmente la web oficial, siguiendo las recomendaciones de seguridad que allí se
establezcan.
Es importante destacar que al no haberse realizado ninguna modificación en el código de la
MediaWiki, todos los procesos de actualización que se faciliten desde la web oficial deberían
poder ser ejecutados sin afectar al comportamiento de la ayuda del portal Agrega.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
4.8. ACTUALIZACIÓN MEDIAWIKI
142
5. BLOQUE IV: INTEGRACIÓN CON LA PLATAFORMA
5.1. INTRODUCCIÓN
Alianza2
La plataforma de Agrega se concibe como un repositorio de almacenamiento de Objetos
Alianza2
Digitales Educativos en la que se pone a disposición de los usuarios capacidades de
creación, visualización, catalogación y compartición de sus contenidos. Para añadir valor a
los objetos almacenados, potenciar su distribución y facilitar su acceso, se definen dentro de
la comunidad educativa una serie de estándares, normas y protocolos que se orientan a la
Los repositorios, además de concebirse como almacenes de recursos digitales, contemplan
un almacenamiento de metadatos para aportar información sobre los componentes y facilitar
su compartición hacia el exterior sin necesidad de conocimiento previo de la organización o
la estructura del almacén.
Con estos fines, Agrega ofrece los interfaces de OAIPMH y DRI. No obstante, al tratarse de
una arquitectura SOA, la mayor parte de los módulos expone una interfaz web vía
WebServices que permitiría la integración de otros desarrollos con la plataforma.
NOTA: los WebServices de los ejemplos podrán ser invocados mediante la herramienta
gratuita SoapUI.
5.2. WEBSERVICES PUBLICADOS
Algunos módulos desplegados en el servidor de aplicaciones resultan de especial interés de
cara a posibles integraciones desde otras plataformas. Cada módulo expone las operaciones
y los WSDL que las describen siendo accesibles directamente desde cualquier navegador.
5.2.1.
BUSCAR
INTRODUCCIÓN
Buscar es el módulo de Agrega que ejecuta las búsquedas en el repositorio y se encarga de
aunar y cachear los resultados en el caso de realizar búsquedas federadas. Depende del
buscador, que es el módulo que trabaja con el índice.
Desde la funcionalidad buscar se permite buscar sabiendo el identificador del ODE y el
idioma en el que esta catalogado:
-
solicitarMetadato: busca en el repositorio por el idioma de catalogación la ficha del
ODE.
-
buscarAvanzado: permite la realización de búsquedas.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
facilitación de los contenidos.
143
WSDL
En la URL http://redes.agrega.indra.es/buscar-1/services se listan todos los servicios
Alianza2
publicados, resultando de interés para realizar las búsquedas el siguiente servicio:
Alianza2
http://redes.agrega.indra.es/buscar-1/services/SrvBuscarService?wsdl
Ejemplo
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ser="http://servicios.buscar.negocio.buscar.pode.es">
<soapenv:Header/>
<soapenv:Body>
<ser:solicitarMetadato>
<ser:parametros>
<ser:identificadorODE>es_20070901_3_0260900</ser:identificadorODE>
<ser:idioma>es</ser:idioma>
<ser:busquedaSimpleAvanzada>POSICIONADO_DETALLE</ser:busquedaSimpleAvanzada
>
</ser:parametros>
</ser:solicitarMetadato>
</soapenv:Body>
</soapenv:Envelope>
Respuesta: se obtiene como respuesta los metadatos del ODE.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<solicitarMetadatoResponse xmlns="http://servicios.buscar.negocio.buscar.pode.es">
<solicitarMetadatoReturn>
<ambito>
<ambito>universal</ambito>
</ambito>
<descripcion>Secuencia didáctica para el reconocimiento de situaciones de
discriminación. Los cinco objetos que la componen simulan casos en los que se fomenta que
el alumnado participa en proyectos de integración</descripcion>
<destinatarios>
<destinatarios>learner</destinatarios>
<destinatarios>teacher</destinatarios>
<destinatarios>family</destinatarios>
<destinatarios>individual</destinatarios>
</destinatarios>
<formato>
<formato>text/html</formato>
<formato>audio/mpeg</formato>
<formato>application/x-shockwave-flash</formato>
<formato>text/xml</formato>
<formato>application/pdf</formato>
<formato>image/jpg</formato>
<formato>image/gif</formato>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Llamada
144
</formato>
<identificadorODE>es_20070901_3_0260900</identificadorODE>
<idioma>es</idioma>
<imagen>/galeriaimg/es_20070901_3_0260900/es_20070901_3_0260900.png</imagen>
<licencias>
<licencias>creative commons: attribution - non commercial - share alike</licencias>
</licencias>
5.2.2.
ENTREGAR
INTRODUCCIÓN
La plataforma AGREGA contiene un repositorio de Objetos Digitales Educativos, cumpliendo
con la especificación SCORM 2004. Con SCORM se hace posible la creación de contenidos
que puedan importarse dentro de sistemas de gestión de aprendizaje diferentes, siempre que
estos soporten la norma SCORM.
Los principales requerimientos que el modelo SCORM trata de satisfacer son:

Accesibilidad: capacidad de acceder a los componentes de enseñanza desde un sitio
distante a través de las tecnologías web, así como distribuirlos a otros sitios.

Adaptabilidad: capacidad de personalizar la formación en función de las necesidades de
las personas y organizaciones.

Durabilidad: capacidad de resistir a la evolución de la tecnología sin necesitar una
reconcepción, una reconfiguración o una reescritura del código.

Interoperabilidad: capacidad de utilizarse en otro emplazamiento y con otro conjunto de
herramientas o sobre otra plataforma de componentes de enseñanza desarrolladas
dentro de un sitio, con un cierto conjunto de herramientas o sobre una cierta plataforma.
Existen numerosos niveles de interoperabilidad.

Reusabilidad: flexibilidad que permite integrar componentes de enseñanza dentro de
múltiples contextos y aplicaciones.
De acuerdo con estos requerimientos, el módulo Entregar permite el intercambio de ODEs
del repositorio de la plataforma, reutilización por plataformas que soportan modelos
anteriores, como SCORM 1.2 o IMS-CP, y además se permite reutilizar los recursos de los
ODEs, de manera que el educador o el alumno pueda utilizar o visualizar los recursos sin
necesidad de una herramienta de gestión del aprendizaje.
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<localizadorODE>uploads/repositorio/23062008/es_20070901_3_0260900</localizadorODE
>
<nivelAgregacion>3</nivelAgregacion>
<tamanio>13074256</tamanio>
<titulo>Yo soy el otro</titulo>
<valoracion>4.0</valoracion>
</solicitarMetadatoReturn>
</solicitarMetadatoResponse>
</soapenv:Body>
</soapenv:Envelope>
Alianza2
145
WSDL
El WSDL puede ser accedido desde la URL: http://redes.agrega.indra.es/entregarAlianza2
1/services/SrvEntregarService?wsdl
Alianza2
Veamos los métodos publicados más interesantes:
-
generarPaquetePIF: este método necesita como parámetro una cadena de
caracteres conteniendo el identificador del Objeto Digital Educativo que se solicita.
Como salida obtiene un objeto del tipo PaquetePifVO, conteniendo el ODE
-
obtenerTiposPIF: devuelve un array de Strings con los tipos soportados por la
plataforma. Actualmente son:
-
o
SCORM_2004
o
SCORM_2004_SIN_SUBMANIFIESTO
o
SCORM_12
o
IMS_CP
o
HTML
o
CONTENIDOS
generarPaquetePIFTipoPIF: este método necesita como parámetro un objeto del tipo
TipoPifVO que empaqueta el identificador del ODE solicitado, el formato de
exportación elegido y el idioma de exportación. Se obtiene como salida un objeto del
tipo PaquetePifVO, descrito anteriormente
Ejemplos
Ejemplo 01: llamada al método generarPaquetePif solicitando un ODE que es válido.
Llamada
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<generarPaquetePIF xmlns="http://servicios.negocio.entregar.pode.es">
<identificador>ODE-fd61edbc-ee56-38d4-935241bab971b013</identificador>
</generarPaquetePIF>
</soapenv:Body>
</soapenv:Envelope>
Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información
devuelta por el método y un attach conteniendo el ODE serializado.
------=_Part_1_31262813.1214307945828
Content-Type: text/xml; charset=UTF-8
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
empaquetado con formato SCORM2004 y mensajes de error, en caso de producirse.
146
Content-Transfer-Encoding: binary
Content-Id: <08C458B838D1365A5864E6985429AF52>
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<generarPaquetePIFResponse xmlns="http://servicios.negocio.entregar.pode.es">
<generarPaquetePIFReturn>
<paquetePIF href="cid:74D53F983C9A2A6730C4D468C80BF990"/>
<resultadoValidacion>
<esValidoManifest>true</esValidoManifest>
<resultadoValidacion></resultadoValidacion>
<rutaManifest xsi:nil="true"/>
</resultadoValidacion>
</generarPaquetePIFReturn>
</generarPaquetePIFResponse>
</soapenv:Body>
</soapenv:Envelope>
{….
contenido
binario
Alianza2
del
Ejemplo 02: llamada al método generarPaquetePif solicitando un ODE que no es válido.
Llamada:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:enc="http://schemas.xmlsoap.org/soap/encoding" >
<soap:Body>
<impl:generarPaquetePIF xmlns:impl="http://servicios.negocio.entregar.pode.es">
<impl:identificador>ODE-387f38a4-0f82-3492-b9b5-a28eb3f0bbcd</impl:identificador>
</impl:generarPaquetePIF>
</soap:Body>
</soap:Envelope>
Respuesta: se obtiene como respuesta solo el mensaje SOAP con la información necesaria
para saber porque el ODE no fue entregado.
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<generarPaquetePIFResponse xmlns="http://servicios.negocio.entregar.pode.es">
<generarPaquetePIFReturn>
<paquetePIF xsi:nil="true"/>
<resultadoValidacion><esValidoManifest>false</esValidoManifest>
<resultadoValidacion>Al menos un elemento (item) es obligatorio dentro de una
organización ;Error LOM-ES, Metadatos incorrectos;</resultadoValidacion>
<rutaManifest xsi:nil="true"/>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
------=_Part_1_31262813.1214307945828
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <74D53F983C9A2A6730C4D468C80BF990>
DataHandler…}
Alianza2
147
</resultadoValidacion>
</generarPaquetePIFReturn>
</generarPaquetePIFResponse>
</soapenv:Body>
</soapenv:Envelope>
Alianza2
Ejemplo 03: llamada al método generarPaquetePifTipoPif solicitando un ODE que es válido.
Alianza2
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:enc="http://schemas.xmlsoap.org/soap/encoding">
<soap:Body>
<impl:generarPaquetePIFTipoPIF xmlns:impl="http://servicios.negocio.entregar.pode.es">
<impl:tipoPifVO>
<impl:idODE>ODE-fd61edbc-ee56-38d4-9352-41bab971b013</impl:idODE>
<impl:tipoPif>SCORM_2004</impl:tipoPif>
<impl:idioma>es</impl:idioma>
</impl:tipoPifVO>
</impl:generarPaquetePIFTipoPIF>
</soap:Body>
</soap:Envelope>
Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información
devuelta por el método y un attach conteniendo el ODE serializado.
------=_Part_8_24005374.1214321990043
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <AD48DDF0E86D4BD7DC1D8883665A86>
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<generarPaquetePIFTipoPIFResponse xmlns="http://servicios.negocio.entregar.pode.es">
<generarPaquetePIFTipoPIFReturn>
<paquetePIF href="cid:86JD2583DDE885DE5E5GF56H7HH331"/>
<resultadoValidacion>
<esValidoManifest>true</esValidoManifest>
<resultadoValidacion></resultadoValidacion>
<rutaManifest xsi:nil="true"/>
</resultadoValidacion>
</generarPaquetePIFTipoPIFReturn>
</generarPaquetePIFTipoPIFResponse>
</soapenv:Body>
</soapenv:Envelope>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Llamada
148
------=_Part_8_24005374.1214321990043
Content-Type: application/octet-stream
Alianza2
Content-Transfer-Encoding: binary
Alianza2
Content-Id: <86JD2583DDE885DE5E5GF56H7HH331>
{…. contenido binario del DataHandler…}
5.3.1.
INTRODUCCIÓN
OAI-PMH (Open Archives Initiative Protocol for Metadata Harvesting) se define como un
protocolo para la transmisión de metadatos a través de Internet. En este protocolo participan
dos tipos de agentes:

Proveedores de datos: exponen públicamente sus metadatos codificados en Dublín
Core en un fichero xml.

Proveedores de servicios: realizan servicios de búsqueda para recopilar (harvesting)
los metadatos de un proveedor. La comunicación con el proveedor de datos se realiza
mediante llamadas HTTP.
Desde la plataforma Agrega se ofrece la posibilidad de integración con su repositorio a través
del protocolo OAI-PMH actuando como proveedora de datos.
Un cliente que quiera obtener información del repositorio de Agrega deberá establecer una
comunicación con la plataforma mediante una llamada HTTP a una dirección pública de
Internet que se facilitará en la plataforma. En dicha comunicación se deberán parametrizar
los términos en los que se realiza la petición (de la manera que veremos más adelante), a lo
que la plataforma Agrega contestará en el contexto de la misma petición (de forma síncrona)
con el resultado de la operación, indicando el éxito de la misma o la causa de su fracaso.
A continuación, se detallan todos los métodos del protocolo OAI-PMH implementados en
Agrega.
5.3.2.
IDENTIFY
Este método devuelve la información sobre el servidor de OAI-PMH, tales como el nombre, la
versión del protocolo, el correo del administrador de la plataforma, etc.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
5.3. OAIPMH
149
ARGUMENTOS

verb: Obligatorio. Se pasará la operación que se quiere realizar en este caso Identify.
Alianza2
FORMATO DE LA LLAMADA
Alianza2
La manera de obtener información sobre el repositorio es mediante una llamada HTTP al
método Identify del repositorio:
http://urlRepositorioAgrega?verb=Identify
Como respuesta el Agrega devolverá un XML codificado en UTF-8 con toda la información
del repositorio.
EJEMPLO
A continuación se describe un ejemplo de llamada al método Identify y la correspondiente
respuesta obtenida:
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve
rb=Identify
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH
xmlns:oai_id="http://www.openarchives.org/OAI/2.0/oai-identifier"
xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd
http://www.openarchives.org/OAI/2.0/oai-identifier
http://www.openarchives.org/OAI/2.0/oai-identifier.xsd">
<responseDate>2008-06-19T17:18:54.653+02:00</responseDate>
<request verb="Identify">
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do
</request>
<Identify>
<repositoryName>Agrega</repositoryName>
<baseURL>http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do</baseU
RL>
<protocolVersion>2.0</protocolVersion>
<adminEmail>[email protected]</adminEmail>
<earliestDatestamp>2008-03-14</earliestDatestamp>
<deletedRecord>no</deletedRecord>
<granularity>YYYY-MM-DD</granularity>
<description>
<oai_id:oai-identifier>
<oai_id:scheme>oai</oai_id:scheme>
<oai_id:repositoryIdentifier>agrega.es</oai_id:repositoryIdentifier>
<oai_id:delimiter>:</oai_id:delimiter>
<oai_id:sampleIdentifier>oai:agrega.es:identificadorMec</oai_id:sampleIdentifier>
</oai_id:oai-identifier>
</description>
</Identify>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
FORMATO DE SALIDA
150
</ OAI-PMH>
5.3.3.
LISTMETADATAFORMATS
Alianza2
Alianza2
Devuelve el listado de los tipos de metadatos que soporta el proveedor. En el caso de la
plataforma Agrega sólo se va a soportar el tipo de metadato Dublín Core.

verb: Obligatorio. Operación que se quiere realizar en este caso ListMetadataFormats.

Identifier: Optativo. En el caso de añadir este parámetro se devolverían únicamente los
tipos de metadatos en los que esta disponible el objeto del repositorio cuyo identificador
se pasa.
FORMATO DE LA LLAMADA
http://urlRepositorioAgrega?verb=ListMetadataFormats
FORMATO DE SALIDA
Como resultado se obtendrá un xml con los tipos de metadatos.
EJEMPLO
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve
rb=ListMetadataFormats
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2008-06-19T18:51:36.471+02:00</responseDate>
<request
verb="ListMetadataFormats">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhR
equest.do</request>
<ListMetadataFormats>
<metadataFormat>
<metadataPrefix>oai_dc</metadataPrefix>
<schema>http://www.openarchives.org/OAI/2.0/oai_dc.xsd</schema>
<metadataNamespace>http://www.openarchives.org/OAI/2.0/oai_dc/</metadataNamespace>
</metadataFormat>
</ListMetadataFormats>
</ OAI-PMH>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
ARGUMENTOS
151
5.3.4.
LISTSETS
Devuelve el listado de conjuntos soportados por el proveedor de contenidos. Estos conjuntos
son creados opcionalmente por el servidor para facilitar una recuperación selectiva de los
registros. Sería una clasificación de los contenidos según diferentes entradas, así un cliente
Alianza2
podría pedir que se recuperasen solo los registros pertenecientes a una determinada clase.
Alianza2
Los conjuntos pueden ser simples listas o estructuras jerárquicas.
En el caso de la plataforma Agrega no se van a soportar los conjuntos.

verb: Obligatorio. Operación que se quiere realizar en este caso ListSets.

resumptionToken: Optativo. Token necesario para el control de flujo. Este atributo será
utilizado por más métodos del protocolo para permitir el paginado de la respuesta.
FORMATO DE LA LLAMADA
http://urlRepositorioAgrega?verb=ListSets
FORMATO DE SALIDA
Como resultado se obtendrá un xml con los conjuntos.
EJEMPLO
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve
rb=ListSets
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2008-06-19T18:59:35.763+02:00</responseDate>
<request
verb="ListSets">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do</r
equest>
<error code="noSetHierarchy">La plataforma no soporta conjuntos</error>
</OAI-PMH>
5.3.5.
LISTIDENTIFIERS
Recupera los identificadores de los registros de la plataforma, en lugar de los registros
completos. Permite argumentos como el rango de fechas entre los que queremos recuperar
los datos.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
ARGUMENTOS
152
ARGUMENTOS

verb: Obligatorio. Operación que se quiere realizar en este caso ListIdentifiers.

from: Opcional. Fecha a partir de la cual se quiere obtener la lista selectiva de
Alianza2
identificadores.

until: Opcional. Fecha hasta la cual se quiere obtener
la lista selectiva de
Alianza2
identificadores.

metadataPrefix:
Obligatorio.
Tipo
de
metadato
que
deben
soportar
los
identificadores. En el caso de la plataforma Agrega será oai_dc (Dublín Core) ya que

Set: Opcional. Identificador del conjunto.

resumptionToken: Opcional. Token necesario para el control de flujo.
FORMATO DE LA LLAMADA
http://urlRepositorioAgrega?verb=ListIdentifiers&metadataPrefix=oai_d
FORMATO DE SALIDA
Como resultado se obtendrá un xml con la lista de los identificadores.
EJEMPLO
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve
rb=ListIdentifiers&metadataPrefix=oai_dc
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2008-06-19T19:24:45.759+02:00</responseDate>
<request verb="ListIdentifiers"
metadataPrefix="oai_dc">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequ
est.do
</request>
<ListIdentifiers>
<header>
<identifier>oai:agrega.es:es-ic_20080410_1_9075517</identifier>
<datestamp>2008-04-10</datestamp>
</header>
<header>
<identifier>oai:agrega.es:es-ic_20080430_1_9135930</identifier>
<datestamp>2008-04-30</datestamp>
</header>
<header>
<identifier>oai:agrega.es:es-ic_20080613_3_9140808</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<header>
<identifier>oai:agrega.es:es-ic_20080613_2_9140827</identifier>
<datestamp>2008-06-13</datestamp>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
es el único tipo de metadato soportado.
153
5.3.6.
GETRECORD
Recupera la información de un registro concreto del repositorio.
ARGUMENTOS

verb: Obligatorio. Se pasará la operación que se quiere realizar en este caso GetRecord.

identifier: Obligatorio. Identificador del registro del que se quiere obtener la información.

metadataPrefix: Obligatorio. Tipo de metadato. Como se ha comentado anteriormente la
plataforma Agrega únicamente soporta oai_dc.
FORMATO DE LA LLAMADA
http://urlRepositorioAgrega?verb=GetRecord&metadataPrefix=oai_dc&iden
tifier=identificadorRegistro
FORMATO DE SALIDA
Como resultado se obtendrá un xml con la información del registro.
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
</header>
<header>
<identifier>oai:agrega.es:es-ic_20080613_2_9140821</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<header>
<identifier>oai:agrega.es:es-ic_20080613_2_9140834</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<header>
<identifier>oai:agrega.es:es_20071116_3_0182000</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<header>
<identifier>oai:agrega.es:es_20071116_3_0162000</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<header>
<identifier>oai:agrega.es:es_20071214_2_0102001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<resumptionToken expirationDate="2008-06-19T19:24:45.796+02:00"
completeListSize="255" cursor="0">1213896285756</resumptionToken>
</ListIdentifiers>
</OAI-PMH>
154
EJEMPLO
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve
rb=GetRecord&metadataPrefix=oai_dc&identifier=oai:agrega.es:esic_20080410_1_9075517
Alianza2
<responseDate>2008-06-19T19:38:36.254+02:00</responseDate>
<request verb="GetRecord"
identifier="oai:agrega.es:es-ic_20080410_1_9075517"
metadataPrefix="oai_dc">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequ
est.do</request>
<GetRecord>
<record>
<header>
<identifier>oai:agrega.es:es-ic_20080410_1_9075517</identifier>
<datestamp>2008-04-10</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Dispositivo de anclaje en una herramienta eléctrica</dc:title>
<dc:creator/>
<dc:subject>útil</dc:subject>
<dc:description>Fotografía detallada de una herramienta denominada espátula
eléctrica en la que se aprecia su dispositivo de anclaje</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-04-10</dc:date>
<dc:type>photograph</dc:type>
<dc:format>image/jpeg</dc:format>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es-ic_20080410_1_9075517</dc:identifier>
<dc:source/>
<dc:language>es</dc:language>
<dc:relation/>
<dc:coverage/>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
</GetRecord>
</OAI-PMH>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Alianza2
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd
http://www.openarchives.org/OAI/2.0/oai_dc/
http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
155
5.3.7.
LISTRECORDS
Devuelve todos los registros del repositorio. Permite argumentos como el rango de fechas
entre los que queremos recuperar los datos.
Alianza2
ARGUMENTOS

verb: Obligatorio. Operación que se quiere realizar en este caso ListRecords.

from: Opcional. Fecha a partir de la cual se quiere obtener la lista selectiva de
Alianza2

until: Opcional. Fecha hasta la cual se quiere obtener la lista selectiva de registros.

metadataPrefix: Obligatorio. Tipo de metadato que deben soportar los registros. En el
caso de la plataforma agrega será oai_dc (Dublín Core).

Set: Opcional. Identificador del conjunto.

resumptionToken: Opcional. Token necesario para el control de flujo.
FORMATO DE LA LLAMADA
http://urlRepositorioAgrega?verb=ListRecords&metadataPrefix=oai_dc
FORMATO DE SALIDA
Devuelve un xml con los registros del repositorio.
EJEMPLO
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve
rb=ListRecords&metadataPrefix=oai_dc
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd
http://www.openarchives.org/OAI/2.0/oai_dc/
http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
<responseDate>2008-06-19T19:48:48.319+02:00</responseDate>
<request verb="ListRecords"
metadataPrefix="oai_dc">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequ
est.do</request>
<ListRecords>
<record>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Flexibilidad</dc:title>
<dc:creator>Eptron Multimedia S.A.</dc:creator>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
registros.
156
<dc:subject>Flexibilidad</dc:subject>
<dc:description>Definir de un modo comprensible para el alumnado la
flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-06-13</dc:date>
<dc:type>self assessment</dc:type>
<dc:format>text/html</dc:format>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es_20071116_2_0162001</dc:identifier>
<dc:source>es_20071116_3_0162000</dc:source>
<dc:language>es</dc:language>
<dc:relation>ispartof</dc:relation>
<dc:coverage>Universal</dc:coverage>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
<record>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Flexibilidad</dc:title>
<dc:creator>Eptron Multimedia S.A.</dc:creator>
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es_20071116_2_0162001</dc:identifier>
<dc:source>es_20071116_3_0162000</dc:source>
<dc:language>es</dc:language>
<dc:relation>ispartof</dc:relation>
<dc:coverage>Universal</dc:coverage>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
<record>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Flexibilidad</dc:title>
<dc:creator>Eptron Multimedia S.A.</dc:creator>
<dc:subject>Flexibilidad</dc:subject>
<dc:description>Definir de un modo comprensible para el alumnado la
flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-06-13</dc:date>
<dc:type>self assessment</dc:type>
<dc:format>text/html</dc:format>
Alianza2
157
<dc:subject>Flexibilidad</dc:subject>
<dc:description>Definir de un modo comprensible para el alumnado la
flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-06-13</dc:date>
<dc:type>self assessment</dc:type>
<dc:format>text/html</dc:format>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es_20071116_2_0162001</dc:identifier>
<dc:source>es_20071116_3_0162000</dc:source>
<dc:language>es</dc:language>
<dc:relation>ispartof</dc:relation>
<dc:coverage>Universal</dc:coverage>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
<record>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Flexibilidad</dc:title>
<dc:creator>Eptron Multimedia S.A.</dc:creator>
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es_20071116_2_0162001</dc:identifier>
<dc:source>es_20071116_3_0162000</dc:source>
<dc:language>es</dc:language>
<dc:relation>ispartof</dc:relation>
<dc:coverage>Universal</dc:coverage>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
<record>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Flexibilidad</dc:title>
<dc:creator>Eptron Multimedia S.A.</dc:creator>
<dc:subject>Flexibilidad</dc:subject>
<dc:description>Definir de un modo comprensible para el alumnado la
flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-06-13</dc:date>
<dc:type>self assessment</dc:type>
<dc:format>text/html</dc:format>
Alianza2
158
<dc:subject>Flexibilidad</dc:subject>
<dc:description>Definir de un modo comprensible para el alumnado la
flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-06-13</dc:date>
<dc:type>self assessment</dc:type>
<dc:format>text/html</dc:format>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es_20071116_2_0162001</dc:identifier>
<dc:source>es_20071116_3_0162000</dc:source>
<dc:language>es</dc:language>
<dc:relation>ispartof</dc:relation>
<dc:coverage>Universal</dc:coverage>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
<record>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Flexibilidad</dc:title>
<dc:creator>Eptron Multimedia S.A.</dc:creator>
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es_20071116_2_0162001</dc:identifier>
<dc:source>es_20071116_3_0162000</dc:source>
<dc:language>es</dc:language>
<dc:relation>ispartof</dc:relation>
<dc:coverage>Universal</dc:coverage>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
<record>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Flexibilidad</dc:title>
<dc:creator>Eptron Multimedia S.A.</dc:creator>
<dc:subject>Flexibilidad</dc:subject>
<dc:description>Definir de un modo comprensible para el alumnado la
flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-06-13</dc:date>
<dc:type>self assessment</dc:type>
<dc:format>text/html</dc:format>
Alianza2
159
<dc:subject>Flexibilidad</dc:subject>
<dc:description>Definir de un modo comprensible para el alumnado la
flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-06-13</dc:date>
<dc:type>self assessment</dc:type>
<dc:format>text/html</dc:format>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es_20071116_2_0162001</dc:identifier>
<dc:source>es_20071116_3_0162000</dc:source>
<dc:language>es</dc:language>
<dc:relation>ispartof</dc:relation>
<dc:coverage>Universal</dc:coverage>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
<record>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Flexibilidad</dc:title>
<dc:creator>Eptron Multimedia S.A.</dc:creator>
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es_20071116_2_0162001</dc:identifier>
<dc:source>es_20071116_3_0162000</dc:source>
<dc:language>es</dc:language>
<dc:relation>ispartof</dc:relation>
<dc:coverage>Universal</dc:coverage>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
<record>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Flexibilidad</dc:title>
<dc:creator>Eptron Multimedia S.A.</dc:creator>
<dc:subject>Flexibilidad</dc:subject>
<dc:description>Definir de un modo comprensible para el alumnado la
flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-06-13</dc:date>
<dc:type>self assessment</dc:type>
<dc:format>text/html</dc:format>
Alianza2
160
<dc:subject>Flexibilidad</dc:subject>
<dc:description>Definir de un modo comprensible para el alumnado la
flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-06-13</dc:date>
<dc:type>self assessment</dc:type>
<dc:format>text/html</dc:format>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es_20071116_2_0162001</dc:identifier>
<dc:source>es_20071116_3_0162000</dc:source>
<dc:language>es</dc:language>
<dc:relation>ispartof</dc:relation>
<dc:coverage>Universal</dc:coverage>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
<resumptionToken expirationDate="2008-06-19T19:48:48.349+02:00"
completeListSize="255" cursor="0">1213897728309</resumptionToken>
</ListRecords>
</OAI-PMH>
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio
ma=es&identificadorODE=es_20071116_2_0162001</dc:identifier>
<dc:source>es_20071116_3_0162000</dc:source>
<dc:language>es</dc:language>
<dc:relation>ispartof</dc:relation>
<dc:coverage>Universal</dc:coverage>
<dc:rights>creative commons: attribution - non commercial - share
alike</dc:rights>
</oai_dc:dc>
</metadata>
</record>
<record>
<header>
<identifier>oai:agrega.es:es_20071116_2_0162001</identifier>
<datestamp>2008-06-13</datestamp>
</header>
<metadata>
<oai_dc:dc>
<dc:title>agrega : Flexibilidad</dc:title>
<dc:creator>Eptron Multimedia S.A.</dc:creator>
<dc:subject>Flexibilidad</dc:subject>
<dc:description>Definir de un modo comprensible para el alumnado la
flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description>
<dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente
502/06-Lote1</dc:publisher>
<dc:contributor/>
<dc:date>2008-06-13</dc:date>
<dc:type>self assessment</dc:type>
<dc:format>text/html</dc:format>
Alianza2
161
5.3.8.
ERRORES
A continuación, se detallan algunos de los mensajes de error que puede devolver el
repositorio Agrega. Al igual que ocurre con las respuestas correctas éstos serán xml
Alianza2
codificados en UTF-8:
Alianza2
BADVERB
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2008-06-20T14:18:09.942+02:00</responseDate>
<request>http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do</request
>
<error code="badVerb">El argumento verb es incorrecto</error>
</OAI-PMH>
BadArgument
Indica que algunos de los parámetros de la petición no son correctos o falta alguno
obligatorio.
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2008-06-20T14:18:39.294+02:00</responseDate>
<request
verb="ListIdentifiers">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.
do</request>
<error code="badArgument">La llamada incluye un parámetro incorrecto o no incluye un
argumento obligatorio</error>
</OAI-PMH>
CannotDisseminateFormat
Mensaje de error que indica que el tipo de metadato no esta soportado por la plataforma.
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2008-06-20T14:18:57.709+02:00</responseDate>
<request
verb="ListIdentifiers"
metadataPrefix="oai_d">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhReque
st.do</request>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Mensaje de error que indica que el parámetro verb no es correcto.
162
<error code="cannotDisseminateFormat">Tipo
plataforma</error>
</OAI-PMH>
de
metadato
no
soportado
en
la
Alianza2
idDoesNotExist
Alianza2
<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2008-06-20T14:20:29.974+02:00</responseDate>
<request
verb="GetRecord"
identifier="asdfsdf"
metadataPrefix="oai_dc">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequ
est.do</request>
<error code="idDoesNotExist">El identificador no existe en la plataforma</error>
</OAI-PMH>
5.4. GESTOR SESIONES
5.4.1.
INTRODUCCIÓN
El gestor de sesiones es un módulo de Agrega que permite a los servicios externos
interaccionar con los módulos ofrecidos a través del interfaz Web Service donde se requiere
un identificador de sesión. Esta funcionalidad permite a la plataforma establecer un interfaz
de control mínimo a los servicios externos que interaccionan con los interfaces WS’s públicos
de Agrega.
Los interfaces WS’s que están relacionados con el servicio de gestión de sesiones en la
plataforma son el interfaz DRI y el SQI en los que el concepto de sesión esta presente en las
cabeceras de sus métodos.
Desde la funcionalidad del gestor de sesiones se implementan funcionalidades básicas como
son:
- crear sesión: crear una sesión válida dentro del sistema.
- crear sesión anónima: crear una sesión anónima dentro de sistema.
- eliminar sesión: eliminar una sesión válida dentro del sistema.
5.4.2.
ALCANCE
El módulo de gestión de sesiones esta concebido para la interacción con el sistema Agrega
dentro de las funcionalidades DRI y SQI expuestas mediante Web Services. El concepto de
sesión se establece como paso previo para la interacción con estos dos servicios. En el
interfaz se define la creación de sesiones autenticadas y sesiones anónimas para las que no
hay necesidad de ser un usuario dado de alta en el sistema. La funcionalidad del servicio de
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Indica que el identificador del registro no se existe en la plataforma.
163
sesiones se ha realizado a través del intercambio de mensajes SOAP sobre el protocolo
HTTP.
La interacción con el servicio de sesiones se puede realizar partiendo del documento WSDL,
Alianza2
que describe el funcionamiento y los detalles de invocación del módulo y que permite a
Alianza2
cualquier potencial usuario la creación de un cliente SOAP capaz de enviar mensajes SOAP
al módulo de sesiones.
5.4.3.
INTEGRACIÓN A TRAVÉS DE WEB SERVICES
A continuación, se describen en detalle todos los métodos implementados en el API del
invocación, los tipos de información devuelta y los errores posibles.
createSession
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
CreateSession (String userId, String password) throws Exception
Este método requiere como parámetros un identificador de usuario y la clave asociada al
mismo. Tanto el usuario como la clave deben estar dados de alta en la plataforma para tener
acceso a un identificador válido. En el caso de que esto sea así, el método devuelve un
identificador de sesión válido con el que poder interaccionar con la plataforma.
EJEMPLO
A continuación, se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método CreateSession enviando un usuario y clave.
Llamada
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<createSession xmlns="http://Sesion.servicios.negocio.dri.pode.es">
<userID>admincatalogador</userID>
<password>admincatalogador</password>
</createSession>
</soapenv:Body>
</soapenv:Envelope>
Respuesta: se obtiene como respuesta identificador de sesión válido.
<?xml version="1.0" encoding="UTF-8"?>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
gestor de sesiones así como la descripción de los parámetros necesarios para su correcta
164
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<createSessionResponse
xmlns="http://Sesion.servicios.negocio.dri.pode.es">
Alianza2
Alianza2
<createSessionReturn>ff8080811ad87512011ad8a4084d0002</createSessionReturn
>
</createSessionResponse>
</soapenv:Body>
</soapenv:Envelope>
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
CreateAnonymousSession () throws Exception
Este método no requiere parámetros y devuelve un identificador de sesión válido con el que
poder interaccionar con la plataforma.
EJEMPLO
A continuación, se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método CreateAnonymousSession.
Llamada
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<m:createAnonymousSession
xmlns:m="http://Sesion.servicios.negocio.dri.pode.es"/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Respuesta: se obtiene como respuesta identificador de sesión válido.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<createAnonymousSessionResponse
xmlns="http://Sesion.servicios.negocio.dri.pode.es">
<createAnonymousSessionReturn>ff8080811ad87512011ad8a4c2220003</createAn
onymousSessionReturn>
</createAnonymousSessionResponse>
</soapenv:Body>
</soapenv:Envelope>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
createAnonymousSession
165
destorySession
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
Alianza2
DestroySession (String sessionID) throws Exception
Alianza2
Este método toma como parámetro el identificador de la sesión que se quiere eliminar. El
resultado de esta operación es la eliminación del sistema de gestión de sesiones de la sesión
a la que corresponde el identificador.
EJEMPLO
Ejemplo 01: llamada al método DestroySession.
Llamada
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<m:destroySession xmlns:m="http://Sesion.servicios.negocio.dri.pode.es">
<m:sessionID>ff8080811ad87512011ad8a4c2220003</m:sessionID>
</m:destroySession>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Respuesta: no hay respuesta a esta llamada.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<destroySessionResponse
xmlns="http://Sesion.servicios.negocio.dri.pode.es"/>
</soapenv:Body>
</soapenv:Envelope>
5.5. SQI
5.5.1.
INTRODUCCIÓN
SQI son las siglas de “Simple Query Interface”. Se trata de una especificación, enmarcada en
el entorno de los repositorios de objetos de aprendizaje, que define una capa para facilitar las
búsquedas. Pretende especificar un estándar para resolver la problemática de las búsquedas
de contenidos digitales en entornos heterogéneos.
El interfaz SQI define un API con las siguientes funcionalidades:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
A continuación se añade un ejemplo de llamada y de respuesta:
166
- set query language: se define el lenguaje con el que se escribe la consulta con la
que se va a realizar la búsqueda. El lenguaje de consulta esta definido por el
repositorio sobre el que se realiza la búsqueda.
- set results format: se especifica el lenguaje en el que se va a generar la respuesta a
Alianza2
la consulta.
Alianza2
- set max query results: se definen el máximo número de resultados que una consulta
puede producir.
- set max duration: establece un tiempo máximo de duración para las consultas
asíncronas.
- set results set size: establece un tamaño máximo del conjunto de resultados que se
- sychronous query: ejecuta la consulta sobre el repositorio.
- get total results count: devuelve el número total de resultados que produce una
consulta sobre un repositorio.
- asynchronous query: ejecuta la consulta sobre el repositorio pero de una forma
asíncrona.
- set source location: establece la localización sobre la que el repositorio tiene que
devolver los resultados de consulta en el caso de ser invocado de forma asíncrona.
- query results listener:
5.5.2.
ALCANCE
En la plataforma agrega se ha implementado el servicio de SQI siguiendo las
especificaciones del documento CWA 15454 que define con detalle todas las cabeceras,
nombres de parámetros, sintaxis, funcionalidad y tipos de datos del API SQI. En dicho
documento se hace referencia a la necesidad del desarrollo en paralelo (y alejado del
alcance del estándar) de un servicio de sesiones básico a través del cual, el servicio cliente
de SQI interacciona con el repositorio de objetos digitales. En Agrega, el servicio de gestión
de sesiones se hace cargo de este papel y hace de árbitro entre los clientes SQI y la
plataforma.
La implementación del interfaz SQI en Agrega admite los lenguajes de consulta VSQI LQS,
mientras que el lenguaje en el que se muestran las respuestas es LOM-ES.
El interfaz de consultas esta implementado para la realización de consultas síncronas. La
implementación del interfaz de SQI se ha realizado a través del intercambio de mensajes
SOAP sobre el protocolo HTTP.
La interacción con el servicio de SQI se puede realizar partiendo del documento WSDL, que
describe el funcionamiento y los detalles de invocación del módulo y que permite a cualquier
potencial servicio cliente la creación de un cliente SOAP capaz de enviar mensajes SOAP al
módulo de SQI.
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
devuelve como resultado de una búsqueda.
167
5.5.3.
INTEGRACIÓN A TRAVÉS DE WEB SERVICES
A continuación, se describen en detalle todos los métodos implementados en el API del
servicio de SQI así como la descripción de los parámetros necesarios para su correcta
Alianza2
invocación, los tipos de información devuelta y los errores posibles.
Alianza2
getTotalResultsCount
DEFINICIÓN DEL MÉTODO
GetTotalResultsCount (String targetSessionID, String queryStatement) throws
Exception
Este método requiere como parámetros un identificador de sesión y un texto con una
consulta. El identificador de sesión debe pertenecer a una sesión válida y la consulta estar
escrita en un lenguaje aceptado por la plataforma. En el caso de que esto sea así, el método
devuelve el número total de resultados disponibles para la consulta suministrada.
En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo
ocurrido: identificador de sesión inválido, lenguaje de la consulta no soportado, consulta no
soportada o cualquier otro error no contemplado.
EJEMPLO
A continuación se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método GetTotalResultsCount enviando un identificador de sesión y
un texto de búsqueda.
Llamada
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><getTotalResultsCount
xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><targetSessionID>ff8080811ada04730
11ada6c636b0004</targetSessionID><queryStatement><simpleQuery><term>estre
llas</term></simpleQuery></queryStatement></getTotalResultsCount></soapenv:B
ody></soapenv:Envelope>
Respuesta: se obtiene como respuesta el número de resultados que ha producido la
consulta.
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><getTotalResultsCountResponse
xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><getTotalResultsCountReturn>1</getT
otalResultsCountReturn></getTotalResultsCountResponse></soapenv:Body></soapenv:Env
elope>
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
El método tiene el siguiente aspecto:
168
setMaxDuration
DEFINICIÓN DEL MÉTODO
Alianza2
El método tiene el siguiente aspecto:
Alianza2
SetMaxDuration (String targetSessionID, Integer maxDuration) throws Exception
Este método requiere como parámetros un identificador de sesión y un número de entero
positivo. El identificador de sesión debe pertenecer a una sesión válida y la cifra se interpreta
como milisegundos. En el caso de que esto sea así, el método configura la máxima duración
En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo
ocurrido: identificador de sesión inválido, número de milisegundos inválido o cualquier otro
error no contemplado.
EJEMPLO
A continuación, se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método SetMaxDuration enviando un identificador de sesión y
número de milisegundos.
Llamada
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<m:setMaxDuration xmlns:m="http://SQI.servicios.negocio.dri.pode.es">
<m:targetSessionID>ff8080811ada0473011ada465ad10001</m:targetSessionID>
<m:maxDuration>123456789</m:maxDuration>
</m:setMaxDuration>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Respuesta: este método no devuelve ningún dato.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<setMaxDurationResponse
xmlns="http://SQI.servicios.negocio.dri.pode.es"/>
</soapenv:Body>
</soapenv:Envelope>
setResultsFormat
DEFINICIÓN DEL MÉTODO
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
de una consulta asíncrona con el número de milisegundos que se pasan.
169
El método tiene el siguiente aspecto:
SetResultsFormat (String targetSessionID, String resultsFormat) throws Exception
Este método requiere como parámetros un identificador de sesión y el identificador de un
Alianza2
lenguaje de respuesta de resultados de búsqueda. El identificador de sesión debe pertenecer
Alianza2
a una sesión válida y el lenguaje, a un lenguaje admitido por la plataforma (en este caso,
LOM-ES). En el caso de que esto sea así, el método configura el lenguaje de los resultados
de búsqueda.
En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo
soportado o cualquier otro error no contemplado.
EJEMPLO
A continuación se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método SetResultsFormat enviando un identificador de sesión y un
identificador de lenguaje resultado de búsqueda.
Llamada
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<m:setResultsFormat xmlns:m="http://SQI.servicios.negocio.dri.pode.es">
<m:targetSessionID>ff8080811ada0473011ada465ad10001</m:targetSessionID>
<m:resultsFormat>LOM-ES</m:resultsFormat>
</m:setResultsFormat>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Respuesta: este método no devuelve ningún dato.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<setResultsFormatResponse
xmlns="http://SQI.servicios.negocio.dri.pode.es"/>
</soapenv:Body>
</soapenv:Envelope>
setResultSetSize
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
ocurrido: identificador de sesión inválido, lenguaje de los resultados de búsqueda no
170
SetResultSetSize (String targetSessionID, Integer resultSetSize) throws Exception
Este método requiere como parámetros un identificador de sesión y una cifra con el tamaño
del conjunto de elementos devueltos. El identificador de sesión debe pertenecer a una sesión
válida y el tamaño del conjunto de resultados ser válido. En el caso de que esto sea así, el
Alianza2
método configura el tamaño del conjunto de resultados de búsqueda.
Alianza2
En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo
ocurrido: identificador de sesión inválido, tamaño de conjunto de resultados inválido o
cualquier otro error no contemplado.
A continuación, se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método SetResultSetSize enviando un identificador de sesión y un
tamaño de conjunto de resultados.
Llamada
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<m:setResultsSetSize xmlns:m="http://SQI.servicios.negocio.dri.pode.es">
<m:targetSessionID>ff8080811ada0473011ada5c5b9b0002</m:targetSessionID>
<m:resultsSetSize>100</m:resultsSetSize>
</m:setResultsSetSize>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Respuesta: este método no devuelve ningún dato.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<setResultsSetSizeResponse
xmlns="http://SQI.servicios.negocio.dri.pode.es"/>
</soapenv:Body>
</soapenv:Envelope>
setQueryLanguage
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
SetQueryLamguage
Exception
(String
targetSessionID,
String
queryLanguajeID)
throws
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
EJEMPLO
171
Este método requiere como parámetros un identificador de sesión y un identificador de
lenguaje de consulta. El identificador de sesión debe pertenecer a una sesión válida y el
identificador de lenguaje deberá estar entre los identificadores de lenguajes de consulta
aceptados por Agrega (VSQI, LQS). En el caso de que esto sea así, el método configura el
Alianza2
lenguaje de consultas de las búsquedas.
Alianza2
En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo
ocurrido: identificador de sesión inválido, lenguaje de consulta no soportado u otro error no
contemplado.
A continuación se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método SetQueryLamguage enviando un identificador de sesión y un
identificador de lenguaje de consulta.
Llamada
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<m:setQueryLanguage xmlns:m="http://SQI.servicios.negocio.dri.pode.es">
<m:targetSessionID>ff8080811ada0473011ada62b4b50003</m:targetSessionID>
<m:queryLanguageID>VSQI</m:queryLanguageID>
</m:setQueryLanguage>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Respuesta: este método no devuelve ningún dato.
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<setQueryLanguageResponse
xmlns="http://SQI.servicios.negocio.dri.pode.es"/>
</soapenv:Body>
</soapenv:Envelope>
setMaxQueryResults
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
SetMaxQueryResults (String targetSessionID, Integer maxQueryResults) throws
Exception
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
EJEMPLO
172
Este método requiere como parámetros un identificador de sesión y un entero con el máximo
número de resultados que una búsqueda puede producir. El identificador de sesión debe
pertenecer a una sesión válida y el entero deberá ser una cifra válida de resultados de una
búsqueda. En el caso de que esto sea así, el método configura el máximo número de
Alianza2
resultados de una búsqueda.
Alianza2
En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo
ocurrido: identificador de sesión inválido, número de máximo número de resultados inválido u
otro error no contemplado.
A continuación se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método SetMaxQueryResults enviando un identificador de sesión y
un identificador de lenguaje de consulta.
Llamada
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><setMaxQueryResults
xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><targetSessionID>ff8080811ada04730
11ada6c636b0004</targetSessionID><maxQueryResults>10000</maxQueryResults></setM
axQueryResults></soapenv:Body></soapenv:Envelope>
Respuesta: este método no devuelve ningún dato.
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><setMaxQueryResultsResponse
xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"/></soapenv:Body></soapenv:Envelope
>
synchronousQuery
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
SynchronousQuery (String targetSessionID,
startResult) throws Exception
String
queryStatement,
Integer
Este método requiere como parámetros un identificador de sesión, una sentencia con el texto
de la consulta y un valor entero que indica el índice del primer resultado sobre el total posible
a partir del cual se quieren elementos devueltos. El identificador de sesión debe pertenecer a
una sesión válida, la sentencia debe estar escrita en un lenguaje admitido por la plataforma
Agrega y el valor del índice sobre el total de resultados. En el caso de que esto sea así, el
método realiza una consulta sobre el repositorio de objetos digitales de Agrega con la
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
EJEMPLO
173
consulta suministrada de forma síncrona, y devolviendo un conjunto de resultados indexados
respecto del total de hits por el identificador suministrado.
En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo
Alianza2
ocurrido: identificador de sesión inválido, modo de invocación no soportado, tamaño inválido
Alianza2
del conjunto de resultados, sentencia de consulta inválida u otro error no contemplado.
EJEMPLO
A continuación se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método SynchronousQuery enviando un identificador de sesión un
Llamada
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><synchronousQuery
xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><targetSessionID>ff8080811ada04730
11ada6c636b0004</targetSessionID><queryStatement><simpleQuery><term>estre
llas</term></simpleQuery></queryStatement><startResult>1</startResult></synchr
onousQuery></soapenv:Body></soapenv:Envelope>
Respuesta: este método devuelve los metadatos de los contenidos digitales que ajustan con
la consulta suministrada.
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><synchronousQueryResponse
xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><synchronousQueryReturn><?xml
version="1.0" encoding="UTF-8"?>
<lom xmlns="http://ltsc.ieee.org/xsd/LOM"><general
uniqueElementName="general"><identifier
uniqueElementName="identifier"><catalog
uniqueElementName="catalog">Catálogo unificado mec-red.es-ccaa de
identificación de ODE</catalog><entry
uniqueElementName="entry">es_20080630_1_9135401</entry&g
t;</identifier><identifier …….contenido del LOM/ES……..
</synchronousQueryReturn></synchronousQueryResponse></soapenv:Body></soapenv:En
velope>
5.6. DRI
5.6.1.
INTRODUCCIÓN
DRI son las siglas de “Digital Repositories Interoperability”. Se trata de una especificación
(nacida dentro del IMS Consortium) que se define dentro del contexto de los repositorios de
contenidos digitales para facilitar su interoperabilidad. Según la especificación DRI, la
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
texto de búsqueda y un identificador de resultados.
174
interacción de los repositorios se consigue mediante la implementación de una serie de
funcionalidades consideradas básicas en cualquier repositorio: búsqueda, exposición,
almacenamiento y entrega de los contenidos almacenados.
Alianza2
- Búsqueda: Se define como el interfaz a través del cual poder realizar búsquedas sobre los
Alianza2
metadatos de los contenidos almacenados en los repositorios.
- Exposición: Se define como el interfaz sobre el que poder solicitar los metadatos de los
recursos almacenados.
- Almacenamiento: Se trata de la definición de la forma en la que un recurso se puede
introducir en un repositorio y de cómo se representará dentro del mismo para su posterior
- Entrega: Define la forma en que un repositorio puede entregar contenidos
5.6.2.
ALCANCE
De todas las funcionalidades básicas que especifica el estándar, se han implementado en el
módulo de DRI de la plataforma Agrega las funciones de almacenar y entregar a través de
los métodos presentar-almacenar, presentar-catalogar y solicitar-entregar.
- presentar-almacenar: admite la publicación dentro de la plataforma de objetos
externos.
- presentar-catalogar: admite objetos externos y los deja en un estado pendiente de
catalogación, paso previo dentro de Agrega a la publicación.
- solicitar-entregar: se devuelve un objeto digital publicado dentro de la plataforma.
La implementación del estándar se ha realizado a través del intercambio de mensajes SOAP
sobre el protocolo HTTP. De esta forma se ha implementado una arquitectura de servicio con
tecnología Web Services que facilita el intercambio de información entre potenciales clientes
del repositorio y la plataforma y que encaja dentro del diagrama de proveedores de servicio y
servicios de acceso definidos en la especificación del IMS Consortium.
El Web Service que implementa esta funcionalidad trabaja en consonancia con otro servicio
de gestión de sesiones. Este servicio facilita la gestión del control de acceso a los contenidos
digitales de la plataforma mediante un sencillo mecanismo de autenticación. De esta forma,
tanto el almacenamiento de nuevos contenidos como la entrega de información del
repositorio están expuestos de forma pública, pero supeditados a un control de acceso.
La invocación de los tres métodos se puede realizar mediante el uso de un identificador de
sesión (previa creación de una sesión contra el servicio de gestión de sesiones) o mediante
el suministro de un identificador de usuario con su correspondiente clave. Dicho usuario debe
ser un usuario válido dentro del sistema
La interacción con el interfaz DRI se puede realizar partiendo del documento WSDL, que
describe el funcionamiento y los detalles de invocación del módulo y que permite a cualquier
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
acceso.
175
potencial usuario la creación de un cliente SOAP capaz de enviar mensajes SOAP al módulo
de DRI.
5.6.3.
INTEGRACIÓN A TRAVÉS DE WEB SERVICES.
Alianza2
Alianza2
A continuación, se describen en detalle todos los métodos implementados en el API de DRI
así como la descripción de los parámetros necesarios para su correcta invocación, los tipos
de información devuelta y los errores posibles.
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
PresentarAlmacenarSesion (String sesionId, DataHandler pif) throws Exception
Este método necesita como parámetro un identificador de sesión válido y el fichero que
contiene el ODE que se pretende almacenar en formato Pif.
El resultado de la operación es la publicación dentro de la plataforma del ODE suministrado.
EJEMPLO
A continuación, se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método PresentarAlmacenarSesion enviando un ODE.
Llamada
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<presentarAlmacenarSesion xmlns="http://DRI.servicios.negocio.dri.pode.es">
<sesionId>ff8080811ad87512011ad8a4084d0002</sesionId>
<pif href="cid:AFEBB0E5BCC89E61E1B43FF563BC0BC9" />
</presentarAlmacenarSesion>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_2_4835957.1214824149296
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <C0362C12E70D7B0BD27042C2996704B9>
{…. contenido binario del DataHandler…}
------=_Part_2_4835957.1214824149296-Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información
devuelta por el método.
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
presentarAlmacenarSesion
176
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><presentarAlmacenarSesionResponse
xmlns="http://DRI.servicios.negocio.dri.pode.es"/></soapenv:Body></soapenv:Envelope>
Alianza2
presentarAlmacenar
Alianza2
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
PresentarAlmacenar (String usuario, String clave, DataHandler pif) throws Exception
Este método necesita como parámetro un usuario válido, su clave dentro del sistema y el
El resultado de la operación es la publicación dentro de la plataforma del ODE suministrado.
EJEMPLO
A continuación se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método PresentarAlmacenar enviando un ODE.
Llamada
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<presentarAlmacenar xmlns="http://DRI.servicios.negocio.dri.pode.es">
<sesionId>ff8080811ad87512011ad8a4084d0002</sesionId>
<pif href="cid:AFEBB0E5BCC89E61E1B43FF563BC0BC8" />
</presentarAlmacenar>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_2_4835957.1214824149297
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <C0362C12E70D7B0BD27042C2996704B8>
{…. contenido binario del DataHandler…}
------=_Part_2_4835957.1214824149297--
Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información
devuelta por el método.
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><presentarAlmacenarResponse
xmlns="http://DRI.servicios.negocio.dri.pode.es"/></soapenv:Body></soapenv:Envelope>
solicitarEntregarSesion
DEFINICIÓN DEL MÉTODO
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
fichero que contiene el ODE que se pretende almacenar en formato Pif.
177
El método tiene el siguiente aspecto:
SolicitarEntregarSesion (String sesionId, String mec) throws Exception
Este método necesita un identificador de sesión válida y un identificador de objeto digital que
Alianza2
resida publicado en el repositorio. Se devuelve un ODE en formato Pif.
Alianza2
EJEMPLO
A continuación se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método SolicitarEntregarSesion enviando un mec.
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<solicitarEntregarSesion xmlns="http://DRI.servicios.negocio.dri.pode.es">
<sesionId>ff8080811ad92757011ad9275bac0001</sesionId>
<mec>es_20070901_3_0261100</mec>
</solicitarEntregarSesion>
</soapenv:Body>
</soapenv:Envelope>
Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información
devuelta por el método. Dentro de la información devuelta se encuentra un adjunto con el
fichero del ODE en formato Pif.
------=_Part_1_17172160.1214825271850
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <DE89AF93EBB40323FBEF9CD025A66BCB>
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><solicitarEntregarSesionResponse
xmlns="http://DRI.servicios.negocio.dri.pode.es"><solicitarEntregarSesionReturn
href="cid:E5DB451354A6BD7465318D4DA6E41C8D"/></solicitarEntregarSesionResponse>
</soapenv:Body></soapenv:Envelope>
------=_Part_1_17172160.1214825271850
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <E5DB451354A6BD7465318D4DA6E41C8D>
{…. contenido binario del DataHandler…}
solicitarEntregar
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Llamada
178
SolicitarEntregar (String usuario, String clave, String mec) throws Exception
Este método necesita un identificador de usuario válido en la plataforma, su clave dentro del
sistema y un identificador de objeto digital que resida publicado en el repositorio. Se devuelve
un ODE en formato Pif.
Alianza2
Alianza2
EJEMPLO
A continuación, se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método SolicitarEntregar enviando un mec.
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><solicitarEntregar
xmlns="http://DRI.servicios.negocio.dri.pode.es"><usuario>admincatalogador</usuario><clav
e>admincatalogador</clave><mec>es_20070901_3_0261100</mec></solicitarEntregar></so
apenv:Body></soapenv:Envelope>
Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información
devuelta por el método. Dentro de la información devuelta se encuentra un adjunto con el
fichero del ODE en formato Pif.
------=_Part_2_19820335.1214826005924
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <A995CD42245926228341AF8C6C8A1475>
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><solicitarEntregarResponse
xmlns="http://DRI.servicios.negocio.dri.pode.es"><solicitarEntregarReturn
href="cid:66ACF3BB49B51C3848FC5059ADD0228E"/></solicitarEntregarResponse></soap
env:Body></soapenv:Envelope>
------=_Part_2_19820335.1214826005924
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <66ACF3BB49B51C3848FC5059ADD0228E>
{…. contenido binario del DataHandler…}
presentarCatalogarSesion
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
PresentarCatalogarSesion (String sesionId, DataHandler pif) throws Exception
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Llamada
179
Este método necesita un identificador de sesión válida y un fichero con un ODE válido en
formato pif. El resultado de esta operación es la introducción del recurso digital dentro de la
plataforma en estado pendiente de catalogación.
Alianza2
EJEMPLO
Alianza2
A continuación, se añade un ejemplo de llamada y de respuesta:
Ejemplo 01: llamada al método SolicitarEntregarSesion enviando un ODE.
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<presentarCatalogarSesion xmlns="http://DRI.servicios.negocio.dri.pode.es">
<sesionId>ff8080811ad92757011ad9516db60003</sesionId>
<pif href="cid:6935E10DBEAC67589B877E24BCDEF3E5" />
</presentarCatalogarSesion>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_5_14808011.1214826931450
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <6935E10DBEAC67589B877E24BCDEF3E5>
{…. contenido binario del DataHandler…}
------=_Part_5_14808011.1214826931450-Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información
devuelta por el método.
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><presentarCatalogarSesionResponse
xmlns="http://DRI.servicios.negocio.dri.pode.es"/></soapenv:Body></soapenv:Envelope>
presentarCatalogar
DEFINICIÓN DEL MÉTODO
El método tiene el siguiente aspecto:
PresentarCatalogar (String usuario, String clave, DataHandler pif) throws Exception
Este método necesita un identificador de usuario válido en la plataforma, su clave dentro del
sistema y un fichero con un ODE válido en formato pif. El resultado de esta operación es la
introducción del recurso digital dentro de la plataforma en estado pendiente de catalogación.
EJEMPLO
A continuación se añade un ejemplo de llamada y de respuesta:
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
Llamada
180
Ejemplo 01: llamada al método PresentarCatalogar enviando un ODE.
Llamada
Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información
devuelta por el método.
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><presentarCatalogarResponse
xmlns="http://DRI.servicios.negocio.dri.pode.es"/></soapenv:Body></soapenv:Envelope>
Alianza2
Alianza2
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<presentarCatalogar xmlns="http://DRI.servicios.negocio.dri.pode.es">
<usuario>admincatalogador</usuario>
<clave>admincatalogador</clave>
<pif href="cid:423B4845FBE2C2B094071BF68336DCBB" />
</presentarCatalogar>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_5_14808011.1214826931450
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <423B4845FBE2C2B094071BF68336DCBB>
{…. contenido binario del DataHandler…}
------=_Part_5_14808011.1214826931450--
181
6. REFERENCIAS
 Apache 2.X WebServer
http://httpd.apache.org/
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
http://httpd.apache.org/docs/2.0/mod/mod_deflate.html
Alianza2
Alianza2
 Apache Directory Studio
http://directory.apache.org/studio/
 DRI
http://www.imsglobal.org/digitalrepositories/driv1p0/imsdri_infov1p0.html#1256215
 FFmpeg
http://ffmpeg.mplayerhq.hu/
 ImageMagick
http://www.imagemagick.org/script/index.php
 JBoss Application Server
http://www.jboss.org/jbossas/
http://wiki.jboss.org/wiki/JBossASTuningSliming
https://wiki.jboss.org/wiki/OptimalMod_jk1.2Configuration
http://docs.jboss.com/jbossas/guides/clusteringguide/r2/en/html_single/#clustering-http-modjk
http://tomcat.apache.org/tomcat-5.5-doc/config/http.html
 JDK 1.6u6
http://java.sun.com/products/archive/
http://java.sun.com/javase/technologies/hotspot/
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
http://java.sun.com/developer/technicalArticles/Programming/turbo/
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
 LDAP Browser
http://www.mcs.anl.gov/~gawor/ldap/
 Lucene
http://lucene.apache.org/java/docs/index.html
 LVM Howto
http://tldp.org/HOWTO/LVM-HOWTO/
 MediaWiki
http://www.mediawiki.org/wiki/MediaWiki
 Mozilla Firefox
http://www.mozilla-europe.org/es/firefox/
 MySQL
http://dev.mysql.com/doc/refman/5.0/en/
 NFS (Linux NFS Howto)
http://nfs.sourceforge.net/nfs-howto/
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
 Birt
http://www.eclipse.org/birt/phoenix/
182
 OAIPMH
http://www.openarchives.org
http://dublincore.org/
 OpenLDAP
http://www.openldap.org/
http://www.openldap.org/doc/admin24/slapdconfig.html
http://www.openldap.org/doc/admin24/dbtools.html
Alianza2
Alianza2
 Quartz
http://www.opensymphony.com/quartz
 Tomcat
http://tomcat.apache.org/
http://tomcat.apache.org/tomcat-5.5-doc/config/http.html
 SQI
ftp://ftp.cenorm.be/PUBLIC/CWAs/e-Europe/WS-LT/cwa15454-00-2005-Nov.pdf
 SQUID Cache
http://www.squid-cache.org/
http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html
 XFS
http://oss.sgi.com/projects/xfs/
 Xvfb
http://www.xfree86.org/4.0.1/Xvfb.1.html
EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico
 ReiserFS
http://es.wikipedia.org/wiki/ReiserFS
183
Documentos relacionados
Descargar