Documente Academic
Documente Profesional
Documente Cultură
Módulo 2. Arquitectura........................................................................ 23
1. Introducción................................................................................ 24
2. Arquitectura física ........................................................................ 25
3. Arquitectura lógica........................................................................ 28
Módulo 4. Administración....................................................................126
1. Contenidos................................................................................. 127
2. Plataforma................................................................................. 132
3. Configuración ............................................................................. 155
Módulo 6. Integración.........................................................................181
1. Introducción............................................................................... 182
2. WebServices publicados ................................................................. 182
3. OAI-PMH.................................................................................... 188
4. Gestor de sesiones ....................................................................... 202
5. SQI .......................................................................................... 206
6. DRI .......................................................................................... 214
Referencias .....................................................................................222
2
I. Organización del taller
1. Requisitos técnicos y preparación previa de las aulas
El aula en la que se va a impartir el curso debe estar equipada con los siguientes
elementos:
- Presentación: 78 diapositivas.
- 10 actividades.
- 8 animaciones.
3. Objetivos
General:
Específicos:
3
4. Contenidos
4
7. Agenda
Evaluación
5
Secuencia de contenidos Temporalización
6
9. Desarrollo de las actividades
En función de todo lo anterior, las actividades planteadas para este taller están
encaminadas a configurar los componentes que forman parte de la plataforma
Agrega (servidor de datos, servidor de aplicaciones, servidor web y servidor
OpenLDAP).
a. Criterios de evaluación:
- Participar activamente en la sesión.
- Buscar algún contenido ya creado.
- Crear un contenido, catalogarlo y publicarlo.
- Administrar nodos y usuarios.
- Instalar la plataforma.
- Comprobar la estructura, componentes, relación y configuración de los
elementos de Agrega.
b. Instrumentos:
- Ordenador con conexión a Internet.
- Acceso a la plataforma Agrega.
c. Metodología: participativa.
7
Formación para técnicos
Manual módulo 1
Resumen de funcionalidades
8
Índice
Resumen de funcionalidades
1. ¿Qué es?
2. Componentes básicos
2.1. Portal
2.2. Buscador
2.3. Empaquetador
2.4. Catalogadores
2.5. Administración
9
Módulo 1. Resumen de funcionalidades
Objetivos y contenidos
• Objetivos
• Contenidos
− ¿Qué es?
− Componentes básicos.
Proyecta la diapositiva 5.
10
30 min Explicación del contenido
1. ¿Qué es?
11
Proyecta las diapositivas 6 a 10.
2. Componentes básicos
2.1. Portal
12
título, descripción y tamaño de la descarga. Desde esta pantalla el
usuario podrá descargarse el paquete de herramientas off-line de Agrega
y trabajar desde su PC sin necesidad de contar con una conexión a
Internet.
5. RSS o Feeds. Esta pantalla muestra un listado con los feeds disponibles en
Agrega. Un feed o canal se emplea para denominar a los documentos con
formato RSS o Atom que permiten a los agregadores (herramienta similar
a un programa de correo electrónico que detecta los cambios en las
páginas a las que estamos suscritos) recoger información de las páginas
Web sindicadas.
6. Nube de tags. Muestra las palabras clave más repetidas en los contenidos
de la plataforma Agrega. El tamaño de las palabras va en función de las
veces que éstas se repiten. Si nos posicionamos encima de una de las
palabras, podremos ver el término y el número de veces que se repite en
el índice.
La pantalla de la Carpeta personal está formada por una serie de elementos que
facilitan la gestión de los ODEs y que se detallan a continuación:
1. Personales. Muestra los ODEs personales del usuario que se han creado o
que han sido rechazados. Al pulsar sobre el enlace del título, se accede a
una previsualización del ODE.
2. Ver historial. Se trata del historial del ODE dentro de la plataforma. Por
cada transición en el estado del ODE se crea una anotación, con la fecha,
el estado del ODE (en forma de icono), comentarios y el nombre del
usuario que la ha desarrollado.
13
4. Crear. Pulsando este botón la aplicación nos lleva al empaquetador
(dependiendo del perfil del usuario se accederá al avanzado o al básico)
con el fin de crear un nuevo ODE.
9. Propuestos. Muestra una lista con los ODEs propuestos para catalogar por
parte del usuario. También permite acceder al historial de cada ODE
propuesto. Al pulsar sobre el enlace del título, el usuario podrá
previsualizar el objeto digital educativo.
10. Publicados. Muestra una lista con los ODEs creados por el usuario y que
ya han sido publicados. También se puede acceder al historial de cada
ODE publicado. El enlace del título permite al usuario realizar una
previsualización del mismo.
2.2. Buscador
14
• Avanzada: la búsqueda se realiza configurando un formulario de criterios
detallados que permita localizar los ODEs de una forma más exhaustiva.
• Taxonómica: es la que nos permite buscar por diferentes ámbitos,
seleccionando las áreas o temas que nos interesa tratar en directorios.
Para realizar una búsqueda básica se introduce en la caja de texto una o varias
palabras clave, pudiendo utilizar wildcards y/o comillas para ampliar o acotar la
búsqueda. Esta información se utiliza para buscar ajustes sobre los campos título,
descripción y palabras clave del ODE. Es posible seleccionar el idioma con el cual
se quiere realizar la búsqueda
15
• Nivel de agregación. Se puede seleccionar la granularidad funcional para
los objetos digitales que se desean buscar.
• Tipo de formato. Esta opción permite seleccionar el tipo de datos que
contienen los componentes de los objetos digitales que se buscan; y, por
tanto, el tipo de formato en que se puede descargar el ODE.
2.3. Empaquetador
16
• Las organizaciones del objeto y los elementos (ítems SCORM) de que se
componen.
• Los sub-manifiestos agregados al objeto.
2.4. Catalogadores
• Básico
• Avanzado
Para que un objeto pueda entrar dentro del flujo de publicación debe tener
asociada una catalogación básica, es decir, una metainformación obligatoria que
será comprobada y completada en el proceso de validación.
Para acceder al catalogador básico hay que pinchar sobre el enlace Catalogar,
situado en la barra del menú superior del empaquetador básico.
17
apropiado para este elemento es ninguno.
• Descripción: campo de texto libre destinado para que el usuario realice
una descripción textual del contenido del ODE que se está catalogando.
• Tipo: campo destinado para que el usuario elija el tipo específico de
recurso educativo u objeto digital. La elección se realiza eligiendo un
valor de los mostrados en el combo correspondiente.
• Idioma destinatario: campo reservado para que el usuario elija el
idioma utilizado por el destinatario del ODE. La elección se realiza
eligiendo un valor de los mostrados en el combo correspondiente.
• Etapas
• Ciclos/Cursos
• Áreas/Materias
• Bloques de contenidos
Es posible avanzar por los diferentes niveles hasta elegir el más conveniente al que
asociar el ODE. Una vez elegido el nivel habrá que pulsar en Árbol Curricular.
Para que un objeto pueda entrar dentro del flujo de publicación debe tener
asociada una catalogación avanzada, es decir, disponer de una metainformación
obligatoria que será comprobada y completada en el proceso de validación.
Para acceder al catalogador avanzado hay que pinchar sobre el enlace Catalogar,
situado en la barra del menú superior del empaquetador.
• General.
• Ciclo de vida.
• Meta-Metadatos.
• Técnica.
• Uso educativo.
• Derechos.
• Relación.
• Anotación.
18
• Clasificación.
2.5. Administración
Desde este apartado es posible llevar a cabo una planificación de tareas con el fin
de ejecutarlas o administrarlas posteriormente en la plataforma (por ejemplo, una
carga masiva de objetos digitales educativos, elaboración de noticias, etc.).
• Contenidos
• Plataforma
• Configuración
Crea una carpeta para crear un ODE. Recuerda que antes de nada debes
dotar con un título al objeto en cuestión.
19
añadirle elementos a ésta.
20
Formación para técnicos
Manual módulo 2
Arquitectura
21
Índice
Arquitectura
1. Introducción
2. Arquitectura física
2.1. Apache
2.4. LDAP
3. Arquitectura lógica
22
Módulo 2. Arquitectura
Objetivos y contenidos
• Objetivos
• Contenidos
− Introducción.
− Arquitectura física.
− Arquitectura lógica.
23
30 min Explicación del contenido
1. Introducción
Apache
Capa servidor Web PHP (MediaWiki)
Squid (caché opcional)
JBoss Application Server
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.
Por último, la capa de datos debe ofrecer un directorio compartido visible desde
el Apache y el JBoss (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.
24
1 h 30 min Explicación del contenido
2. Arquitectura física
2.1. Apache
1
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.
25
puerto 8009 (Conector AJP) del servidor de aplicaciones JBoss.
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 no queremos abrir conexiones hacia nuestra base de
datos interna. La mejor opción consiste en limitar el acceso de los usuarios a la
base de datos por dirección IP.
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 asegurar 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 de datos de la MediaWiki.
2.4. LDAP
26
2.5. Servidor de ficheros: NFS
Las conexiones que se deben tener en cuenta en las conectividades (rutas) y reglas
de los firewalls son las siguientes:
27
2 h 30 min Explicación del contenido
3. Arquitectura lógica
28
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).
29
3.1.1. Sistema de almacenamiento
Componente Descripción
30
o Entregar, con el fin de ofrecer la funcionalidad
necesaria y definida por DRI para el Solicitar /
Entregar.
31
del repositorio se va a almacenar el contenido.
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.
32
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.
33
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:
o Validador. Se utiliza para validar los ODEs que han
sido modificados por una tarea.
o Publicador. En el caso de que un ODE modificado
estuviera publicado en el repositorio del nodo, el
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).
o Planificador: Permite programar la ejecución
diferida de las tareas configuradas.
34
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.
Desde el punto de vista del servidor de aplicaciones JBoss, podemos ver el portal
Agrega mediante la clásica arquitectura de 3 niveles o capas:
35
de la capa de negocio encontramos módulos orquestadores que consumen uno o
más subservicios para acometer su objetivo.
36
Formación para técnicos
Manual módulo 3
Instalación
(Componentes de la plataforma)
37
Índice
2. Capa de aplicación
3.1. Apache 2
38
Módulo 3. Instalación (Componentes de la plataforma)
Objetivos y contenidos
• Objetivos
• Contenidos
− Capa de datos.
− Capa de aplicación.
− Capa de servidor web.
39
1h Explicación del contenido
1. Capa de datos
• Sistema de ficheros
• Base de datos
• Directorio LDAP
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 off-line…)
• Logs.
2
Si no existiera el servidor dedicado NFS con los discos compartidos, el espacio estuviera disponible
directamente desde la máquina del JBoss, y se deseara que Apache puediera 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 teniendo en cuenta que el exportador en lugar de ser el servidor NFS sería el
servidor JBoss y que el importador sería únicamente el servidor Apache.
40
En la figura anterior se representa cómo el servidor de archivos NFS exporta un
directorio tanto al servidor JBoss como al servidor Apache.
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.
1. /etc/exports
2. /etc/hosts.allow
3. /etc/hosts.deny
En donde:
41
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 terminado de gestionar la escritura en el filesystem
local. Este comportamiento puede causar corrupción de datos si el
servidor reinicia. El flan sync previene este fallo.
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á:
/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.
42
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
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:
43
1.1.3. Anexo: Soporte 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*
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:
Puesto que la capa de persistencia del portal se realiza a través del framework
Hibernate 3, 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
44
HQL (propio de Hibernate), es éste quien realiza las traducciones para los
diferentes dialectos de base de datos: Oracle, PostgreSQL, MySQL…
1.2.1. 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.
FIREWALL
DMZ
Servidor Web
APACHE
:3306
FIREWALL
Interno
Servidor Aplicaciones
JBOSS
Servidor de BBDD
MYSQL
:3306
Red De Almacenamiento
Servidor MySQL
Una vez instalado el servidor MySQL (por ejemplo, versión 5.0.22 o superior)
procederemos de la siguiente manera:
45
# 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.
46
# 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
#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
47
# Uncomment the following if you are using BDB tables
#bdb_cache_size = 64M
#bdb_max_lock = 100000
[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
2. Arrancamos el demonio
En los casos de Linux, generalmente se ha creado un script de arranque en
/etc/init.d/. Ejecutamos el siguiente comando:
/etc/init.d/mysqld start
48
create database agrega;
flush privileges;
flush privileges;
• CrearTablas.sql
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
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).
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.
49
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:
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:
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:
50
Si existieran varios servidores de aplicación JBoss en cluster, todos y cada uno de
ellos establecerían la conexión con el servidor de directorios LDAP.
1.3.1. OpenLDAP
#
# 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
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.
51
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
• 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.
slapadd -l cargaInicial.ldif
52
dn: dc=agrega,dc=indra,dc=es
dc: agrega
objectClass: dcObject
objectClass: organization
o: agrega
dn: cn=Administrador,dc=agrega,dc=indra,dc=es
objectClass: organizationalRole
cn: Administrador
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
53
• Puerto de conexión: normalmente 389
• Bind DN: cn=Administrador,dc=agrega,dc=indra,dc=es
• Bind Password: la contraseña que hemos especificado.
2. Capa de aplicación
• 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.
• JBossAS: el portal Agrega (desarrollo J2EE 1.4) se puede desplegar sobre el
servidor de aplicaciones JBoss. Modificando manualmente configuraciones y
agregando un servidor de colas JMS como Apache ActiveMQ también se
podría desplegar sobre Tomcat.
• 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 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:
java -version
54
2.1.1. 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:
Parámetro Descripción
-Xms Establecemos el tamaño mínimo de pila
-Xmx Establecemos el tamaño máximo de pila
Tamaño de la generación permanente.
-XX:MaxPermSize
Se necesita para la carga de los metadatos de las clases.
-XX:ThreadStackSize Tamaño de la pila de threads (en KBytes)
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 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.
55
Existe una tercera generación denominada permanent generation. En ella se
mantienen los datos necesarios para la JVM que describen los objetos que no
tienen una equivalencia 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).
Las recomendaciones oficiales de Sun para el uso de los distintos recolectores son
las siguientes:
Garbage
Recomendación
Collector
Se emplea cuando se desea mejorar el rendimiento de la aplicación y
disponemos de múltiples procesadores. Las recolecciones mayores o
Throughput
completas son iguales que en el recolector serie, sin embargo, en un
collector
host con N CPUs, usará N hilos recolectores para las recolecciones
menores o parciales.
Si la aplicación puede permitirse compartir los recursos de
Concurrent procesadores con el recolector mientras se está ejecutando podemos
low pause beneficiarnos de menores pausas durante la recolección. Típicamente
collector las aplicaciones que tienen datos que permanecen en memoria
durante bastante tiempo y con uno o dos procesadores.
El modo incremental se consigue gracias a que el trabajo realizado
Incremental concurrentemente por el recolector se divide en pequeñas porciones
low pause de 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.
56
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.
Apertura de ficheros
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:
net.core.somaxconn = 4096
Es necesario reiniciar el servidor para que ambos cambios efectuados sean tenidos
en cuenta.
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
57
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.
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
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…).
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.
58
/etc/init.d/jboss y run.sh
JBOSS_HOME=/opt/jboss
JBOSS_USER=jboss
#!/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.
#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"}
59
# ensure the file exists
touch $JBOSS_CONSOLE
if [ ! -z "$SUBIT" ]; then
chown $JBOSS_USER $JBOSS_CONSOLE
fi
fi
if [ ! -d "$JBOSS_HOME" ]; then
echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME
exit 1
fi
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
• ./etc/jboss.conf
60
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).
En el fichero $JBOSS_HOME/server/default/deploy/jbossweb-
tomcat55.sar/server.xml se configuran los parámetros de los conectores HTTP y
AJP:
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).
61
HTTP
Descripción Valor por
Parámetro
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 número de milisegundos que el conector
60.000
connectionTimeout esperará, después de aceptar una conexión, hasta
(60 sg)
que se le solicite la petición de URI.
Este flag permite al contenedor de servlets usar un
disableUploadTimeout tiempo máximo de espera diferente mientras se true
esta ejecutando el servlet.
Define el tamaño máximo de la cabecera HTTP de 4096
maxHttpHeaderSize la petición y de la respuesta (especificado en bytes (4
bytes). 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 50
pool de hilos comienza a parar los hilos
innecesarios.
El máximo número de hilos procesadores de
peticiones creados por el conector. Determina el
maxThreads 200
máximo número de peticiones simultáneas que
pueden ser procesadas.
Número de hilos procesadores de peticiones
minSpareThreads 4
creados cuando el conector arranca.
El puerto TCP sobre el cual el conector creará el
port socket servidor de Java esperando peticiones -
entrantes.
AJP
Valor por
Parámetro Descripción
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
maxSpareThreads peticiones sin usar que pueden existir hasta que el 50
pool de hilos comienza a parar los hilos innecesarios.
El máximo número de hilos procesadores de
peticiones creados por el conector. Determina el
maxThreads 200
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.
El puerto TCP sobre el cual el conector creará el
port socket servidor de Java esperando peticiones -
entrantes.
62
Datasources
Puesto que cada módulo que hace uso de la base de datos podría desplegarse en
un servidor JBoss diferente, atacando a una base de datos distinta, cada módulo
con acceso a base de datos tiene su propio datasource definido.
<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-class-
name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-
class-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>
-->
63
En concreto, si la instalación se realiza en un único JBoss se definirán los
siguientes 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:
2. Security Manager
Servicio que controla el acceso a los destinos a partir de una lista de
control de acceso.
3. Destination Manager
Servicio que mantiene todos los destinos que se han creado.
4. Persistence Manager
Servicio que se encarga de la persistencia de los mensajes almacenados en
las colas.
64
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.
…
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=A">
<depends optional-attribute-
name="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-attribute-
name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=C">
<depends optional-attribute-
name="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-attribute-
name="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-attribute-
name="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-attribute-
name="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-attribute-
name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
…
65
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í:
<server>
<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>
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 recurso real.
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"
>
66
</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.
• $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 dos
jars comunes a todos los módulos:
67
2.2.5. Directorio $JBOSS_HOME/informes
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. destinoInformesDir
Los informes planificados desde el planificador se almacenarán en esta
carpeta.
3. plantillasInformes
Las plantillas a partir de las cuales Birt genera los informes se encuentran
en esta carpeta.
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.
68
El tamaño de este directorio será elevado y variará en función de:
descargas
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
modificador
noticias
repositorio
rss
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.
galeriaimg
En el subdirectorio common se encuentran los iconos de las imágenes por defecto
(por ejemplo, el thumbnail (mini captura) para los recursos mp3, doc, pdf…
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.
modificador
69
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
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
Los rss generados por la plataforma permanecerán en éste directorio (ficheros
XML)
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:
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.
70
http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
<url>
<loc>http://<sitio>.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do</loc>
<lastmod>2008-05-19</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
…
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.
agrega.properties
authbackend.properties
cas.properties
dependentServer_EN.properties
dependentServer.properties
71
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
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:
• 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
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.
########## Idioma
idioma.selected=es
zona_horaria=CEST
########## Usuario administrador que no podra ser eliminado #############
rol_administrador=ADMINISTRADOR
72
########## Ip del servicio de auditoria
auditoria.host=localhost
auditoria.puerto=8080
########## Ip del servicio de administración de usuarios
admin.ws.host=localhost
admin.ws.puerto=8080
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
########################################################
###### 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
destinoInformesDir=informes/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
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=informeEstadoOdes
operacionesRealizadas=informeOperacionesRealizadas
nivelAgregacion=informeNivelAgregacion
coberturaCurricular=informeCoberturaCurricular
terminosBusqueda=informeTerminosBusqueda
odesUsuario=informeOdesUsuario
odesLicencias=informeOdesLicencias
usuarios=informeUsuarios
procesosPlanificados=informeProcesosPlanificados
masValorado=informeODEmasValorado
masMostrado=informeODEmasMostrado
masPrevisualizado=informeODEmasPrevisualizado
masDescargado=informeODEmasDescargado
73
tamanio=informeODEmasGrandes
#Nombre del informe con el catálogo de Agrega
informeCatalogo=CatalogoAgrega
#########################################################
####### Configuración para la galería de imágenes #######
#########################################################
###############################
74
####### Catalogos Agrega #######
###############################
catalogo.agrega=Plataforma Agrega
catalogo.mec=Catálogo unificado mec-red.es-ccaa de identificación de ODE
#################################
######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
#######################################
#####Identificador único de nodo#######
#######################################
idNodo=NODO20080422102550
#######################################
########Flag para nodo neutro##########
#######################################
neutro=false
En las comunidades este flag deberá estar siempre a false, controla las plantillas y
opciones del portal.
###################################
########## 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.
75
######## Correo de registro del cas ############################
# Correo del usuario que se encargará de dar de alta a los usuarios
correoCas=usuario@domino
#############################
########## 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
##########Version de la aplicacion
version=1.0.3
76
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
cas.http.url=http://cas-nodo.agrega.indra.es/cas
http.server=http://nodo.agrega.indra.es
Por último, el módulo CAS necesita conocer cuál es la URL del cas y la URL del
portal.
cas.properties
El fichero cas.properties únicamente contiene una línea en la que se especifica la
URL del 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
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
77
larioja.nodo=LR
madrid.nodo=MA
murcia.nodo=MU
navarra.nodo=NA
valencia.nodo=CV
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
78
Definimos con estas propiedades la periodicidad con la que se va a seleccionar un
ODE cualesquiera del repositorio, para generarse la captura diaria.
#######################################################################
# 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
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
79
# Url donde se dejarán los ficheros sitemap.xml. Deberá almacenarse en un directorio de
tal manera que
# 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/
Diversos parámetros necesarios para generar la URL que acceda a la ficha de los
ODEs.
80
i18n_va.properties
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:
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=
81
srvDescargasPort=
srvEmpaquetadorBasicoServicePort=
srvEntregarServicePort=
srvEstructurasEducativasServicePort=
srvFachadaAgregarServicePort=
srvFaqServicePort=
srvGeneracionDinamicaServicePort=
srvGestorArchivosServicePort=
srvGestorManifestServicePort=
srvHerramientaModificacionPort=
srvIndexadorServicePort=
srvInformeServicePort=
srvLocalizadorServicePort=
srvLogServicePort=
srvMonitorizarServicePort=
srvNodoServicePort=
srvNoticiasServicePort=
srvPlanificadorServicePort=
srvPublicacionServicePort=
srvRegistroPlanificadorServicePort=
srvSitemapServicePort=
srvTaxonomiaServicePort=
srvTesaurosServicesPort=
srvValidadorServicePort=
srvValidadorVDEXServicePort=
srvValoracionServicePort=
srvVocabulariosControladosServicePort=
log4j.xml
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.
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
<appender name="ServiceErrors"
82
class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/service-error.log"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
<category name="org.springframework">
<priority value="INFO"/>
</category>
<category name="ServiceErrorsLogger">
83
<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>
<root>
<priority value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
springldap.xml
En el fichero de configuración springldap.xml definimos la conexión al LDAP por
parte de los módulos del portal para autenticarse.
84
<property name="ldapTemplate" ref="ldapTemplate" />
</bean>
</beans>
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 validador-1.war
27 valoracion-1.war
28 visualizador-1.war
29 visualizadorcontenidos-F1.war
85
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:
<mbean code="org.jboss.deployment.scanner.URLDeploymentScanner"
name="jboss.deployment:type=DeploymentScanner,flavor=URL">
86
COLA JMS
Publicación
RMI
RemotingGalleryServer
else
convert Firefox
¡BOOM! ffmpeg
+
import
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:
La galería de imágenes, una vez que ha recibido la información del recurso del
ODE a capturar, el directorio y fichero a generar, invoca una shell del sistema
ejecutando el fichero 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.
Tanto los directorios como los scripts a invocar son configurables en el fichero
agrega.properties.
resizeimg.sh
El contenido del script resizeimg.sh es el siguiente:
#!/bin/bash
87
# constantes
UPLOADS_PATH=uploads/galeriaimg;
IMAGE_FINAL_SIZE=100x100;
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
mkdir -p $UPLOADS_PATH/$3/$1/
#echo "Copio el fichero [$2] en [$UPLOADS_PATH/$3/$1/]"
#cp $2 $UPLOADS_PATH/$3/$1/
echo "Convirtiendo la imagen $2 al formato JPG en
$UPLOADS_PATH/$3/$1/$1_captured.jpg ..." `date`
convert -resize 800x600 "$2" $UPLOADS_PATH/$3/$1/$1_captured.jpg
echo "[OK] Imagen convertida correctamente" `date`
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;
88
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
mkdir -p $UPLOADS_PATH/$3/$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/$1/$1_captured.jpg ..." `date`
convert "$2" $UPLOADS_PATH/$3/$1/$1_captured.jpg
echo "[OK] Imagen convertida correctamente" `date`
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/$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/75dpi/ -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/$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
Con ayuda del comando file y awk obtenemos el tipo de recurso que deseamos
89
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).
• awk
• Xvfb
• ImageMagick
• FFmpeg
• Xfonts-100dpi
• Xfonts-75dpi
• Xfonts-base
• Plugin de flash para el mozilla-firefox
90
Extension2=/opt/jboss/.mozilla/firefox/a6czhy0t.default/
extensions/{bfe3406c-6f31-4789-86d5-efa50e12c9eb}
• 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.
• 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 muy a menudo, se propone el uso de un Proxy
cache como Squid. Otras opciones como habilitar el módulo de caché de
Apache o la caché cualquier otro servidor web serían totalmente válidas.
3.1. Apache 2
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
JBoss (puerto 8009), y también abrirá conexiones a la base de datos para la
MediaWiki. Gráficamente podemos verlas en la siguiente figura:
91
3.1.1. Módulos Apache necesarios
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 necesita directamente
el portal Agrega:
92
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"
…
<IfModule prefork.c>
StartServers 20
MinSpareServers 20
MaxSpareServers 20
ServerLimit 400
MaxClients 400
MaxRequestsPerChild 0
</IfModule>
<IfModule worker.c>
StartServers 2
MaxClients 400
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Include conf.d/*.conf
Include vhosts.d/*.conf
93
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:
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).
mod_jk.conf
En el caso de especificar el fichero de mod_jk.conf en el directorio conf.d
mediante la sentencia include en el httpd.conf, el fichero mod_jk.conf tendría el
siguiente contenido:
# JkRequestLogFormat
94
JkRequestLogFormat "%w %V %T"
Las tres líneas resaltadas son aquellas susceptibles a ser modificadas en cada
CCAA, especificando:
vhost
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:
<VirtualHost *:80>
DocumentRoot "/export/ccaa/<sitio>/uploads"
ServerName <nodo>
ServerAlias <nodo> <nodo>.agrega.indra.es
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.
95
Definimos los siguientes alias:
Definimos el resto de los alias usados en el portal. La mayor parte de ellos apuntan
a directorios contenidos dentro de uploads.
# security
# forbid default access to filesystem locations
<Directory />
Order Deny,Allow
Deny from all
Options FollowSymLinks
AllowOverride None
php_flag engine off
</Directory>
• AllowOverride None
Ignoramos los ficheros .htaccess para evitar que sobrescriban políticas de
seguridad.
96
• 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>
<Directory "/export/wiki/wiki/">
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
97
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>
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]+)/ /visualizador-
1/Visualizar/Visualizar.do?identificador=$1&secuencia=false [L,PT]
RewriteRule ^/idODE/(.*) /visualizador-
1/Visualizar/Visualizar.do?identificador=$1&secuencia=false [L,PT]
98
/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]
#JkLogLevel debug
<VirtualHost *:80>
99
ServerName cas-<nodo>.agrega.indra.es
</VirtualHost>
Por ultimo se define un virtual host para el cas mediante protocolo seguro (HTTPS,
443):
<VirtualHost *:443>
ServerName cas-<nodo>.agrega.indra.es
</VirtualHost>
Por todo ello, se trata de una aplicación disjunta del portal con una base de datos
diferente a la del portal, en la que no se comparte directamente la información
entre ambas aplicaciones.
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
100
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:
/export/wiki/LocalSettings.php
Almacena toda la configuración de la wiki, entre los parámetros más importantes
destacamos los siguientes:
$wgDBserver = "servidor";
$wgDBname = "wikidb";
$wgDBuser = "usuario_wiki";
$wgDBpassword = "pass_wiki";
$wgDBprefix = "";
$wgDBtype = "mysql";
$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 Prefijo
Castellano Es
Catalán Ca
Euskera Eu
Gallego Gl
Inglés En
Valenciano Ca
101
<Directory "/export/wiki/wikies/">
Options None
AllowOverride None
Order Deny,Allow
Allow from all
php_flag engine on
</Directory>
3.2.3. Internacionalización
Idioma Prefijo
Castellano /wiki
Catalán /wiki-ca
Euskera /wiki-eu
Gallego /wiki-gl
Inglés /wiki-en
Valenciano /wiki-va
102
Un usuario 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), que 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 solicitado no se encuentra en la
cache del ISP se pedirá a través de Internet el recurso, 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 en primer lugar la del navegador del
usuario, luego al del ISP y por último la de la CCAA.
• 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
103
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=62F1FE67D9BCC35F09C7EF4DF0521
D48 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
104
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
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
105
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
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
106
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
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
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
107
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
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
----------------------------------------------------------
http://redes.agrega.indra.es/static/img/cabecera.jpg
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
108
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
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
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
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
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
110
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: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
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
Connection: Keep-Alive
Content-Type: image/gif
----------------------------------------------------------
http://redes.agrega.indra.es/static/img/01_castellano.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:21:26 GMT
111
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
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
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
112
----------------------------------------------------------
http://redes.agrega.indra.es/static/img/barra_general_der.gif
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
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
113
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, 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
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"
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
114
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: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
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
HTTP/1.x 200 OK
Date: Tue, 30 Sep 2008 07:56:32 GMT
115
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
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
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
116
Connection: Keep-Alive
Content-Type: image/gif
----------------------------------------------------------
http://redes.agrega.indra.es/static/img/00_logo_europa.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, 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
----------------------------------------------------------
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
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
117
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
----------------------------------------------------------
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.
118
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=BUSCAD
OR
GET
/buscador/DescargarODECU/SeleccionarTipoFormatoAceptar.do?formato=descargar.format
os.SCORM_2004_VALUE&idioma=es&titulo=Clasifica+aparatos+y+Palabras+locas&identificad
orODE=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&mostrarVuelta=t
rue
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
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
Keep-Alive: 300
Connection: keep-alive
Referer:
http://redes.agrega.indra.es/buscador/DescargarODECU/DescargarODECU.do?identificador
119
ODE=es_20071214_2_0102201&idioma=es&tipoLayoutBuscador=BUSCADOR&mostrarVuelta=t
rue
Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48
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
----------------------------------------------------------
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.
120
Con este parámetro indicamos donde queremos que se almacene la caché de
Squid.
cache_access_log /var/log/squid3/access.log
cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log
hierarchy_stoplist cgi-bin ?
121
acl mipc src 172.22.44.112/255.255.255.0
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".
Tipos de acl:
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 cgi-bin \?").
Permite establecer en las "acl's" los permisos para las peticiones ICP.
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
122
comando:
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j
REDIRECT --to-port 3128
Para comprobar que Squid está cacheando podemos ver que los directorios donde
se ha establecido que se cachee (por defecto /var/spool/squid/) van aumentando
de tamaño a medida que se navega a través del proxy.
123
Formación para técnicos
Manual módulo 4
Administración
124
Índice
Administración
1. Contenidos
1.1 . Noticias
1.2 . Descargas
2. Plataforma
2.1. Nodo
2.2. Usuarios
2.3. Logs
2.4. Informes
2.5. Planificador
2.6. Modificador
2.7. Monitorizador
3. Configuración
3.1. Publicador
3.2. Catalogador
125
Módulo 4. Administración
Objetivos y contenidos
• Objetivos
• Contenidos
− Contenidos.
− Plataforma.
− Configuración.
126
1h Explicación del contenido
Desde este apartado es posible llevar a cabo una planificación de tareas con el fin
de ejecutarlas o administrarlas posteriormente en la plataforma (por ejemplo, una
carga masiva de objetos digitales educativos, elaboración de noticias, etc.).
• Contenidos
• Plataforma
• Configuración
1. Contenidos
1.1. Noticias
Los campos que componen el formulario de Noticias son: título, fecha, resumen,
cuerpo, idioma, categoría, imagen y estado. A la hora de crear una noticia hay
que tener en cuenta que todos estos campos son obligatorios excepto el campo
Imagen.
127
1.2. Descargas
Desde esta pantalla se pueden crear, modificar y eliminar las descargas. Éstas
pueden estar activadas o no, apareciendo en la página principal de descargas
solamente aquellas que están activas.
El software que hace que las herramientas Agrega funcionen en el PC está basado
en la tecnología Java J2EE. El uso de esta tecnología y las condiciones implícitas
de las herramientas hacen que los requisitos para utilizar Agrega off-line sean los
siguientes:
• Requisitos hardware:
• Requisitos software:
128
1.2.3. Procedimiento de instalación
Para poder utilizar las herramientas Agrega en tu ordenador, ve al menú Inicio ->
Programas -> Agrega, y ejecuta Iniciar Servidor. Este enlace iniciará la aplicación
que contiene las herramientas. El proceso puede ser un poco lento dependiendo
del equipo.
Una vez se ha iniciado el servidor, ve a Inicio -> Programas -> Agrega, y ejecuta
Herramientas–Agrega. Se abrirá entonces el navegador Web por defecto con la
pantalla principal de las herramientas Agrega:
129
almacenado en tu ordenador. El objeto debe estar en formato comprimido.
• Visualizar ODE: permite visualizar los contenidos de un ODE en formato
comprimido almacenado en tu ordenador.
• Validar ODE: pasa una validación de contenidos y metadatos a un ODE
comprimido almacenado en tu ordenador. La validación garantiza que un
ODE está listo para ser publicado en la plataforma Agrega (previa
aprobación del publicador de la plataforma).
• Herramienta de modificación: permite crear y ejecutar tareas para la
modificación y/o validación en bloque de múltiples ODEs.
• Configurar Datos de Usuario. Configura la aplicación para personalizar los
siguientes parámetros:
- Datos personales de usuario: se usan para los datos automáticos de
catalogación.
- Tipo de empaquetador/catalogador: permite elegir entre usar las
herramientas avanzadas o básicas.
- Idioma: permite seleccionar el idioma en que desea usar las
herramientas.
Las opciones Abrir, Visualizar y Validar ODEs solicitan al usuario que seleccione un
ODE almacenado en el ordenador. Para asegurar que el objeto cumple los
estándares necesarios para operar con las herramientas, el objeto en cuestión
debe pasar una validación. En caso de que la validación no se supere, se muestra
una pantalla con los errores encontrados.
A continuación, se detallan dos de los problemas más comunes que pueden surgir
durante la instalación o el uso del paquete de herramientas Agrega:
Necesitas tener una máquina virtual de Java instalada (JRE 1.5 o superior) y
una variable de entorno apuntando a la carpeta donde está instalada, por
ejemplo: C:\Archivos de programa\Java\jre1.6.0_06.
130
Para configurar una variable de entorno en Windows, abre el Panel de
control y selecciona Sistema. En la pestaña Opciones Avanzadas, pulsa
Variables de entorno. Si no tienes ninguna variable JRE_HOME (o
JAVA_HOME) creada, crea una con el directorio donde se encuentre
instalada la JRE (o JDK) de Java.
Al igual que ocurre en Noticias, desde esta pantalla se pueden administrar las
preguntas frecuentes o FAQ´s.
Para crear una FAQ se pulsa sobre el botón Crear, apareciendo una pantalla con
los distintos campos: pregunta, respuesta, idioma y categoría. Todos los campos
son obligatorios excepto el idioma.
131
3h Explicación del contenido
2. Plataforma
2.1. Nodo
Se encarga de administrar los nodos que cada comunidad tiene para conectarse a
la aplicación. En esta administración, se pueden crear nodos nuevos, y modificar y
eliminar nodos ya existentes.
132
• Comunidad Autónoma: hay que elegir el nombre de la comunidad
autónoma a la que corresponde el nodo.
Los tres primeros campos son obligatorios. Por otra parte, conviene recordar que
la url del nodo y la url del Web Service suele ser la misma.
Al pulsar sobre el botón Modificar, se pueden cambiar los datos de un nodo creado
previamente.
2.2. Usuarios
También se pueden ordenar los usuarios por orden alfabético (tanto ascendente
como descendente) pinchando en la cabecera de la columna Usuarios.
Al pulsar el botón Crear Usuario puedes dar de alta a un usuario. Para ello, tan
sólo es necesario rellenar dos formularios: el primero se compone de los datos
personales, datos de acceso y preferencias, y el segundo, con los grupos de
usuarios a los que pertenece dicho usuario. Los campos marcados con asterisco (*)
son obligatorios.Una vez que haya finalizado el proceso de alta de un usuario, se le
enviará un e-mail al usuario con sus datos de acceso.
133
2.2.3. Modificar usuario
Al pulsar sobre el botón Modificar, podrán modificarse todos los datos del usuario.
Esta parte se compone de tres pantallas: la primera con los datos personales,
datos de acceso y preferencias; una segunda pantalla con los grupos de usuario
asignados al propio usuario, y la última pantalla que confirma que se han
modificado los datos del usuario.
En esta pantalla se podrán ver los datos del usuario: datos personales, datos de
acceso, preferencias y grupos.
En esta pantalla (Inactivos) se listan los usuarios que están inactivos. Desde el
listado se pueden ver los detalles del usuario y activar uno en concreto.
2.3. Logs
En esta pantalla se muestran los logs disponibles, que pueden verse o descargarse
en caso de consulta. En el listado se muestra el nombre del log, con la fecha
concatenada, y su tamaño.
2.4. Informes
En esta pantalla aparece una lista con los informes generados a través de las
tareas creadas desde el planificador. Los informes se pueden visualizar pulsando
sobre su nombre, así como eliminar, seleccionándolos y pulsando en Eliminar.
134
2.4.1. Crear informes
El informe podrá visualizarse una vez que se elija el tipo de informe y se rellenen
los datos correspondientes.
135
• Procesos ejecutados. Es este informe se listan las tareas planificadas
de la aplicación y su estado.
• Contenidos digitales educativos más valorados. Este informe muestra
cuáles son los contenidos digitales educativos más valorados por los
usuarios de la aplicación.
• Contenidos digitales educativos más mostrados. Este informe muestra
cuáles han sido los contenidos digitales educativos que más se han
mostrado dentro de la aplicación.
• Contenidos digitales educativos más previsualizados. Este informe
muestra cuáles han sido los contenidos digitales educativos que más se
han previsualizado dentro de la aplicación.
• Contenidos digitales educativos más descargados. Este informe
muestra cuáles han sido los contenidos digitales educativos que más se
han descargado.
• Contenidos digitales educativos más grandes. Este informe muestra
cuáles han sido los contenidos digitales educativos más grandes.
2.5. Planificador
Este módulo se encarga de las tareas utilizadas para el mantenimiento del portal,
tales como la carga de ODEs, reindexado, eliminar ODEs, generar tareas de
informes, etc.
2.5.1. Pendientes
Muestra un listado con todas las tareas que están pendientes de ser ejecutadas o
aquellas que habiéndose ejecutado tienen algún tipo de periodicidad.
136
Desde esta pantalla se puede ejecutar una tarea manualmente; en este caso la
tarea permanecerá pendiente hasta que no se cumpla la fecha de ejecución. Las
tareas pendientes se pueden modificar, pudiendo cambiar sólo algunos de sus
campos, ejecutar manualmente y eliminar.
En esta pantalla (Crear Tarea) todos los campos son obligatorios. Los campos que
aparecen son:
137
• Carpeta ODEs: se indica dónde están los ODEs que se van a cargar.
• Carpeta ODEs correctos: se indica dónde se van a guardar los ODEs
correctos.
• Carpeta ODEs erróneos: se indica dónde se van a guardar los ODEs
incorrectos.
Los tres campos son obligatorios. Es importante saber que los nombres de los ODEs
no deben tener ni acentos ni eñes. También es aconsejable que el nombre de los
ODEs sólo contenga código ASCII.
138
2.5.1.5. Crear Tarea Informe de fechas
Podrán modificarse (Modificar) las fechas de inicio y fin de la tarea, así como el
formato en que pretende mostrar el informe.
139
Podrán modificarse (Modificar) todos los parámetros de esta pantalla.
Para eliminar una tarea, se selecciona la tarea que se quiere eliminar y se pulsa
sobre el botón Eliminar.
2.5.2. Ejecutándose
Muestra un listado con las tareas que se están ejecutando en ese momento. Si no
hay ninguna tarea en ejecución también se indica. Las tareas en ejecución se
pueden detener (Detener) pero no desaparecerán, quedando éstas registradas en
Ejecutadas.
2.5.3. Ejecutadas
Lista las tareas (trabajo) que se han ejecutado, mostrando la fecha en que se ha
ejecutado la tarea y el estado que ha tomado ésta (correcto/error/interrumpido).
Si una tarea se ejecuta de forma periódica, ésta aparecerá en el listado tantas
veces como se haya ejecutado. Desde este listado las tareas también se pueden
eliminar (Eliminar).
Desde el listado de tareas se puede consultar un informe (Ver informe) acerca del
desarrollo de la tarea.
140
2.5.3.1. Informe Tarea
Para las tareas de carga de ODEs se puede consultar un informe sobre el desarrollo
de dicha tarea y ver si los ODEs se han cargado correctamente
(correcto/error/interrumpido).
2.6. Modificador
141
...
</objects>
</modification-task>
El bloque changes engloba los cambios que se van a ejecutar sobre cada objeto. El
bloque objects lista los objetos (carpetas de ODEs o localizaciones de ODEs
individuales) que se van a modificar.
<addition>
<lom-term>lom.technical.format</lom-term>
<new-value><![CDATA[<format>image/vnd.microsoft.icon</format>]]></new-
value>
<term-type>otro</term-type>
<main-lom-only>true</main-lom-only>
</addition>
La adición de un término LOM-ES requiere proporcionar cuatro parámetros:
- Termino LOM-ES (lom-term): ruta XML del término LOM-ES que se desea
añadir. El formato para indicar la ruta son los nombres de las etiquetas
separadas por puntos (desde la etiqueta principal lom hasta la etiqueta
del término a añadir).
- Valor (new-value): código XML del término que se desea añadir.
Recuerda que para incorporar código XML dentro de un XML debes
encerrarlo en un bloque <![CDATA[...]]> o escapar los caracteres
reservados.
- Tipo de término: (term-type): para la adición de nuevos términos se
permite configurar la adición de nuevos árboles curriculares o tesauros
como casos especiales. Esto permite insertarlos en el campo
classification adecuado (purpose = discipline). Los valores disponibles
para el tipo de termino son arbol-curricular, etb y otro.
- Alcance de metadatos (main-lom-only): Permite especificar si el cambio
se realizara sobre el metadato principal del objeto (true) o sobre todos
los metadatos encontrados en el manifiesto del objeto (false).
142
<removal>
<lom-term>lom.rights.description.string</lom-term>
<value>aa</value>
<language>es</language>
<reg-exp>false</reg-exp>
<main-lom-only>true</main-lom-only>
</removal>
Los parámetros necesarios para configurar una eliminación son los mismos
que para configurar una comprobación de término (Ver Comprobación de
término LOM-ES).
<check>
<lom-term>lom.technical.duration.description.string</lom-term>
<value>.*duraci[oó]n.*</value>
<language>es</language>
<reg-exp>true</reg-exp>
<main-lom-only>true</main-lom-only>
</check>
El significado de los términos del código es el siguiente:
143
<modification>
<lom-term>lom.technical.format</lom-term>
<value>application/document</value>
<new-value>application/msword</new-value>
<reg-exp>false</reg-exp>
<replace-all>true</replace-all>
<main-lom-only>true</main-lom-only>
</modification>
<validation/>
La validación de objetos no requiere argumento ni configuración adicional.
El bloque objects permite definir las rutas que servirán para buscar los ODEs que
van a ser modificados por esta tarea. Un ejemplo de configuración es:
<objects>
<folder>
<path>carpeta1/carpeta2</path>
</folder>
<ode>
<published>false</published>
<path>carpeta1/carpeta2/ode1.zip</path>
</ode>
<ode>
<published>true</published>
<path>carpeta1/carpeta2/ode</path>
</objects>
144
El significado de los términos del código es el siguiente:
Ejemplo de tarea
145
</removal>
</changes>
<objects>
<folder>
<path>carpeta1/carpeta2</path>
</folder>
</objects>
</modification-task>
2.6.1. Pendientes
La pantalla inicial del modificador muestra un listado con las tareas configuradas
(no ejecutadas):
146
Una vez que se ha introducido el nombre de la tarea se pulsa en Continuar.
Aparece entonces una pantalla con los elementos configurables en una tarea de
configuración: Cambios y Objetos.
Los cambios son operaciones sencillas a aplicar sobre cada objeto (ODE), como
pueden ser modificaciones de uno o varios términos LOM-ES, validaciones,
comprobaciones, etc.
Los objetos son las localizaciones donde se encuentran los ODEs que se desean
modificar. Se configuran las localizaciones, ya que los objetos se identifican en el
momento de ejecutar la tarea.
147
En esta pantalla se selecciona el tipo de cambio u operación que se desea
configurar. En el caso de seleccionar Validación, la configuración de la tarea
finaliza, ya que este tipo de operación no necesita de más información.
Los campos Valor, Expresión Regular e Idioma establecen el filtro de búsqueda del
término cuyo valor se desea modificar. El comportamiento es el mismo que para
Comprobar término o Eliminar término. Del mismo modo ocurre con el campo
148
Alcance metadatos.
El campo Tipo permite especificar si el término que se desea añadir es una rama
de árbol curricular o de tesauro, o cualquier otro término. Si se selecciona Otro,
se pasa a la pantalla de selección de término LOM-ES y, a continuación, se
presenta un formulario específico para añadir un término LOM-ES.
Para añadir un término LOM-ES es necesario introducir el código XML del término
que se desea insertar. En el formulario se ofrece una plantilla del término
seleccionado, que tan sólo es necesario modificar para establecer los valores
deseados.
• <value>family</value>
Para insertar un árbol curricular en el ODE basta con seleccionar la rama deseada
en la pantalla de navegación del árbol curricular. Una vez seleccionada, el cambio
para añadir el término queda seleccionado.
149
2.6.1.11. Añadir término (ETB)
Al igual que en el caso del árbol curricular, para añadir una rama del tesauro o ETB
basta con navegar en el árbol del tesauro hasta seleccionar la rama deseada.
150
realizar una búsqueda con comodines).
• Título: realiza la búsqueda por palabras en el título del ODE (comodines
permitidos).
• Autor: realiza la búsqueda por el nombre del autor.
• Fecha de publicación: busca los ODEs publicados en el rango de fechas
especificado.
Una vez que se lanza la búsqueda se muestra un listado con los ODEs que coinciden
con los criterios de búsqueda.
2.6.2. Ejecutándose
2.6.3. Ejecutadas
En esta pantalla se muestra un listado con las tareas que se han ejecutado y con el
resultado obtenido. Los resultados posibles son:
151
• Revisar: la tarea ha finalizado sin errores, pero la herramienta
recomienda revisar las trazas de todos o alguno de los ODEs.
• Error: la tarea no se ha ejecutado correctamente. Esto significa que
alguno de los ODEs (o todos) no se han modificado correctamente y, por
tanto, los cambios no se han aplicado a los ODEs. Los ODEs que se hayan
modificado correctamente pueden ser restaurados desde la pantalla de
informes.
La funcionalidad disponible en esta pantalla es la siguiente:
2.7. Monitorizador
152
Indica el estado de los diferentes nodos que componen la aplicación, así como el
estado de los diferentes servicios de cada nodo: Buscar, Entregar y Validar.
Se listan todos los grupos creados en la aplicación. Desde esta pantalla se puede
crear un grupo nuevo, eliminar grupos ya existentes, modificar grupos y ver la
descripción de cada uno de ellos.
Los grupos que aparecen en esta pantalla pueden ser exportados a un documento
Excel o PDF, a través de los enlaces que hay debajo del listado de grupos. El
listado también permite la ordenación de los grupos por orden alfabético (tanto
ascendente como descendente) pinchando en la cabecera de la columna Grupos.
Desde esta pantalla se puede dar de alta a un grupo. Para ello se deben rellenar
dos pantallas: la primera con el nombre del grupo, y la segunda con los permisos
disponibles en la plataforma.
Permite modificar los datos de grupo. Al igual que en Crear grupo, deben
rellenarse dos pantallas: la primera con el nombre del grupo, y la segunda con los
permisos que pueden tener los grupos de usuarios.
En esta pantalla podrán verse los datos de un grupo, tanto el nombre como los
permisos asociados a dicho grupo.
153
en la que debemos verificar que queremos eliminar dichos grupos; y una segunda
pantalla de información, que contiene los grupos que han sido borrados o
eliminados de la aplicación.
Para añadir un nuevo árbol curricular a la aplicación, los requisitos que debe
cumplir dicho archivo son:
• Ser un archivo XML con formato VDEX, es decir, un estándar que define una
gramática necesaria para el intercambio de listas de valores, denotadas
como vocabularios. VDEX se utiliza, por tanto, para normalizar las
taxonomías y tesauros introducidos en Agrega, de forma que la plataforma
sea capaz de interpretarlos de forma análoga.
• Debe validar contra el VDEX de árbol curricular.
• El nombre del fichero debe acabar en _idioma, donde el idioma debe ser un
código ISO, por ejemplo: _en (inglés); _es (español); _ca (catalán); _eu
(euskera), etc.
Al subir un nuevo árbol curricular, el antiguo árbol curricular que coincida con el
idioma del nuevo árbol se cambia automáticamente al listado de taxonomías. En
este caso se podrá eliminar cualquier árbol curricular, excepto el que esté en
castellano. Para ello habrá que seleccionar el árbol que se quiere borrar y pulsar
sobre el botón Eliminar.
2.9.2. Taxonomía
Para añadir una nueva taxonomía, los requisitos que debe cumplir dicho archivo
son:
154
Para añadir la nueva taxonomía hay que pulsar en Añadir taxonomía y seleccionar
el fichero que se desea subir. Todas las taxonomías que se encuentren en esta
pestaña estarán disponibles en el catalogador avanzado, en la categoría de
Clasificación, siendo posible seleccionarlas con el fin de navegar por ellas y
recoger una ruta de taxones para los metadatos. En este caso es posible eliminar
cualquier taxonomía, seleccionándola y pulsando en el botón Eliminar.
2.9.3. Tesauro
Para añadir un nuevo tesauro los requisitos que debe cumplir dicho archivo son:
• Ser un archivo XML con formato VDEX, es decir, un estándar que define
una gramática necesaria para el intercambio de listas de valores,
denotadas como vocabularios. VDEX se utiliza, por tanto, para
normalizar las taxonomías y tesauros introducidos en Agrega, de forma
que la plataforma sea capaz de interpretarlos de forma análoga.
• Debe validar contra el VDEX de tesauro.
• El nombre del fichero debe acabar en _idioma, donde el idioma debe
ser un código ISO, por ejemplo: _en (inglés); _es (español); _ca
(catalán); _eu (euskera), etc.
Para añadir un nuevo tesauro hay que pulsar en Añadir tesauro y seleccionar el
fichero que se desea subir. A partir de este momento, el tesauro ETB que se
encuentra en esta pestaña será el tesauro ETB vigente para el nodo donde se haya
realizado el cambio.
En este caso es posible eliminar cualquier tesauro, excepto el que está en idioma
castellano. Para ello habrá que seleccionar el tesauro que se quiere borrar y pulsar
sobre el botón Eliminar.
3. Configuración
3.1. Publicador
155
publicar y a aquellos que están despublicados. Los ODEs publicados se pueden
rechazar o publicar; mientras que los ODEs despublicados se pueden eliminar o
volver a publicar. También se puede acceder al historial del ODE. Para publicar un
ODE es necesario ser un usuario con rol de publicador.
3.1.1. Rechazar
3.1.2. Publicar
156
La licencia se escoge de un desplegable con todas las licencias contempladas en la
plataforma. Por su parte, el ámbito se selecciona de la lista de nodos con los que
la plataforma Agrega está federada. En caso de seleccionar todos los nodos, el
ámbito será universal.
3.1.3. Despublicados
En esta pantalla se muestran todos los objetos que han sido despublicados en la
plataforma, además eliminar, publicar, modificar o ver el historial de los mismos.
También se puede acceder a una previsualización mediante el enlace del título.
3.2. Catalogador
Para publicar un ODE, hay que tener el rol de publicador; y para modificarlo
(Modificar), el de empaquetador. Se accede al módulo de empaquetador
(dependiendo de si el usuario es avanzado o básico) con el ODE seleccionado para
poder llevar a cabo las modificaciones que se consideren oportunas
Al pinchar sobre el enlace del ODE, se accede a una previsualización del mismo.
3.2.1. Proponer
Aparece la misma pantalla que cuando accedemos a ella desde el publicador (Ver
Publicador).
157
Crea una pregunta frecuente o FAQ con su correspondiente respuesta.
158
Formación para técnicos
Manual módulo 5
Operación
159
Índice
Contenido del módulo 5
1.1. JBoss
1.2. Servidor Web Apache
1.3. MySQL
1.4. LDAP
1.5. Servidor NFS
2. Ficheros de Log
2.1. JBoss
2.2. Apache
2.3. MySQL
2.4. LDAP
3. Backups
5. Tareas planificadas
7. Seguridad
8. Actualización MediaWiki
160
Módulo 5. Operación
Objetivos y contenidos
• Objetivos
• Contenidos
161
1h Explicación del contenido
1.1. JBoss
Arranque:
/etc/init.d/jboss start
Parada:
/etc/init.d/jboss stop
• -c default
- 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”.
• -b 0.0.0.0
- 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.
162
1.1.1. Eliminación despliegues anteriores
Arranque:
/etc/init.d/httpd start
Parada:
/etc/init.d/httpd stop
1.3. MySQL
Arranque:
/etc/init.d/mysql start
Parada:
/etc/init.d/mysql stop
163
1.4. LDAP
Arranque:
/etc/init.d/ldap start
Parada:
/etc/init.d/ldap stop
Arranque:
/etc/init.d/nfs start
Parada:
/etc/init.d/nfs stop
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…).
2.1. JBoss
164
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.
Ejemplo:
El log server.log a partir de las 00:00h, si sucede un evento que deba escribir en el
log 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="org.springframework">
<priority value="INFO"/>
</category>
<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>
<root>
<priority value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
165
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.
2.2. Apache
Opción Descripción
%h 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
%>s
*original* request --- %...>s for the last.
Size of response in bytes, excluding HTTP headers. In CLF format, i.e. a '-'
%b
rather than a 0 when no bytes are sent.
2.2.1. Mod_jk
166
# Where to put jk logs
JkLogFile "/var/log/httpd/mod_jk.log"
2.3. MySQL
mysqlbinlog log_file
2.4. LDAP
local4.* /var/log/openldap
167
Proyecta las diapositivas 113 a 116.
3. Backups
En el caso del backup completo, para restaurar un backup habría que borrar la
base de datos, crearla y posteriormente importar el dump:
168
3.2. OpenLDAP
Para hacer una restauración completa a partir del ldif generado los pasos serían los
siguientes:
A modo de ejemplo:
tar cvfp $BACKUP_DIR/backup.tar
$JBOSS_HOME/server/default/deploy/agrega/*.war
3.4. Índices
169
3.5. Informes
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.
3.7. Estáticos
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
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 (*).
170
Proyecta las diapositivas 117 a 124.
$wgDBserver = "localhost";
$wgDBname = "db";
$wgDBuser = "user";
$wgDBpassword = "pass";
• $JBOSS_HOME/server/default/conf/authbackend.properties
• $JBOSS_HOME/server/default/conf/springldap.xml
171
4.4. Cambio de IP del JBoss
En caso de haber cambiado la IP del servidor web Apache, será necesario tenerlo
en cuenta en el fichero /etc/hosts del servidor JBoss.
5. Tareas planificadas
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.
5.2. Tareas
172
5.2.1. Carga de ODEs
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 JBossAS y deben estar creadas en el
momento de configurar la tarea. Dichas carpetas son:
5.2.2. Reindexado
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.
5.2.4. Informes
173
1h Explicación del contenido
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 número de contenidos digitales que como máximo
saldrán en cada uno de los informes se pueden modificar dentro del fichero
agrega.properties.
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.
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.
Por defecto esta tarea se lanza una vez al mes a las cinco de la mañana. El fichero
174
resultante con el catálogo se almacena en el directorio referenciado por el
atributo destinoInformesDir del fichero agrega.properties.
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 más mostrados en la última semana, en el último mes y el último
año. 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.
7. Seguridad
<!-- 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>
175
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>JBossAdmin</role-name>
</auth-constraint>
</security-constraint>
<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>
176
dotar al sistema de una mayor seguridad, y también más potencia.
• 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.
# 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.
177
15 min Explicación del contenido
8. Actualización MediaWiki
178
Formación para técnicos
Manual módulo 6
Integración
179
Índice
Integración
1. Introducción
2. WebServices publicados
2.1. Buscar
2.2. Entregar
3. OAI-PMH
3.1. Identify
3.2. ListMetadataFormats
3.3. Listsets
3.4. Listldentifiers
3.5. GetRecord
3.6. ListRecords
3.7. Errores
4. Gestor de sesiones
4.1. Alcance
4.2. Integración a través de WebServices
5. SQI
5.1. Alcance
5.2. Integración a través de WebServices
6. DRI
6.1. Alcance
6.2. Integración a través de WebServices
180
Módulo 6. Integración
Objetivos y contenidos
• Objetivos
• Contenidos
- Introducción
- WebServices publicados
- OAI-PMH
- Gestor de sesiones
- SQI
- DRI
181
5 min Explicación del contenido
1. Introducció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.
2. WebServices publicados
2.1. Buscar
182
2.1.1. WSDL
http://redes.agrega.indra.es/buscar-1/services/SrvBuscarService?wsdl
2.1.2. Ejemplo
Llamada:
<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>
<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>
</formato>
183
<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>
<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>
2.2. Entregar
2.2.1. WSDL
184
1/services/SrvEntregarService?wsdl
2.2.2. Ejemplos
Llamada:
------=_Part_1_31262813.1214307945828
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <08C458B838D1365A5864E6985429AF52>
185
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>
------=_Part_1_31262813.1214307945828
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <74D53F983C9A2A6730C4D468C80BF990> {…. contenido binario del
DataHandler…}
Llamada:
<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"/>
</resultadoValidacion>
</generarPaquetePIFReturn>
186
</generarPaquetePIFResponse>
</soapenv:Body>
</soapenv:Envelope>
Llamada:
------=_Part_8_24005374.1214321990043
Content-Transfer-Encoding: binary
Content-Id: <AD48DDF0E86D4BD7DC1D8883665A86>
187
</generarPaquetePIFTipoPIFReturn>
</generarPaquetePIFTipoPIFResponse>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_8_24005374.1214321990043
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <86JD2583DDE885DE5E5GF56H7HH331>
{…. contenido binario del DataHandler…}
3. OAI-PMH
3.1. Identify
188
nombre, la versión del protocolo, el correo del administrador de la plataforma,
etc.
3.1.1. Argumentos
http://urlRepositorioAgrega?verb=Identify
3.1.4. Ejemplo
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?v
erb=Identify
<baseURL>http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do</bas
eURL>
<protocolVersion>2.0</protocolVersion>
<adminEmail>email@indra.es</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>
189
<oai_id:sampleIdentifier>oai:agrega.es:identificadorMec</oai_id:sampleIdentifier>
</oai_id:oai-identifier>
</description>
</Identify>
</ OAI-PMH>
3.2. ListMetadataFormats
3.2.1. Argumentos
http://urlRepositorioAgrega?verb=ListMetadataFormats
3.2.4. Ejemplo
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?v
erb=ListMetadataFormats
<metadataNamespace>http://www.openarchives.org/OAI/2.0/oai_dc/</metadataNamesp
ace>
</metadataFormat>
</ListMetadataFormats>
</ OAI-PMH>
190
3.3. Listsets
3.3.1. Argumentos
http://urlRepositorioAgrega?verb=ListSets
3.3.4. Ejemplo
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?v
erb=ListSets
3.4. ListIdentifiers
3.4.1. Argumentos
191
selectiva de identificadores.
• until: Opcional. Fecha hasta la cual se quiere obtener la lista selectiva de
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 es el único tipo de metadato soportado.
• Set: Opcional. Identificador del conjunto.
• resumptionToken: Opcional. Token necesario para el control de flujo.
http://urlRepositorioAgrega?verb=ListIdentifiers&metadataPrefix=oai_
d
3.4.4. Ejemplo
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?v
erb=ListIdentifiers&metadataPrefix=oai_dc
192
<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>
3.5. GetRecord
3.5.1. Argumentos
http://urlRepositorioAgrega?verb=GetRecord&metadataPrefix=oai
_dc&identifier=identificadorRegistro
3.5.4. Ejemplo
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?v
erb=GetRecord&metadataPrefix=oai_dc&identifier=oai:agrega.es:es-
ic_20080410_1_9075517
193
<?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: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/OaiPmhRe
quest.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?i
dioma=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>
3.6. ListRecords
Devuelve todos los registros del repositorio. Permite argumentos como el rango de
fechas entre los que queremos recuperar los datos.
3.6.1. Argumentos
194
• 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 registros.
• 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.
http://urlRepositorioAgrega?verb=ListRecords&metadataPrefix=oai_dc
3.6.4. Ejemplo
http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?v
erb=ListRecords&metadataPrefix=oai_dc
195
<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?i
dioma=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>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?i
dioma=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
196
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?i
dioma=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>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?i
dioma=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
197
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?i
dioma=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>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?i
dioma=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>
198
<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?i
dioma=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>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?i
dioma=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>
199
<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>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?i
dioma=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>
<dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?i
dioma=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>
200
3.7. Errores
3.7.1. BadVerb
<request>http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do</requ
est>
<error code="badVerb">El argumento verb es incorrecto</error>
</OAI-PMH>
3.7.2. BadArgument
Indica que algunos de los parámetros de la petición no son correctos o falta alguno
obligatorio.
3.7.3. CannotDisseminateFormat
Mensaje de error que indica que el tipo de metadato no esta soportado por la
plataforma.
201
<error code="cannotDisseminateFormat">Tipo de metadato no soportado en la
plataforma</error>
</OAI-PMH>
3.7.4. idDoesNotExist
4. Gestor de sesiones
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.
202
4.1. Alcance
4.2.1. createSession
Ejemplo
Llamada:
203
</soapenv:Body>
</soapenv:Envelope>
<createSessionReturn>ff8080811ad87512011ad8a4084d0002</createSessionReturn>
</createSessionResponse>
</soapenv:Body>
</soapenv:Envelope>
4.2.2. createAnonymousSession
Ejemplo
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>
204
xmlns="http://Sesion.servicios.negocio.dri.pode.es">
<createAnonymousSessionReturn>ff8080811ad87512011ad8a4c2220003</createAno
nymousSessionReturn>
</createAnonymousSessionResponse>
</soapenv:Body>
</soapenv:Envelope>
4.2.3. destroySession
Ejemplo
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>
205
1h Explicación del contenido
5. SQI
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.
5.1. Alcance
206
intercambio de mensajes SOAP sobre el protocolo HTTP.
5.2.1. getTotalResultsCount
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
Llamada:
207
<?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><getTotalResultsCountResponse
xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><getTotalResultsCountReturn>1</get
TotalResultsCountReturn></getTotalResultsCountResponse></soapenv:Body></soapenv:Env
elope>
5.2.2. setMaxDuration
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
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>
208
<?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>
5.2.3. setResultsFormat
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 los resultados de
búsqueda no soportado o cualquier otro error no contemplado.
Ejemplo
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>
209
<?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>
5.2.4. setResultSetSize
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 método configura el tamaño del conjunto de
resultados de búsqueda.
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.
Ejemplo
<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>
210
<?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>
5.2.5. setQueryLanguage
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.
Ejemplo
<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>
211
<?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>
5.2.6. setMaxQueryResults
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.
Ejemplo
212
e>
5.2.7. synchronousQuery
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, modo de invocación no soportado,
tamaño inválido del conjunto de resultados, sentencia de consulta inválida u otro
error no contemplado.
Ejemplo
Respuesta: este método devuelve los metadatos de los contenidos digitales que
ajustan con la consulta suministrada.
213
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:Env
elope>
6. DRI
6.1. Alcance
214
• solicitar-entregar: se devuelve un objeto digital publicado dentro de la
plataforma.
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.
6.2.1. presentarAlmacenarSesion
Ejemplo
215
<?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--
6.2.2. presentarAlmacenar
Este método necesita como parámetro un usuario válido, su clave dentro del
sistema y el fichero que contiene el ODE que se pretende almacenar en formato
Pif.
Ejemplo
216
<?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--
6.2.3. SolicitarEntregarSesion
Ejemplo
217
</solicitarEntregarSesion>
</soapenv:Body>
</soapenv:Envelope>
------=_Part_1_17172160.1214825271850
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <DE89AF93EBB40323FBEF9CD025A66BCB>
6.2.4. solicitarEntregar
Ejemplo
218
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>
6.2.5. presentarCatalogarSesion
Ejemplo
219
------=_Part_5_14808011.1214826931450
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <6935E10DBEAC67589B877E24BCDEF3E5>
{…. contenido binario del DataHandler…}
------=_Part_5_14808011.1214826931450--
6.2.6. presentarCatalogar
Ejemplo
220
------=_Part_5_14808011.1214826931450--
221
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
Birt
http://www.eclipse.org/birt/phoenix/
DRI
http://www.imsglobal.org/digitalrepositories/driv1p0/imsdri_infov1p0.html#125621
5
FFmpeg
http://ffmpeg.mplayerhq.hu/
ImageMagick
http://www.imagemagick.org/script/index.php
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/
222
MySQL
http://dev.mysql.com/doc/refman/5.0/en/
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
Quartz
http://www.opensymphony.com/quartz
ReiserFS
http://es.wikipedia.org/wiki/ReiserFS
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
223