DOCUMENTO DE FORMACIÓN: MANUAL DEL CURSO TÉCNICO ver 1.3 Plataforma de objetos digitales educativos (AGREGA) Autor: Indra Sistemas Fecha: Abril del 2009 HISTORIA DEL DOCUMENTO Versión: V 1.1 Versión: V 1.2 Versión: V 1.3 Descripción: Creación del documento Elaborado por: Javier Bermejo del Valle Alicia Arribas Delgado Carlos Rubio Muñoz Francisco Javier Espino Revisado por: Calidad Aprobado por: Descripción: Adaptación para Tomcat + Oracle y Agrega 1.1.0 Elaborado por: Javier Bermejo del Valle Revisado por: Calidad Aprobado por: Descripción: Adaptación Agrega 1.1.1 Elaborado por: Javier Bermejo del Valle Revisado por: Calidad Aprobado por: Descripción: Adaptación Agrega 1.1.1 Elaborado por: Francisco Javier Espino Paisán Revisado por: Calidad Aprobado por: LISTA DE DISTRIBUCIÓN Nombre Equipo de Proyecto Equipo de Proyecto Localización Calidad Red.es Fecha: 15/09/2008 Alianza2 Fecha: 22/10/2008 Fecha: Alianza2 Fecha: 05/12/2008 Fecha: 09/12/2008 Fecha: Fecha: 18/12/2008 Fecha: 19/12/2008 Fecha: Fecha: 01/04/2009 Fecha: 02/04/2009 Fecha: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Versión: V 1.0 1 INDICE INTRODUCCIÓN .......................................................................................................................... 4 1.1. 1.2. 1.3. 2. OBJETIVO ............................................................................................................................... 4 ESTRUCTURA DEL MANUAL ............................................................................................. 4 ACRÓNIMOS .......................................................................................................................... 4 BLOQUE II: COMPONENTES DE LA PLATAFORMA ....................................................... 21 3.1. INTRODUCCIÓN .................................................................................................................. 21 3.2. CAPA DE DATOS ................................................................................................................. 21 3.2.1. SISTEMA DE FICHEROS .............................................................................................. 21 3.2.2. BASE DE DATOS ........................................................................................................... 25 3.2.3. AUTENTICACIÓN LDAP .............................................................................................. 32 3.3. CAPA DE APLICACIÓN ...................................................................................................... 36 3.3.1. JDK 1.6 ........................................................................................................................... 36 3.3.2. SERVIDOR DE APLICACIONES ................................................................................... 39 3.3.3. GALERÍA DE IMÁGENES ............................................................................................. 87 3.4. CAPA DE SERVIDOR WEB ................................................................................................. 91 3.4.1. APACHE 2 ...................................................................................................................... 92 3.4.2. AYUDA MEDIAWIKI ................................................................................................... 101 3.4.3. PROXY CACHE: SQUID ............................................................................................. 103 4. Alianza2 BLOQUE I: ARQUITECTURA FÍSICA Y LÓGICA DE LA PLATAFORMA...................... 6 2.1. INTRODUCCIÓN .................................................................................................................... 6 2.2. ARQUITECTURA FÍSICA ...................................................................................................... 7 2.2.1. APACHE ........................................................................................................................... 8 2.2.2. JBOSS APPLICATION SERVER / APACHE TOMCAT ................................................... 8 2.2.3. BASES DE DATOS: MYSQL, ORACLE ........................................................................... 8 2.2.4. LDAP ................................................................................................................................ 9 2.2.5. SERVIDOR DE FICHEROS: NFS .................................................................................... 9 2.2.6. RESUMEN CONEXIONES ESTABLECIDAS .................................................................. 9 2.3. ARQUITECTURA LÓGICA ................................................................................................. 10 2.3.1. INTRODUCCIÓN ........................................................................................................... 10 2.3.2. NODO DE OBJETOS DIGITALES EDUCATIVOS ....................................................... 12 3. Alianza2 BLOQUE III: OPERACIÓN Y MANTENIMIENTO DE LA PLATAFORMA .................. 124 4.1. ARRANQUE Y PARADA DE LOS APLICATIVOS .......................................................... 124 4.1.1. JBOSS ........................................................................................................................... 124 4.1.2. TOMCAT ...................................................................................................................... 125 4.1.3. SERVIDOR DE COLAS APACHE ACTIVEMQ ........................................................... 125 4.1.4. SERVIDOR WEB APACHE .......................................................................................... 126 4.1.5. MySQL .......................................................................................................................... 126 4.1.6. LDAP ............................................................................................................................ 126 4.1.7. SERVIDOR NFS ........................................................................................................... 127 4.2. FICHEROS DE LOG ............................................................................................................ 127 4.2.1. JBOSS ........................................................................................................................... 127 4.2.2. TOMCAT ...................................................................................................................... 128 4.2.3. APACHE ....................................................................................................................... 129 4.2.4. MySQL .......................................................................................................................... 130 4.2.5. LDAP ............................................................................................................................ 131 4.3. BACKUPS............................................................................................................................ 131 4.3.1. BASE DE DATOS ......................................................................................................... 131 4.3.2. OPENLDAP .................................................................................................................. 132 4.3.3. MÓDULOS WAR .......................................................................................................... 133 4.3.4. ÍNDICES ....................................................................................................................... 133 4.3.5. INFORMES................................................................................................................... 133 4.3.6. FICHEROS DE CONFIGURACIÓN DEL PORTAL .................................................... 133 4.3.7. ESTÁTICOS .................................................................................................................. 134 4.3.8. PROGRAMACIÓN DE BACKUPS EN CRON ............................................................. 134 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 1. 2 5. BLOQUE IV: INTEGRACIÓN CON LA PLATAFORMA .................................................. 143 5.1. INTRODUCCIÓN ................................................................................................................ 143 5.2. WEBSERVICES PUBLICADOS ......................................................................................... 143 5.2.1. BUSCAR ....................................................................................................................... 143 5.2.2. ENTREGAR .................................................................................................................. 145 5.3. OAIPMH .............................................................................................................................. 149 5.3.1. INTRODUCCIÓN ......................................................................................................... 149 5.3.2. IDENTIFY..................................................................................................................... 149 5.3.3. LISTMETADATAFORMATS ........................................................................................ 151 5.3.4. LISTSETS ...................................................................................................................... 152 5.3.5. LISTIDENTIFIERS ....................................................................................................... 152 5.3.6. GETRECORD ............................................................................................................... 154 5.3.7. LISTRECORDS ............................................................................................................. 156 5.3.8. ERRORES ..................................................................................................................... 162 5.4. GESTOR SESIONES ........................................................................................................... 163 5.4.1. INTRODUCCIÓN ......................................................................................................... 163 5.4.2. ALCANCE..................................................................................................................... 163 5.4.3. INTEGRACIÓN A TRAVÉS DE WEB SERVICES ........................................................ 164 5.5. SQI........................................................................................................................................ 166 5.5.1. INTRODUCCIÓN ......................................................................................................... 166 5.5.2. ALCANCE..................................................................................................................... 167 5.5.3. INTEGRACIÓN A TRAVÉS DE WEB SERVICES ........................................................ 168 5.6. DRI ....................................................................................................................................... 174 5.6.1. INTRODUCCIÓN ......................................................................................................... 174 5.6.2. ALCANCE..................................................................................................................... 175 5.6.3. INTEGRACIÓN A TRAVÉS DE WEB SERVICES. ....................................................... 176 6. REFERENCIAS ......................................................................................................................... 182 Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 4.4. MODIFICACIONES FRENTE A CAMBIOS FRECUENTES ............................................ 134 4.4.1. MODIFICACIÓN DE LA BASE DE DATOS DEL PORTAL AGREGA ....................... 135 4.4.2. MODIFICACIÓN DE LA BASE DE DATOS DE LA AYUDA MEDIAWIKI ................ 135 4.4.3. CAMBIO DE DATOS DE CONEXIÓN AL LDAP ........................................................ 135 4.4.4. CAMBIO DE IP DEL SERVIDOR DE APLICACIONES ............................................. 135 4.4.5. CAMBIO DE IP DEL SERVIDOR WEB APACHE ...................................................... 136 4.5. TAREAS PLANIFICADAS ................................................................................................. 136 4.5.1. PARÁMETROS DE CONFIGURACIÓN DEL PLANIFICADOR ................................ 136 4.5.2. TAREAS ........................................................................................................................ 136 4.6. GENERACIÓN AUTOMÁTICA DE FICHEROS............................................................... 137 4.6.1. GENERACIÓN DE LOS INFORMES DE PORTADA .................................................. 138 4.6.2. GENERACIÓN DE LOS FICHEROS SITEMAP .......................................................... 138 4.6.3. GENERACIÓN DEL CONTENIDO DINÁMICO DE LA PLATAFORMA ................... 138 4.6.4. GENERACIÓN DEL CATÁLOGO ............................................................................... 138 4.6.5. GENERACIÓN DE RSS ................................................................................................ 139 4.7. SEGURIDAD ....................................................................................................................... 139 4.7.1. SEGURIDAD EN JBOSS .............................................................................................. 139 4.7.2. SEGURIDAD EN TOMCAT ......................................................................................... 140 4.7.3. SEGURIDAD EN APACHE .......................................................................................... 141 4.8. ACTUALIZACIÓN MEDIAWIKI ...................................................................................... 142 3 1. INTRODUCCIÓN 1.1. OBJETIVO Alianza2 La plataforma Agrega se concibe como un repositorio de almacenamiento de Objetos Alianza2 Digitales Educativos en la que se pone a disposición de los usuarios capacidades de creación, visualización, catalogación y compartición de sus contenidos a través de un navegador o mediante llamadas webservices. administradores del software y las máquinas que integran la plataforma, cubriendo las arquitecturas físicas y lógicas de la plataforma, cada uno de los componentes que integran la solución y las políticas de operación y mantenimiento necesarias. 1.2. ESTRUCTURA DEL MANUAL Los contenidos del manual se han estructurado en 3 bloques claramente diferenciados: 1. BLOQUE I: ARQUITECTURA FÍSICA Y LÓGICA DE LA PLATAFORMA En el primer bloque, se detallará tanto la arquitectura física como la arquitectura lógica de la plataforma. Durante el desarrollo del capítulo, se analizará la arquitectura física propuesta por parte de la UTE la cual no siempre reflejará el entorno real de cada CCAA. Con respecto a la arquitectura lógica, se detallará al máximo las comunicaciones entre módulos y los servicios existentes. 2. BLOQUE II: COMPONENTES DE LA PLATAFORMA Partiendo de la clásica arquitectura de 3 niveles o capas para proveer servicios web, se especificarán uno a uno todos los componentes que forman parte del portal, haciendo especial hincapié en los ficheros de configuración más relevantes, procedimientos automatizados ejecutados durante la instalación, etc. 3. BLOQUE III: OPERACIÓN Y MANTENIMIENTO DE LA PLATAFORMA Por último, una vez comprendida la solución (y los componentes que la integran), se analizarán las recomendaciones para la operación y mantenimiento de la plataforma. Las tareas descritas en este bloque, pretenden ayudar al administrador facilitándole procesos comunes a ejecutar, cambios a realizar ante modificaciones habituales, etc. 1.3. ACRÓNIMOS CN: Common Name DN: Distinguished Name EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico El presente documento es el manual para el curso de formación técnica destinado a los 4 DRI: Digital Repositories Interoperability JbossAS: JBoss Application Server JDK: Java Development Kit JVM: Java Virtual Machine LDAP: Lightweight Directory Access Protocol NFS: Network File System OAIPMH: Open Archives Initiative Protocol for Metadata Harvesting ODE: Objeto Digital Educativo PODE: Plataforma de Objetos Digitales Educativos SOA: Service Oriented Architecture SQI: Simple Query Interface Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 5 2. BLOQUE I: ARQUITECTURA FÍSICA Y LÓGICA DE LA PLATAFORMA Alianza2 2.1. INTRODUCCIÓN Alianza2 En el bloque actual describiremos la arquitectura física y lógica de un nodo de la plataforma. Un nodo operativo esta formado por un conjunto de servicios (que pueden ejecutarse en una o varias máquinas físicas o virtualizadas diferentes) formando así una aplicación web Un nodo responde a la arquitectura de 3 capas o niveles empleada típicamente en los portales web: Apache Capa servidor Web PHP (MediaWiki) Squid (caché opcional) JBoss Application Server / Apache Tomcat Capa de aplicación JDK 1.6 Galería de Imágenes NFS Capa de datos Base de datos (MySQL) LDAP La capa del servidor web se encuentra formada por la aplicación de Apache, sobre la cual se instalará el módulo de PHP 5.X y la ayuda que se encuentra elaborada sobre la aplicación MediaWiki 1.12.0. En la capa de aplicación encontramos la JDK 1.6.0, el servidor de aplicaciones JBoss o Apache Tomcat (aunque no se trate de un servidor de aplicaciones J2EE compatible, añadiendo un sistema de colas como ActiveMQ permite el despliegue de Agrega) y por último la galería de imágenes. En secciones posteriores entraremos en detalle sobre los mismos. Por último, la capa de datos debe ofrecer un directorio compartido visible desde el Apache y el servidor de aplicaciones (típicamente vía NFS aunque valdrían otras soluciones), una base de datos (en nuestro caso MySQL) sobre la cual se crearán las tablas y usuarios tanto de la plataforma como de la ayuda MediaWiki, y por último debe existir un servicio de LDAP corriendo para la autenticación de los usuarios. En la siguiente sección describiremos una arquitectura física modelo que puede no coincidir con la instalación real. Desde el punto de vista arquitectónico, se podrían instalar todas las EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico completa, el portal Agrega. 6 capas en una misma máquina física, pero se desaconseja por razones tanto de rendimiento como de seguridad. 2.2. ARQUITECTURA FÍSICA Alianza2 Alianza2 La arquitectura física (modelo de referencia) que se plantea es la que se muestra en la siguiente figura: Router FIREWALL DMZ Servidor Web APACHE INTERNET FIREWALL Interno Red De Datos Red De Aplicación :8080 :8009 :3306/:1521 Servidor de BBDD MYSQL/Oracle Servidor Aplicaciones JBOSS/Tomcat :389 Servidor de Directorios OpenLDAP Red De Almacenamiento :2049 Servidor de Archivos NFS En el diagrama mostrado se ha optado por independizar cada servicio en una máquina diferente, no obstante, no es estrictamente necesario que en producción se dispongan de tantas máquinas físicas como servicios. Como regla general es conveniente dejar el servidor web Apache en la zona desmilitarizada (DMZ) por razones de seguridad, y en caso necesario el servidor que alberga la base de datos podría también albergar el LDAP. Debido a la carga de CPU, número de ficheros abiertos y número de conexiones se recomienda que el servidor donde se ejecuta el servidor de aplicaciones se ejecute sobre una máquina física sin compartir recursos con otros servicios. NOTA: para simplificar la figura no se han representado las redes de gestión que suelen existir para la propia gestión de las máquinas, sin embargo, si se han diferenciado las redes de aplicación de las redes de almacenamiento. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico :80 :443 7 2.2.1. APACHE Por razones de seguridad se propone que el servidor web Apache se instale en la zona desmilitarizada (DMZ). El servidor web atenderá peticiones en el puerto 80 (HTTP) y 443 Alianza2 (HTTPS). Accederá por medio de cortafuegos a la red interna al puerto 8009 (Conector AJP) del servidor de aplicaciones JBoss. Alianza2 Hay que tener en cuenta que la ayuda (MediaWiki) es un módulo PHP que se ejecutará sobre Apache y que realizará conexiones a la base de datos MySQL. Es posible crear una base de datos aislada para tal propósito, incluso instalarla en la propia máquina de Apache si en limitar el acceso de los usuarios a la base de datos por dirección IP. A la hora de instalar Apache debemos decidir si deseamos que sirva directamente los contenidos estáticos, para lo cual, será necesario que éstos se instalen en una partición compartida accesible tanto desde el servidor de aplicaciones como desde Apache, o si por el contrario, por cada petición queremos que se redirija al servidor de aplicaciones (aunque se traten de contenidos estáticos tales como CSS, JS, GIF…). En función de una u otra opción será necesario o no configurar el espacio de disco compartido por NFS. 2.2.2. JBOSS APPLICATION SERVER / APACHE TOMCAT La aplicación del portal de Agrega se desplegará sobre el servidor de aplicaciones JBoss o Tomcat los cuales se ejecutarán con la versión JDK 1.6. Desde el servidor se necesitará tener acceso tanto al servidor LDAP (para autenticar a los usuarios) como a la base de datos (para autorizar, cargar contenidos, localizar, noticias, faq…). Es obligatorio que el servidor disponga de un volumen montado con gran capacidad de almacenamiento (ya sea desde un servidor con un array de discos exportados por NFS o bien directamente discos locales al servidor). Si se decide que Apache sirva directamente los contenidos estáticos, es necesario que el servidor de aplicaciones haga uso del directorio compartido exportado por NFS para que dichos contenidos puedan ser servidos directamente desde el servidor web. Adicionalmente, es posible desplegar Agrega sobre el contenedor de servlets Apache Tomcat 5.X o superior junto con un sistemas de colas JMS como Apache ActiveMQ. 2.2.3. BASES DE DATOS: MYSQL, ORACLE La plataforma de Agrega necesita hacer uso de una base de datos, en concreto, de MySQL (también es posible ejecutar el portal con otras bases de datos como por ejemplo Oracle). En EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico no queremos abrir conexiones hacia nuestra base de datos interna. La mejor opción consiste 8 la base de datos del portal se albergarán las tablas relacionadas con el uso y funcionamiento de Agrega (auditoria, búsquedas realizadas, localizador de ficheros en disco, noticias, categorías, roles de usuarios…) y en la base de datos de la Mediawiki se almacenarán todos los textos de la ayuda (el dump que se ofrece de la ayuda Wiki corresponde con una base de Alianza2 datos MySQL). Alianza2 Hay que tener en cuenta que, al encontrarse la ayuda basada en el software libre de MediaWiki, se ejecuta directamente sobre Apache (es una aplicación PHP). Con el fin de securizar al máximo la plataforma se sugiere que se configuren los usuarios de conexión desde la MediaWiki especificando las IPs permitidas y dando acceso únicamente a la base 2.2.4. LDAP El portal de Agrega se autentica contra el LDAP haciendo el uso de la operación “bind”. Si la comunidad autónoma ya dispone de un LDAP, durante la instalación bastaría con crear la nueva estructura del portal y los usuarios iniciales, configurando posteriormente el acceso al mismo desde la configuración del portal. Si no se tuviera ningún LDAP, se recomienda la instalación de OpenLDAP v2. 2.2.5. SERVIDOR DE FICHEROS: NFS En el caso de desear servir los ficheros estáticos directamente desde Apache, es necesario que algún servicio exporte vía NFS un directorio compartido montado desde Apache y el servidor de aplicaciones. En ese directorio compartido encontraremos no sólo los ficheros estáticos de la apariencia del portal (CSS, JS, GIF…) sino que también encontraremos todos los recursos de los ODEs cargados en la misma (por ejemplo un recurso puede ser una secuencia animada flash, un fichero OGG, un video AVI…). 2.2.6. RESUMEN CONEXIONES ESTABLECIDAS Las conexiones que se deben tener en cuenta en las conectividades (rutas) y reglas de los firewalls son las siguientes: Host Origen Puerto Origen Host Destino Puerto Destino * (ANY) * (ANY) * (ANY) * (ANY) Apache Apache 80 443 Apache Apache * (ANY) * (ANY) JBoss/Tomcat MySQL 8009 3306 JBoss/Tomcat JBoss/Tomcat * (ANY) * (ANY) LDAP MySQL/Oracle 389 3306/1521 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico de datos de la MediaWiki. 9 Con el fin de ilustrar las conexiones establecidas, mostramos la siguiente figura: Router FIREWALL INTERNET DMZ Alianza2 :80 :443 Alianza2 Servidor Web APACHE :3306 FIREWALL Interno :8009 Red De Datos Red De Aplicación Servidor de BBDD MYSQL/Oracle Servidor de Directorios OpenLDAP :3306/:1521 :389 Red De Almacenamiento :2049 Servidor de Archivos NFS 2.3. ARQUITECTURA LÓGICA 2.3.1. INTRODUCCIÓN La plataforma se desarrolla con la tecnología Java (J2EE v1.4) y tiene una Arquitectura Orientada a Servicios (SOA) donde el papel del proveedor de servicios lo interpretará el Nodo de Objetos Educativos Digitales y el papel consumidor lo interpretarán las Aplicaciones Clientes, según el siguiente esquema: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Servidor Aplicaciones JBOSS 10 Alianza2 La Arquitectura Orientada a Servicios (SOA), define los servicios de los cuales estará compuesto el sistema y sus interacciones. Desde el punto de vista del consumidor, los servicios son conceptualmente similares a los componentes tradicionales, salvo que los servicios encapsulan sus propios datos y no forman parte, estrictamente hablando, de la aplicación sino que son utilizados por ésta. Otra de las facetas interesantes de la arquitectura SOA es que permite realizar aplicaciones modulares que exponen la lógica de negocio que se decida para ser consumida por terceros. Destacamos el componente de Interfaz de Interoperabilidad que se basa en el estándar de interoperabilidad de Repositorios de IMS (IMS-DRI), que proporciona la funcionalidad básica para explotar los objetos digitales presentes en el repositorio (Buscar, presentar y almacenar). La tecnología que los implementa es la de Web Services que proporciona el sustento de servicios de una arquitectura orientada a servicios. Las búsquedas de contenidos se realizarán con un sistema federal basado en la especificación Simple Query Interface (SQI). Al estar SQI promovido por la Comisión Europea, su adopción facilitará la integración de la Plataforma en las redes europeas de repositorios educativos. En la definición de los servicios no incluidos en IMS DRI que deban incorporarse a la Interfaz de Interoperabilidad se tomará como fuente de inspiración las Open Service Interface Definitions (OSIDs) elaboradas por el MIT en Open Knowledge Initiative (OKI). El Nodo incorpora un repositorio que almacena los contenidos empaquetados conforme al estándar SCORM 2004, aunque proporcionará paquetes en los formatos SCORM 2004, EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Alianza2 11 SCORM 1.2 e IMS-CP. La información de catalogación se almacena conforme al estándar LOM v.1.0 en español (LOMES). Como parte de las aplicaciones cliente, se desarrolla un portal, denominado Portal M.E.C., Alianza2 que sirve de escaparate al proyecto y que permite a sus visitantes el acceso a los contenidos Alianza2 públicos albergados en cualquiera de los nodos de la Plataforma. Además, se implementa una estructura de portal en cada Comunidad Autónoma, denominada Portal CC.AA., que permite crear instancias del mismo adaptándolas a las necesidades específicas. NODO DE OBJETOS DIGITALES EDUCATIVOS En la siguiente figura se representa la estructura del Nodo: SISTEMA DE ALMACENAMIENTO La naturaleza de la información manejada por la Plataforma es muy heterogénea y por ello se propone utilizar al menos tres sistemas: Directorio LDAP: en él se almacenará la información utilizada en los módulos de autenticación. Sistema de ficheros en disco: se utilizará para aquella información que, de forma natural, se suele almacenar en archivos, por ejemplo: contenidos, metainformación LOM, trazas del sistema de auditoria, logs, etc. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 2.3.2. 12 Base de datos: la mayor parte de la información manejada por la Plataforma será almacenada en el sistema de ficheros. Parcialmente existirán datos que por su naturaleza (carácter relacional), serán almacenados en una base de datos relacional. Alianza2 CAPA DE ACCESO A DATOS Alianza2 Este elemento de la arquitectura tiene como objetivo proporcionar a los módulos funcionales un elevado nivel de abstracción sobre los detalles referentes a cómo los objetos persisten en el sistema de almacenamiento. De esta forma la implementación de los módulos funcionales MÓDULOS FUNCIONALES E INTERFAZ DE INTEROPERABILIDAD Cada módulo funcional encapsula e implementa un conjunto de servicios que serán ofertados al resto de elementos que componen el sistema, utilizando para ello una o varias interfaces bien definidas. Entre los servicios que se ofrecen, destacamos: Componente Descripción Componente encargado de la orquestación de los diferentes servicios lógicos que componen el nodo de forma que permita ofrecer al exterior una capa de webservices, denominada Interfaz de interoperabilidad con las funcionalidades de Presentar / Almacenar, Buscar / Mostrar y Solicitar / Entregar. Este componente será el encargado de recibir las peticiones del exterior y transformarlas en el lenguaje entendible por cada uno de los servicios lógicos que utilice, por ejemplo de VSQI a LQS. Expone: Este componente ofrece un único interfaz hacia al exterior con, al menos, los métodos anteriormente nombrados. Este interfaz será consumido por los el resto de nodos que implementen DRI el protocolo DRI. Consume / Utiliza: El componente para ofrecer su funcionalidad se apoyará en los servicios de la capa de organización ofrecidos por los componentes o Publicar, con el objetivo de poder realizar la funcionalidad de Presentar / Almacenar. o Buscar, con el objetivo de ofrecer el Buscar / Mostrar. o Entregar, con el fin de ofrecer la funcionalidad necesaria y definida por DRI para el Solicitar / Entregar. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico se centrará en la lógica de negocio. 13 Componente Descripción Componente encargado de la coreografía de los diferentes servicios lógicos que compondrán el nodo de forma que se permita a buscadores tipo Google, tener información acerca de los contenidos Alianza2 digitales almacenados en el repositorio que expone el nodo cumpliendo Alianza2 el protocolo. Para ello los metadatos que se van a devolver por parte de este componente serán del tipo Dublín Core. Al igual que el componente anterior la exposición del servicio hacia el exterior será a través de webservices. Expone: Este componente ofrece un interfaz único al exterior que protocolo PMH. Consume / Utiliza: Este componente consume servicios ofrecidos por los componentes siguientes: o Buscar: Con el objetivo de obtener todos los objetos digitales existentes dentro del repositorio que hayan cambiado desde la última búsqueda que se realizó. o Validador / Transformador: Para transformar los metadatos LOM-ES al formato soportado por el protocolo PMH de Dublín Core. Componente encargado de ofrecer servicios de búsqueda y transformar las diferentes búsquedas en el lenguaje entendible por el servicio de Buscador / Indexador. Expone: Este componente expone dos interfaces uno encargado de las búsquedas locales, utilizado por los componentes DRI y OAI-PMH, con el objetivo de devolver objetos únicamente existentes en el nodo otro de búsquedas federadas utilizado por las herramientas propias del sistema así como para las búsquedas Buscar internas. No obstante si desde la herramienta se decide que no se hagan búsquedas federadas este componente será capaz de utilizar la búsqueda local internamente. Consume / Utiliza: Este componente consume servicios ofrecidos por los componentes siguientes: o Indexador / Buscador: Con el objetivo de realizar las búsquedas sobre el motor de búsqueda y los índices en función de la petición que se reciba. Componente encargado Empaquetador Empaquetación de de ofrecer forma que servicios gestiona la principalmente al funcionalidad de empaquetado de un usuario en su propio lugar de trabajo dentro del repositorio. Su ámbito llega hasta que el objeto digital es propuesto EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico será consumido únicamente por los sistemas que comprendan el OAI-PMH 14 Componente Descripción para publicación y éste pasa al entorno del componente de Publicación. Expone: Este componente expone un único interfaz encargado de Alianza2 gestionar las diferentes acciones que el usuario realice sobre el Alianza2 interfaz de usuario. Así será el encargado de guardar y modificar entre otros. Consume / Utiliza: Este componente consume servicios ofrecidos por los componentes siguientes: o Localizador: Con el objetivo de obtener en qué parte o Validador / Transformador: Para poder realizar las validaciones correspondientes sobre el estándar de empaquetado SCORM2004. o Catalogación: Se utilizará, por ejemplo, para el empaquetador básico, ya que el sistema deberá ir catalogando ciertos campos del contenido de forma interna. o Publicación: Se utilizará, para indicar que un objeto ha comenzado su ciclo de vida y por tanto se encuentra en estado de CREACIÓN. Componente encargado de ofrecer servicios al Gestor de Flujo de forma que gestiona el flujo de publicación seguido por un contenido digital. También proporciona al componente DRI el servicio y la funcionalidad que se expone en el interfaz de interoperabilidad de Presentar / Almacenar. Será el encargado de generar los identificadores MEC a asignar a los ODEs que se publiquen. Expone: Este componente expone dos interfaces uno encargado de gestionar el flujo de publicación de los contenidos digitales Publicación existentes en el repositorio y de dar soporte a las solicitudes desde la herramienta de publicación y el segundo interfaz se encarga de dar soporte a las peticiones remotas de Presentar / Almacenar. Consume / Utiliza: Este componente consume servicios ofrecidos por los componentes siguientes: o Localizador: Con el objetivo de obtener en qué parte del repositorio se va a almacenar el contenido. o Indexador / Buscador: Ya que si un objeto es publicado en el repositorio éste debe ser localizable mediante EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico del repositorio se va a almacenar el contenido. 15 Componente Descripción una búsqueda por ello es necesario que el contenido se indexe. Además si el contenido es despublicado o eliminado se debe quitar del índice. o Alianza2 Validador / Transformador: Utilizado para validar los Alianza2 objetos que una vez credos se va a proponer y/o a publicar. Solo un objeto correcto y válido podrá ser propuesto y / o publicado. Componente encargado de ofrecer los servicios para poder consumir los objetos digitales existentes en el repositorio. Estos objetos digitales sea con secuencia guiada no condicionada o sin secuencia. Este último caso se dará tanto si el contenido no soporta secuencia como si es solicitado a través del componente DRI por cuestión de rendimiento. Los objetos digitales también se podrán devolver en forma de PIF en diferentes formatos SCORM 2004 (con o sin submanifiesto), SCORM 1.2 e IMS CP. Además, este componente sirve de puente de información entre los distintos módulos de presentación y el previsualizador. Así será utilizado por parte del empaquetador, para dejar el ODE en fase de creación para previsualizarlo. Este módulo además permitirá las descargas de los ODEs disponibles en la plataforma. Se llamará, por tanto desde el buscador. Entregar Expone: Este componente expone dos interfaces, uno encargado de gestionar y entregar los paquetes a peticiones externas de previsualización o a peticiones de paquetes PIF en cualquiera de los formatos soportados. Y el otro interfaz encargado de dar soporte a las peticiones internas y que por tanto podrá soportar las secuencias guiadas no condicionadas. Consume / Utiliza: Este componente consume servicios ofrecidos por los componentes siguientes: o Localizador: Con el objetivo de obtener en qué parte del repositorio se va a encuentra almacenado el contenido. o Validador / Transformador: Utilizado para transformar los contenidos digitales empaquetados en el repositorio, de SCORM 2004 a cualquiera de los otros formatos soportados. Componente encargado de ofrecer los servicios para poder catalogar, Catalogación según el estándar LOM-ES, los distintos contenidos generados y / o EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico se pueden previsualizar si la llamada proviene del previsualizador, ya 16 Componente Descripción almacenados en el repositorio. Expone: Este componente expone un único interfaz utilizado por la herramienta de Catalogación para dar respuesta a las peticiones Alianza2 del usuario. Alianza2 Consume / Utiliza: Este componente consume servicios ofrecidos por los componentes siguientes: o Fuentes Taxonómicas: Lo utiliza para enlazar las diferentes fuentes taxonómicas y vocabularios controlados con el Catalogador así como para obtener este componente. o Validador / Transformador: Este componente es utilizado con el fin de poder validar contra el esquema del LOM-ES que la catalogación realizada es la correcta. Componente encargado de ofrecer los servicios para poder realizar operaciones sobre los contenidos que se publicarán en el portal, entendiendo como contenidos, las noticias, los feeds y las descargas. Este componente, por un lado dará soporte al portal de administración por el cual se podrán introducir y dar de alta nuevos elementos de los anteriormente enumerados y por otro lado al portal público de la Contenidos Portales aplicación en el que los usuarios podrán visualizar las noticias y los feeds o descargarse los recursos puestos a su disposición. Expone: Este componente expone un único interfaz utilizado, como se acaba de comentar, por el Portal de Administración y por otro lado por el Portal público. Consume / Utiliza: Este componente es autocontenido y toda la información que necesita la posee en su interior por lo que no consume ningún servicio. Componente que implementa los servicios de la herramienta de modificación introducida en el cambio C14. Permite configurar tareas para la modificación en bloque de múltiples ODEs y se encarga de ejecutar dichas tareas y generar informe de resultados. Modificador Expone: Este componente expone un único interfaz utilizado por la capa de presentación de la Herramienta de modificación. El interfaz expone métodos para la configuración / modificación eliminación de tareas, ejecución y visualización de resultados. Consume / Utiliza: Este componente consume servicios ofrecidos por los componentes siguientes: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico la estructura educativa y curricular almacenada por 17 Componente o Descripción Validador. Se utiliza para validar los ODEs que han sido modificados por una tarea. o Publicador. En el caso de que un ODE modificado Alianza2 estuviera publicado en el repositorio del nodo, el Alianza2 publicador se encarga de su reindexación. o Fuentes Taxonómicas: Ofrece la información necesaria para configurar modificaciones sobre catalogaciones LOM-ES (vocabularios controlados y rutas taxonómicas). Planificador: Permite programar la ejecución diferida de las tareas configuradas. Componente que se encargará de la gestión de la valoración que se dé por parte de los usuarios a los contenidos. La valoración es un campo que influye en la indexación por ello se encargará también de reindexar los objetos dentro del índice. Expone: Este componente expone un único interfaz utilizado por el sistema de reputación que permitirá dar de alta un comentario y una valoración asociada a un ODE así como mostrar los Valoración comentarios previamente creados, de forma que el componente de Informes pueda realizar consultas sobre este campo. Consume / Utiliza: Este componente consume servicios ofrecidos por los componentes siguientes: o Indexador / Buscador: Se utiliza para reindexar un documento sobre el que se ha modificado su valoración. Componente que conforma un recubrimiento lógico del interfaz propuesto por la librería de indexación y búsqueda de Apache Lucene. Se encarga por tanto de la indexación de todos los ODE, así como de proporcionar la búsqueda de los mismos. Esta búsqueda se limita a la búsqueda local dentro del nodo, ya que la búsqueda federada es controlada desde el elemento federador que es el Indexador Buscador y componente Buscar. Expone: Este componente expone dos interfaces uno para que se realicen búsquedas sobre los índices y otro, para, precisamente, realizar los índices. Consume / Utiliza: Este componente es auto contenido y conoce los objetos a indexar y el lenguaje de búsqueda por tanto, no necesita la utilización de ningún otro componente. Fuentes Taxonómicas Componente que engloba la gestión y explotación de las fuentes EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico o 18 Componente Descripción taxonómicas, los tesauros, árboles curriculares y los vocabularios controlados. Éstos se importan conforme a un esquema previamente definido en formato IMS VDEX. Se utilizarán diferentes formatos Alianza2 dependiendo de la naturaleza de la fuente taxonómica (organización Alianza2 jerárquica o tesauros). Además, permite realizar las traducciones de los elementos existentes en dichos vocabularios controlados. Se usa, por tanto por el buscador avanzado, para rellenar sus campos de búsqueda así como para mostrar el árbol curricular. Expone: Este componente expone dos interfaces, una para el tratamiento de fuentes taxonómicas y otro para el de vocabularios controlados. Ambos son utilizados por el componente Catalogación con el objetivo de, por ejemplo, asignar un ODE a un determinado objetivo curricular. Consume / Utiliza: Este componente es auto contenido y conoce cómo gestionar las diferentes taxonomías, tesauros y vocabularios controlados. Además de los servicios enumerados que son consumidos o utilizados por los componentes anteriormente descritos, cabe destacar que todos ellos utilizarán el interfaz propuesto por el componente de Seguridad para comprobar si quien accede está o no autorizado a realizar una u otra determinada operación, así como el interfaz ofrecido por el componente de Auditoria para dejar rastro de la operación realizada. El despliegue de los componentes citados se realiza sobre el servidor de aplicaciones mediante ficheros WAR. Gracias a la arquitectura SOA empleada algunos servicios (ofrecidos por determinados WARs) podrían ser desplegados en diferentes servidores de aplicaciones y todos los servicios que se necesitaran consumir o proveer se accederían a través de los WebServices publicados. Desde el punto de vista del servidor de aplicaciones, podemos ver el portal Agrega mediante la clásica arquitectura de 3 niveles o capas: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 19 Capa Presentación Web Buscador Empaquetador Catalogador Gestor Flujo Previsualizador Visualizador Contenidos Portal Alianza2 Portal Administración Modificador Alianza2 Publicación Servicios Web Capa Negocio Buscar Empaquetación Publicación Entregar Catalogación Contenidos Portal Valoración DRI OAIPMH Publicación Servicios Web Validador Capa Datos Indexador Sistema de Ficheros Auditoría Planificador V Base de Datos Admin Usuarios Fuentes Taxonómicas Localizador LDAP Los usuarios se conectan mediante el navegador a los módulos web (WARs desplegados) que exponen la parte visual del portal. Cada módulo de la capa de presentación puede consumir uno o más servicios de los publicados en la capa de negocio, quienes a su vez, hacen uso de la capa de datos correspondiente. Dentro de la capa de negocio encontramos módulos orquestadores que consumen uno o más subservicios para acometer su objetivo. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico A 20 3. BLOQUE II: COMPONENTES DE LA PLATAFORMA 3.1. INTRODUCCIÓN Alianza2 En el presente bloque analizaremos todos los componentes que forman la plataforma, Alianza2 describiremos la funcionalidad requerida, los ficheros de configuración destacables, los scripts empleados durante la instalación y por último especificaremos como comprobar el correcto funcionamiento de los mismos. El portal Agrega, en función de la naturaleza de los datos a consultar o almacenar, hace uso de 3 recursos diferentes a la hora de almacenar la información: Ficheros en disco Base de datos Directorio LDAP 3.2.1. SISTEMA DE FICHEROS INTRODUCCIÓN En función del número de recursos educativos a almacenar por parte del portal será necesario disponer de un determinado espacio en disco. Los discos pueden ser montados directamente en la máquina a través de cualquier array o librería de discos, conexiones SCSI directas, etc. Los contenidos que se albergarán en el sistema de ficheros son: Repositorio de ODEs: cada ODE estará formado por una estructura de meta información, ficheros XML… y los recursos propios del objeto digital educativo, como pueden ser imágenes, animaciones flash, videos, sonidos mp3, ogg… Esquemas XML Plantillas Informes: reportes generados por la aplicación BIRT. Miniaturas (previsualizaciones) de los objetos capturadas por la galería de imágenes. Descargas disponibles desde la plataforma (herramienta offline…) Logs Comúnmente, en los CPDs se suele disponer de servidores dedicados que exportan vía NFS los volúmenes lógicos definidos a partir de las librerías de discos que tienen conectados. En el caso de la plataforma Agrega, asumiremos que existe un servidor con discos conectados (no es tema de discusión de este manual cómo conectar los discos al servidor) que exportará vía NFS el directorio compartido, directorio que montará tanto el servidor del JBoss como el servidor web Apache. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 3.2. CAPA DE DATOS 21 NOTA: Si no existiera el servidor dedicado NFS con los discos compartidos, el espacio estuviera disponible directamente desde la máquina del servidor de aplicaciones, y se deseara que Apache pudiera acceder también al espacio para servir directamente los contenidos, se tendría que aplicar de igual manera la política de exportación/importación Alianza2 teniendo en cuenta que el exportador en lugar de ser el servidor NFS sería el servidor de Alianza2 aplicaciones y que el importador sería únicamente el servidor Apache. Servidor Aplicaciones JBOSS/Tomcat Red De Almacenamiento Servidor de Archivos NFS En la figura anterior se representa cómo el servidor de archivos NFS exporta un directorio tanto al servidor JBoss/Tomcat como al servidor Apache. SERVIDOR NFS El servidor de archivos NFS será un servidor con uno o varios discos de gran capacidad conectados (usando LVM o no) con la capacidad de exportarlos vía NFS. Aconsejamos que el sistema de ficheros de la unidad exportada sea ReiserFS o XFS (en un anexo posterior se explica cómo conseguir soporte XFS en un sistema operativo GNU/Linux) debido a las menores restricciones que se imponen en cuanto a máximo tamaño de ficheros, máximo número de subdirectorios por directorio, etc. Los archivos de configuración a tener en cuenta son: 1. /etc/exports 2. /etc/hosts.allow 3. /etc/hosts.deny El contenido del fichero /etc/exports es: <directorio> <ip1>(opciones1) <ip2>(opciones2) #Ejemplo /export 10.0.0.0/8(rw,no_root_squash) En donde: <directorio> es el directorio que queremos compartir <ip1> <ip2> son las direcciones IPs, o direcciones de red (A.B.C.D/mascara) EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Servidor Web APACHE 22 Opciones: especificamos el acceso que la máquina a la que exportamos tendrá sobre el directorio. Destacamos: o ro: montaríamos el directorio de solo lectura o rw: el cliente puede leer y escribir o no_root_squash: por defecto, si en la máquina cliente el usuario root crea un Alianza2 Alianza2 fichero, en el servidor NFS se trata como si lo creara el usuario nobody. Si seleccionamos la opción no_root_squash, si en la máquina cliente root crea un fichero, en la máquina servidor será también creado con el usuario root. o sync: el comando de exportfs usa un comportamiento asíncrono, indicando al cliente que la escritura del fichero se ha completado cuando NFS ha de gestionar la escritura en el filesystem local. Este comportamiento puede causar corrupción de datos si el servidor reinicia. El flag sync previene este fallo. Los ficheros /etc/hosts.allow y /etc/hosts.deny especifican direcciones IPs (también valen rangos con máscara) que pueden utilizar los servicios especificados en nuestro servidor NFS. Cuando un cliente se conecta, se realizan las siguientes comprobaciones en el siguiente orden: Primero se comprueba si el cliente que conecta se encuentra en el fichero hosts.allow. Si es así se le permite el acceso. Si no se encontraba en el fichero anterior, se comprueba si el cliente está especificado en el fichero hosts.deny. En caso afirmativo, se le deniega el acceso. Si el cliente no se encontraba ni en el fichero hosts.allow ni en el fichero hosts.deny, se le permite el acceso. En nuestro caso, con el fin de protegernos frente a escrituras no autorizadas en el disco compartido (desde otras máquinas que no sean ni el servidor de aplicaciones ni el servidor Apache), configuraríamos el fichero /etc/hosts.allow de la siguiente manera: portmap: <ip_jboss>, <ip_apache> lockd: <ip_jboss>, <ip_apache> rquotad: <ip_jboss>, <ip_apache> mountd: <ip_jboss>, <ip_apache> statd: <ip_jboss>, <ip_apache> Y el fichero /etc/hosts.deny denegando el acceso a todos los demás: portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL Una vez configurados los ficheros anteriores, deberemos tener un kernel 2.4.X o superior con soporte NFS-server, los binarios del nfs-server (en cada distribución el paquete se llamará de una manera u otra) y el proceso de arranque generalmente será: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico terminado 23 /etc/init.d/nfs start Los procesos que se deben arrancar con el comando anterior son el portmapper y los 5 demonios: rpc.portmap, rpc.mountd, rpc.nfsd, rpc.statd, rpc.lockd y rpc.rquotad. Alianza2 Alianza2 Para comprobar que se encuentra correctamente arrancado ejecutamos el comando: program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 629 status 100024 1 tcp 632 status 100011 1 udp 969 rquotad 100011 2 udp 969 rquotad 100011 1 tcp 972 rquotad 100011 2 tcp 972 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100021 1 udp 32768 nlockmgr 100021 3 udp 32768 nlockmgr 100021 4 udp 32768 nlockmgr 100021 1 tcp 32768 nlockmgr 100021 3 tcp 32768 nlockmgr 100021 4 tcp 32768 nlockmgr 100005 1 udp 994 mountd 100005 1 tcp 997 mountd 100005 2 udp 994 mountd 100005 2 tcp 997 mountd 100005 3 udp 994 mountd 100005 3 tcp 997 mountd CLIENTE NFS Como prerrequisito el kernel del sistema operativo del cliente NFS debe tener soporte para el sistema de ficheros NFS. En caso de no tenerlo es necesario actualizar el kernel a uno que si lo tenga. Para configurar que se monten las unidades de red NFS automáticamente durante el arranque es necesario configurar el fichero /etc/fstab agregando la siguiente línea: # device 10.175.0.100:/export mountpoint /export fs-type nfs options defaults dump 0 fsckorder 0 En device especificamos la dirección ip seguida del directorio compartido del servidor NFS a montar. En mountpoint especificamos el punto de anclaje local, es decir, en que directorio EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico rpcinfo -p localhost y deberíamos obtener una salida como la siguiente: del cliente se va a montar el directorio de la unidad de red remota. 24 El fs-type ha de ser nfs. En opciones especificamos que usaremos las opciones por defecto La próxima vez que reiniciemos la máquina se montará automáticamente el directorio Alianza2 remoto. Para comprobar que se realizará correctamente podemos ejecutar el comando: Alianza2 “mount /export” para que se efectúe el montado en el momento. ANEXO: SOPORTE XFS XFS es un sistema de archivos de 64 bits con journaling de alto rendimiento creado por SGI. estable). Además, es posible aumentar la capacidad de sistemas de ficheros XFS: xfsgrowfs es ideal para particiones LVM. Para poder emplear XFS necesitamos satisfacer 2 requerimientos: Kernel con soporte para el sistema de ficheros XFS Paquete con utilidades para gestionar la partición XFS Para comprobar si nuestro kernel tiene soporte XFS compilado como módulo podemos ejecutar el siguiente comando: ls /lib/modules/$(uname -r)/kernel/fs/xfs* Si el comando anterior muestra en la salida xfs.ko significa que nuestro kernel tiene soporte. Podría darse el caso en el cual el soporte XFS no estuviera compilado como módulo pero si directamente (incluido en la imagen de kernel), para ello deberíamos comprobar el log de arranque: dmesg | grep –i xfs Una vez que tenemos soporte XFS en el kernel, necesitamos tener instalado el paquete xfsprogs, que contiene las herramientas necesarias para poder crear y gestionar el sistema de ficheros. Entre los comandos más importantes destacamos: mkfs.xfs: crea el sistema de ficheros XFS. fsck.xfs: comprueba que la partición no tiene errores. xfs_growfs: permite redimensionar las particiones XFS aprovechando sus capacidades LVM. 3.2.2. BASE DE DATOS INTRODUCCIÓN El portal almacenará cierta información de naturaleza relacional en la base de datos. Por ejemplo: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Se incorporó en la versión 2.4.25 del kernel de Linux (por considerarse suficientemente 25 Histórico de búsquedas realizadas (para su posterior explotación mediante informes) Comentarios Información relacionada con las descargas Noticias Datos de los nodos de la federación Tareas planificadas Información sobre los Usuarios, Grupos y Roles Etc Alianza2 Alianza2 en principio la conexión a base de datos debería ser transparente de cara a los desarrollos. Al haberse programado las sentencias SQL en el lenguaje HQL (propio de Hibernate), es éste quien realiza las traducciones para los diferentes dialectos de base de datos: Oracle, PostgreSQL, MySQL… MySQL Con el fin de ilustrar una base de datos en el manual, se escoge MySQL por su carácter de software libre y su amplia instalación en la mayor parte de las comunidades. Las conexiones a la base de datos se realizarán desde el servidor Apache (ayuda MediaWiki) y desde el servidor de aplicaciones (portal Agrega). FIREWALL DMZ Servidor Web APACHE :3306 FIREWALL Interno Red De Datos Red De Aplicación Servidor Aplicaciones JBOSS/Tomcat Servidor de BBDD MYSQL :3306 Red De Almacenamiento Para el correcto funcionamiento del portal, se instalará la versión 5.0 o superior del servidor MySQL. El proceso completo de instalación no es objeto de este manual, ya que se encuentra ampliamente explicado tanto en el manual de instalación y operación de la plataforma así como en la documentación oficial de MySQL (ver referencias al final del EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Puesto que la capa de persistencia del portal se realiza a través del framework Hibernate 3, 26 documento). Sin embargo, vamos a destacar archivos de configuración importantes, procedimientos de creación de la base de datos y carga de los datos iniciales. SERVIDOR MySQL Alianza2 Una vez instalado el servidor MySQL (por ejemplo, versión 5.0.22 o superior) procederemos Alianza2 de la siguiente manera: 1. Revisamos la configuración del fichero /etc/my.cnf Por defecto en la instalación de MySQL existen varios archivos de configuración de referencia para diferentes tamaños de bases de datos: my-small.cnf, my-medium.cnf, my- fichero de configuración my-large.cnf. En el fichero my.cnf se configuran los siguientes parámetros importantes, a destacar: # Example MySQL config file for large systems. # # This is for a large system with memory = 512M where the system runs mainly # MySQL. # # You can copy this file to # /etc/my.cnf to set global options, # mysql-data-dir/my.cnf to set server-specific options (in this # installation this directory is /var/lib/mysql) or # ~/.my.cnf to set user-specific options. # # In this file, you can use all long options that a program supports. # If you want to know which options a program supports, run the program # with the "--help" option. # The following options will be passed to all MySQL clients [client] #password = your_password port = 3306 socket = /var/lib/mysql/mysql.sock # Here follows entries for some specific programs # The MySQL server [mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock skip-locking key_buffer = 2560M max_allowed_packet = 1M table_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M # Try number of CPU's*2 for thread_concurrency thread_concurrency = 8 default-storage-engine=InnoDB EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico large.cnf, y my-huge.cnf. Asumiendo que tenemos 512 MBytes de memoria partiremos del 27 max_connections=250 # Don't listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! # #skip-networking Alianza2 Alianza2 # required unique id between 1 and 2^32 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted server-id =1 # Replication Slave (comment out master section to use this) # # To configure this host as a replication slave, you can choose between # two methods : # # 1) Use the CHANGE MASTER TO command (fully described in our manual) # the syntax is: # # CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>, # MASTER_USER=<user>, MASTER_PASSWORD=<password> ; # # where you replace <host>, <user>, <password> by quoted strings and # <port> by the master's port number (3306 by default). # # Example: # # CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, # MASTER_USER='joe', MASTER_PASSWORD='secret'; # # OR # # 2) Set the variables below. However, in case you choose this method, then # start replication for the first time (even unsuccessfully, for example # if you mistyped the password in master-password and the slave fails to # connect), the slave will create a master.info file, and any later # change in this file to the variables' values below will be ignored and # overridden by the content of the master.info file, unless you shutdown # the slave server, delete master.info and restart the slaver server. # For that reason, you may want to leave the lines below untouched # (commented) and instead use CHANGE MASTER TO (see above) # # required unique id between 2 and 2^32 - 1 # (and different from the master) # defaults to 2 if master-host is set # but will not function as a slave if omitted #server-id =2 # # The replication master for this slave - required #master-host = <hostname> # # The username the slave will use for authentication when connecting # to the master - required EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico # Replication Master Server (default) # binary logging is required for replication log-bin=mysql-bin 28 #master-user = <username> # # The password the slave will authenticate with when connecting to # the master - required #master-password = <password> # # The port the master is listening on. # optional - defaults to 3306 #master-port = <port> # # binary logging - not required for slaves, but recommended #log-bin=mysql-bin # Uncomment the following if you are using BDB tables #bdb_cache_size = 64M #bdb_max_lock = 100000 # Uncomment the following if you are using InnoDB tables innodb_data_home_dir = /var/lib/mysql/ innodb_data_file_path = ibdata1:100M:autoextend innodb_log_group_home_dir = /var/lib/mysql/ innodb_log_arch_dir = /var/lib/mysql/ # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high innodb_buffer_pool_size = 256M innodb_additional_mem_pool_size = 20M # Set .._log_file_size to 25 % of buffer pool size #innodb_log_file_size = 64M innodb_log_file_size = 200M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates [isamchk] key_buffer = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M [myisamchk] key_buffer = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico # Point the following paths to different dedicated disks #tmpdir = /tmp/ #log-update = /path-to-dedicated-directory/hostname Alianza2 29 1. Arrancamos el demonio En los casos de Linux, generalmente se ha creado un script de arranque en /etc/init.d/. Ejecutamos el siguiente comando: Alianza2 /etc/init.d/mysqld start Alianza2 2. Agregamos una contraseña para el usuario root: mysqladmin -u root password 'password' 3. Nos conectamos con el usuario root al servidor MySQL mysql -u root –p –h <ip_mysql_server> create database agrega; 5. Creamos el usuario agrega_user con permisos de inserción, modificación, eliminación de registros y consulta de las tablas de la base de datos Agrega: grant insert, update, delete, select on agrega_user@'somehost' identified by 'password'; agrega.* to flush privileges; Donde somehost es la dirección IP o subred (por ejemplo: 10.1.2.*) desde la cual queremos dejar acceder al usuario y donde password es la contraseña. Para mayor seguridad especificaremos la IP desde la cual accede el servidor JBoss. 6. Creamos la base de datos para la ayuda (Mediawiki) create database wikidb; 7. Creamos el usuario wiki_user con acceso de escritura, modificación, borrado y consulta de las tablas de la base de datos wikidb: grant insert, update, delete, select on wikidb.* to wiki_user@'somehost' identified by 'password'; flush privileges; Especificaremos en somehost la dirección IP desde la cual accede el servidor Apache o la subred en la cual se encuentran los servidores Apaches (en caso de tener más de uno). BASE DE DATOS: AGREGA Habiendo creado ya la base de datos y el usuario agrega_user, durante la instalación del nodo se ejecutaron los siguientes scripts SQL: CrearTablas.sql EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 4. Creamos la base de datos para Agrega 30 El cometido del script consiste en crear toda la estructura de tablas necesarias para el correcto funcionamiento del portal Agrega, además de crear los índices y las contraints necesarias. CargarDatos.sql Alianza2 Una vez creadas todas las tablas, índices y restricciones, se procede a hacer una carga inicial de datos necesarios (idiomas, localización de los índices, FAQs iniciales, etc). Alianza2 Los comandos SLQ empleados fueron: Nótese que es necesario conectar con el usuario root (o cualquier otro con privilegios para la creación de tablas) ya que el usuario agrega_user únicamente tiene permisos de inserción, modificación, eliminación y consulta de registros pero no de creación o borrado de tablas. Para comprobar que la creación del usuario y las inserciones han sido correctas, podemos ejecutar (desde la máquina que se autorizó al crear al usuario si tiene instalado el cliente mysql) los siguientes comandos: mysql –u agrega_user –p –h <ip_mysql_server> use agrega; show tables; BASE DE DATOS: AYUDA Una vez creados tanto la base de datos wikidb como el usuario wiki_user, procedemos a insertar tanto las tablas como los contenidos de las mismas a partir de un dump generado: mysql -u root -p –h <ip_mysql_server> wikidb < wikidb.sql De nuevo, al igual que en el caso anterior, debemos ejecutar la inserción del dump con el usuario root puesto que wiki_user no tiene permisos de creación / borrado de tablas. Para comprobar que la creación del usuario y las inserciones han sido correctas, podemos ejecutar (desde la máquina que se autorizó al crear al usuario si tiene instalado el cliente mysql) los siguientes comandos: mysql –u wiki_user –p –h <ip_mysql_server> use wikidb; show tables; ORACLE Las conexiones a la base de datos Oracle se realizarán únicamente desde el servidor de aplicaciones (portal Agrega). EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico mysql –u root –p –h <ip_mysql_server> use agrega; source CrearTablas.sql; source CargarDatos.sql; commit; 31 FIREWALL DMZ Servidor Web APACHE Alianza2 Alianza2 FIREWALL Interno Red De Datos Red De Aplicación Servidor Aplicaciones JBOSS/Tomcat Servidor de BBDD Oracle Red De Almacenamiento Durante el proceso de instalación se ejecutaron los siguientes pasos: 1. Con un usuario con permisos de DBA se ejecuta el script de creación de tablespace y usuario que se encuentra en el directorio bbdd_oracle: agrega_tablespace_user.sql 2. Con un usuario con permiso para la creación de tablas e índices debemos cargar los scripts que se encuentran en el directorio bbdd_oracle, pudiéndose distinguir tres tipos de scripts: bbdd_<modulo>.sql Scripts de creación de las tablas, índices, restricciones… datos_<modulo>.sql Scripts SQL para la inserción de datos iniciales necesarios en las tablas del portal. Adicionalmente a los scripts anteriores se facilitan unos scripts para el borrado de las tablas y restricciones existentes: bbdd_<modulo>_drop.sql Scripts para el borrado de las tablas, índices, restricciones… 3.2.3. AUTENTICACIÓN LDAP INTRODUCCIÓN El modo de acceso a la aplicación y a los distintos módulos funcionales se realizará a través del navegador web utilizando los protocolos HTTP y HTTPS para la autenticación del usuario en el portal. El sistema pedirá un login y una clave al usuario que validará mediante la operación Bind contra un directorio LDAP, el cual puede ser propio de la CCAA o interno del nodo, en donde residirá por cada usuario un identificador único y una clave cifradas con la función SHA-1. Si la autenticación es correcta, el portal continuará con la carga adquiriendo los roles de la base de datos (para la autorización de los accesos a los diferentes componentes del portal). EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico :1521 32 En caso contrario, se deniega el login y se notifica al usuario el error. Se controlará el tiempo de sesión (timeout de sesión) del usuario, de tal manera que cuando el usuario no mantenga actividad durante un periodo configurable entre 20 y 30 minutos, se le cerrará la sesión y se le obligará a autenticarse de nuevo para reiniciar la sesión. Alianza2 Alianza2 Desde la plataforma Agrega, únicamente desde el servidor de aplicaciones JBoss se efectuarán las conexiones al servidor LDAP, típicamente escuchando en el puerto 389 tal y como muestra la siguiente figura: HTTP 80 HTTPS 443 FIREWALL Interno Red De Aplicación Servidor de Directorios OpenLDAP Servidor Aplicaciones JBOSS/Tomcat BIND :389 Red De Almacenamiento Si existieran varios servidores de aplicación en cluster, todos y cada uno de ellos establecerían la conexión con el servidor de directorios LDAP. OPENLDAP La información relativa a los usuarios utilizada por el proceso de autenticación se almacenará en un directorio LDAP. Si la CCAA tuviera instalado un LDAP versión 3 se podría utilizar el mismo. En el caso en el cual no se deseara reutilizar un LDAP existente o se prefiriera instalar un nuevo LDAP, recomendamos OpenLDAP 2.2.13 o superior. El proceso de instalación completo viene descrito en el manual de instalación y operación de la plataforma y en la referencia (página oficial). Una vez instalado OpenLDAP, configuramos el servidor mediante el archivo de configuración /etc/openldap/slapd.conf: # # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema presente en EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Login: Pass: 33 allow bind_v2 Permitimos conexiones por parte de clientes usando LDAPv2. suffix "dc=agrega,dc=<nodo>,dc=es" Especificamos el sufijo DN (Distinguished Name) para las consultas que será pasado a la base de datos del LDAP. Se pueden especificar múltiples sufijos mediante múltiples líneas y al menos una entrada es requerida por cada definición de base de datos. rootdn "cn=Administrador,dc=agrega,dc=<nodo>,dc=es" Mediante esta directiva especificamos el DN que no se encuentra sujeto a controles de acceso o restricciones administrativos para operaciones sobre la base de datos. Como norma general cambiaremos <nodo> por el nombre del nodo de la CCAA. rootpw {password} Especificamos la contraseña para el DN rootdn. Se puede especificar en texto plano: rootpw secret Aunque también se permite dar la password generada mediante la función hash con el comando slappaswd: slappasswd -s secret Ejemplo: rootpw {SSHA}ZKKuqbEKJfKSXhUbHG3fG8MDn9j1v4QN directory /var/lib/ldap Mediante esta directiva especificamos el directorio donde se almacenan los ficheros BDB que contienen la base de datos y los índices asociados. Una vez configurado el servicio de LDAP procedemos crear la base de datos mediante el método offline. Para ello empleamos el comando: Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico include /etc/openldap/schema/nis.schema # Allow LDAPv2 client connections. This is NOT the default. allow bind_v2 pidfile /var/run/slapd.pid argsfile /var/run/slapd.args loglevel 256 ####################################################################### # ldbm and/or bdb database definitions ####################################################################### database bdb suffix "dc=agrega,dc=<nodo>,dc=es" rootdn "cn=Administrador,dc=agrega,dc=<nodo>,dc=es" # Cleartext passwords, especially for the rootdn, should # be avoided. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw {password} # rootpw {crypt}ijFYNcSNctBYg # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /var/lib/ldap # Indices to maintain for this database index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub 34 slapadd -l cargaInicial.ldif El contenido de la cargaInicial.ldif es: Alianza2 dn: dc=agrega,dc=indra,dc=es dc: agrega objectClass: dcObject objectClass: organization o: agrega Alianza2 dn: ou=users,dc=agrega,dc=indra,dc=es ou: users objectClass: top objectClass: organizationalUnit dn: dc=<sitio>,dc=agrega,dc=indra,dc=es dc: <sitio> objectClass: dcObject objectClass: organization o: <sitio> dn: ou=usuarios,dc=<sitio>,dc=agrega,dc=indra,dc=es ou: usuarios objectClass: top objectClass: organizationalUnit dn: cn=administrador,ou=usuarios,dc=<sitio>,dc=agrega,dc=indra,dc=es userPassword:: e1NIQX1OV29aSzNrVHNFeFVWMDBZd28xRzVqbFVLS3M9 objectClass: top objectClass: person sn: Administrador admin cn: administrador dn: ou=rol,dc=<sitio>,dc=agrega,dc=indra,dc=es ou: rol objectClass: top objectClass: organizationalUnit En donde se sustituirá <sitio> por el nombre del nodo de la CCAA. Gráficamente podemos ver el contenido del LDIF: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico dn: cn=Administrador,dc=agrega,dc=indra,dc=es objectClass: organizationalRole cn: Administrador 35 Para comprobar el correcto funcionamiento de LDAP podemos usar un navegador de LDAP como son LDAP Browser y Apache Directory Studio. La conexión se verá definida por los siguientes parámetros: IP del servidor LDAP Puerto de conexión: normalmente 389 Bind DN: cn=Administrador,dc=agrega,dc=indra,dc=es Bind Password: la contraseña que hemos especificado. Alianza2 Alianza2 En la capa de aplicación encontramos 3 componentes fundamentales: JDK 1.6: Es necesario disponer de la versión JDK 1.6 o superior para poder ejecutar tanto el servidor de aplicaciones como la galería de imágenes. Servidor de aplicaciones: el portal Agrega (desarrollo J2EE 1.4) se puede desplegar sobre el servidor de aplicaciones JBoss así como sobre el contenedor de Servlets Apache Tomcat junto con un servidor de colas Apache ActiveMQ. Galería de imágenes: cada vez que se carga un ODE en la plataforma, se genera una captura de pantalla (previsualización o thumbnail) del recurso, para ello, se hace uso de diversas herramientas de software libre tales como ffmpeg, convert, firefox… La versión de Agrega referenciada en el manual es la 1.1.1. 3.3.1. JDK 1.6 La versión mínima para ejecutar la plataforma es de Java 1.5, pero por razones de rendimiento y actualizaciones se aconseja la utilización de la JDK 1.6u6 o superior. Una vez instalada es importante modificar el perfil del usuario que arrancará el jboss configurando las siguientes variables de entorno: 1. Se recomienda crear el enlace simbólico /opt/jdk que apunte al directorio real donde se ha instalado la JDK con el fin de independizar las variables de entorno de la versión de JDK instalada. Por ejemplo: ln -s /usr/java/jdk1.6.0_06/ jdk 2. Editamos el /etc/profile añadiendo las dos exportaciones siguientes: export JAVA_HOME=/opt/jdk export PATH=$PATH:$JAVA_HOME/bin Para comprobar que se ha instalado la JDK correctamente, basta con salir de la shell, hacer de nuevo logging en el sistema y ejecutar el comando: java -version EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 3.3. CAPA DE APLICACIÓN 36 CONFIGURANDO JAVA HOTSPOT VM En las referencias especificadas para JDK se describen todos los parámetros y los efectos producidos sobre la JVM, entre los más importantes destacamos: Alianza2 Parámetro -Xms Descripción Establecemos el tamaño mínimo de pila -Xmx Establecemos el tamaño máximo de pila Alianza2 Tamaño de la generación permanente. -XX:ThreadStackSize Se necesita para la carga de los metadatos de las clases. Tamaño de la pila de threads (en KBytes) En cuanto a la memoria, veamos con un poco más de detalle la importancia de escoger correctamente los valores -Xms y –Xmx: En la figura apreciamos la diferencia entre el espacio reservado y el espacio virtual de la pila. Al arrancar la JVM, todo el espacio de la pila es reservado. El tamaño del espacio reservado se especifica mediante la opción –Xmx. Si el valor de –Xms es inferior que el valor –Xmx, no todo el espacio reservado es inmediatamente volcado a la JVM. El espacio no volcado se denomina “virtual” en la figura. Las diferentes partes de la pila (permanent generation, tenured generation y young generation) pueden crecer mientras lo necesiten hasta el límite de cada espacio virtual. En la inicialización de la JVM, el tamaño máximo de espacio es virtualmente reservado pero no reservado de la memoria física a menos que se necesite. El rango de espacio completo reservado por un objeto en memoria se puede dividir dentro de la young generation y tenured generation. La young generation consiste en el eden más dos espacios survivor. Los objetos cuando son creados son inicialmente ubicados en el eden. Un espacio survivor está vacío todo el tiempo, y sirve como destino entre la copia de colecciones de objetos vivos en el eden y el otro EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico -XX:MaxPermSize 37 espacio survivor. Los objetos se copian entre los espacios survivor hasta que son lo suficientemente viejos, momento en el cual son copiados a la tenured generation. Existe una tercera generación denominada permanent generation. En ella se mantienen los Alianza2 datos necesarios para la JVM que describen los objetos que no tienen una equivalencia Alianza2 directa en el lenguaje Java, por ejemplo, los objetos que describen clases y métodos se almacenan en la permanent generation. Así pues, el tamaño total ocupado por la JVM será el valor Xmx + MaxPermSize (dicho valor, nunca debe superar la memoria física real del servidor para evitar la swap). se agregan 3 colectores adicionales. Cada uno está implementado o para enfatizar el throughput de la aplicación o para minimizar los tiempos de pausa por la recolección de basura. Por defecto, se emplea el Serial collector con el cual la recolección se realiza en un único thread y es ejecutado en serie junto con la aplicación. Los otros recolectores posibles son: 1. Throughput collector: emplea una versión paralela del recolector de basura de la memoria young generation. Para habilitarlo hay que emplear la opción – XX:+UseParallelGC desde la línea de comandos. La memoria tenured generation es recolectada con el recolector serie estándar. 2. Concurrent low pause collector: se habilita usando la opción –Xincgc o XX:+UseConcMarkSweepGC desde la línea de comandos. Se emplea para recolectar la tenured generation y lo realiza concurrentemente con la ejecución de la aplicación. La aplicación se ve pausada cortos periodos de tiempo durante la recolección. 3. Incremental low pause collector (train): no ha cambiado desde la versión 1.4.2 y actualmente no se encuentra en desarrollo activo (no será soportado en futuras releases probablemente). Para usarlo se habilita mediante la propiedad XX:+UseTrainGC. NOTA: en sistemas de 64 bits donde los tamaños de páginas sean mayores se recomienda usar el recolector Concurrent low pause collector. Las recomendaciones oficiales de Sun para el uso de los distintos recolectores son las siguientes: Garbage Collector Throughput collector Recomendación Se emplea cuando se desea mejorar el rendimiento de la aplicación y disponemos de múltiples procesadores. Las recolecciones mayores o completas son iguales que en el recolector serie, sin embargo, en un host EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Con respecto al recolector de basura (garbage collector, GC), en la plataforma 1.5 de Java 38 con N CPUs, usará N hilos recolectores para las recolecciones menores o parciales. Si la aplicación puede permitirse compartir los recursos de procesadores Concurrent con el recolector mientras se está ejecutando podemos beneficiarnos de low pause menores pausas durante la recolección. Típicamente las aplicaciones que collector tienen datos que permanecen en memoria durante bastante tiempo y con Alianza2 Alianza2 uno o dos procesadores. Incremental concurrentemente por el recolector se divide en pequeñas porciones de low pause tiempo programadas entre las recolecciones de la memoria young collector generation. Es útil cuando tenemos aplicaciones que necesitan pausas cortas y se ejecutan en máquinas con sólo 1 o 2 procesadores. 3.3.2. SERVIDOR DE APLICACIONES INTRODUCCIÓN El portal Agrega es un desarrollo J2EE que puede ser desplegado en cualquier contenedor de aplicaciones J2EE compatible (versión 1.4). Debido a las características técnicas, la comunidad open source que existe a su alrededor, la estabilidad mostrada en entornos de producción y las continuas mejoras y evoluciones hemos seleccionado a JBoss como el servidor de aplicaciones de referencia. NOTA: A lo largo de la sección, se hará referencia a $JBOSS_HOME como el directorio donde se ha instalado el jboss; por ejemplo: /opt/jboss-4.0.5.GA/. El alias $TOMCAT_HOME se empleará para hacer referencia al directorio donde se encuentra instalado Apache Tomcat, por ejemplo: /opt/tomcat/apache-tomcat-5.5.27/. En adelante se empleará el alias $APPSERVER_HOME para referirse a $JBOSS_HOME o $TOMCAT_HOME según corresponda. COMPROBACIONES PREVIAS DE SISTEMA APERTURA DE FICHEROS Se comprueba que no exista límite de apertura de ficheros (open files) con el comando ulimit -a Si existe alguna limitación se deben agregar las siguientes líneas en el fichero /etc/limits.conf: * soft nofile * hard nofile 65530 65535 MÁXIMO NÚMERO DE SOCKETS DE RED EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico El modo incremental se consigue gracias a que el trabajo realizado 39 Para comprobar el valor actual empleamos el siguiente comando: sysctl -a |grep -i somaxconn Si el límite son 128 deberemos ampliarlo a un valor superior a 1024 (se recomienda 4096). Para ello, en el fichero /etc/sysctl.conf agregamos la línea: Alianza2 net.core.somaxconn = 4096 También podemos cambiar en caliente el valor (para no tener que reiniciar el servidor) Alianza2 mediante el comando: sysctl –w net.core.somaxconn=4096 NOTA: es necesario reiniciar el servidor para que ambos cambios efectuados sean tenidos SERVIDOR DE APLICACIONES JBOSS USUARIO Y GRUPO JBOSS Se recomienda que el proceso de JBossAS sea lanzado por un usuario (diferente de root) con permisos adecuados, así garantizaremos que el usuario pueda escribir en los diferentes directorios necesarios para el correcto funcionamiento del portal. Los pasos a dar serían los siguientes: 1. Creamos el grupo jboss groupadd jboss 2. Creamos el usuario jboss en el grupo primario jboss (-g) con la consola bash (-s), creando un home para el usuario si no existe (-m) en el home /opt/jboss (-d) useradd -g jboss -s /bin/bash -m -d /opt/jboss jboss 3. Establecemos un password para el usuario jboss passwd jboss Para comprobar que los pasos se han realizado correctamente, podemos probar a entrar en el host con el usuario jboss y la password establecida. Directorio $JBOSS_HOME/bin. Scripts de arranque. Dentro del directorio bin, JBoss almacena los scripts de arranque tanto para sistemas Linux como para Windows (run.sh y run.bat respectivamente). run.conf Adicionalmente, existe un fichero denominado run.conf que contiene los parámetros a pasar a la máquina virtual de Java (JVM) para el arranque del JBoss. En concreto, la línea que nos interesa es: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico en cuenta. 40 if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS="-Xms128m -Xmx512m Dsun.rmi.dgc.server.gcInterval=3600000" fi -Dsun.rmi.dgc.client.gcInterval=3600000 - Alianza2 Completamos dicha línea, eliminando los parámetros -Dsun.rmi.dgc.* y agregando otros nuevos, quedando así: if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS="-Xms512m Djava.awt.headless=true" fi Alianza2 –Xmx1536m -XX:MaxPermSize=786m - que estamos indicando parámetros tales como las reservas de memoria, el comportamiento de AWT, etc. Una vez comprendido como la JVM hace uso de la memoria reservada, podemos aplicar unas recomendaciones prácticas de los valores en función de la memoria total del sistema (asumiendo que el mayor consumo de memoria en el servidor será el JBoss y no hay otros servicios que hagan un uso intensivo de memoria como pueden ser una BD, un LDAP…) Memoria física Servidor 1 GB 2 GB 2.5 GB 4 GB -Xms 256m 512m 512m 512m -Xmx 512m 1024m 1536m 2560m -XX:MaxPermSize 384m 768m 768m 768m Adicionalmente, en aquellos casos en los que la salida a los puertos 80 y 443 (HTTP y HTTPS respectivamente) se realice a través de un proxy, es posible configurarlo directamente sobre la JVM mediante las opciones siguientes: # Proxy settings for JVM JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=<proxy_ip> -Dhttp.proxyPort=<proxy_port> -Dhttp.proxyUser=<usuario> -Dhttp.proxyPassword=<pass> -Dhttp.nonProxyHosts=localhost|<domino>|<cas-domino>" NOTA: el portal, una vez cargado todos los módulos, con menos de 2 GB de RAM tendrá que hacer uso de la memoria SWAP con la consiguiente pérdida de rendimiento que ello implica. /etc/init.d/jboss y run.sh Al realizar la instalación, en los sistemas Linux, en el directorio bin se encuentra el fichero “jboss_init_redhat.sh”, fichero que se suele copiar al directorio /etc/init.d/ para el arranque y parada del servidor. En el script, se añade una línea para que lea el fichero /etc/jboss.conf que contiene las siguientes líneas: JBOSS_HOME=/opt/jboss JBOSS_USER=jboss EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Es fundamental configurar correctamente los parámetros de la JVM que arrancará JBoss, ya 41 El contenido del script /etc/init.d/jboss es el siguiente: #!/bin/sh # # $Id: jboss_init_redhat.sh 46554 2006-07-28 10:29:13Z dimitris $ # # JBoss Control Script # # To use this script run it as root - it will switch to the specified user # # Here is a little (and extremely primitive) startup/shutdown script # for RedHat systems. It assumes that JBoss lives in /usr/local/jboss, # it's run by user 'jboss' and JDK binaries are in /usr/local/jdk/bin. # All this can be changed in the script itself. # # Either modify this script for your requirements or just ensure that # the following variables are set correctly before calling the script. Alianza2 #define where jboss is - this is the directory containing directories log, bin, conf etc . /etc/jboss.conf JBOSS_HOME=${JBOSS_HOME:-"/opt/jboss"} #define the user under which jboss will run, or use 'RUNASIS' to run as the current user JBOSS_USER=${JBOSS_USER:-"jboss"} #make sure java is in your path JAVAPTH=${JAVAPTH:-"/opt/jdk/bin"} #configuration to use, usually one of 'minimal', 'default', 'all' JBOSS_CONF=${JBOSS_CONF:-"default"} #bind address for jboss services, by default bind to *all* NICs JBOSS_HOST=${JBOSS_HOST:-"0.0.0.0"} #define the classpath for the shutdown class JBOSSCP=${JBOSSCP:-"$JBOSS_HOME/bin/shutdown.jar:$JBOSS_HOME/client/jnet.jar"} #define the script to use to start jboss JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh $JBOSS_HOST"} -c $JBOSS_CONF if [ "$JBOSS_USER" = "RUNASIS" ]; then SUBIT="" else SUBIT="su - $JBOSS_USER -c " fi if [ -n "$JBOSS_CONSOLE" -a ! -d "$JBOSS_CONSOLE" ]; then # ensure the file exists touch $JBOSS_CONSOLE if [ ! -z "$SUBIT" ]; then chown $JBOSS_USER $JBOSS_CONSOLE fi fi if [ -n "$JBOSS_CONSOLE" -a ! -f "$JBOSS_CONSOLE" ]; then echo "WARNING: location for saving console log invalid: $JBOSS_CONSOLE" echo "WARNING: ignoring it and using /dev/null" JBOSS_CONSOLE="/dev/null" fi -b EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Alianza2 42 #define what will be done with the console log JBOSS_CONSOLE=${JBOSS_CONSOLE:-"/dev/null"} JBOSS_CMD_START="cd $JBOSS_HOME; $JBOSSSH" JBOSS_CMD_STOP=${JBOSS_CMD_STOP:-"java -classpath org.jboss.Shutdown --shutdown"} Alianza2 $JBOSSCP Alianza2 if [ ! -d "$JBOSS_HOME" ]; then echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME exit 1 fi echo JBOSS_CMD_START = $JBOSS_CMD_START case "$1" in start) cd $JBOSS_HOME/bin if [ -z "$SUBIT" ]; then eval $JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 & else $SUBIT "$JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &" fi ;; stop) if [ -z "$SUBIT" ]; then $JBOSS_CMD_STOP else $SUBIT "$JBOSS_CMD_STOP" fi ;; restart) $0 stop $0 start ;; *) echo "usage: $0 (start|stop|restart|help)" esac Se han destacado 4 líneas en negrita: ./etc/jboss.conf Especificamos que se lea el fichero con las variables de entorno ya comentadas anteriormente. JAVAPTH=${JAVAPTH:-"/opt/jdk/bin"} Indicamos el directorio donde se encuentran los binarios de la JDK. JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh -c $JBOSS_CONF -b $JBOSS_HOST"} Ejecutamos el script run.sh con los parámetros –c default (valor de la variable JBOSS_CONF por defecto) y con el parámetro –b 0.0.0.0 (bind en todas las direcciones IPs de la máquina). EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then export PATH=$PATH:$JAVAPTH fi 43 Si se deseara que JBoss solo escuchara en una interfaz de red de entre todas las disponibles de la máquina deberíamos especificarle la variable de entorno JBOSS_HOST en el fichero /etc/jboss.conf. Alianza2 Alianza2 JBOSS_CMD_START="cd $JBOSS_HOME; $JBOSSSH" Es importante destacar que se ha modificado la línea para que el path desde el cual se ejecuta el JBoss sea el propio $JBOSS_HOME y no $JBOSS_HOME/bin como Ficheros de configuración de JBoss Los ficheros de configuración relevantes para la correcta configuración de la plataforma Agrega son los siguientes: Configuración de los conectores de JBoss: HTTP y AJP En el fichero $JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/server.xml se configuran los parámetros de los conectores HTTP y AJP: <!-- A HTTP/1.1 Connector on port 8080 --> <Connector port="8080" address="${jboss.bind.address}" maxThreads="250" strategy="ms" maxHttpHeaderSize="8192" emptySessionPath="true" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"/> <!-- A AJP 1.3 Connector on port 8009 --> <Connector port="8009" address="${jboss.bind.address}" emptySessionPath="true" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" maxThreads="400" connectionTimeout="600000"/> Con respecto al conector AJP, que es quien recibirá las peticiones de Apache, en la wiki oficial de JBoss especificada en las referencias aconsejan una configuración de 200 threads por CPU, por lo que para una máquina con 2 CPUs el valor recomendado sería maxThreads=”400”. El tiempo máximo de conexión debe ser igual al valor configurado en los workers de Apache (se describirá en detalle en la sección de Apache). Veamos los parámetros más importantes de configuración de ambos conectores: Parámetro HTTP Descripción Valor por defecto La longitud máxima de la cola de conexiones entrantes cuando todos los hilos que atienden acceptCount peticiones están en uso. Cualquier petición de conexión que se reciba cuando todos los threads 100 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico especifica el fichero original de la distribución de JBoss. 44 estén en uso será rechazada. El número de milisegundos que el conector esperará, después de aceptar una conexión, hasta connectionTimeout que se le solicite la petición de URI. 60.000 (60 sg) Alianza2 Este flag permite al contenedor de servlets usar un disableUploadTimeout tiempo máximo de espera diferente mientras se esta Alianza2 true ejecutando el servlet. maxHttpHeaderSize petición y de la respuesta (especificado en bytes). 4096 bytes (4 KB) Máximo número de peticiones HTTP que pueden ser encoladas hasta que el servidor cierra la conexión. Si se especifica un valor de 1 se desactivará el maxKeepAliveRequests HTTP/1.0 keep-alive y HTTP/1.1 keep-alive y 100 pipelining. Si se especifica el valor -1 se permitirán infinitas peticiones encoladas. El máximo número de hilos procesadores de peticiones sin usar que pueden existir hasta que el maxSpareThreads pool de hilos comienza a parar los hilos 50 innecesarios. El máximo número de hilos procesadores de peticiones creados por el conector. Determina el maxThreads máximo número de peticiones simultáneas que 200 pueden ser procesadas. Número minSpareThreads de hilos procesadores de peticiones creados cuando el conector arranca. 4 El puerto TCP sobre el cual el conector creará el port socket servidor de Java esperando peticiones - entrantes. AJP Parámetro Descripción Valor por defecto El número de milisegundos que el conector esperará, connectionTimeout después de aceptar una conexión, hasta que se le Infinito solicite la petición de URI. El máximo número de hilos procesadores de peticiones maxSpareThreads sin usar que pueden existir hasta que el pool de hilos 50 comienza a parar los hilos innecesarios. maxThreads El máximo número de hilos procesadores de peticiones 200 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Define el tamaño máximo de la cabecera HTTP de la 45 creados por el conector. Determina el máximo número de peticiones simultáneas que pueden ser procesadas. Número de hilos procesadores de peticiones creados minSpareThreads 4 cuando el conector arranca. Alianza2 El puerto TCP sobre el cual el conector creará el socket port Alianza2 - servidor de Java esperando peticiones entrantes. Datasources Puesto que cada módulo que hace uso de la base de datos podría desplegarse en un base de datos tiene su propio datasource definido. En JBoss los ficheros datasources se definen dentro del directorio deploy ($JBOSS_HOME/server/default/deploy) y siempre acaban con el sufijo “–ds.xml”. En nuestro caso, durante la instalación se habrá generado un fichero denominado “<sitio>-ds.xml” donde <sitio> será el nombre de la CCAA. El contenido del fichero es el siguiente: <?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>jdbc/planificadorDS</jndi-name> <connection-url>jdbc:mysql://ip_basedatos:3306/ccaa</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>usuario</user-name> <password>password</password> <exception-sorter-classname>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorterclass-name> <!-- sql to call when connection is created <new-connection-sql>some arbitrary sql</new-connection-sql> --> <!-- sql to call on an existing pooled connection when it is obtained from pool <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql> --> <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) --> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource> … Los parámetros a configurar son los destacados en negrita: jndi-name: Nombre JNDI con el que se publica la conexión a base de datos. connection-url: URL que especifica la conexión al servidor de base de datos. En el caso de MySQL es: jdbc:mysql://ip_basedatos:puerto/base_datos Para PostgreSQL es: jdbc:postgresql://ip_basedatos: puerto/base_datos En el caso de Oracle es: jdbc:oracle:thin:@ip_oracle:1521:agrega EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico servidor JBoss diferente, atacando a una base de datos distinta, cada módulo con acceso a 46 driver-class: driver empleado para la conexión JDBC a la base de datos. Para MySQL es com.mysql.jdbc.Driver Para PostgreSQL es org.postgresql.Driver Para Oracle (Thin) es oracle.jdbc.driver.OracleDriver user-name: usuario de acceso a la base de datos. password: contraseña de acceso a la base de datos. Alianza2 Alianza2 NOTA: En el directorio $JBOSS_HOME/docs/examples/jca/ vienen ejemplos de datasources para la mayoría de las bases de datos. datasources asociados a los siguientes nombres JNDI: <jndi-name>jdbc/planificadorDS</jndi-name> <jndi-name>jdbc/modificadorDS</jndi-name> <jndi-name>jdbc/contenidosportalDS</jndi-name> <jndi-name>jdbc/publicacionDS</jndi-name> <jndi-name>jdbc/LocalizadorDS</jndi-name> <jndi-name>jdbc/indexadorDS</jndi-name> <jndi-name>jdbc/buscarDS</jndi-name> <jndi-name>jdbc/adminusuariosDS</jndi-name> <jndi-name>jdbc/auditoriaDS</jndi-name> <jndi-name>jdbc/valoracionDS</jndi-name> <jndi-name>jdbc/driDS</jndi-name> Para conseguir que las clases del driver JDBC de MySQL se encuentren disponibles para JBoss, es necesario copiar el fichero mysql-connector-java-version.bin.jar al directorio lib ($JBOSS_HOME/server/default/lib). Colas JMS El portal Agrega, hace uso de colas JMS para las comunicaciones asíncronas en los módulos. JBoss integra JBossMQ: varios servicios que trabajando juntos proveen servicios a nivel de la JMS API a las aplicaciones clientes. Los principales servicios a tener en cuenta son: 1. Invocation Layer Servicios responsables de la gestión de los protocolos de comunicación (bidireccionales) que los clientes usan para enviar y recibir los mensajes concurrentemente. Cada servicio IL se asocial a una factoria de conexiones JMS especificada bajo el árbol JNDI. JBossMQ provee los siguientes ILs: UIL2 IL: Unified Invocation Layer version 2(UIL2). JVM IL: Java Virtual Machine (JVM) Invocation Layer. Desarrollado para evitar la sobrecarga TCP/IP cuando el cliente JMS está siendo ejecutado en la misma máquina virtual que el servidor de colas (nuestro caso). El servicio IL usa llamadas directas a métodos desde el servidor para servir a los clientes. Se EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico En concreto, si la instalación se realiza en un único JBoss se definirán los siguientes 47 incrementa así la eficiencia al no crearse ningún socket ni hilos para la comunicación. Configuraremos así las colas para el portal Agrega. HTTP IL: HTTP Invocation Layer (HTTPIL) permite el acceso del servicio JBossMQ mediante los protocolos HTTP y HTTPs. Alianza2 Alianza2 2. Security Manager Servicio que controla el acceso a los destinos a partir de una lista de control de acceso. 3. Destination Manager 4. Persistence Manager Servicio que se encarga de la persistencia de los mensajes almacenados en las colas. 5. Destinations: Queues y Topics Un destino no es más que un objeto en el servidor JBossMQ que usan los clientes para enviar y recibir los mensajes. Hay 2 tipos de destinos conforme a la API JMS: Queue y Topics. Las referencias a los destinos creados se almacenan en el árbol JNDI. Queues: las colas siguen el paradigma punto a punto. Si un mensaje entra en una cola y hay múltiples recibidores escuchando, sólo uno consumirá el mensaje (al leer el mensaje éste sale de la cola). Topics: se basan en el paradigma de la publicación/subscripción. Cuando un cliente publica un mensaje al destino Topic, el mensaje es entregado a todos y cada uno de los subscriptores de la cola (clientes que se encuentren subscritos a la cola). El portal de Agrega, necesita que existan los siguientes destinos en el fichero $JBOSS_HOME/server/default/deploy/jms/jbossmq-destinations-service.xml: … <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=A"> <depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=B"> <depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=C"> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Servicio que mantiene todos los destinos que se han creado. 48 En donde apreciamos que además de los destinos ya existentes por parte de JBoss, se han agregado los destinos (colas Queue) de auditarQueue y modificador. Para que los desarrollos puedan emplear el servicio JVM-IL es necesario agregar un alias en el fichero $JBOSS_HOME/server/default/deploy/jms/jvm-il-service.xml, quedando el fichero así: <?xml version="1.0" encoding="UTF-8"?> <!-- $Id: jvm-il-service.xml 16662 2003-08-27 04:38:22Z patriot1burke $ --> <server> <!-- JBossMQ in memory "communication --> <mbean code="org.jboss.mq.il.jvm.JVMServerILService" name="jboss.mq:service=InvocationLayer,type=JVM"> <depends optional-attribute-name="Invoker">jboss.mq:service=Invoker</depends> <attribute name="ConnectionFactoryJNDIRef">java:/ConnectionFactory</attribute> <attribute name="XAConnectionFactoryJNDIRef">java:/XAConnectionFactory</attribute> <attribute name="PingPeriod">0</attribute> </mbean> <mbean code="org.jboss.naming.NamingAlias" name="jboss.mq:service=InvocationLayer,type=JVM"> <attribute name="FromName">JVMILConnectionFactory</attribute> <attribute name="ToName">java:/ConnectionFactory</attribute> <depends>jboss:service=Naming</depends> </mbean> </server> Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=D"> <depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=auditarQueue"> <depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=modificador"> <depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=ex"> <depends optional-attributename="DestinationManager">jboss.mq:service=DestinationManager</depends> </mbean> … 49 ALIAS EN DIRECTORIOS Hay dos módulos (RSS y la galería de imágenes) que necesitan acceder a los recursos que se publican en la carpeta compartida. Puesto que se acceden directamente desde el JBoss (no pasando por Apache), es necesario definir manualmente 2 alias para que accedan al Alianza2 recurso real. Alianza2 En el fichero $JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/server.xml <Host name="localhost" autoDeploy="false" deployOnStartup="false" deployXML="false" configClass="org.jboss.web.tomcat.security.config.JBossContextConfig" > <Context path="/rss" appBase="" docBase="/export/ccaa/<sitio>/uploads/rss" debug="99" reloadable="true"> </Context> <Context path="/galeriaimg" appBase="" docBase="/export/ccaa/<sitio>/uploads/galeriaimg/<sitio>" debug="99" reloadable="true"> </Context> Mediante la definición de estos dos alias conseguimos que cuando el módulo rss solicite internamente un recurso a: http://localhost:8080/rss realmente acceda a los recurso de la carpeta /export/ccaa/<sitio>/uploads/rss. Análogamente sucede para el alias de la galería de imágenes. LIBRERÍAS DEL JBOSS JBoss tiene dos directorios de librerías, a conocer: $JBOSS_HOME\lib En el directorio lib contiene los JARs necesario para el set up del arranque del JBoss. Dentro del directorio se encuentra un subdirectorio denominado endorsed en el cual, durante la instalación se sobrescribieron los siguientes ficheros: o resolver.jar o serializer.jar o xalan.jar o xercesImpl.jar o xml-apis.jar $JBOSS_HOME\server\default\delpoy\lib Todos los ficheros JAR del directorio se cargarán por JBoss en el classpath compartido por todos los módulos (WARs). En concreto, agregaremos tres jars comunes a todos los módulos: mysql-connector-java-5.0.4-bin.jar (para las conexiones con MySQL) EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico definimos los siguientes dos alias (rss y galeriaimg): 50 casclient-2.1.1-nossl.jar (autenticación por HTTP) o casclient-2.1.1.jar (si tenemos certificado y atenticamos por HTTPs) truezip-6.6.jar Alianza2 SERVIDOR DE APLICACIONES: APACHE TOMCAT + APACHE ACTIVEMQ Alianza2 USUARIO Y GRUPO TOMCAT Se recomienda que los procesos de Tomcat y ActiveMQ sean lanzados por un usuario (diferente de root) con permisos adecuados, así garantizaremos que el usuario pueda escribir Los pasos a dar serían los siguientes: 1. Creamos el grupo tomcat groupadd tomcat 2. Creamos el usuario tomcat en el grupo primario tomcat (-g) con la consola bash (-s), creando un home para el usuario si no existe (-m) en el home /opt/tomcat (-d) useradd -g tomcat -s /bin/bash -m -d /opt/tomcat tomcat 3. Establecemos un password para el usuario tomcat passwd tomcat Para comprobar que los pasos se han realizado correctamente, podemos probar a entrar en el host con el usuario tomcat y la password establecida. Directorio $TOMCAT_HOME/bin. Scripts de arranque. Dentro del directorio bin, Tomcat almacena los scripts de arranque tanto para sistemas Linux como para Windows (startup.sh y startup.bat respectivamente). startup.sh Con el de que el path desde el cual se usen las rutas relativas sea el $TOMCAT_HOME y no $TOMCAT_HOME/bin, se aconseja modificar el fichero startup.sh de la siguiente manera: cd .. PRGDIR=/opt/apache-tomcat-5.5.27/bin exec "$PRGDIR"/"$EXECUTABLE" start "$@" catalina.sh Adicionalmente, existe un fichero denominado catalina.sh que contiene los parámetros a pasar a la máquina virtual de Java (JVM) para el arranque del JBoss. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico en los diferentes directorios necesarios para el correcto funcionamiento del portal. 51 En concreto, la línea que nos interesa es: JAVA_OPTS="$JAVA_OPTS Djava.awt.headless=true" -Xms512M -Xmx1536m -XX:MaxPermSize=494M - Es fundamental configurar correctamente los parámetros de la JVM que arrancará Tomcat, Alianza2 ya que estamos indicando parámetros tales como las reservas de memoria, el Alianza2 comportamiento de AWT, etc. Una vez comprendido como la JVM hace uso de la memoria reservada, podemos aplicar Memoria física Servidor 1 GB 2 GB 2.5 GB 4 GB -Xms 256m 512m 512m 512m -Xmx 512m 1024m 1536m 2560m -XX:MaxPermSize 384m 768m 768m 768m NOTA: el portal, una vez cargado todos los módulos, con menos de 2 GB de RAM tendrá que hacer uso de la memoria SWAP con la consiguiente pérdida de rendimiento que ello implica. En aquellos casos en los que la salida a los puertos 80 y 443 (HTTP y HTTPS respectivamente) se realice a través de un proxy, es posible configurarlo directamente sobre la JVM mediante las opciones siguientes: # Proxy settings for JVM JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=<proxy_ip> -Dhttp.proxyPort=<proxy_port> -Dhttp.proxyUser=<usuario> -Dhttp.proxyPassword=<pass> -Dhttp.nonProxyHosts=localhost|<domino>|<cas-domino>" /etc/profile.d/tomcat.sh Al realizar la instalación, en los sistemas Linux, en el directorio /etc/profile.d se almacenan ficheros que suelen modificar las variables de entorno de todos los usuarios. Se recomienda crear el fichero tomcat.sh en donde se defina la variable CATALINA_HOME de la siguiente manera: CATALINA_HOME=/opt/tomcat/apache-tomcat-5.5.27 Directorio $ACTIVEMQ_HOME/bin. Scripts de arranque. Dentro del directorio bin, Apache ActiveMQ almacena los scripts de arranque. activemq Con el usuario tomcat deberemos ejecutar el script y dejarlo corriendo en background. Por defecto levantará el servidor de colas y será accesible en el puerto 61616. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico unas recomendaciones prácticas de los valores en función de la memoria total del sistema: 52 Ficheros de configuración de Apache Tomcat Los ficheros de configuración relevantes para la correcta configuración de la plataforma Agrega son los siguientes: Alianza2 Configuración de los conectores de Tomcat: HTTP y AJP Alianza2 En el fichero $TOMCAT_HOME/conf/server.xml se configuran los parámetros de los <Service name="Catalina"> <Connector port="8080" redirectPort="8443" minSpareThreads="25" connectionTimeout="20000" maxSpareThreads="75" maxThreads="400"> </Connector> <Connector port="8009" redirectPort="8443" protocol="AJP/1.3" maxThreads="400" connectionTimeout="600000"> </Connector> … Con respecto al conector AJP, que es quien recibirá las peticiones de Apache, en la wiki oficial de JBoss especificada en las referencias aconsejan una configuración de 200 threads por CPU, por lo que para una máquina con 2 CPUs el valor recomendado sería maxThreads=”400”. El tiempo máximo de conexión debe ser igual al valor configurado en los workers de Apache (se describirá en detalle en la sección de Apache). Veamos los parámetros más importantes de configuración de ambos conectores: HTTP Descripción Parámetro Valor por defecto La longitud máxima de la cola de conexiones entrantes cuando todos los hilos que atienden acceptCount peticiones están en uso. Cualquier petición de 100 conexión que se reciba cuando todos los threads estén en uso será rechazada. El connectionTimeout número de milisegundos que el conector esperará, después de aceptar una conexión, hasta que se le solicite la petición de URI. 60.000 (60 sg) Este flag permite al contenedor de servlets usar un disableUploadTimeout tiempo máximo de espera diferente mientras se esta true EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico conectores HTTP y AJP: 53 ejecutando el servlet. Define el tamaño máximo de la cabecera HTTP de la maxHttpHeaderSize petición y de la respuesta (especificado en bytes). 4096 bytes (4 KB) Máximo número de peticiones HTTP que pueden ser Alianza2 encoladas hasta que el servidor cierra la conexión. Alianza2 Si se especifica un valor de 1 se desactivará el maxKeepAliveRequests HTTP/1.0 keep-alive y HTTP/1.1 keep-alive y 100 pipelining. Si se especifica el valor -1 se permitirán infinitas maxSpareThreads El máximo número de hilos procesadores de peticiones sin usar que pueden existir hasta que el pool de hilos comienza a parar los hilos innecesarios. El máximo número de hilos procesadores de 50 peticiones creados por el conector. Determina el maxThreads máximo número de peticiones simultáneas que 200 pueden ser procesadas. Número minSpareThreads de hilos procesadores de peticiones creados cuando el conector arranca. 4 El puerto TCP sobre el cual el conector creará el port socket servidor de Java esperando peticiones - entrantes. AJP Parámetro Descripción Valor por defecto El número de milisegundos que el conector esperará, connectionTimeout después de aceptar una conexión, hasta que se le Infinito solicite la petición de URI. El máximo número de hilos procesadores de peticiones maxSpareThreads sin usar que pueden existir hasta que el pool de hilos 50 comienza a parar los hilos innecesarios. El máximo número de hilos procesadores de peticiones maxThreads creados por el conector. Determina el máximo número 200 de peticiones simultáneas que pueden ser procesadas. Número de hilos procesadores de peticiones creados minSpareThreads cuando el conector arranca. 4 El puerto TCP sobre el cual el conector creará el socket port servidor de Java esperando peticiones entrantes. - EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico peticiones encoladas. 54 DATASOURCES Puesto que cada módulo que hace uso de la base de datos podría desplegarse en un servidor Tomcat diferente, atacando a una base de datos distinta, cada módulo con acceso a base de datos tiene su propio datasource definido. Alianza2 Alianza2 En Tomcat los ficheros datasources se definen dentro del fichero En el fichero $TOMCAT_HOME/conf/server.xml definimos por cada contexto tanto las colas JMS como los datasources a emplear por cada recurso (módulo WAR) que tenemos. A modo de ejemplo, el contenido podría ser: <Host appBase="webapps" name="localhost"> <Context path="/catalogacion-1"> <Resource name="DefaultDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/contenidosportal-F1"> <Resource name="jdbc/contenidosportalDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/indexador-0.1"> <Resource name="jdbc/indexadorDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/empaquetadorbasico-F1"> <Resource EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico … 55 Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico name="jdbc/LocalizadorDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/RemotingGalleryServer"> </Context> <Context path="/valoracion-1"> <Resource name="jdbc/valoracionDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/visualizadorcontenidos"> </Context> <Context path="/agregadorRSS-1.0"> <Resource name="jdbc/buscarDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/cas"> </Context> <Context path="/entregar-1"> <Resource name="DefaultDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/validador-1"> 56 Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <Resource name="DefaultDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/adminusuarios"> <Resource name="jdbc/adminusuariosDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/localizador-1"> <Resource name="jdbc/LocalizadorDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/buscador"> </Context> <Context path="/ModificadorWeb"> </Context> <Context path="/PortalEmpaquetador"> </Context> <Context path="/oaipmh"> <Resource name="DefaultDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context 57 Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico path="/auditoria"> <Resource name="jdbc/auditoriaDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> <Resource auth="Container" description="my Queue" name="jms/auditarQueue" type="org.apache.activemq.command.ActiveMQQueue" physicalName="auditarQueue" factory="org.apache.activemq.jndi.JNDIReferenceFactory"/> </Context> <Context path="/fuentestaxonomicas-1"> <Resource name="DefaultDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/planificador-1.0"> <Resource name="jdbc/planificadorDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> <Resource auth="Container" description="my Queue" name="jms/modificador" type="org.apache.activemq.command.ActiveMQQueue" physicalName="modificador" factory="org.apache.activemq.jndi.JNDIReferenceFactory"/> <Resource auth="Container" description="my Queue" name="jms/C" type="org.apache.activemq.command.ActiveMQQueue" physicalName="C" factory="org.apache.activemq.jndi.JNDIReferenceFactory"/> </Context> <Context 58 Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico path="/buscar-1"> <Resource name="jdbc/buscarDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/visualizador-1"> </Context> <Context path="/gestorFlujo"> </Context> <Context path="/catalogadorWeb"> </Context> <Context path="/modificador-1"> <Resource name="jdbc/modificadorDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> <Resource auth="Container" description="my Queue" name="jms/modificador" type="org.apache.activemq.command.ActiveMQQueue" physicalName="modificador" factory="org.apache.activemq.jndi.JNDIReferenceFactory"/> </Context> <Context path="/portaladministracion"> </Context> <Context path="/dri-1"> <Resource name="jdbc/driDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> </Context> <Context path="/publicacion-1"> <Resource 59 Dentro de cada contexto, se define el recurso de acceso a base de datos mediante: <Resource name="jdbc/publicacionDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> Los parámetros a configurar son los siguientes: name: Nombre JNDI con el que se publica la conexión a base de datos. url: URL que especifica la conexión al servidor de base de datos. o En el caso de MySQL es: jdbc:mysql://ip_basedatos:puerto/base_datos o Para PostgreSQL es: jdbc:postgresql://ip_basedatos:puerto/base_datos o En el caso de Oracle es: jdbc:oracle:thin:@ip_oracle:1521:agrega driverClassName: driver empleado para la conexión JDBC a la base de datos. o Para MySQL es com.mysql.jdbc.Driver o Para PostgreSQL es org.postgresql.Driver o Para Oracle (Thin) es oracle.jdbc.driver.OracleDriver username: usuario de acceso a la base de datos. password: contraseña de acceso a la base de datos. En concreto, si la instalación se realiza en un único Tomcat se definirán los siguientes datasources asociados a los siguientes nombres JNDI: Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico name="jdbc/publicacionDS" type="javax.sql.DataSource" maxActive="4" maxIdle="2" username="user" maxWait="5000" driverClassName="oracle.jdbc.driver.OracleDriver" password="pass" url="jdbc:oracle:thin:@ip_oracle:1521:agrega"/> <Resource auth="Container" description="my Queue" name="jms/A" type="org.apache.activemq.command.ActiveMQQueue" physicalName="A" factory="org.apache.activemq.jndi.JNDIReferenceFactory"/> </Context> <Context path="/TaggingWeb"> </Context> </Host> </Engine> </Service> </Server> 60 name=“jdbc/planificadorDS” name=“jdbc/modificadorDS” name=“jdbc/contenidosportalDS” name=“jdbc/publicacionDS” name=“jdbc/LocalizadorDS” name=“jdbc/indexadorDS” name=“jdbc/buscarDS” name=“jdbc/adminusuariosDS” name=“jdbc/auditoriaDS” name=“jdbc/valoracionDS” name=“jdbc/driDS” Alianza2 Alianza2 Para conseguir que las clases del driver JDBC se encuentren disponibles para Tomcat, es directorio lib ($TOMCAT_HOME/common/lib/). Colas JMS El portal Agrega, hace uso de colas JMS para las comunicaciones asíncronas en los módulos. En el caso de emplear el contenedor de servlets Apache Tomcat, es necesario instalar adicionalmente un servidor de colas. Por facilidad y compatibilidad se aconseja usar Apache ActiveMQ. Las colas destino se definen en el fichero $TOMCAT_HOME/conf/server.xml por cada contexto (módulo war desplegado). En cada resource se define la conexión a la cola JMS de la siguiente manera: <Resource auth="Container" description="my Queue" name="jms/modificador" type="org.apache.activemq.command.ActiveMQQueue" physicalName="modificador" factory="org.apache.activemq.jndi.JNDIReferenceFactory"/> ALIAS EN DIRECTORIOS Hay dos módulos (RSS y la galería de imágenes) que necesitan acceder a los recursos que se publican en la carpeta compartida. Puesto que se acceden directamente desde el Tomcat (no pasando por Apache), es necesario definir manualmente 2 alias para que accedan al recurso real. En el fichero $TOMCAT_HOME/conf/server.xml definimos los siguientes dos alias (rss y galeriaimg): <Context path="/rss" appBase="" docBase="/export/ccaa/<sitio>/uploads/rss" debug="99" reloadable="true"> </Context> <Context path="/galeriaimg" appBase="" docBase="/export/ccaa/<sitio>/uploads/galeriaimg/<sitio>" EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico necesario copiar el fichero conector (mysql-connector-java-version.bin.jar, ojdbc14.jar…) al 61 debug="99" reloadable="true"> </Context> Mediante la definición de estos dos alias conseguimos que cuando el módulo rss solicite internamente un recurso a: http://localhost:8080/rss realmente acceda a los recurso de la Alianza2 carpeta /export/ccaa/<sitio>/uploads/rss. Análogamente sucede para el alias de la galería de Alianza2 imágenes. LIBRERÍAS DEL TOMCAT En Tomcat existen dos directorios de librerías, a conocer: $TOMCAT_HOME\common\lib El directorio contiene los JARs necesario para arrancar los contextos y los conectores especificados. o activation.jar o activemq-all-5.1.0.jar o commons-el.jar o commons-logging.jar o commons-pool-1.4.jar o hibernate3.jar o hsqldb.jar o hsqldb-plugin.jar o jasper-compiler.jar o jasper-compiler-jdt.jar o jasper-runtime.jar o javax.servlet.jar o javax.servlet.jsp.jar o jboss-j2ee.jar o jboss-jaxrpc.jar o jsp-api.jar o log4j.jar o mail.jar o mysql-connector-java-5.0.4-bin.jar o naming-factory-dbcp.jar o naming-factory.jar o naming-resources.jar o ojdbc14.jar $TOMCAT_HOME\shared\lib Se encuentran las librerías que se comparten entre los módulos WAR. En el caso de Agrega se usarán las siguientes: antlr-2.7.6.jar EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 62 autonumber-plugin.jar bcel.jar bindingservice-plugin.jar bsf.jar bsh-1.3.0.jar bsh-deployer.jar casclient-2.1.1-nossl.jar commons-collections.jar commons-httpclient.jar dom4j.jar javassist.jar jaxen.jar jboss-common.jar jmx-adaptor-plugin.jar jnpserver.jar joesnmp.jar jpl-pattern.jar jpl-util.jar log4j-snmp-appender.jar mail-plugin.jar properties-plugin.jar resolver.jar scheduler-plugin-example.jar scheduler-plugin.jar serializer.jar truezip-6.6.jar wsdl4j.jar xalan.jar xercesImpl.jar xml-apis.jar xmlentitymgr.jar Nota: casclient-2.1.1-nossl.jar (autenticación por HTTP) o casclient-2.1.1.jar (si tenemos certificado y atenticamos por HTTPs) REDIRECCIÓN TRÁFICO 8080 En el caso en el cual tanto Apache como el servidor de aplicaciones se encuentren en máquinas diferentes, será necesario que todo el tráfico de salida del servidor de aplicaciones con destino la misma máquina (localhost) puerto 80 sea redirigido al puerto 8080. Para ello, deberemos aplicar una regla de iptables (kernel 2.4 o superior) o ipchains (kernel 2.2). Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 63 En la mayor parte de los sistemas Linux la forma de proceder es la siguiente: 1. Con el usuario root, ejecutamos: iptables -t nat -A OUTPUT -p tcp --destination 127.0.0.1/32 -Alianza2 dport 80 -j DNAT --to-destination 127.0.0.1:8080 2. Comprobamos su correcta ejecución con el comando: iptables -L -n -v -t Alianza2 nat 3. Si deseamos que la configuración permanezca residente en el próximo arranque, podemos ejecutar iptables-save > /etc/sysconfig/iptables y comprobar que se arrancará en el runlevel consultando /etc/rc.d/rc3.d/SXXiptables (en el caso Directorio $APPSERVER_HOME/informes El directorio informes almacena en su interior los siguientes directorios: 1. birt-runtime-2_2_1_1 Para la generación de informes online la plataforma hace uso de Birt. Los binarios del sistema de reportes Birt se almacenan ahí. 2. plantillasInformes Las plantillas a partir de las cuales Birt genera los informes se encuentran en esta carpeta. NOTA: para la correcta generación de las imágenes de algunos informes es necesario añadir a la máquina virtual de Java (en el script de arranque del servidor de aplicaciones) el parámetro: -Djava.awt.headless=true Directorio $APPSERVER _HOME/indices En el directorio se almacenan los índices generados por Lucene para los diferentes idiomas, existiendo un índice por cada idioma en los que se encuentra disponible la plataforma. Apache Lucene es un motor de búsquedas de alto rendimiento escrito íntegramente en Java que nos permite realizar búsquedas completas por diferentes criterios textuales. Al encontrarse la aplicación disponible en 6 idiomas aparecen 6 índices (subdirectorios): Idioma Catalán Inglés Español Euskera Gallego Valenciano Subdirectorio índices ca_CA_simple.id en_EN_simple.id es_ES_simple.id eu_EU_simple.id gl_GL_simple.id va_VA_simple.id EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico de runlevel 3). 64 Durante los procesos de backup y mantenimiento de la plataforma será de vital importancia hacer un backup de los índices. Directorio $APPSERVER/uploads Alianza2 Alianza2 El directorio de uploads es el directorio donde se almacenarán los ficheros necesarios para la plataforma (esquemas para las validaciones, plantillas, rss, etc) y los ficheros que se irán generando a medida que se use la plataforma (descargas disponibles, repositorio con los ODEs cargados, resultados de la elaboración de algunos informes, directorio de taller para la Este directorio es el que tendrá un tamaño elevado que variará principalmente en función de: Los ODEs creados en el taller. Los ODEs publicados (tamaño y número) en el repositorio. Las descargas disponibles desde la plataforma. El directorio, en general, no será local a la máquina de JBoss, sino que el espacio a usar será accedido remotamente vía NFS, siendo gestionado por un servidor diferente capaz de asignar o desasignar capacidad al mismo dinámicamente mediante un LVM o similar. La estructura de subdirectorios que se presenta en el directorio uploads es la siguiente: descargas destinoInformesDir destinoInformesFederadosDir galeriaimg/common (contiene los iconos de las imágenes por defecto) galeriaimg/<sitio> (se generarán las previsualizaciones de los ODEs) html (con contenido inicial) imagenesInformes informesPortada licencias (con contenido inicial) modificador noticias repositorio rss (con contenido inicia) schemas (con contenido inicial) schemasImscp (con contenido inicial) schemasScorm12 (con contenido inicial) schemasVdex (con contenido inicial) searchPlugin (con contenido inicial) sitemaps/backup sitemaps/estatico (con contenido inicial) taller utilidades (con contenido inicial) xmls (con contenido inicial) xslt (con contenido inicial) descargas Se albergan todas las descargas disponibles desde el portal Agrega. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico creación de ODEs por parte de los usuarios del portal, etc). 65 destinoInformesDir Contiene los informes generados por la plataforma. Alianza2 Alianza2 destinoInformesFederadosDir Contiene los informes federados generados por la plataforma. galeriaimg ejemplo, el thumbnail (mini captura) para los recursos mp3, doc, pdf… En el subdirectorio <sitio> (el nombre de la CCAA) se almacenan todas las capturas de los recursos (ODEs) tomadas por la plataforma durante el proceso de carga. html Almacena ciertos contenidos html estáticos, imágenes, css… imagenesInformes Todas las imágenes de los informes que se generen se guardarán en esta carpeta. informesPortada Los informes accesibles desde la portada (páginas html) se salvarán en esta ruta. licencias Los ficheros de licencia que se incluyen en los ODE en el momento de publicarlos en el repositorio. Están almacenados en un arbol de directorios que relaciona cada licencia (fichero licencia.txt) con su identificador LOM-ES. modificador El modificador es un módulo que permite cambiar masivamente ODEs del portal. Por cada tarea modificación que realicemos, almacenará la configuración de la modificación y los logs de las modificaciones realizadas. noticias Si las noticias que se suben contienen imágenes, éstas se subirán a este directorio. repositorio EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico En el subdirectorio common se encuentran los iconos de las imágenes por defecto (por 66 Este directorio junto con el taller serán los que generalmente más espacio en disco ocuparán. En el se encuentran todos los ODEs publicados en el portal Agrega descomprimidos. rss Alianza2 Los rss generados por la plataforma permanecerán en éste directorio (ficheros XML). Alianza2 Inicialmente este directorio contiene doce ficheros OPML (extensión .opml): un grupo de seis ficheros para RSS y un grupo de seis para Atom. schemas, schemasImscp, schemasScorm12, schemasVdex recursos en los formatos Scorm 2004, Scorm 1.2 e IMS-CP. searchPlugin En el directorio tenemos el fichero searchPlugin.xml, que permite instalar un buscador de Agrega en nuestra barra de buscadores del navegador. El contenido del XML es el siguiente: <?xml version="1.0" encoding="UTF-8"?> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <ShortName>Agrega-<sitio></ShortName> <Description>Busqueda en Agrega</Description> … <InputEncoding>UTF-8</InputEncoding> <Url type="text/html" template="http://<sitio>.agrega.indra.es/buscador/ListarODECU/ListarODECU.do?busca dorGeneral={searchTerms}&amp;tipoBusqueda=01"/> </OpenSearchDescription> Los parámetros a tener en cuenta en cada CCAA son el nombre corto y la URL a la que se atacará para realizar la búsqueda. sitemaps En el directorio de sitempas/estatico/ se almacenan los ficheros robots.txt y sitemapPortada.xml. El fichero robots.txt define las políticas de permitir el acceso o denegarlo a los robots que se conecten a la página de agrega. El segundo fichero, sitemapPortada.xml, define las principales URLs del portal para permitir que los robots buscadores conozcan mejor el portal agrega para indexar los contenidos del mismo. Es importante que la URL a la que apunta la tag <loc> sea correcta. <?xml version='1.0' encoding='UTF-8'?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd"> <url> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Contienen diferentes esquemas necesarios para las validaciones y empaquetados de los 67 <loc>http://<sitio>.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do</loc> <lastmod>2008-05-19</lastmod> <changefreq>weekly</changefreq> <priority>0.5</priority> </url> … Alianza2 Alianza2 En el directorio uploads/sitemaps/ la plataforma irá generando los ficheros sitemaps para la portada (sitemapPortada.xml) y para todos los recursos publicados (sitemap1.xml, sitemap2.xml…). Para que cualquier buscador encuentre todos los sitemaps publicados se generará también un fichero llamado sitemap-index.xml que contendrá una referencia a taller Por cada usuario existirá una carpeta (que será la carpeta personal del portal). Cada usuario podrá crear, catalogar y empaquetar tantos ODEs como desee (en futuras actualizaciones de Agrega existirá el concepto de cuota). Para que un recurso ODE pueda ser publicado, previamente ha de ser creado, catalogado y propuesto para publicación. Hasta que no se publique, el ODE permanecerá en la carpeta personal. Al contener la carpeta taller todos los recursos pendientes de ser publicados, el tamaño total de la carpeta variará en función del número y tamaño de los ODEs que alberga en su interior. utilidades Contiene diverso contenido web: AgregaSlider (código flash para hacer referencia a Agrega desde otros sitios) ContenidoDinámico: imagen que se genera dinámicamente por la plataforma (selección de una captura de un ODE aleatoriamente) xmls Conjunto de ficheros XML que definen las taxonomías, tesauros, árbol curricular y vocabularios. xslt Plantillas para convertir a los formatos SCORM 1.2 e IMS-CP. FICHEROS DE CONFIGURACIÓN DEL PORTAL AGREGA En el directorio $JBOSS_HOME/server/default/conf o $TOMCAT_HOME/common/classes encontramos los archivos de configuración del JBoss y del portal Agrega. En concreto, los ficheros de configuración de Agrega son: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico tantos sitemaps como sean necesarios. 68 agrega.properties El contenido más relevante del fichero es el que se muestra a continuación, hemos dividido en partes la estructura del mismo para intercalar las explicaciones: ########## Variables de configuracion del correo ########## hostSmtp=servidor_correo debug=true #Direccion de correo del sistema, se utilizara como from en el servicio Recuerdo Clave fromSender=usuario@dominio ldapExternal=false ########## Correo del administrador del servidor ldap externo ###### adminLdapExternal=administrador_ldap@dominio ########## Autenticacion de correo #### autentication=true userSmtp=usuario passwordSmtp=password Configuramos el servidor de correo, especificando el hostSmtp, el formSender que se utiliza como campo from, el userSmtp y passwordSmtp empleados para el envío de mensajes (si la authentication está puesta a true). Con respecto al LDAP, podemos configurar: ldapExternal=true Si especificamos la variable a true, indicamos que el LDAP será de solo lectura (no escritura), por lo que, cada vez que un usuario se de de alta en el portal, se enviará un mail automáticamente al administrador del LDAP (adminLdapExternal) solicitándole que realice el alta manual en el LDAP. ldapExternal=false Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico agrega.properties authbackend.properties cas.properties dependentServer_EN.properties dependentServer.properties generacionContenidos.properties i18n_ca.properties i18n_en.properties i18n_es.properties i18n_eu.properties i18n_gl.properties i18n.properties i18n_va.properties importedServices.properties log4j.xml springldap.xml traduccionesBuscador_ca.properties traduccionesBuscador_en.properties traduccionesBuscador_es.properties traduccionesBuscador_eu.properties traduccionesBuscador_gl.properties traduccionesBuscador_va.properties 69 En caso de especificar el valor a false, cada vez que se crea, borra o modifica un usuario del portal Agrega, los cambios se verán reflejados automáticamente en el LDAP. Especificamos el idioma seleccionado por defecto, la zona horaria y el nombre de los roles presentes. ########## Ip del servicio de auditoria admin.ws.host=url_nodo admin.ws.puerto=8080 admin.ws.subdominio= admin.host=url_nodo admin.puerto=8080 admin.subdominio= path_logs=/opt/jboss/server/default/log logs_no_borrar=server.log,agrega.log,boot.log # Parametro que indica si queremos o no queremos auditoria auditoria=SI Se especifican el host y el puerto de los webservices de auditoría y administración de usuarios. Además, se define el directorio donde se encontrarán los logs (para ser mostrados desde el módulo de la aplicación) así como si se desea o no habilitar la auditoría. Adicionalmente se permite definir un path a colgar al dominio tanto para el portal como para los webservices (ej: http://www.miservidor.com/agrega/) ######################################################## ###### Configuración para los informes ###### ######################################################## #Librerías de Birt birtDir=informes/birt-runtime-2_2_1_1/ReportEngine/ #Plantillas de los informes informesDir=informes/plantillasInformes/ #Directorio donde se guardarán todos los informes federados destinoInformesFederadosDir=uploads/destinoInformesFederadosDir/ #Directorio donde se guardarán todos los informes destinoInformesDir=uploads/destinoInformesDir/ #Directorio donde se copiaran las imagenes de los diagramas imgBirtDir=uploads/imagenesInformes/ #path del servidor que enlazara al directorio de las imagenes staticImgDir=/imagenesInformes/ #Path de los informes 'Mas' de la portada Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico ########## Idioma idioma.selected=es zona_horaria=CEST ########################################## ####### Roles de usuarios ############## ########################################## # Usuario administrador que no podra ser eliminado rol_administrador=ADMINISTRADOR #Nombre del rol que tiene permiso para publicar rol_publicador=PUBLICADOR #Nombre del rol que tiene permiso para catalogar rol_catalogador=CATALOGADOR #Nombre del rol que tiene permiso para empaquetar rol_empaquetador=DOCENTE 70 Diversos parámetros para la configuración de los informes generados por el runtime de Birt. La mayor parte de los nombres los hace autodescriptivos. ######################################################### ####### Configuración para la galería de imágenes ####### ######################################################### #host o IP de la máquina en la que se encuentra el servico que genera las imagenes galeriaimg.server.ip=localhost:8080 #URL del servicio galeriaimg.service.url=RemotingGalleryServer/remoting/RemotingGalleryService #Inicio de la ruta relativa (alias de apache) donde se encuentran accesibles las imágenes del nodo galeriaimg.path.image=/galeriaimg #Inicio de la ruta relativa (alias de apache) donde se encuentran accesibles las imágenes comunes galeriaimg.common.image=/imgcommon #Extensión de la imagen que se genera galeriaimg.image.ext=.png #Extensiones con icono por defecto galeriaimg.image.common.ext=MP3,WAV,WMA,AIFF,OGG,TAR,RAR,ZIP,TGZ,PPT,PDF,XL S,DOC,PPS #Extensiones fotografiables, para sacar la foto Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico pathInformesPortada=informesPortada/ ##### Configuración de los informes 'Mas' de la Portada ###### destinoInformesMasDir=uploads/informesPortada/ #Número máximo de elementos que presentará cada tipo de informe rangoInformesPortada=10 #Número de días para los cuales se quiere calcular los informes 'Mas' de la portada diasAnterioresInformesPortada=7 #Primer sufijo que se añadirá al nombre de los informes 'Mas' de la Portada que contienen información de más de un día (relacionado con diasAnterioresInformesPortada) nombreInformesPortadaSemanales=-semanal #Segundo sufijo dias=dias #Nombre de los ficheros que contienen los informes estadoOdes=Informe_Estado_de_ODEs operacionesRealizadas=Informe_de_Operaciones_Realizadas nivelAgregacion=Informe_de_Nivel_de_Agregacion coberturaCurricular=Informe_de_Cobertura_Curricular terminosBusqueda=Informe_de_Terminos_mas_Buscados odesUsuario=Informe_ODEs_de_un_Usuario odesLicencias=Informe_Licencias_de_ODEs usuarios=Informe_de_los_Usuarios procesosPlanificados=Informe_de_Procesos_Planificados masValorado=Informe_ODEs_mas_Valorados masMostrado=Informe_ODEs_mas_Mostrados masPrevisualizado=Informe_ODEs_mas_Previsualizados masDescargado=Informe_ODEs_mas_Descargados tamanio=Informe_ODEs_mas_Grandes #Nombre del informe con el catálogo de Agrega informeCatalogo=CatalogoAgrega odesIdiomaFederada=Informe_Federado_de_ODEs_por_Idioma odesPublicadosFederada=Informe_Federado_de_ODEs_Publicados nivelAgregacionFederada=Informe_Federado_de_Nivel_de_Agregacion coberturaCurricularFederada=Informe_Federado_de_Cobertura_Curricular 71 galeriaimg.image.common.ext.fot=AVS,BMP,CUR,DCX,GIF,ICO,JNG,JPEG,JPG,PBM,PCL, PCX,PIX,PNG,TGA,TIFF,3g2,3gp,MTV,asf,avi,avs,dv,dvd,ffm,flac,flic,flv,gxf,h264,m4v,matros ka,mjpeg,mov,mp4,mpeg,mpeg1video,mpeg2video,mpegvideo,mxf,svcd,vcd,html,swf,htm #Ruta disco imagenes icono por defecto relativa al path del nodo galeriaimg.image.common.path=uploads/galeriaimg/common Alianza2 #Lista de rutas a concatenar al localizador #NOTA:Recordar que la ruta del localizador es relativa al servidor #en el que se encuentra <sitio>.path=/export/<sitio> Con respecto a la galería de imágenes, primero configuramos la IP, puerto y URL donde atacar el servicio (normalmente localhost:8080, RemotingGalleryServer/remoting/RemotingGalleryService). Posteriormente se especifican diversos parámetros, tales como todos los paths donde encontrar los iconos por defecto, las imágenes generadas, listas de ficheros de extensiones que mostrarán un icono por defecto… Los binarios generateimg.sh y resizeimg.sh que capturan las imágenes se verán en detalle en la sección de la galería de imágenes. ############################### ####### Catalogos Agrega ####### ############################### catalogo.agrega=Plataforma Agrega catalogo.mec=Catálogo unificado mec-red.es-ccaa de identificación de ODE Nombres especificados en los catálogos. ################################# ######Configuración RSS########## ################################# rss=/rss host=url_host rss.path=uploads/rss/ El modulo de RSS hace uso de 3 propiedades, la que dependerá en cada CCAA será la propiedad host. ####################################### ###Configuración Plugin de búsqueda#### ####################################### searchPlugin=/searchPlugin Alias de apache donde se encontrará el fichero del searchPlugin.xml Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico # Ruta relativa donde se generan las imagenes # Se usa para chequear si la imagen se ha generado o no path.generatedimgs=uploads/galeriaimg/ # ruta relativa del fichero de generacion imagenes script.html.generatedimgs=./bin/generateimg.sh # ruta relativa del fichero de generacion imagenes script.img.generatedimgs=./bin/resizeimg.sh # Lista de extensiones que no deben abrir el firefox img.resize.extension=gif,jpg,jpeg,jpe,tiff,tif,cmu,pnm,pbm,pgm,ppm,rgb,xbm,xpm,bmp 72 ####################################### #####Identificador único de nodo####### ####################################### idNodo=NODO20080422102550 Alianza2 Cada nodo debe poseer un identificador único que se asigna en la instalación. Alianza2 ####################################### ########Flag para nodo neutro########## ####################################### neutro=false En las comunidades este flag deberá estar siempre a false, controla las plantillas y opciones ################################### ########## Generacion Dinamica##### ################################### #URL de la imagen dinamica urlImagenDefecto=utilidades/contenidoDinamico/imagenPorDefecto.jpg urlImagenDefectoGrande=utilidades/imagenPorDefectoGrande.jpg urlImagenDinamicaDisco=utilidades/contenidoDinamico/imagenDinamica.png pathImagenDinamicaDisco=uploads/utilidades/contenidoDinamico/imagenDinamica.png pathImagenDefectoGrande=uploads/utilidades/imagenPorDefectoGrande.jpg Para la generación dinámica de las imágenes del portal se hace uso de las propiedades anteriores, simplemente especifican los directorios donde encontrar las imágenes por defecto y los directorios donde se almacenarán las capturas aleatorias elegidas. ######## Correo de registro del cas ############################ # Correo del usuario que se encargará de dar de alta a los usuarios correoCas=usuario@domino Cuando un usuario desee darse de alta en el portal, deberá enviar un correo a la dirección que aparece en la ventana de acceso al portal. En cada CCAA apuntará al administrador de los usuarios del mismo. ######### Tiempo extendido ################ timeout.extendido=86400 de sesion para empaquetador (segundos ) Tiemout definido especialmente para el empaquetador (en segundos). Se debe a que los tiempos medios de empaquetación suelen ser mucho mayores que los timeouts de sesión. ######### Esquema de metadatos LOM-ES ############################## esquemaDeMetadatos=LOM-ESv1.0 Versión de esquema de metadatos empleada. ######## Atributos de configuracion del servidor oai-pmh ######### urlRepositorio=http://pruebas.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do nombreRepositorio=Agrega emailAdmin=usuario@domino EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico del portal. 73 Propiedades de configuración para el servidor oai-pmh. ######## configuracion entregar ######### # tiempo, en milisegundos, que se mantiene un ode publicado y empaquetado para exportar sin volver a generarlo # 604800000 = una semana tiempolimite=604800000 Alianza2 Alianza2 Configuramos el tiempo que se mantiene un ODE publicado y empaquetado para ser exportado sin necesidad de volver a generarlo. Directorio donde se ubicará el fichero changelog.html, el cual contiene los cambios entre las diferentes versiones. ############################# ########## Contacto ######### ############################# contacto_mail=usuario@domino contacto_telefono=91 111 22 33 ##########Activar opcion de incidencias de contacto(true-activar,false-desactivar) contacto_incidencias_activar=false Cuando un usuario accede a la página de contacto del portal, se le mostrarán los datos suministrados por estas 3 propiedades: el contacto por mail y por teléfono se visualizarán siempre, mientras que la gestión de incidencias puede ser activada o desactivada. Por defecto para todas las CCAA el campo relacionado con las incidencias estará inicialmente a false, únicamente se marcaría a true si la CCAA habilita un sistema de gestión de incidencias para sus usuarios. ###### configuracion del cas ########## #si su valor es 'no' no se va a sacar la informacion del registro registroCas=si Flag para indicar si deseamos o no mostrar la información de registro al acceder a la página de autenticación del portal. ######### Configuración del ##################### usaProxy=false hostProxy=url_proxy portProxy=8080 usuarioProxy=proxy_usuario claveProxy=proxy_pass proxy de la máquina donde se instale Agrega En caso de necesidad de salir hacia Internet a través de un Proxy podemos configurar el host, puerto, usuario y contraseña de acceso. ######## Timeout de la cookie de OpenId (segundos) ############## EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico ########### enlace a changeLog pathChangeLog=/utilidades/changelog.html 74 timeoutCookieOpenId=1800 Configuramos el valor de tiempo máximo de validez de la cookie de autenticación cuando se emplea OpenID. Alianza2 ######### valor cuota defecto ############ valorCuotaDefecto=5 Alianza2 Tamaño en MB de la cuota por defecto. Número de versión de la aplicación. ##########Refresco contenidos estáticos de portada 3 horas tiempoRefresco=180000 Tiempo de refresco de los datos de objetos y usuarios visibles en la portada de Agrega (en segundos). ##########Número de etiquetas en la nube de tags numeroTags=13 Numero de etiquetas mostrado en la nube de tags de la portada de Agrega. ######## Para las licencias###### url_licencias=uploads/licencias Ruta al directorio donde se almacenan los ficheros licencia.txt para la publicación. ################ VISUALIZADOR ##################### zoho.key=847da91d5562a2a51193f65ef0962439 Clave requerida para el uso del servicio externo Zoho (http://www.zoho.com). ######## Configuración del enlace 'Informes' del menu lateral generico ########## informesPortada=true Permite habilitar / deshabilitar el enlace de Informes disponible en la portada de Agrega. authbackend.properties Define los parámetros necesarios para la autenticación contra el LDAP por parte del módulo CAS: ibuilder.security.ldap.url=ldap://servidor_ldap:389/dc=pruebas,dc=agrega,dc=indra,dc=es ibuilder.security.ldap.managerDN=cn=Administrador,dc=agrega,dc=indra,dc=es ibuilder.security.ldap.managerPwd=password ibuilder.security.ldap.userSearchBase=ou=usuarios ibuilder.security.ldap.userSearchFilter=(cn={0}) ibuilder.security.ldap.groupRoleAttribute=cn ibuilder.security.ldap.groupSearchBase=ou=roles EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico ##########Version de la aplicacion version=1.2.0 75 cas.http.url=http://cas-nodo.agrega.indra.es/cas http.server=http://nodo.agrega.indra.es Se debe proporcionar la url de conexión al servidor LDAP especificando el base DN. También se debe especificar el usuario manager para poder crear, borrar, modificar los Alianza2 usuarios en el LDAP. Alianza2 Por último, el módulo CAS necesita conocer cuál es la URL del cas y la URL del portal. cas.properties nodo: entorno=nodo.agrega.indra.es dependentServer.properties y dependentServer_EN.properties server.on=nodo nodo.server.id=es_nodo_20080422121523455 nodo.ccaa=nombre_largo_nodo Se configura el nombre del nodo asignado al servidor y un identificador único para el servidor. Mediante la clave <nodo>.ccaa podemos especificar el nombre largo del nodo. A continuación vienen unos parámetros configurados de serie con las comunidades: redes.nodo=MEC ute.nodo=MEC cnice.nodo=MEC andalucia.nodo=AN aragon.nodo=AR asturias.nodo=AS baleares.nodo=BA canarias.nodo=IC cantabria.nodo=CB castillalamancha.nodo=CM castillayleon.nodo=CL catalunya.nodo=CT extremadura.nodo=EX galicia.nodo=GA larioja.nodo=LR madrid.nodo=MA murcia.nodo=MU navarra.nodo=NA valencia.nodo=CV ccaas=Junta de Andalucía,Comunidad Autónoma de Aragón,Comunidad del Principado de Asturias,Comunidad Autónoma de Canarias,Comunidad Autónoma de Cantabria, Junta de Castilla la Mancha,Junta de Castilla y Leon,Generalitat de Catalunya,Junta de Extremadura,Xunta de Galicia,Comunidad Autónoma de La Rioja,Comunidad de Madrid,Comunidad Autónoma de Murcia,Comunidad Foral de Navarra,Generalitat Valenciana nodos=MEC,AN,AR,AS,IC,CB,CM,CL,CT,EX,GA,LR,MA,MU,NA,CV urlNodo=http://url_nodo urlConsejeriaNodo={url_consejería | #} EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico El fichero cas.properties únicamente contiene una línea en la que se especifica la URL del 76 Además de especificar la url del nodo, es necesario especificar la ccca.path que sea al directorio anterior a uploads/galeriaimg para el correcto funcionamiento de la galería de imágenes. La propiedad urlConsejeríaNodo permite especificar una URL a la que se redije al usuario cuando pincha en el logo de la Comunidad Autónoma (en el caso de que el nodo corresponda a una comunidad autónoma). En caso de que no se desee asignarle un valor, de debe dejar con el valor #. El fichero dependentServer_EN.properties es el mismo pero internacionalizado al inglés. generacionContenidos.properties ########################################################################## ############################ # ATRIBUTOS DE LA TAREA DE GENERACIÓN DEL ODE # DE LA PORTADA ########################################################################## ############################ #D : diaria, M: mensual, A:anual periocidadOdePortada=H horaTareaOde=1 minutoTareaOde=0 segundoTareaOde=0 Definimos con estas propiedades la periodicidad con la que se va a seleccionar un ODE cualesquiera del repositorio, para generarse la captura diaria. periodicidadOdePortada puede valer “M”, “D” y “H” (Mensual, Diaria, Horaria). En el caso de periodicidad Horaria no aplican el resto de propiedades. Si especificamos la periodicidad Diaria es necesario especificar la Hora, Minuto y el Segundo en el cual se lanzará la tarea de generación del ODE. Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico #Usado para Galeria de Imagenes #Lista de rutas a concatenar al localizador #NOTA:Recordar que la ruta del localizador es relativa al servidor #en el que se encuentra redes.path=/export/ccaa/redes madrid.path=/export/ccaa/madrid andalucia.path=/export/ccaa/andalucia aragon.path=/export/ccaa/aragon asturias.path=/export/ccaa/asturias canarias.path=/export/ccaa/canarias cantabria.path=/export/ccaa/cantabria castillayleon.path=/export/ccaa/castillayleon catalunya.path=/export/ccaa/catalunya extremadura.path=/export/ccaa/extremadura galicia.path=/export/ccaa/galicia larioja.path=/export/ccaa/larioja murcia.path=/export/ccaa/murcia navarra.path=/export/ccaa/navarra valencia.path=/export/ccaa/valencia 77 A partir de aquí, el fichero especifica diversas propiedades para la generación de los ficheros Sitemaps (ficheros XML que definen las URL que visita cada bot que nos navega para indexar los contenidos del portal, por ejemplo google-bot). Alianza2 ########################################################################## ############################ # ATRIBUTOS DEL FICHERO SITEMAP # ########################################################################## ############################ ########### Nº de entradas (url) que contendrá como máximo cada fichero sitemap.xml ############ # Numero entradas <url> en el fichero sitemap.xml no debe superar las 50.000 urls ni tampoco los 10MB numeroEntradas=3000 ########### Nombre de los ficheros sitemap y sitemapIndex ################################## # Nombre de los ficheros sitemap ficheroSiteMap=sitemap # Nombre del fichero sitemapindex ficheroSiteMapIndex=sitemap-index ########### Extensión de los ficheros sitemap y sitemapIndex ############################# extensionFicheroSiteMap=xml Especificamos que el número de entradas por fichero sea de 3000, la periodicidad de actualización será mensual y el fichero índice que contiene todos los ficheros sitemaps se denomina sitemap-index.html. ########### Schema sitemap y sitemapIndex ############################# schemaSitemap=http://www.google.com/schemas/sitemap/0.84 schemaSitemapXsi=http://www.w3.org/2001/XMLSchema-instance schemaSitemapLocation=http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd schemaSitemapIndex=http://www.sitemaps.org/schemas/sitemap/0.9 schemaSitemapIndexXsi=http://www.w3.org/2001/XMLSchema-instance schemaSitemapIndexLocation=http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd Diversos schemas necesarios para la generación de los sitemaps. ########### Directorios de los ficheros sitemap y sitemapIndex ############################# # Url donde se dejarán los ficheros sitemap.xml. Deberá almacenarse en un directorio de tal manera que EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico ########### Periodicidad de cambio del repositorio ########################## # Los valores posibles son (always hourly daily weekly monthly yearly never) periodicidad=monthly Alianza2 78 # la url de acceso sea http://tudominio/sitemap.xml urlSiteMap=uploads/sitemaps/ # Url donde se dejarán los ficheros backup de los ficheros sitemap urlSiteMapBackup=uploads/sitemaps/backup/ # Url donde se dejará el fichero sitemap con las url de la portada urlSiteMapPortada=uploads/sitemaps/estatico/ Alianza2 Alianza2 Directorios donde se almacenarán los ficheros sitemaps y el sitemap-index. Además, cuando ############### Url de la ficha de los odes ############################ # Protocolo de las fichas de los odes protocoloHttp=http:// # Url de la ficha del ode buscadorFicha=/ODE/ # Carácter separador de la url (el formato de la url de la ficha será con urls cortas: http://dominio/ODE/idioma/idOde) separador=/ Diversos parámetros necesarios para generar la URL que acceda a la ficha de los ODEs. ############### Prioridad asociada al nivel de agregación ############################# # nivel_agregacion_ode=prioridad 1=0.2 2=0.4 3=0.7 4=1 Los ODEs de la plataforma tienen asociado un nivel de agregación (complejidad del objeto, a mayor nivel mayor complejidad). Existen 4 niveles de agregación, las propiedades nos permiten configurar los pesos asociados a los objetos en función de su nivel de agregación cuando se escriban las preferencias en el fichero sitemap. ############## Variables de configuracion de la tarea programada de generación de sitemap.xml ###### #D : diaria, M: mensual, A:anual periodicidadTarea=D horaTarea=1 minutoTarea=0 segundoTarea=0 Por ultimo, se define la periodicidad de la generación de los ficheros sitemaps. El comportamiento es el mismo i18n_ca.properties, i18n_en.properties, i18n_es.properties, i18n_eu.properties, i18n_gl.properties, i18n.properties, i18n_va.properties EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico se generan los nuevos sitemaps se mueven los anteriores al directorio backup especificado. 79 El fichero i18n.properties contiene los idiomas en los que podrán realizar las búsquedas, el idioma por defecto del portal y el idioma secundario: # Lista de idiomas buscables de la plataforma. idiomas.buscables=es,ca,en,eu,gl,va # Lista de idiomas en los que se puede mostrar la plataforma idiomas.plataforma=es,ca,en,eu,gl,va # Idioma por defecto en el que se muestra la plataforma idioma.por.defecto=es # Idiomas traducibles: todos los idiomas para los que tenemos traduccion. En cada bundle # tendra que estar cada idioma de esta lista traducido idiomas.traducibles=es,ca,en,eu,gl,va idioma.secundario= Alianza2 Alianza2 Por ejemplo, el fichero i18n_en.properties: #Idiomas por parejas ISO=Nombre Idioma y Nombre Idioma=ISO es=spanish spanish=es ca=catalan catalan=ca en=english english=en eu=basque basque=eu gl=galician galician=gl va=valencian valencian=va importedServices.properties Si algún servicio no se despliega en la misma máquina, será necesario especificar la URL donde se publica el servicio remoto en el fichero. Por defecto, al encontrarse todos los servicios desplegados en el mismo servidor de aplicaciones el fichero tendrá todas las propiedades vacías como se muestra a continuación: srvAdminUsuariosServicePort= srvAgregadorRssServicePort= srvAuditaPublicacionServicePort= srvAuditoriaServicioPort= srvAuditoriaValoracionServicePort= srvAuditoriaIndexadorServicePort= srvBuscarFederadaServicePort= srvBuscadorServicePort= srvBuscarServicePort= srvCatalogacionBasicaServicePort= srvCatalogacionAvanzadaServicePort= srvDescargasPort= srvEmpaquetadorBasicoServicePort= srvEntregarServicePort= EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Cada fichero i18n_XX.properties contiene los nombres de los idiomas internacionalizados. 80 log4j.xml (JBoss) Para generar los logs el portal hace uso de Log4j. En el fichero de configuración ubicado en $JBOSS_HOME/server/default/conf/log4j.xml definimos los siguientes “appenders”: FILE, ServiceErrors y agrega. <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.log.dir}/server.log"/> <param name="Append" value="true"/> <!-- Rollover at midnight each day --> <param name="DatePattern" value="'.'yyyy-MM-dd"/> <!-- Rollover at the top of each hour <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/> --> <layout class="org.apache.log4j.PatternLayout"> <!-- The default pattern: Date Priority [Category] Message\n --> <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/> --> </layout> </appender> <appender class="org.jboss.logging.appender.DailyRollingFileAppender"> name="ServiceErrors" Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico srvEstructurasEducativasServicePort= srvFachadaAgregarServicePort= srvFaqServicePort= srvGeneracionDinamicaServicePort= srvGestionSqiServicePort= srvGestorArchivosServicePort= srvGestorManifestServicePort= srvHerramientaModificacionPort= srvIndexadorServicePort= srvInformeServicePort= srvLocalizadorServicePort= srvLogServicePort= srvMonitorizarServicePort= srvNodoServicePort= srvNoticiasServicePort= srvPlanificadorServicePort= srvPublicacionServicePort= srvRegistroPlanificadorServicePort= srvSitemapServicePort= srvTaggingServerPort= srvTaxonomiaServicePort= srvTesaurosServicesPort= srvValidadorServicePort= srvValidadorVDEXServicePort= srvValoracionServicePort= srvVocabulariosControladosServicePort= descomprimeYvalidaPort=http://localhost:8080/herramientaoffline/services/DescomprimeYvali da 81 <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.log.dir}/service-error.log"/> <param name="Append" value="true"/> <!-- Rollover at midnight each day --> <param name="DatePattern" value="'.'yyyy-MM-dd"/> Alianza2 Alianza2 <!-- Rollover at the top of each hour <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/> --> <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/> --> </layout> </appender> <appender name="agrega" class="org.jboss.logging.appender.DailyRollingFileAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.log.dir}/agrega.log"/> <param name="Append" value="true"/> <!-- Rollover at midnight each day --> <param name="DatePattern" value="'.'yyyy-MM-dd"/> <!-- Rollover at the top of each hour <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/> --> <layout class="org.apache.log4j.PatternLayout"> <!-- The default pattern: Date Priority [Category] Message\n --> <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/> --> </layout> </appender> Se ha especificado que ${jboss.server.log.dir}/fichero.log, los que logs se se almacenen corresponde en con el directorio el directorio $JBOSS_HOME/server/default/log. En la configuración de los “appenders”, se ha hecho uso de la clase org.jboss.logging.appender.DailyRollingFileAppender para que roten diariamente con los patrones que aparecen en el fichero de configuración. Los niveles de verbosidad y paquetes se configuran en las secciones siguientes: <category name="org.springframework"> <priority value="INFO"/> </category> <category name="ServiceErrorsLogger"> <priority value="ERROR" /> <appender-ref ref="ServiceErrors"/> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <layout class="org.apache.log4j.PatternLayout"> <!-- The default pattern: Date Priority [Category] Message\n --> <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/> 82 </category> <category name="es.pode"> <priority value="INFO"/> <appender-ref ref="agrega"/> </category> Alianza2 Alianza2 <category name="es.agrega"> <priority value="INFO"/> <appender-ref ref="agrega"/> </category> En las categorías especificamos el paquete Java, la prioridad a mostrar (DEBUG, INFO, escribirán los logs de las clases pertenecientes al paquete. Todos los loggers heredan de la categoría raíz, definida de la siguiente manera: <root> <priority value="INFO"/> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> Si queremos cambiar la prioridad de todas las clases por defecto a INFO, es importante introducir la línea “<priority value ="info" />” dentro de la sección root previa. Los valores almacenados en las categorías citadas anteriormente prevalecen sobrescribiendo los valores de la categoría root. log4j.properties (Tomcat) Por defecto los logs se almacenan en $TOMCAT_HOME/logs. $TOMCAT_HOME/common/classes/log4j.properties definimos los En el appenders fichero con la ubicación y la política de rotado: log4j.rootLogger=INFO, R log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=${catalina.home}/logs/tomcat.log log4j.appender.R.MaxFileSize=100MB log4j.appender.R.MaxBackupIndex=10 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.logger.es.pode=INFO,R log4j.logger.es.agrega=INFO,R Además del fichero catalina.log que deja por defecto Apache Tomcat, especificamos el aprender R que apunta al fichero tomcat.log, rotando el fichero cada 100 MB y dejando un histórico de 10 ficheros. El nivel por defecto de la categoría raiz es INFO así como el de los paquetes es.pode y es.agrega. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico WARN, ERROR, FATAL) y podemos especificar uno o más appenders en los que se 83 Los niveles de verbosidad y paquetes se configuran en la siguiente sección: log4j.logger.es.pode=INFO,R log4j.logger.es.agrega=INFO,R En las categorías especificamos el paquete Java, la prioridad a mostrar (DEBUG, INFO, Alianza2 WARN, ERROR, FATAL) y podemos especificar uno o más appenders en los que se Alianza2 escribirán los logs de las clases pertenecientes al paquete. springldap.xml En el fichero de configuración springldap.xml definimos la conexión al LDAP por parte de los El contenido, deberá reflejar la estrucuta del LDAP de cada CCAA, a modo de ejemplo mostramos el fichero plantilla usado: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="contextSource" class="org.springframework.ldap.support.LdapContextSource"> <property name="url" value="ldap://ldapserver:389/ou=usuarios,dc=<nodo>,dc=agrega,dc=indra,dc=es" /> <property name="userName" value="cn=Administrador,dc=agrega,dc=indra,dc=es" /> <property name="password" value="contraseña"/> </bean> <bean id="ldapTemplate" class="org.springframework.ldap.LdapTemplate"> <constructor-arg ref="contextSource" /> </bean> <bean id="ldapContact" class="es.pode.adminusuarios.negocio.comun.LDAPContactDAO"> <property name="ldapTemplate" ref="ldapTemplate" /> </bean> </beans> Las líneas resaltadas son: url: Especificamos la URL de conexión al LDAP en donde se buscarán los usuarios. Se ha especificado la base a partir de la cual se realizarán todas las operaciones del LDAP. userName: usuario que sera usado para obtener el contexto autenticado. Corresponde con el DN del usuario Administrador. password: contraseña del usuario administrador traduccionesBuscador_ca.properties, traduccionesBuscador_en.properties, traduccionesBuscador_es.properties, traduccionesBuscador_eu.properties, traduccionesBuscador_gl.properties, traduccionesBuscador_va.properties EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico módulos del portal para autenticarse. 84 Diversos properties con traducciones comunes para el buscador. DESPLIEGUE DEL APLICATIVO: WARS Alianza2 JBossAS Alianza2 Tanto los servicios como los módulos web se deben desplegar en el directorio $JBOSS_HOME/server/default/deploy/agrega/ 1 adminusuarios-1.0.war 2 agregadorRSS-1.0.war 3 auditoria-1.0.war 4 buscador-1.war 5 buscar-1.war 6 cas.war 7 catalogacion-1.war 8 catalogadorWeb-1.war 9 contenidosportal-F1.war 10 dri-1.war 11 empaquetadorbasico-F1.war 12 entregar-1.war 13 fuentestaxonomicas-1.war 14 gestorflujo-1.war 15 indexador-0.1.war 16 localizador-1.war 17 modificador-1.war 18 ModificadorWeb-1.war 19 oaipmh-1.0.war 20 planificador-1.0.war 21 portaladministracion-F1.war 22 PortalEmpaquetador-F1.war 23 publicacion-1.war 24 RemotingGalleryServer.war 25 reputacion-1.war 26 TaggingWeb-1.war 27 valoracion-1.war 28 visualizador-1.war 29 visualizadorcontenidos-F1.war Una vez arrancado el JBossAS, los JSPs compilados (servlets generados) se encontrarán disponibles en el directorio: $JBOSS_HOME/server/default/work/jboss.web/localhost El contenido de clases, librerías, ficheros XML de configuración… de los WARs se desplegará en el directorio: $JBOSS_HOME/server/default/tmp/deploy Cada vez que se quiera desplegar un módulo, sobrescribiendo uno actual, podemos realizar la tarea de dos maneras: 1. Copiamos el WAR en caliente (hot deploy): sin parar el servidor de aplicaciones JBoss, después de haber realizado un backup del war, copiamos el nuevo sobre el viejo, produciéndose las tareas de undeploy y dedeploy del módulo. JBoss escanea EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Los wars correspondientes a la versión 1.1.1 son: 85 el directorio de los wars para detectar los cambios cada cierto tiempo, la configuración del scanner se encuentra en $JBOSS_HOME/server/default/conf/jboss-service.xml Alianza2 <mbean code="org.jboss.deployment.scanner.URLDeploymentScanner" name="jboss.deployment:type=DeploymentScanner,flavor=URL"> <!-- A flag to disable the scans --> <attribute name="ScanEnabled">true</attribute> Se define mediante la propiedad ScanEnabled si está o no habilitado el mbean de JBoss, y mediante la propiedad de ScanPeriod definimos en milisegundos el tiempo entre comprobaciones de nuevos wars o modificaciones de los existentes. 2. Copia del WAR habiendo parado el JBoss: una vez detenido el servicio del JBoss, procedemos a sobrescribir el WAR, borrar los directorios temporales citados anteriormente y arrancamos de nuevo el servicio. Es el método más limpio y recomendado para las actualizaciones de la plataforma. Apache Tomcat Los wars de agrega se encuentran en la siguiente carpeta ubicada en el directorio de Tomcat: $TOMCAT_HOME/webapps. En el caso de Tomcat los wars poseerán los siguientes nombres: 1 adminusuarios.war 2 agregadorRSS-1.0.war 3 auditoria.war 4 buscador.war 5 buscar-1.war 6 cas.war 7 catalogacion-1.war 8 catalogadorWeb.war 9 contenidosportal-F1.war 10 dri-1.war 11 empaquetadorbasico-F1.war 12 entregar-1.war 13 fuentestaxonomicas-1.war 14 gestorFlujo.war 15 indexador-0.1.war EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <!-- Uncomment (and comment/remove version below) to enable usage of the DeploymentCache <depends optional-attributename="Deployer">jboss.deployment:type=DeploymentCache</depends> --> <depends optional-attributename="Deployer">jboss.system:service=MainDeployer</depends> … … <!-- Frequency in milliseconds to rescan the URLs for changes --> <attribute name="ScanPeriod">60000</attribute> Alianza2 86 localizador-1.war modificador-1.war ModificadorWeb.war oaipmh.war planificador-1.0.war portaladministracion-F1.war PortalEmpaquetador.war publicacion-1.war RemotingGalleryServer.war TaggingWeb.war validador-1.war valoracion-1.war visualizador-1.war visualizadorcontenidos.war 3.3.3. Alianza2 Alianza2 GALERÍA DE IMÁGENES INTRODUCCIÓN La galería de imágenes es invocada desde el módulo publicador a través del protocolo RMI tal y como se muestra en la siguiente figura: COLA JMS Publicación RMI RemotingGalleryServer $fileType == "video" else $fileType == "image" convert ¡BOOM! Firefox + import ffmpeg El publicador, por cada elemento publicado, inserta un mensaje en una cola JMS. Asíncronamente un listener va consumiendo los mensajes de la cola JMS y vía RMI invoca al módulo de la galería de imágenes. En el mensaje RMI se intercambia la siguiente información: URL del fichero del recurso (en disco) a capturar. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 16 17 18 19 20 21 22 23 24 25 26 27 28 29 87 Directorio donde almacenar la captura Nombre del fichero donde se guardará la captura. La galería de imágenes, una vez que ha recibido la información del recurso del ODE a Alianza2 capturar, el directorio y fichero a generar, invoca una shell del sistema ejecutando el fichero Alianza2 generateimg.sh o resizeimg.sh (disponibles en el directorio $JBOSS_HOME/bin). El función del tipo de contenido los scripts capturarán la imagen de una u otra manera. NOTA: tanto los directorios como los scripts a invocar son configurables en el fichero SCRIPTS EJECUTADOS Existen dos scripts que pueden ser ejecutados. Si la aplicación de antemano conoce que el recurso es una imagen, invocará directamente al script resizeimg.sh. En caso contrario, se ejecuta el script generateimg.sh. resizeimg.sh El contenido del script resizeimg.sh es el siguiente: #!/bin/bash # constantes UPLOADS_PATH=uploads/galeriaimg; IMAGE_FINAL_SIZE=100x100; echo "Parametros = [$1] [$2] [$3]" if test -z $1 then echo "Falta el primer parametro obligatorio de la llamada" exit fi if test -z $2 then echo "Falta el segundo parametro obligatorio de la llamada" exit fi if test -z $3 then echo "Falta el tercer parametro obligatorio de la llamada" exit fi MD5PATH=`md5sum --string $1 |cut -b1-2` mkdir -p $UPLOADS_PATH/$3/$MD5PATH/$1/ #echo "Copio el fichero [$2] en [$UPLOADS_PATH/$3/$MD5PATH/$1/]" #cp $2 $UPLOADS_PATH/$3/$MD5PATH/$1/ EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico agrega.properties. 88 echo "Convirtiendo la imagen $2 al formato JPG en $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg ..." `date` convert -resize 800x600 "$2" $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg echo "[OK] Imagen convertida correctamente" `date` Alianza2 echo "Generando imagen reducida $UPLOADS_PATH/$3/$MD5PATH/$1/$1.png ..." `date` convert -resize $IMAGE_FINAL_SIZE $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg $UPLOADS_PATH/$3/$MD5PATH/$1/$1.png echo "[OK] Imagen reducida generada correctamente" `date` Alianza2 El script, habiendo recibido los 3 parámetros necesarios, ejecuta el comando convert (de ImageMagick) redimensionando la imagen primero a 800x600 y luego a 100x100. De esta generateimg.sh Cuando no se conoce de antemano el formato del recurso a capturar, se invoca este script. El contenido del mismo es: #!/bin/bash # constantes videoDelayCaptureInSeconds=3; UPLOADS_PATH=uploads/galeriaimg; IMAGE_FINAL_SIZE=100x100; echo "Parametros = [$1] [$2] [$3]" if test -z $1 then echo "Falta el primer parametro obligatorio de la llamada" exit fi if test -z $2 then echo "Falta el segundo parametro obligatorio de la llamada" exit fi if test -z $3 then echo "Falta el tercer parametro obligatorio de la llamada" exit fi MD5PATH=`md5sum --string $1 |cut -b1-2` mkdir -p $UPLOADS_PATH/$3/$MD5PATH/$1/ fileType=`file -bi "$2" | awk -F'/' '{print $1}'` echo "FileType is: '$fileType'" if [ $fileType == "image" ] then echo "Convirtiendo la imagen $2 al formato JPG en $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg ..." `date` convert "$2" $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg echo "[OK] Imagen convertida correctamente" `date` EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico forma, se generan 2 imágenes, una grande y otra pequeña (la que se muestra en la ficha). 89 echo "Generando imagen reducida $UPLOADS_PATH/$3/$MD5PATH/$1/$1.png ..." `date` convert -resize $IMAGE_FINAL_SIZE $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg $UPLOADS_PATH/$3/$MD5PATH/$1/$1.png echo "[OK] Imagen reducida generada correctamente" `date` Con ayuda del comando file y awk obtenemos el tipo de recurso que deseamos capturar. En principio, el script analiza 3 posibilidades (tal y como se refleja en la figura inicial): 1. fileType=image Si el tipo de fichero es imagen, capturamos la misma redimensionándola primero a 800x600 mediante el comando convert de ImageMagick. 2. fileType=video Si el tipo de fichero es un video, hacemos uso del programa FFmpeg capturando el segundo especificado por la propiedad videoDelayCaptureInSeconds (por defecto 3 segundos) 3. Cualquier otro caso Si el tipo de fichero no es ni imagen ni video, la única forma para generar una captura de pantalla consiste en abrir un navegador web con diversos plugins instalados (firefox en fullscreen) y tomar una captura de pantalla del mismo firefox. Para ello, hacemos uso de: firefox y un sistema de frame buffer virtual Xvfb. Por último, capturada la imagen grande la redimensionamos a 100x100 para generar la imagen pequeña (la que aparece junto a la ficha del recurso). Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico elif [ $fileType == "video" ] then echo "Capturando del video a los $videoDelayCaptureInSeconds segundos a una imagen JPG..." `date` ffmpeg -i "$2" -y -ss $videoDelayCaptureInSeconds -t 0.01 -f mjpeg $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg echo "[OK] Video capturado correctamente" `date` else echo "Capturando el fichero $2 desde un navegador..." `date` Xvfb :1 -fp /usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/75dp i/ -screen 0 1280x800x24 & DISPLAY=:1 /opt/firefox/firefox -no-remote -height 800 -width 1280 file:"$2" & sleep 5 DISPLAY=:1 import -window root $UPLOADS_PATH/$3/$MD5PATH/$1/$1_captured.jpg killall firefox-bin killall firefox killall run-mozilla killall run-mozilla.sh killall Xvfb echo "[OK] Ventana de navegador capturada correctamente" `date` fi 90 SOFTWARE REQUERIDO El software necesario para que funcionen los scripts anteriores es: awk Xvfb ImageMagick FFmpeg Xfonts-100dpi Xfonts-75dpi Xfonts-base Plugin de flash para el mozilla-firefox Alianza2 Durante la instalación de Firefox, se habrán seguido los siguientes pasos: Descarga de firefox de la propia Web de mozilla-firefox y descompresión en el directorio /opt/firefox. o wget http://download.mozilla.org/?product=firefox2.0.0.14&os=linux&lang=es-ES Descarga del plugin de Adobe flash player. Creamos el enlace simbólico al plugin de flash (ejemplo, particularizar con las rutas reales): ln -s /usr/lib/mozilla/plugins/libflashplayer.so libflashplayer.so Con el usuario que arranque del servidor de aplicaciones, escribimos en su home el directorio “.mozilla”, que contiene toda la configuración de firefox ya establecida (se facilita el fichero firefoxConf.tar) Modificamos el fichero extensions.ini en la línea “Extension2” para que apunte al path correcto donde se encuentra el home del usuario jboss (o tomcat) y los archivos que hemos desplegado. o cd ~/.mozilla/firefox/a6czhy0t.default/ o Editamos la línea: o Extension2=/opt/jboss/.mozilla/firefox/a6czhy0t.default/e xtensions/{bfe3406c-6f31-4789-86d5-efa50e12c9eb} Los plugins instalados y configurados en firefox son: - Adobe flash plugin (Shockwave Flash) - Plugin fullscreen (full_fullscreen-2.0-fx.xpi) 3.4. CAPA DE SERVIDOR WEB En la capa del servicio web podemos distinguir al menos 3 componentes fundamentales: Servidor web: con el fin de atender todas las peticiones y los componentes estáticos tales como imágenes, CSS, JS, disponemos de un servidor web Apache 2.X instalado. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Alianza2 91 Ayuda Mediawiki: la ayuda se basa en el popular software libre Mediawiki. Se trata de una aplicación PHP disjunta del portal instalada directamente sobre Apache. Proxy cache: para aquellos contenidos que sean susceptibles de ser almacenados en caché tales como imágenes, CSS, JS, e incluso algunos contenidos (ODEs) solicitados Alianza2 muy a menudo, se propone el uso de un Proxy cache como Squid. Otras opciones como Alianza2 habilitar el módulo de caché de Apache o la caché cualquier otro servidor web serían totalmente válidas. 3.4.1. APACHE 2 Dada la naturaleza de software libre y el presente uso en la mayoría de las CCAA, se ha escogido Apache 2.x como servidor web. Durante la instalación, en caso de no existir un Apache previo, se habrá instalado la última versión estable de Apache 2.0.X (siendo a fecha de la escritura del manual la versión 2.0.63 la última versión estable). En caso de existir ya instalado un servidor web Apache, simplemente se seguirán las guías de configuración recomendadas por JBoss y se creará el virtual host necesario. Con respecto a las conexiones, recordamos que los usuarios se conectarán desde Internet al Apache (puerto 80 y puerto 443 para HTTPS). El servidor HTTPd establecerá conexiones mediante el conector AJP con el servidor de aplicaciones (puerto 8009), y también abrirá conexiones a la base de datos para la MediaWiki. Gráficamente podemos verlas en la siguiente figura: INTERNET :80 :443 Router FIREWALL DMZ Servidor Web APACHE :3306 :8009 Red De Datos Red De Aplicación FIREWALL Interno Servidor de BBDD MYSQL Servidor Aplicaciones JBOSS / Tomcat EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico INTRODUCCIÓN 92 MÓDULOS APACHE NECESARIOS La configuración del vhost va a hacer uso de al menos los siguientes módulos de Apache: modules/mod_alias.so modules/mod_rewrite.so modules/mod_jk.so Alianza2 Alianza2 El modulo mod_jk estable recomendado para entornos de producción es la versión jk-1.2.26. Generalmente los dos primeros módulos siempre vienen instalados y habilitados en el fichero manualmente. FICHEROS DE CONFIGURACIÓN httpd.conf Normalmente la ruta del fichero será /etc/httpd/conf/httpd.conf. La configuración habilitada en cada CCAA será distinta, sin embargo, podemos referenciar los parámetros de configuración que afectan o directamente que son necesarios por el portal Agrega: # KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to "Off" to deactivate. # KeepAlive On Con este parámetro habilitamos las conexiones persistentes. Mediante el comando httpd –V podemos comprobar cómo se encuentra configurado el servidor MPM de Apache. Un ejemplo de la salida del comando es la siguiente: Server version: Apache/2.0.52 Server built: May 24 2006 11:45:10 Server's Module Magic Number: 20020903:9 Architecture: 32-bit Server compiled with.... -D APACHE_MPM_DIR="server/mpm/prefork" … Si el server MPM configurado es prefork, desde la wiki oficial de JBoss donde se especifica la configuración óptima para el módulo mod-jk se aconseja el valor de 200 clientes por cada CPU que tenga el servidor. En el caso de un servidor con 2 procesadores se aconsejarían los siguientes valores: <IfModule prefork.c> StartServers 20 MinSpareServers 20 MaxSpareServers 20 ServerLimit 400 MaxClients 400 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico de configuración de Apache, mientras que el último suele ser necesario instalarlo 93 MaxRequestsPerChild 0 </IfModule> Si en lugar de prefork la configuración del server MPM es worker, modificaríamos las siguientes líneas: Alianza2 Alianza2 Posteriormente, comprobamos que se encuentren cargados los siguientes módulos: LoadModule deflate_module modules/mod_deflate.so LoadModule alias_module modules/mod_alias.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule jk_module modules/mod_jk.so El modulo mod-jk podría no estar configurado directamente en el httpd.conf y ser configurado en ficheros “.conf” independientes en el directorio /etc/httpd/conf.d/ si se encuentran presentes por ejemplo las líneas: Include conf.d/*.conf Include vhosts.d/*.conf En este caso estamos especificando también el directorio donde se almacenarán los ficheros que definen los virtual hosts (/etc/httpd/vhosts.d/). worker.properties En el directorio /etc/httpd/conf se suele almacenar el fichero que contiene la definición de los workers del módulo mod-jk donde se definen las conexiones entre el Apache y el servidor de aplicaciones JBoss. Su contenido es el siguiente: worker.list=<nodo> worker.<nodo>.host=<ip_jboss> worker.<nodo>.type=ajp13 worker.<nodo>.port=8009 worker.<nodo>.connect_timeout=10000 worker.<nodo>.prepost_timeout=10000 worker.<nodo>.socket_timeout=10 #This value must equal server.xml's connectionTimeout of 10 minutes worker.<nodo>.connection_pool_timeout=600 En donde: <nodo> será el nombre de la CCAA donde nos encontremos, pero puede tener cualquier valor. <ip_jboss> es la dirección IP donde escucha el conector AJP del JBoss. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <IfModule worker.c> StartServers 2 MaxClients 400 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> 94 Los tiempos máximos de espera son los aconsejados en la wiki oficial de JBoss para situaciones de alta carga. El valor del connection_pool_timeout ha de ser igual al valor configurado en el fichero server.xml del JBoss (cuidado que este tiempo se define en segundos y el otro en milisegundos). Alianza2 Alianza2 mod_jk.conf En el caso de especificar el fichero de mod_jk.conf en el directorio conf.d mediante la # Load mod_jk module # Specify the filename of the mod_jk lib LoadModule jk_module modules/mod_jk.so # Where to find workers.properties JkWorkersFile "/etc/httpd/conf/workers.properties" # Where to put jk logs JkLogFile "/var/log/httpd/mod_jk.log" # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" # JkOptions indicates to send SSK KEY SIZE # Note: Changed from +ForwardURICompat. # See http://tomcat.apache.org/security-jk.html JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat JkRequestLogFormat "%w %V %T" # Mount your applications #JkMount /__application__/* loadbalancer # You can use external file for mount points. # It will be checked for updates each 60 seconds. # The format of the file is: /url=worker # /examples/*=loadbalancer #JkMountFile conf/uriworkermap.properties # Add shared memory. # This directive is present with 1.2.10 and # later versions of mod_jk, and is needed for # for load balancing to work properly # Note: Replaced JkShmFile logs/jk.shm due to SELinux issues. Refer to # https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225452 JkShmFile run/jk.shm Las tres líneas resaltadas son aquellas susceptibles a ser modificadas en cada CCAA, especificando: La ubicación del módulo y el nombre del mismo. La ruta completa al fichero worker.properties. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico sentencia include en el httpd.conf, el fichero mod_jk.conf tendría el siguiente contenido: 95 Fichero de log del módulo mod_jk. vhost Alianza2 En el directorio /etc/httpd/vhosts.d/ se creará un virtual host diferente en cada CCAA. La plantilla desde la que se parte durante la instalación es la que sigue a continuación: Alianza2 Definimos el virtual host que escucha en todas las direcciones ip, puerto 80. Especificamos el DocumentRoot del virtual host apuntando al directorio uploads del portal (normalmente será un directorio dentro del disco compartido por NFS). Por último, definimos el ServerName y ServerAlias del nodo con los valores adecuados. Alias /static/css Alias /static Alias /log Alias /wiki Alias /wiki-ca Alias /wiki-en Alias /wiki-eu Alias /wiki-gl Alias /wiki-va /opt/static/ccaa/<sitio>/css /opt/static/common /opt/log/<sitio> /export/wiki/wiki /export/wiki/wiki-ca /export/wiki/wiki-en /export/wiki/wiki-eu /export/wiki/wiki-gl /export/wiki/wiki-va Definimos los siguientes alias: Si deseamos que Apache sirva el contenido estático del portal (imágenes comunes, logos, plantillas, CSS, JS…) es necesario crear los alias static y static/css a los directorios que contienen los estáticos facilitados durante la instalación. En caso contrario, sería necesario añadir la línea siguiente en la sección de configuración de los puntos de montaje mod-jk: JkMount /static/* <nodo> Puesto que los logs se almacenarán por lo general en una partición diferente a la del servidor de aplicaciones (para evitar que se llene el espacio en disco), la aplicación necesita que el alias del vhost /log apunte al directorio donde se almacenan realmente los logs del servidor de aplicaciones. La ayuda, necesita tantos alias como wikis internacionalizadas existen. Recordamos que se trata de una aplicación PHP y apuntará al directorio donde se encuentren instaladas. Alias /taller /export/ccaa/<sitio>/uploads/taller Alias /noticias /export/ccaa/<sitio>/uploads/noticias Alias /repositorio /export/ccaa/<sitio>/uploads/repositorio Alias /galeriaimg /export/ccaa/<sitio>/uploads/galeriaimg/<sitio> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <VirtualHost *:80> DocumentRoot "/export/ccaa/<sitio>/uploads" ServerName <nodo> ServerAlias <nodo> <nodo>.agrega.indra.es 96 Alias /imgcommon /export/ccaa/<sitio>/uploads/galeriaimg/common Alias /imagenesInformes /export/ccaa/<sitio>/uploads/imagenesInformes Alias /rss /export/ccaa/<sitio>/uploads/rss Alias /utilidades /export/ccaa/<sitio>/uploads/utilidades Alias /searchPlugin /export/ccaa/<sitio>/uploads/searchPlugin Alias /sitemaps /export/ccaa/<sitio>/uploads/sitemaps Alias /informesPortada /export/ccaa/<sitio>/uploads/informesPortada Alias /descargas /export/ccaa/<sitio>/uploads/descargas Alias /export /export/ccaa/<sitio>/uploads/export Alianza2 Alianza2 Definimos el resto de los alias usados en el portal. La mayor parte de ellos apuntan a # security # forbid default access to filesystem locations <Directory /> Order Deny,Allow Deny from all Options FollowSymLinks AllowOverride None php_flag engine off </Directory> Definimos el directorio raíz configurado mediante los parámetros: Deny from all No permitimos conexiones al directorio DocumentRoot AllowOverride None Ignoramos los ficheros .htaccess para evitar que sobrescriban políticas de seguridad. php_flag engine off Desactivamos la ejecución de código php. Evitamos que alguien pueda subir recursos ODEs con código PHP malicioso y pueda ejecutarlos. <Directory "/opt/static"> Order Deny,Allow Allow from all Options FollowSymLinks AllowOverride None php_flag engine off </Directory> <Directory "/export/ccaa/<sitio>/uploads"> Order Deny,Allow Allow from all AllowOverride None Options FollowSymLinks php_flag engine off </Directory> Se definen los directorios del /opt/static y directorio uploads. <Directory "/export/wiki/wiki/"> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico directorios contenidos dentro de uploads. 97 A continuación, se han definido todos los directorios donde se encuentran instaladas las MediaWiki. Es importante destacar que es necesario habilitar el php_flag engine puesto que se trata de un software PHP. RewriteEngine on RewriteRule ^/robots.txt$ /sitemaps/robots.txt [L,PT] RewriteRule ^/sitemap.xml$ /sitemaps/sitemap-index.xml [L,PT] RewriteRule ^/sitemap(.*).xml$ /sitemaps/sitemap$1.xml [L,PT] RewriteRule ^/$ /visualizadorcontenidos/ [R=permanent,L] RewriteRule ^/layout/(.*) /visualizador-1/layout/$1 [L,PT] #RewriteRule ^/idODE/([a-z_][0-9]+)/ /visualizador1/Visualizar/Visualizar.do?identificador=$1&secuencia=false [L,PT] RewriteRule ^/idODE/(.*) /visualizador1/Visualizar/Visualizar.do?identificador=$1&secuencia=false [L,PT] # ODE/<idioma>/<identificadorODE> ---- Example: http://mantenimiento.agrega.indra.es/ODE/es/es-mec_20080206_3_9220808 Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Options None AllowOverride None Order Deny,Allow Allow from all php_flag engine on </Directory> <Directory "/export/wiki/wiki-ca/"> Options None AllowOverride None Order Deny,Allow Allow from all php_flag engine on </Directory> <Directory "/export/wiki/wiki-en/"> Options None AllowOverride None Order Deny,Allow Allow from all php_flag engine on </Directory> <Directory "/export/wiki/wiki-eu/"> Options None AllowOverride None Order Deny,Allow Allow from all php_flag engine on </Directory> <Directory "/export/wiki/wiki-gl/"> Options None AllowOverride None Order Deny,Allow Allow from all php_flag engine on </Directory> <Directory "/export/wiki/wiki-va/"> Options None AllowOverride None Order Deny,Allow Allow from all php_flag engine on </Directory> 98 RewriteRule ^/ODE/(.+)/(.+)$ /buscador/DetallarODECU/DetallarODECU.do?idioma=$1&identificadorODE=$2 [L,PT] RewriteRule ^(.+)\\(.+)$ $1/$2 [PT] # visualizar/<identificadorODE>/<sequence> ---- Example: http://mantenimiento.agrega.indra.es/visualizar/es-mec_20080206_3_9220808/false RewriteRule ^/visualizar/(.+)/(.+)/(.+)$ /visualizador1/Visualizar/Visualizar.do?idioma=$1&identificador=$2&secuencia=$3 [L,PT] # Reglas de rewriting para las NOTICIAS RewriteRule ^/portada/noticias/(.+)/(.+)$ /visualizadorcontenidos/Portada/NoticiasVer.do?id=$2 [PT,L] RewriteRule ^/portada/noticiasCategorias/(.+)/(.+)$ /visualizadorcontenidos/Portada/NoticiasCategoria.do?idCategoria=$2 [PT,L] RewriteRule ^/noticias$ /visualizadorcontenidos/Noticias/Noticias.do [PT,L] RewriteCond %{QUERY_STRING} ^idCategoria(.+)&(.+)$ RewriteRule ^/noticias/categorias/(.+)/(.+)$ /visualizadorcontenidos/Noticia/NoticiaCategoria.do?idCategoria%1&%2 [PT,L] RewriteCond %{QUERY_STRING} ^(.+)&idCategoria(.+)$ RewriteRule ^/noticias/categorias/(.+)/(.+)$ /visualizadorcontenidos/Noticia/NoticiaCategoria.do?%1&idCategoria%2 [PT,L] RewriteRule ^/noticias/categorias/(.+)/(.+)$ /visualizadorcontenidos/Noticia/NoticiaCategoria.do?idCategoria=$2 [PT,L] Definimos un conjunto de RewriteRules para facilitar las URLs y su almacenamiento como favoritos en sistemas externos. El formato de una RewriteRule es: RewriteRule Pattern Substitution [Flags] Donde los flags más comunes son: Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico # rewrite rule para los flash RewriteRule ^/visualizar/es/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L] RewriteRule ^/visualizar/es/(.+)\.html$ /visualizador-1/$1\.html [PT,L] RewriteRule ^/visualizar/es/(.+)\.js$ /visualizador-1/$1\.js [PT,L] RewriteRule ^/visualizar/es/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L] RewriteRule ^/visualizar/en/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L] RewriteRule ^/visualizar/en/(.+)\.html$ /visualizador-1/$1\.html [PT,L] RewriteRule ^/visualizar/en/(.+)\.js$ /visualizador-1/$1\.js [PT,L] RewriteRule ^/visualizar/en/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L] RewriteRule ^/visualizar/eu/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L] RewriteRule ^/visualizar/eu/(.+)\.html$ /visualizador-1/$1\.html [PT,L] RewriteRule ^/visualizar/eu/(.+)\.js$ /visualizador-1/$1\.js [PT,L] RewriteRule ^/visualizar/eu/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L] RewriteRule ^/visualizar/ca/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L] RewriteRule ^/visualizar/ca/(.+)\.html$ /visualizador-1/$1\.html [PT,L] RewriteRule ^/visualizar/ca/(.+)\.js$ /visualizador-1/$1\.js [PT,L] RewriteRule ^/visualizar/ca/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L] RewriteRule ^/visualizar/va/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L] RewriteRule ^/visualizar/va/(.+)\.html$ /visualizador-1/$1\.html [PT,L] RewriteRule ^/visualizar/va/(.+)\.js$ /visualizador-1/$1\.js [PT,L] RewriteRule ^/visualizar/va/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L] RewriteRule ^/visualizar/gl/(.+)\.jsp$ /visualizador-1/$1\.jsp [PT,L] RewriteRule ^/visualizar/gl/(.+)\.html$ /visualizador-1/$1\.html [PT,L] RewriteRule ^/visualizar/gl/(.+)\.js$ /visualizador-1/$1\.js [PT,L] RewriteRule ^/visualizar/gl/(.+)\.swf$ /visualizador-1/$1\.swf [PT,L] L: Last Rule. Si la regla se ejecutó, no se ejecutan más reglas posteriormente. 99 PT: Pass Through al próximo controlador. Permite el post-procesamiento de la salida de la rewrite rule usando Alias, ScriptAlias, Redirect… #JkLogLevel debug Alianza2 /visualizadorcontenidos/* <nodo> /PortalEmpaquetador/* <nodo> /catalogadorWeb/* <nodo> /visualizador-1/* <nodo> /portaladministracion/* <nodo> /buscador/* <nodo> /dri-1/* <nodo> /gestorFlujo/* <nodo> /buscar-1/* <nodo> /reputacion/* <nodo> /auditoria/* <nodo> /ModificadorWeb/* <nodo> /oaipmh/* <nodo> Definimos los módulos que se conectarán al JBoss presente en el <nodo> definido en el worker.properties. Toda petición que se dirija a cualquiera de estos paths en la URL, será redirigida la petición hacia el JBoss a través del conector AJP. LogFormat "%h %l %u %t \"%r\" %>s %b" extendedlog CustomLog logs/<sitio>_access.log extendedlog ErrorLog logs/<sitio>_error.log </VirtualHost> Definimos el virtual host asociado al cas (módulo de autenticación que nos proporciona single sign on), que podría encontrarse en otro servidor, aunque normalmente residirá en el mismo que el portal. <VirtualHost *:80> ServerName cas-<nodo>.agrega.indra.es JkMount /cas/* <nodo> Alias /static/css /opt/static/ccaa/<sitio>/css Alias /static /opt/static/common LogFormat "%h %l %u %t \"%r\" %>s %b" extendedlog CustomLog logs/<sitio>_access.log extendedlog ErrorLog logs/<sitio>_error.log </VirtualHost> Por ultimo se define un virtual host para el cas mediante protocolo seguro (HTTPS, 443): <VirtualHost *:443> Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico JkMount JkMount JkMount JkMount JkMount JkMount JkMount JkMount JkMount JkMount JkMount JkMount JkMount 100 ServerName cas-<nodo>.agrega.indra.es JkMount /cas/* <nodo> Alias /static/css /opt/static/ccaa/<sitio>/css Alias /static /opt/static/common Alianza2 Alianza2 LogFormat "%h %l %u %t \"%r\" %>s %b" extendedlog CustomLog logs/<sitio>_access.log extendedlog ErrorLog logs/<sitio>_error.log </VirtualHost> AYUDA MEDIAWIKI INTRODUCCIÓN La ayuda de la plataforma Agrega hace uso de la aplicación basada en software libre MediaWiki. La aplicación MediaWiki 1.12.0 habrá sido instalada durante el proceso de instalación del nodo. Para el correcto funcionamiento, requiere PHP 5 o superior y la conexión a una base de datos MySQL. Por todo ello, se trata de una aplicación disjunta del portal con una base de datos diferente a la del portal, no compartiéndose directamente información entre ambas aplicaciones. PROCESO DE INSTALACIÓN Durante la instalación, en un directorio visible desde la máquina de Apache y habiendo configurado el soporte para PHP 5 o superior, se descomprimirán los binarios de la aplicación Mediawiki por ejemplo en el directorio /export/wiki. Se recomienda que el dueño del directorio sea el usuario que ejecuta Apache en la máquina. Una vez descomprimidos los binarios, en la base de datos crearemos una nueva entrada para la wiki, por ejemplo: base de datos wikidb. A través de un dump proporcionado procederemos a volcar toda la información, tablas e índices necesarios mediante el comando: mysql -u root -p wikidb < wikidb.sql Se habrá creado un usuario de acceso a la base de datos de la wiki con permisos de inserción, modificación y borrado de entradas en las tablas, pero no con privilegios de modificación de los esquemas mediante el comando: grant insert, update, delete, select wiki_user@'localhost' identified by 'password' on wikidb.* to EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 3.4.2. 101 FICHEROS DE CONFIGURACIÓN Los únicos 2 ficheros a tener en cuenta para la correcta configuración de la MediaWiki son los siguientes: Alianza2 Alianza2 /export/wiki/LocalSettings.php Almacena toda la configuración de la wiki, entre los parámetros más importantes destacamos $wgDBserver = "servidor"; $wgDBname = "wikidb"; $wgDBuser = "usuario_wiki"; $wgDBpassword = "pass_wiki"; $wgDBprefix = ""; $wgDBtype = "mysql"; Especificamos el servidor que contiene la BD, el nombre de la base de datos, el usuario y password de la conexión y el tipo de base de datos al que nos conectamos. $wgLanguageCode = "Es"; Dado que existirá una wiki por cada idioma, en cada instalación MediaWiki se deberá especificar el idioma correspondiente, pudiendo tomar los siguientes valores: Idioma Castellano Catalán Euskera Gallego Inglés Valenciano Prefijo Es Ca Eu Gl En Ca vhost especificado en Apache Recordamos que se debe definir tanto el Alias como el Directorio donde se encuentre instalada la MediaWiki con permisos de ejecución php. Asumiendo que la wiki se encuentra instalada en /export/wiki/wikies: Alias /wiki /export/wiki/wikies <Directory "/export/wiki/wikies/"> Options None AllowOverride None Order Deny,Allow Allow from all php_flag engine on </Directory> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico los siguientes: 102 INTERNACIONALIZACIÓN Existirán tantas MediaWiki instaladas como idiomas internacionalizados deseemos ofrecer. Por defecto se habrán instalado 6 MediaWiki, para los idiomas castellano, catalán, euskera, gallego, inglés y valenciano. Alianza2 Alianza2 Idioma Castellano Catalán Euskera Gallego Inglés Valenciano 3.4.3. Prefijo /wiki /wiki-ca /wiki-eu /wiki-gl /wiki-en /wiki-va PROXY CACHE: SQUID INTRODUCCIÓN En algunas ocasiones, puede ser conveniente instalar un Proxy caché intermedio (antes de Apache) para almacenar aquellas peticiones que se repitan muchas veces a lo largo del tiempo. Las respuestas del portal HTTP se encuentran bien formadas y permiten su almacenamiento tanto en la caché del navegador como en las caches intermedias existentes. Veamos la siguiente figura: INTERNET :80 :443 SISTEMAS CACHE ISP Router Proxy Cache SQUID FIREWALL DMZ Servidor Web APACHE :8009 Red De Aplicación FIREWALL Interno Servidor Aplicaciones JBOSS / Tomcat EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Los alias que usará el portal para redirigir a la ayuda serán: 103 Un usuario, el cual posee una cache de navegación habilitada para no volver a pedir aquellos ficheros que no se han modificado desde la última vez que se solicitaron, se conecta a través de un proveedor de servicios de Internet (ISP), quien suele disponer de pooles de cache bastante extensos con el fin de limitar el tráfico saliente de su red hacia Internet. Si el recurso Alianza2 solicitado no se encuentra en la cache del ISP se pedirá a través de Internet el recurso, Alianza2 llegando finalmente a la CCAA la petición. Como norma general aconsejamos que exista una cache lo más cerca al usuario como sea posible, para evitar tráfico por las redes y tiempos de respuesta mayores. Por ello, la cache más efectiva es primero la del navegador del usuario, luego al del ISP y por último la de la Las cabeceras HTTP que controlan la posibilidad de Cache o no son: Peticiones salientes: If-modified-since Respuestas: Last-Modified Cache-Control Expires Veamos un ejemplo real capturado con el plugin de Firefox Live HTTP Headers. Si borramos la caché del usuario y solicitamos al portal redes la página inicial vemos el siguiente tráfico intercambiado: http://redes.agrega.indra.es/ GET / HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive HTTP/1.x 301 Moved Permanently Date: Tue, 30 Sep 2008 07:56:31 GMT Server: Apache/2.0.52 (Red Hat) Location: http://redes.agrega.indra.es/visualizadorcontenidos/ Content-Length: 348 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1 ---------------------------------------------------------http://redes.agrega.indra.es/visualizadorcontenidos/ EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico CCAA. GET /visualizadorcontenidos/ HTTP/1.1 104 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive GET /visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67D9BCC35F09C7EF4DF05 21D48 HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:31 GMT Server: Apache/2.0.52 (Red Hat) X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)/Tomcat-5.5 Content-Language: es-ES Keep-Alive: timeout=15, max=98 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html;charset=ISO-8859-1 ---------------------------------------------------------http://redes.agrega.indra.es/static/img/favicon.ico GET /static/img/favicon.ico HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico HTTP/1.x 302 Movido temporálmente Date: Tue, 30 Sep 2008 07:56:31 GMT Server: Apache/2.0.52 (Red Hat) X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)/Tomcat-5.5 Set-Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48; Path=/ Location: http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67 D9BCC35F09C7EF4DF0521D48 Content-Length: 0 Keep-Alive: timeout=15, max=99 Connection: Keep-Alive Content-Type: text/html;charset=ISO-8859-1 ---------------------------------------------------------http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67 D9BCC35F09C7EF4DF0521D48 Alianza2 105 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 GET /static/js/plantilla.js HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: */* Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67 D9BCC35F09C7EF4DF0521D48 Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:31 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Thu, 07 Aug 2008 10:40:44 GMT Etag: "f0202-33d-5235a300" Accept-Ranges: bytes Content-Length: 829 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: application/x-javascript ---------------------------------------------------------http://redes.agrega.indra.es/static/css/red.css GET /static/css/red.css HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: text/css,*/*;q=0.1 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67 D9BCC35F09C7EF4DF0521D48 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:31 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 11 Aug 2008 11:21:52 GMT Etag: "f02cb-e36-5cadd400" Accept-Ranges: bytes Content-Length: 3638 Keep-Alive: timeout=15, max=97 Connection: Keep-Alive Content-Type: text/plain ---------------------------------------------------------http://redes.agrega.indra.es/static/js/plantilla.js 106 Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:31 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Thu, 07 Aug 2008 10:11:36 GMT Etag: "f0209-32191-ea054600" Accept-Ranges: bytes Content-Length: 205201 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/css ---------------------------------------------------------http://redes.agrega.indra.es/static/js/mootools.js HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Thu, 05 Jun 2008 11:56:00 GMT Etag: "f0201-a8c3-761b400" Accept-Ranges: bytes Content-Length: 43203 Keep-Alive: timeout=15, max=96 Connection: Keep-Alive Content-Type: application/x-javascript ---------------------------------------------------------http://redes.agrega.indra.es/static/js/calendar.rc4.js GET /static/js/calendar.rc4.js HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: */* Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67 D9BCC35F09C7EF4DF0521D48 Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico GET /static/js/mootools.js HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: */* Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do;jsessionid=62F1FE67 D9BCC35F09C7EF4DF0521D48 Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 107 Server: Apache/2.0.52 (Red Hat) Last-Modified: Tue, 05 Aug 2008 15:43:46 GMT Etag: "f01fc-88df-52423080" Accept-Ranges: bytes Content-Length: 35039 Keep-Alive: timeout=15, max=99 Connection: Keep-Alive Content-Type: application/x-javascript ---------------------------------------------------------http://redes.agrega.indra.es/static/img/senal.gif HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Tue, 27 May 2008 08:57:22 GMT Etag: "f036a-166-7bf7a080" Accept-Ranges: bytes Content-Length: 358 Keep-Alive: timeout=15, max=99 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/buscador_widget.gif GET /static/img/buscador_widget.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Tue, 27 May 2008 08:56:40 GMT Etag: "f029f-4de-7976c200" Accept-Ranges: bytes Content-Length: 1246 Keep-Alive: timeout=15, max=95 Connection: Keep-Alive Content-Type: image/gif Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico GET /static/img/senal.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 108 ---------------------------------------------------------http://redes.agrega.indra.es/static/img/cabecera.jpg GET /static/img/cabecera.jpg HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 GET /static/img/barrita.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 30 Oct 2006 15:44:32 GMT Etag: "f0292-2d-255b3800" Accept-Ranges: bytes Content-Length: 45 Keep-Alive: timeout=15, max=98 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/06_ingles.gif GET /static/img/06_ingles.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Thu, 01 Mar 2007 17:15:36 GMT Etag: "f02a2-146-a3acfe00" Accept-Ranges: bytes Content-Length: 326 Keep-Alive: timeout=15, max=98 Connection: Keep-Alive Content-Type: image/jpeg ---------------------------------------------------------http://redes.agrega.indra.es/static/img/barrita.gif Alianza2 109 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 GET /static/img/04_valenciano.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 26 May 2008 16:23:40 GMT Etag: "f0281-4c-9a381b00" Accept-Ranges: bytes Content-Length: 76 Keep-Alive: timeout=15, max=97 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/05_vasco.gif GET /static/img/05_vasco.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 26 May 2008 16:24:20 GMT Etag: "f0285-5e-9c9a7500" Accept-Ranges: bytes Content-Length: 94 Keep-Alive: timeout=15, max=94 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/04_valenciano.gif Alianza2 110 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 26 May 2008 16:23:58 GMT Etag: "f0283-5a-9b4ac380" Accept-Ranges: bytes Content-Length: 90 Keep-Alive: timeout=15, max=97 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/03_gallego.gif HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 26 May 2008 16:23:00 GMT Etag: "f027f-50-97d5c100" Accept-Ranges: bytes Content-Length: 80 Keep-Alive: timeout=15, max=93 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/02_catalan.gif GET /static/img/02_catalan.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 26 May 2008 16:22:34 GMT Etag: "f027d-3d-96490680" Accept-Ranges: bytes Content-Length: 61 Keep-Alive: timeout=15, max=96 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico GET /static/img/03_gallego.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 111 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/01_castellano.gif Alianza2 es-ES; rv:1.9.0.1) es-ES; rv:1.9.0.1) HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 26 May 2008 16:21:26 GMT Etag: "f027b-3a-923b6d80" Accept-Ranges: bytes Content-Length: 58 Keep-Alive: timeout=15, max=96 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/logo_redes.gif GET /static/img/logo_redes.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Thu, 06 Mar 2008 10:32:38 GMT Etag: "f0337-153d-41ae1d80" Accept-Ranges: bytes Content-Length: 5437 Keep-Alive: timeout=15, max=92 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/barra_general.gif GET /static/img/barra_general.gif HTTP/1.1 Host: redes.agrega.indra.es Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico GET /static/img/01_castellano.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 112 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Fri, 02 Mar 2007 18:19:00 GMT Etag: "f028f-40b-a440cd00" Accept-Ranges: bytes Content-Length: 1035 Keep-Alive: timeout=15, max=95 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/barra_general_der.gif GET /static/img/barra_general_der.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Fri, 02 Mar 2007 18:24:36 GMT Etag: "f0290-108-b847c100" Accept-Ranges: bytes Content-Length: 264 Keep-Alive: timeout=15, max=95 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/bullet_off.gif GET /static/img/bullet_off.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive NT 5.1; es-ES; rv:1.9.0.1) EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Alianza2 113 Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Fri, 02 Mar 2007 12:14:40 GMT Etag: "f029d-43-8d4bac00" Accept-Ranges: bytes Content-Length: 67 Keep-Alive: timeout=15, max=91 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/dest_01.jpg Alianza2 es-ES; rv:1.9.0.1) es-ES; rv:1.9.0.1) HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Thu, 01 Mar 2007 17:12:36 GMT Etag: "f02b8-2aa4-98f26900" Accept-Ranges: bytes Content-Length: 10916 Keep-Alive: timeout=15, max=94 Connection: Keep-Alive Content-Type: image/jpeg ---------------------------------------------------------http://redes.agrega.indra.es/static/img/imagen_00.jpg GET /static/img/imagen_00.jpg HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Tue, 24 Jun 2008 10:42:56 GMT Etag: "f030c-140fd-390f4c00" EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico GET /static/img/dest_01.jpg HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 114 Accept-Ranges: bytes Content-Length: 82173 Keep-Alive: timeout=15, max=94 Connection: Keep-Alive Content-Type: image/jpeg ---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_gobierno.gif Alianza2 es-ES; rv:1.9.0.1) es-ES; rv:1.9.0.1) HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 02 Jun 2008 08:10:14 GMT Etag: "f0277-b9e-86740580" Accept-Ranges: bytes Content-Length: 2974 Keep-Alive: timeout=15, max=90 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_mepd.gif GET /static/img/00_logo_mepd.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 02 Jun 2008 08:11:14 GMT Etag: "f0278-74f-8a078c80" Accept-Ranges: bytes Content-Length: 1871 Keep-Alive: timeout=15, max=93 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_red.jpg EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico GET /static/img/00_logo_gobierno.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 115 es-ES; rv:1.9.0.1) Alianza2 Alianza2 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 21 Apr 2008 07:33:06 GMT Etag: "f027a-5d1-1c51b080" Accept-Ranges: bytes Content-Length: 1489 Keep-Alive: timeout=15, max=89 Connection: Keep-Alive Content-Type: image/jpeg ---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_avanza.jpg GET /static/img/00_logo_avanza.jpg HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 es-ES; rv:1.9.0.1) es-ES; rv:1.9.0.1) HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 21 Apr 2008 07:33:44 GMT Etag: "f0274-6bc-1e958600" Accept-Ranges: bytes Content-Length: 1724 Keep-Alive: timeout=15, max=92 Connection: Keep-Alive Content-Type: image/jpeg ---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_mitc.gif GET /static/img/00_logo_mitc.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 NT 5.1; EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico GET /static/img/00_logo_red.jpg HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 116 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 02 Jun 2008 08:11:38 GMT Etag: "f0279-650-8b75c280" Accept-Ranges: bytes Content-Length: 1616 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------http://redes.agrega.indra.es/static/img/00_logo_europa.gif es-ES; rv:1.9.0.1) es-ES; rv:1.9.0.1) HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 07:56:32 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Mon, 02 Jun 2008 08:12:28 GMT Etag: "f0276-906-8e70b300" Accept-Ranges: bytes Content-Length: 2310 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: image/gif ---------------------------------------------------------Si volvemos a solicitar la misma página las peticiones realizadas son: http://redes.agrega.indra.es/ GET / HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 301 Moved Permanently EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico GET /static/img/00_logo_europa.gif HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/static/css/red.css Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 117 Date: Tue, 30 Sep 2008 08:12:36 GMT Server: Apache/2.0.52 (Red Hat) Location: http://redes.agrega.indra.es/visualizadorcontenidos/ Content-Length: 348 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1 ---------------------------------------------------------http://redes.agrega.indra.es/visualizadorcontenidos/ Alianza2 es-ES; rv:1.9.0.1) HTTP/1.x 302 Movido temporálmente Date: Tue, 30 Sep 2008 08:12:36 GMT Server: Apache/2.0.52 (Red Hat) X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)/Tomcat-5.5 Location: http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do Content-Length: 0 Keep-Alive: timeout=15, max=99 Connection: Keep-Alive Content-Type: text/html;charset=ISO-8859-1 ---------------------------------------------------------http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada.do GET /visualizadorcontenidos/Portada/Portada.do HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 08:12:36 GMT Server: Apache/2.0.52 (Red Hat) X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)/Tomcat-5.5 Content-Language: es-ES Keep-Alive: timeout=15, max=98 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html;charset=ISO-8859-1 ---------------------------------------------------------- EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico GET /visualizadorcontenidos/ HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Alianza2 118 Apreciamos que al no haber cambiado los CSS ni las imágenes, no se han vuelto al descargar del servidor, el navegador tiene los CSS, imágenes y JS almacenados en la cache. Alianza2 Cuando descargamos un objeto, vemos que se devuelve la siguiente respuesta HTTP: Alianza2 GET /buscador/DescargarODECU/SeleccionarTipoFormatoAceptar.do?formato=descargar.format os.SCORM_2004_VALUE&idioma=es&titulo=Clasifica+aparatos+y+Palabras+locas&identific adorODE=es_20071214_2_0102201&tipoLayoutBuscador=BUSCADOR HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/buscador/DescargarODECU/DescargarODECU.do?identificador ODE=es_20071214_2_0102201&idioma=es&tipoLayoutBuscador=BUSCADOR&mostrarVuel ta=true Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 HTTP/1.x 302 Movido temporálmente Date: Tue, 30 Sep 2008 08:25:05 GMT Server: Apache/2.0.52 (Red Hat) X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)/Tomcat-5.5 content-disposition: attachment;filename=Clasifica_aparatos_y_Palabras_locas.zip Cache-Control: public Expires: Wed, 01 Oct 2008 08:25:09 GMT Location: http://redes.agrega.indra.es/repositorio/13062008/temp/SCORM_2004/Clasifica_aparatos_y_ Palabras_locas.zip Content-Length: 0 Keep-Alive: timeout=15, max=99 Connection: Keep-Alive Content-Type: application/zip;charset=ISO-8859-1 ---------------------------------------------------------http://redes.agrega.indra.es/repositorio/13062008/temp/SCORM_2004/Clasifica_aparatos_y_ Palabras_locas.zip GET /repositorio/13062008/temp/SCORM_2004/Clasifica_aparatos_y_Palabras_locas.zip HTTP/1.1 Host: redes.agrega.indra.es User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico http://redes.agrega.indra.es/buscador/DescargarODECU/SeleccionarTipoFormatoAceptar.do ?formato=descargar.formatos.SCORM_2004_VALUE&idioma=es&titulo=Clasifica+aparatos+ y+Palabras+locas&identificadorODE=es_20071214_2_0102201&tipoLayoutBuscador=BUSC ADOR 119 Keep-Alive: 300 Connection: keep-alive Referer: http://redes.agrega.indra.es/buscador/DescargarODECU/DescargarODECU.do?identificador ODE=es_20071214_2_0102201&idioma=es&tipoLayoutBuscador=BUSCADOR&mostrarVuel ta=true Cookie: JSESSIONID=62F1FE67D9BCC35F09C7EF4DF0521D48 Observamos que haciendo la petición el 30 de Septiembre de 2008 a las 08:25 GMT, se nos devuelve un objeto que caduca el día siguiente y cuya fecha de modificación ha sido el instante actual en el que se acaba de crear. Si solicitamos de nuevo el fichero habrá sido cacheado por las caches intermedias que existan y no se detectará cambio hasta el día siguiente. CONFIGURACIÓN SQUID En función de número de conexiones simultáneas y descargas que tengamos en la CCAA, podría ser necesario habilitar SQUID como Proxy transparente cacheando los contenidos devueltos por el portal para evitar que las peticiones lleguen hasta Apache o incluso al propio JBossAS. Para ello, si se ha instalado Squid 3 el fichero de configuración es el siguiente: /etc/squid3/squid.conf Los parámetros más importantes son: http_port 3128 transparent Es el puerto por el que el proxy va a recibir las peticiones http de los clientes. El puerto por defecto para Squid es el 3128. La opción "transparent" es imprescindible si lo que queremos es que Squid actúe de forma transparente, esto es, sin tener que configurar el proxy en cada uno de los navegadores de los clientes. icp_port 3130 Puerto por el que Squid hace las consultas ICP (Internet Caché Protocol) a la caché. El puerto estándar UDP para ICP es el 3130. dns_nameservers 192.168.10.2 192.168.10.1 Servidores DNS que debe utilizar Squid. Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico HTTP/1.x 200 OK Date: Tue, 30 Sep 2008 08:25:09 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Tue, 30 Sep 2008 08:25:08 GMT Etag: "39686b8-8728c-b8b26100" Accept-Ranges: bytes Content-Length: 553612 Keep-Alive: timeout=15, max=98 Connection: Keep-Alive Content-Type: application/zip ---------------------------------------------------------- Alianza2 120 cache_dir ufs /var/spool/squid 100 16 256 Con este parámetro indicamos donde queremos que se almacene la caché de Squid. ufs: Es el tipo de almacenamiento donde se van a almacenar los datos. 100: Tamaño máximo de la caché de Squid en MB. 16: Número máximos de directorios en el nivel 1 del árbol de directorios de la caché. 256: Número máximo de directorios en el nivel 2 del árbol de directorios de la caché. Normalmente se almacena por defecto en /var/spool/squid3/. Alianza2 Alianza2 localizados en /var/log/squid3/. hierarchy_stoplist cgi-bin ? Este parámetro es útil cuando tenemos varias cachés interconectadas (hermanas, hijas,...). Las URL's que contengan las palabras o cadenas especificadas en este parámetro se irán a buscar directamente a la caché propia del servidor y no a otra de las cachés que pudiera haber. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 El primer valor (min) indica el tiempo mínimo con el cual un objeto se considera reciente (fresh). El segundo valor (percent) indica el porcentaje de la edad del objeto con el que es considerado reciente (fresh). El tercer valor (max) indica el tiempo máximo con el cual un objeto se seguirá considerando reciente (fresh). acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT acl mipc src 172.22.44.112/255.255.255.0 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico cache_access_log /var/log/squid3/access.log cache_log /var/log/squid3/cache.log cache_store_log /var/log/squid3/store.log Estos parámetros permiten especificar la ubicación de los logs de Squid. Por defecto están 121 Las "acl" en Squid (Access Control List) sirven para definir controles de acceso de equipos, puertos, conexiones... La sintaxis es la siguiente: "acl nombre_acl tipo_acl descripción". Alianza2 También se pueden especificar mediante ficheros con la siguiente sintaxis: acl nombre_acl Alianza2 tipo_acl "fichero_de_descripciones" (por ejemplo un grupo de muchos equipos o redes). src: Especifica una dirección origen de una conexión en formato IP/máscara. dst: Específica una dirección destino de una conexión en formato IP/máscara. port: Sirve para especificar un puerto. proto: Sirve para indicar un protocolo en concreto. method: Especifica un método HTTP en concreto (POST CONNECT GET REQUEST...) cache deny QUERY Indica que no se deben cachear las URL's del ACL indicado (en este caso el ACL se llama QUERY y puede estar declarada por ejemplo como "acl QUERY urlpath_regex cgibin \?"). http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow all http_access allow mipc http_access deny all Sirve para permitir/denegar/administrar el acceso de las "acl" definidas anteriormente. http_reply_access allow all Se usa como complemento al parámetro "http_access" para refinar el control de acceso al Squid. icp_access allow all Permite establecer en las "acl's" los permisos para las peticiones ICP. CONFIGURACIÓN EN EL SO PARA LAS REDIRECCIONES Si deseamos redirigir el tráfico que llega desde una determinada interfaz de red por el puerto 80 al puerto de Squid, podemos con iptables ejecutar el siguiente comando: /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 Redirigimos todas las peticiones que se reciben en el servidor en la interfaz eth0 por el puerto 80 al puerto 3128 que es configurado previamente en Squid. Podemos comprobar que se ha establecido correctamente la regla con: iptables -t nat -L EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Tipos de acl: 122 Además debemos activar el reenvío de paquetes en el kernel. Esto lo hacemos mediante el siguiente comando: echo 1 > /proc/sys/net/ipv4/ip_forward Alianza2 Para comprobar que Squid está cacheando podemos ver que los directorios donde se ha Alianza2 establecido que se cachee (por defecto /var/spool/squid/) van aumentando de tamaño a EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico medida que se navega a través del proxy. 123 4. BLOQUE III: OPERACIÓN Y MANTENIMIENTO DE LA PLATAFORMA Asumiendo la instalación de la plataforma Agrega en sistemas operativos Linux, vamos a ver Alianza2 los comandos, ficheros, logs… necesarios para la operación y mantenimiento de la Alianza2 plataforma. 4.1. ARRANQUE Y PARADA DE LOS APLICATIVOS En el directorio /etc/init.d/ se encuentran todos los “scripts” que facilitan el arranque y la y "restart”. 4.1.1. JBOSS Arranque: /etc/init.d/jboss start Parada: /etc/init.d/jboss stop Para comprobar si se encuentra el JBoss arrancado podemos ejecutar el comando: ps auxww | grep –i java Obteniéndose una salida similar a la siguiente: jboss 13135 0.6 29.8 2707440 760348 ? Sl Sep29 6:24 /opt/jdk/bin/java -Dprogram.name=run.sh -server -Xmn100M -Xms512M Xmx1536M -XX:MaxPermSize=786M -Djava.awt.headless=true Djava.endorsed.dirs=/opt/jboss-redes/lib/endorsed -classpath /opt/jboss-redes/bin/run.jar:/opt/jdk/lib/tools.jar org.jboss.Main -c default -b 0.0.0.0 Es importante destacar que en el script de arranque de init.d de JBoss se encuentren presentes los siguientes parámetros: -c default o o -b 0.0.0.0 o Especificamos que la configuración a usar sea la default, por lo que se accederá a $JBOSS_HOME/server/default/deploy. En casos de clustering de JBoss se recomienda arrancar con “all” en lugar de “default”. Especificamos que JBoss haga bind en todas las interfaces de red. En cada CCAA dicho parámetro podrá ser ajustado para que JBoss únicamente escuche en la red por la que provienen las conexiones de Apache. Después de ejecutar el comando de stop, cuando realmente finalice el servicio podremos apreciar en los logs del servidor JBoss la siguiente traza: 2008-09-29 19:54:06,452 INFO [org.jboss.system.server.Server] Shutdown complete EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico parada de los servicios. Estos “scripts” comúnmente aceptan como argumentos "start", "stop" 124 ELIMINACIÓN DESPLIEGUES ANTERIORES Si vamos a actualizar la versión de Agrega, es conveniente limpiar previamente todos los Alianza2 despliegues anteriores (tanto clases como JSPs) mediante los siguientes pasos: Paramos el servidor de aplicaciones JBoss. Borramos el contenido del directorio: $JBOSS_HOME/server/default/tmp/deploy/ Borramos el contenido del directorio: $JBOSS_HOME/server/default/work/jboss.web/localhost/ Desplegamos los nuevos WARS, properties, etc. Arrancamos el servidor de aplicaciones JBoss. 4.1.2. TOMCAT Arranque: $TOMCAT_HOME/bin/startup.sh Parada: $TOMCAT_HOME/bin/shutdown.sh Para comprobar si se encuentra Tomcat arrancado podemos ejecutar el comando: ps auxww | grep –i java ELIMINACIÓN DESPLIEGUES ANTERIORES Si vamos a actualizar la versión de Agrega, es conveniente limpiar previamente todos los despliegues anteriores (tanto clases como JSPs) mediante los siguientes pasos: Paramos el servidor de aplicaciones Tomcat. Borramos todos los wars (y sus directorios) que se encuentren en el directorio: o $TOMCAT_HOME/webapps/ Desplegamos los nuevos WARS, properties, etc. Arrancamos el servidor Tomcat. 4.1.3. SERVIDOR DE COLAS APACHE ACTIVEMQ Arranque: nohup $ACTIVEMQ_HOME/bin/activemq & Parada: para detener el servicio debemos buscar el PID asociado y enviarle la señal de finzalicación mediante el comando kill -3 <PID> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Alianza2 125 Para comprobar si se encuentra Tomcat arrancado podemos ejecutar el comando: ps auxww | grep –i java 4.1.4. Alianza2 SERVIDOR WEB APACHE Alianza2 Arranque: /etc/init.d/httpd start Parada: /etc/init.d/httpd stop /etc/init.d/httpd graceful Para comprobar si se encuentra Apache arrancado podemos ejecutar el comando: ps auxww | grep –i httpd Obteniéndose una salida similar a la siguiente: apache 28745 /usr/sbin/httpd apache 849 /usr/sbin/httpd … 4.1.5. 0.0 0.0 0.9 1.7 28780 36688 9368 18288 ? S 09:54 0:00 ? S 10:54 0:00 MySQL Arranque: /etc/init.d/mysql start Parada: /etc/init.d/mysql stop Para comprobar si se encuentra el servicio de base de datos MySQL arrancado podemos ejecutar el comando: ps auxww | grep –i mysqld Obteniéndose una salida similar a la siguiente: mysql 2754 2.5 11.9 2412144 311028 ? Sl Sep29 24:31 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql -pid-file=/var/lib/mysql/database.agrega.indra.es.pid --skip-externallocking --port=3306 --socket=/var/lib/mysql/mysql.sock 4.1.6. LDAP Arranque: /etc/init.d/ldap start Parada: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Recarga en caliente de la configuración sin pérdida de servicio: /etc/init.d/ldap stop 126 Para comprobar si se encuentra el servicio de directorio LDAP arrancado podemos ejecutar el comando: ps auxww | grep –i slapd Alianza2 Obteniéndose una salida similar a la siguiente: ldap 29512 0.0 0.3 27660 3736 ? /usr/sbin/slapd -u ldap -h ldap:/// -s 9 4.1.7. Ssl Sep28 Alianza2 0:00 SERVIDOR NFS /etc/init.d/nfs start Parada: /etc/init.d/nfs stop Para comprobar si se encuentra el servicio de exportación NFS arrancado podemos ejecutar el comando: ps auxww | grep –i nfsd Obteniéndose una salida similar a la siguiente: root root 2925 2926 0.1 0.1 0.0 0.0 0 0 0 ? 0 ? S S Mar04 350:01 [nfsd] Mar04 349:45 [nfsd] 4.2. FICHEROS DE LOG La ubicación de todos los ficheros de log son configurables desde sus respectivos ficheros de configuración que ya han sido explicados en las secciones previas. En este apartado vamos a tratar la configuración del directorio donde se almacenarán los logs y la gestión que debemos hacer de los mismos (rotado automático o no, backup, borrado manual…). 4.2.1. JBOSS Por defecto los logs se almacenan en $JBOSS_HOME/server/default/log. En el fichero $JBOSS_HOME/server/default/conf/log4j.xml definimos los appenders con la ubicación y la política de rotado. <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender"> <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> <param name="File" value="${jboss.server.log.dir}/server.log"/> <param name="Append" value="true"/> <!-- Rollover at midnight each day --> <param name="DatePattern" value="'.'yyyy-MM-dd"/> En el ejemplo, se ha definido el fichero server.log que se ubicará en el directorio de jboss.server.log.dir (actualmente $JBOSS_HOME/server/default/log). El fichero rotará cada EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Arranque: 127 media noche ya que el DatePattern aplicado consiste en concatenar al fichero de log la fecha en formato yyyy-MM-dd. Ejemplo: Alianza2 El log server.log a partir de las 00:00h, si sucede un evento que deba escribir en el log Alianza2 disparará el rotado automático pasando a renombrarse el fichero server.log a server.log.2008-09-30 y se creará un nuevo fichero server.log. <category name="ServiceErrorsLogger"> <priority value="ERROR" /> <appender-ref ref="ServiceErrors"/> </category> <category name="es.pode"> <priority value="INFO"/> <appender-ref ref="agrega"/> </category> <category name="es.agrega"> <priority value="INFO"/> <appender-ref ref="agrega"/> </category> En las categorías especificamos el paquete Java, la prioridad a mostrar (DEBUG, INFO, WARN, ERROR, FATAL) y podemos especificar uno o más appenders en los que se escribirán los logs de las clases pertenecientes al paquete. Todos los loggers heredan de la categoría raíz, definida de la siguiente manera: <root> <priority value="INFO"/> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> Si queremos cambiar la prioridad de todas las clases por defecto a INFO, es importante introducir la línea “<priority value ="info" />” dentro de la sección root previa. Los valores almacenados en las categorías citadas anteriormente prevalecen sobrescribiendo los valores de la categoría root. 4.2.2. Por defecto TOMCAT los logs se almacenan en $TOMCAT_HOME/logs. En el fichero $TOMCAT_HOME/common/classes/log4j.properties definimos los appenders con la ubicación y la política de rotado: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Los niveles de verbosidad y paquetes se configuran en las secciones siguientes: <category name="org.springframework"> <priority value="INFO"/> </category> 128 log4j.rootLogger=INFO, R log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=${catalina.home}/logs/tomcat.log log4j.appender.R.MaxFileSize=100MB log4j.appender.R.MaxBackupIndex=10 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n Alianza2 Alianza2 log4j.logger.es.pode=INFO,R log4j.logger.es.agrega=INFO,R Además del fichero catalina.log que deja por defecto Apache Tomcat, especificamos el aprender R que apunta al fichero tomcat.log, rotando el fichero cada 100 MB y dejando un histórico de 10 ficheros. El nivel por defecto de la categoría raiz es INFO así como el de los Los niveles de verbosidad y paquetes se configuran en la siguiente sección: log4j.logger.es.pode=INFO,R log4j.logger.es.agrega=INFO,R En las categorías especificamos el paquete Java, la prioridad a mostrar (DEBUG, INFO, WARN, ERROR, FATAL) y podemos especificar uno o más appenders en los que se escribirán los logs de las clases pertenecientes al paquete. 4.2.3. APACHE Una vez confirmado que se encuentra presente el módulo en la configuración de Apache (httpd.conf) LoadModule log_config_module modules/mod_log_config.so, en cada fichero de configuración del virtual host especificamos tanto el formato de log a emplear como el fichero donde almacenarlo. LogFormat "%h %l %u %t \"%r\" %>s %b" extendedlog CustomLog logs/<sitio>_access.log extendedlog ErrorLog logs/<sitio>_error.log Con las líneas anteriores definimos el formato de log denominado “extendedlog” que estará formado por la cadena: Opción %h Descripción Remote Host Remote logname (from identd, if supplied). This will return a dash unless %l IdentityCheck is set On. %u Remote user (from auth; may be bogus if return status (%s) is 401) %t Time the request was received (standard english format) %r First line of request Status. For requests that got internally redirected, this is the status of the *original* %>s %b request --- %...>s for the last. Size of response in bytes, excluding HTTP headers. In CLF format, i.e. a '-' rather EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico paquetes es.pode y es.agrega. 129 than a 0 when no bytes are sent. Un ejemplo de traza de log de acceso sería la siguiente: 172.22.52.81 - - [21/Oct/2008:10:48:37 +0200] "GET /visualizadorcontenidos/AcercaDeAgrega/AcercaDeAgrega.do HTTP/1.1" 200 13701 "redes.agrega.indra.es" "http://redes.agrega.indra.es/visualizadorcontenidos/Portada/Portada. do;jsessionid=F6C5CD845FC095CD37BA0096495AFA31" "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3" 50542 Alianza2 Alianza2 Posteriormente definimos que el log <sitio>_access.log use el formato del extendedlog, por lo Las trazas de error de Apache al acceder al nodo se reflejarán en el fichero <sitio>_error.log. Mod_jk En el fichero mod_jk.conf definimos el directorio, fichero, nivel y formato del log mediante las sentencias: # Where to put jk logs JkLogFile "/var/log/httpd/mod_jk.log" # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" De esta forma, en el directorio /var/log/httpd/mod_jk.log aparecerán las entradas en las que se define la fecha del acceso, el nodo al que se accede y el tiempo necesario para servir la petición (desde que se envía al JBoss hasta que se retorna a Apache). Un ejemplo de traza podría ser el siguiente: [Mon Oct 0.173134 20 4.2.4. 17:04:50 2008]contenidos contenidos.proyectoagrega.es MySQL Si en el fichero de configuración my.cnf se ha habilitado la opción “log-bin” (generalmente especificamos logbin=mysql-bin para que los ficheros de log se nombren con el valor especificado) se podrán auditar posteriormente los logs en /var/lib/mysql/. Por defecto, existirá un log de error asociado a la base de datos Agrega, y si se ha habilitado la opción de los logs binarios, existirán diversos ficheros /var/lib/mysql/mysql-bin.000XYZ. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico que en /var/log/httpd/ aparecerá un fichero llamado <sitio>_access.log. 130 Para poder visualizar el contenido de los ficheros, es necesario hacer uso de la aplicación mysqlbinlog proporcionada junto a la BD. La sintaxis es: mysqlbinlog log_file Alianza2 Alianza2 NOTA: es conveniente tener en cuenta que si se habilita la opción de log-bin es necesario controlar el tamaño y número de ficheros de log generados por la aplicación, ya que contiene todas las sentencias SQL ejecutadas sobre la BD. LDAP En el archivo slapd.conf se especifica el nivel de registro de los logs mediante el parámetro loglevel. Para especificar el fichero donde almacenar los logs es necesario saber que OpenLDAP por defecto envía su información de registro al demonio del sistema syslog (syslogd) bajo el canal LOCAL4. Para poder almacenar la información en un fichero que nosotros especifiquemos es necesario modificar el archivo /etc/syslog.conf, agregando una línea como la siguiente: local4.* /var/log/openldap De esta manera, conseguimos que los logs de OpenLDAP se almacenen en el fichero /var/log/openldap. NOTA: el cambio en el fichero syslog.conf requiere reiniciar la máquina para que los cambios tengan efecto. 4.3. BACKUPS En esta sección trataremos de identificar aquellos contenidos que es conveniente tener un backup. El manual pretende ser una guía resaltando las áreas a salvaguardar, no un procedimiento firme y único para la realización de los backup. En cada comunidad, existirá ya previamente un proceso de backup y deberá seguirse y respetarse, añadiendo ahora los nuevos ficheros, configuraciones, BD que soportan el portal Agrega. 4.3.1. BASE DE DATOS Tanto en el caso de actualizaciones de Agrega que afecten a base de datos como cada cierto período de tiempo es conveniente realizar una backup de la base de datos. Los backups podrían ser deltas o completos. En función de la base de datos existirán unos u otros procedimientos aconsejados. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 4.2.5. 131 En el caso de la instalación de Agrega sobre una base de datos MySQL, para realizar un backup completo de la BD (tanto tablas como datos) se aconseja el siguiente procedimiento: mysqldump --opt -c -e -Q –h $HOST --hex-blob -u usuario -ppassword $DBNAME > Alianza2 $BACKUP_DIR/$DATABASE-dump-$FECHA.sql Alianza2 Si únicamente deseamos las sentencias insert (los datos pero no la estructura de las tablas) podemos ejecutar el siguiente comando: mysqldump -u $USUARIO -p -h $HOST --insert-ignore -c --no-create-db --no-create-info -skip-add-locks --extended-insert=false --hex-blob -B $DATABASE > En el caso del backup completo, para restaurar un backup habría que borrar la base de datos, crearla y posteriormente importar el dump: 1. Nos conectamos con el usuario administrador de la base de datos y ejecutamos: drop $DATABASE; create $DATABASE; 2. Desde la shell del SO, ejecutamos: mysql –h $HOST -u $USUARIO -p < $BACKUP_DIR/$DATABASE-dump$FECHA.sql 4.3.2. OPENLDAP En el caso de haber instalado OpenLDAP, existen varias alternativas para hacer el backup del contenido del mismo. Para asegurar la consistencia del ldif generado, es necesario parar el servicio de LDAP previamente. Si se está empleando bdb, el comando sería: /usr/sbin/slapcat -v -l $BACKUP_DIR/ldap.ldif Si se esta usando lbdm: /usr/sbin/ldbmcat -n /var/lib/ldap/id2entry.gdbm > BACKUP$DIR/ldap.ldif Para hacer una restauración completa a partir del ldif generado los pasos serían los siguientes: 1. Paramos el demonio slapd (/etc/init.d/ldap stop). 2. Borramos todos los datos del ldap (/var/lib/ldap). 3. Cargamos los datos del ldif mediante el comando: slapadd backup.ldif 4. Regeneramos los índices con slapindex 5. Reiniciamos el demonio del ldap (/etc/init.d/ldap start) –v –c –l EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico $BACKUP_DIR/$DATABASE-dump-$FECHA.sql 132 4.3.3. MÓDULOS WAR La mayor parte de las actualizaciones de Agrega llevarán asociadas la modificación de uno o más módulos WAR de la plataforma. Por ello, se recomienda hacer un backup del directorio Alianza2 $JBOSS_HOME/server/default/deploy/agrega o $TOMCAT_HOME/webapps/*.war Alianza2 Es conveniente destacar que los módulos WAR ya se encuentran en formato ZIP, por lo que intentar aplicar cualquier algoritmo de compresión apenas reducirá el espacio. Si bien, para agrupar todos los módulos en un mismo fichero se puede emplear el TAR de Linux. tar cvfp $BACKUP_DIR/backup.tar $JBOSS_HOME/server/default/deploy/agrega/*.war 4.3.4. ÍNDICES Un componente fundamental de la plataforma son los índices. Las políticas de backup sugeridas son: Es altamente recomendable hacer un backup de los índices todos los días, a una hora en la que no existan operaciones pendientes en disco tales como carga de ODEs, generación de informes, etc. Cada vez que se haga una parada y arranque de la aplicación para efectuar alguna migración o actualización, es obligatorio salvaguardar la información de los índices una vez que el servidor de aplicaciones se encuentra parado. El comando empleado para realizar el backup de los índices podría ser: tar cvfp $BACKUP_DIR/indices.tar $JBOSS_HOME/indices/* 4.3.5. INFORMES El directorio $JBOSS_HOME/informes es susceptible de ser salvaguardado. En algunas ocasiones, las actualizaciones de Agrega conllevarán la modificación de algunas plantillas que se emplean en la elaboración de los informes y cuya ubicación es $JBOSS_HOME/informes/plantillasInformes. 4.3.6. FICHEROS DE CONFIGURACIÓN DEL PORTAL Debido a que los ficheros de configuración del portal contienen información tal como la dirección IP del servidor de LDAP, la IP del servidor de base de datos, periodicidad de la generación de informes, etc no sólo en cada actualización de Agrega se modificarán los ficheros de configuración del portal, sino también en cada modificación que la comunidad realice sobre los elementos de la infraestructura. Por todo ello, es conveniente hacer backups antes de realizar cualquier modificación en los ficheros del portal. El comando a emplear podría ser el siguiente: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico A modo de ejemplo: 133 tar czvfp $BACKUP_DIR/conf.tar.gz $JBOSS_HOME/server/default/conf 4.3.7. ESTÁTICOS Alianza2 En los procesos de actualización de la plataforma se actualizarán los ficheros estáticos (CSS, JS, JPG…) siendo necesario la realización de un backup previo a la actualización. Alianza2 El directorio a salvaguardar será aquel especificado en el alias del virtual host de Apache. Asumiendo que es /opt/static el backup se podría realizar mediante el comando: 4.3.8. PROGRAMACIÓN DE BACKUPS EN CRON Una vez completados los “scripts” de backups, editamos el fichero crontab para añadir nuestras tareas. Ejecutamos el comando crontab –e # Ejecuta un script que realiza un backup de la base de datos el primer día de cada mes a las 22:00 0 22 1 * * /home/backup/script_bd.sh # Más ejemplos 0 2 * * 1-6 sh /raid/Backups_Data/pruebas/MyBackup.sh Diario 0 2 * * 0 sh /raid/Backups_Data/pruebas/MyBackup.sh Semanal 0 2 1 * * sh /raid/Backups_Data/pruebas/MyBackup.sh Mensual El momento de ejecución se especifica de acuerdo con la siguiente tabla: Minutos: (0-59) Horas: (0-23) Días: (1-31) Mes: (1-12) Día de la semana: (0-6), siendo 1=Lunes, 2=Martes,... 6=sábado y 0=Domingo Para especificar todos los valores posibles de una variable se utiliza un asterisco (*). 4.4. MODIFICACIONES FRECUENTES FRENTE A CAMBIOS El objetivo de la sección es conocer exactamente los ficheros a modificar frente a las modificaciones frecuentes que suelen ocurrir en los entornos de producción. A modo de ejemplo las modificaciones más comunes son: cambio de IP de la base de datos, cambio de los datos de acceso al LDAP, cambio de usuario o contraseña de conexión a la base de datos… EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico tar czvfp $BACKUP_DIR/estaticos.tar.gz /opt/static 134 4.4.1. MODIFICACIÓN DE LA BASE DE DATOS DEL PORTAL AGREGA MODIFICACIÓN DE LA DIRECCIÓN IP Alianza2 Aunque normalmente la dirección especificada de la BD suele ser un alias, en caso de Alianza2 haberse especificado manualmente implicaría cambiar el fichero donde se definen los datasources: $JBOSS_HOME/server/default/deploy/<nodo>-ds.xml MODIFICACIÓN DE USUARIO / CONTRASEÑA Por cada datasource definido en el fichero $JBOSS_HOME/server/default/deploy/<nodo>-ds.xml o en el fichero $TOMCAT_HOME/conf/server.xml se deberá revisar la configuración de acceso. 4.4.2. MODIFICACIÓN DE LA BASE DE DATOS DE LA AYUDA MEDIAWIKI En caso de modificarse alguno de los parámetros de acceso a la base de datos que contiene la ayuda MediaWiki, será necesario revisar el fichero LocalSettings.php y modificar los parámetros que correspondan: $wgDBserver = "localhost"; $wgDBname = "db"; $wgDBuser = "user"; $wgDBpassword = "pass"; 4.4.3. CAMBIO DE DATOS DE CONEXIÓN AL LDAP Los datos de la conexión a LDAP se especifican en dos ficheros de configuración: $JBOSS_HOME/server/default/conf/authbackend.properties $JBOSS_HOME/server/default/conf/springldap.xml En el caso de Tomcat serían: $TOMCAT_HOME/common/classes/authbackend.properties $TOMCAT_HOME/common/classes/springldap.xml 4.4.4. CAMBIO DE IP DEL SERVIDOR DE APLICACIONES En el caso de cambiar la IP del servidor servidor de aplicaciones, si siempre se ha hecho referencia al alias definido en el /etc/hosts no será necesario realizar ninguna modificación (salvo la actualización en el hosts). En caso contrario, será necesario revisar el fichero: /etc/httpd/conf/workers.properties EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico $TOMCAT_HOME/conf/server.xml 135 4.4.5. CAMBIO DE IP DEL SERVIDOR WEB APACHE En caso de haber cambiado la IP del servidor web Apache, será necesario tenerlo en cuenta Alianza2 en el fichero /etc/hosts del servidor de aplicaciones. Alianza2 4.5. TAREAS PLANIFICADAS La plataforma dispone de un planificador de tareas basado en Quartz. El planificador permite Carga de ODEs: Permite cargar al repositorio nuevos objetos educativos. Reindexado: Borra los índices del nodo para rehacerlos. Eliminar ODEs: Lanza un borrado de objetos del repositorio. Generación de informes: Genera de forma programada un informe del tipo especificado. El uso de Quartz permite una gestión eficiente de tareas planificadas que incluye la ejecución diferida de tareas (periódicas o no) y recuperación de tareas en caso de caída del servidor. Para ello, Quartz usa un modelo en base de datos propio que se carga con el resto de esquemas de datos de la plataforma. 4.5.1. PARÁMETROS DE CONFIGURACIÓN DEL PLANIFICADOR Las tareas de informes del planificador usan una serie de parámetros de configuración contenidos en el fichero agrega.properties (ver sección 0). Estas propiedades permiten definir los directorios donde se almacenan los informes y los nombres de los ficheros asociados a cada tipo de informe. 4.5.2. TAREAS A continuación se describen los tipos de tareas disponibles en la versión 1.1.1 de Agrega y lo recursos utilizados por dichas tareas en el servidor. CARGA DE ODES La carga de ODEs permite a un usuario administrador de la plataforma cargar contenidos al repositorio del nodo. Para poder realizar una carga de ODEs el usuario administrador necesita tener disponibles tres carpetas en el servidor. Estas carpetas deben tener permisos de lectura y escritura para el usuario de arranque del servidor de aplicaciones, y deben estar creadas en el momento de configurar la tarea. Dichas carpetas son: Carpeta de ODEs: En esta carpeta se almacenan los objetos en formato comprimido que el usuario administrador desea cargar al repositorio. En la versión actual (en el momento EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico programar tareas de mantenimiento de la plataforma y del repositorio: 136 de escribir este manual) sólo se cargan los ODEs que estén a primer nivel, no se exploran las subcarpetas. Carpeta de ODEs correctos: Esta carpeta contiene los ODEs que la plataforma ha cargado correctamente al repositorio tras la ejecución de la tarea. Alianza2 Carpeta de ODEs erróneos: Esta carpeta contiene los ODEs que la plataforma no ha Alianza2 podido cargar debido a errores de validación de los objetos o a problemas en la aplicación. REINDEXADO índices de la plataforma (ver sección 0). El reindexado supone borrar el índice actual y rehacerlo desde cero, por lo que es vital mantener backups de los índices para poder restaurarlos en caso de problemas. ELIMINACIÓN DE ODES La tarea de eliminación de ODEs elimina físicamente del servidor aquellos ODEs que previamente han sido despublicados por un usuario administrador. INFORMES Las tareas restantes disponibles en el planificador corresponden a la generación de algún tipo de informe (Estado de los contenidos digitales educativos, Operaciones realizadas, Nivel de agregación, Cobertura curricular, etc). La plataforma gestiona de forma automática la generación de los informes y permite su consulta desde el portal de administración. Los ficheros físicos creados en el servidor están definidos en la configuración (fichero agrega.properties). 4.6. GENERACIÓN AUTOMÁTICA DE FICHEROS Dentro de la plataforma Agrega se encuentran configuradas por defecto unas tareas planificadas que permiten la generación periódica de algunos ficheros del portal, entre ellos se encuentran los informes de la portada, los ficheros de sitemaps, el contenido dinámico de la plataforma, los ficheros rss y el catálogo de contenidos de Agrega. A continuación se detallan cada una de las tareas. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico El usuario administrador de la plataforma puede programar un reindexado sobre uno de los 137 4.6.1. GENERACIÓN DE LOS INFORMES DE PORTADA Tarea automática de generación de los informes de la portada pública de Agrega. Los informes generados recogen información de los contenidos digitales educativos que más Alianza2 veces se ha mostrado su ficha de búsqueda, los que más veces han sido previsualizados, descargados, los ODEs más valorados o los términos más buscados. Alianza2 Este proceso es lanzado por la plataforma todos los días a las cuatro de la mañana y por defecto genera unos ficheros con la información del día anterior y otros con la información de los siete días anteriores. Este último parámetro al igual que el nombre de los ficheros y el pueden modificar dentro del fichero agrega.properties. 4.6.2. GENERACIÓN DE LOS FICHEROS SITEMAP Tarea de generación de los ficheros de sitemaps que serán utilizados por Google para indexar los contenidos de la plataforma Agrega. Por defecto se lanza todos los días a la una de la mañana. Estos dos valores junto con el número de entradas que tendrá cada fichero sitemap y el nombre de los ficheros se pueden modificar en el fichero generacionContenidos.properties. 4.6.3. GENERACIÓN DEL CONTENIDO DINÁMICO DE LA PLATAFORMA Esta tarea programada genera el contenido dinámico de la plataforma, es decir, realiza la selección de una captura de un ODE aleatoriamente. Por defecto se lanza todos los días cada hora. Tanto la periodicidad como la hora en la que se lanza son valores configurables dentro del fichero generacionContenidos.properties. 4.6.4. GENERACIÓN DEL CATÁLOGO Tarea de generación automática del catálogo de contenidos de Agrega con todos los contenidos digitales educativos con nivel de agregación mayor o igual que tres. Por defecto esta tarea se lanza una vez al mes a las cinco de la mañana. El fichero resultante con el catálogo se almacena en el directorio referenciado por el atributo destinoInformesDir del fichero agrega.properties. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico número de contenidos digitales que como máximo saldrán en cada uno de los informes se 138 4.6.5. GENERACIÓN DE RSS Esta tarea genera los ficheros rss con las últimas diez noticias, los últimos diez ODEs publicados y los contenidos digitales educativos más descargados, más previsualizados y Alianza2 más mostrados en la última semana, en el último mes y el último año. Alianza2 Por defecto se lanza todos los días a las dos de la mañana. Los ficheros generados se almacenan en el directorio referenciado por el atributo rss.path del fichero agrega.properties. En la presente sección trataremos de citar las mínimas recomendaciones de seguridad tanto para JBoss como para Apache. A nivel de base de datos bastaría con filtrar el acceso de los usuarios por IPs a la misma. 4.7.1. SEGURIDAD EN JBOSS A continuación se describen los pasos a seguir para asegurar la Consola JMX y la Consola Web del JBoss. ASEGURAR LA CONSOLA JMX Restringimos el acceso a la consola JMX con un usuario y contraseña, para ello seguimos los siguientes pasos: 1. Localizar el directorio jmx-console.war, por defecto está en: $JBOSS_HOME/server/default/deploy 2. Editar el archivo web.xml que está bajo el directorio jmx-console.war/WEB-INF y descomentar los bloques de seguridad quedando así: <!-- A security constraint that restricts access to the HTML JMX console to users with the role JBossAdmin. Edit the roles to what you want and uncomment the WEB-INF/jboss-web.xml/security-domain element to enable secured access to the HTML JMX console. --> <security-constraint> <web-resource-collection> <web-resource-name>HtmlAdaptor</web-resource-name> <description>An example security config that only allows users with the role JBossAdmin to access the HTML JMX console web application </description> <url-pattern>/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>JBossAdmin</role-name> </auth-constraint> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 4.7. SEGURIDAD 139 </security-constraint> 3. Editar el fichero jboss-web.xml y descomentar también el elemento security-domain como sigue: Alianza2 <jboss-web> <!-- Uncomment the security-domain to enable security. You will need to edit the htmladaptor login configuration to setup the login modules used to authentication users. --> <security-domain>java:/jaas/jmx-console</security-domain> </jboss-web> 4. Localizar los dos ficheros de propiedades llamados Alianza2 como jmx-console- configuración del servidor, bajo el subdirectorio props. Un ejemplo de está localización sería: /server/default/conf/props. 5. En jmx-console-users.properties, añadir/cambiar la combinación usuario/contraseña. 6. En jmx-console-roles.properties, añadir los roles asignados a los usuarios que se han añadido o cambiado en el paso anterior. Recordar añadir el role JBossAdmin a los usuarios los cuales estén usando la jmx-console. 7. Por último, cuando se arranque ahora el servidor de aplicaciones JBoss y se trate de acceder a la jmx-console se debe obtener un pop up solicitando el usuario y contraseña. ASEGURAR LA CONSOLA WEB Restringimos el acceso a la Consola Web con usuario y contraseña: el proceso es similar al anterior. En el directorio /deploy localizamos management/web-console.war y realizamos los mismos cambios en WEB-INF/web.xml, WEB-INF/jboss-web.xml y en los ficheros de propiedades de usuarios y grupos. 4.7.2. SEGURIDAD EN TOMCAT Las recomendaciones generales para aumentar la seguridad en Tomcat son las siguientes: El dueño del directorio $TOMCAT_HOME (y todos los subdirectorios y ficheros) debería ser el usuario tomcat con grupo tomcat. Los ficheros de $TOMCAT_HOME/conf deben ser de sólo lectura (modo 400). Eliminar antes de instalar Agrega todos los ficheros de $TOMCAT_HOME/webapps (balancer, jsp-examples…). Eliminar los contenidos de $TOMCAT_HOME/server/webapps/ (manager, host- manager…). Cambiar los usuarios y passwords del fichero $TOMCAT_HOME/conf/tomcat-users.xml. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico users.properties y jmx-console-roles.properties que estarán en el directorio conf de la 140 4.7.3. SEGURIDAD EN APACHE Las recomendaciones generales en cuanto a la seguridad de Apache son las siguientes: Se recomienda estar al día en los últimos parches de seguridad para continuar con la Alianza2 optimización de seguridad. Alianza2 Apache debe funcionar bajo su propia cuenta y grupo de usuario. Algunas versiones de Apache corren bajo el usuario nobody, esto compromete mucho su seguridad. Es necesario instalar PHP como un módulo de Apache, en lugar de CGI, para dotar al Asegurar que los archivos a los que se accede son los deseados. No deseamos que se pueda acceder a los directorios que no tengan permisos para ello. En la configuración de los virtual hosts, se definen las restricciones anteriores, por ejemplo: # security # forbid default access to filesystem locations <Directory /> Order Deny,Allow Deny from all AllowOverride None php_flag engine off </Directory> <Directory "/export/ccaa/<sitio>/uploads"> Order Deny,Allow Allow from all AllowOverride None php_flag engine off </Directory> <Directory "/export/wiki/wiki/"> Options None AllowOverride None Order Deny,Allow Allow from all php_flag engine on </Directory> 1. En el primer tag <Directory /> con la sentencia Deny from all se prohíbe por defecto el acceso a los directorios. Posteriormente se especifican dos bloques <Directory> permitiendo el acceso a las áreas que definimos. 2. La directiva php_flag engine on/off se utiliza para sitios que quieran activar o desactivar el intérprete de PHP en función del directorio o del virtual host. En nuestro caso debemos evitar ejecutar contenido PHP a excepción de la ayuda MediaWiki. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico sistema de una mayor seguridad, y también más potencia. 141 3. La directiva Options None desactiva todas las opciones: no permitiendo la ejecución de CGI, ni explorar directorios, ni seguir enlaces simbólicos y desactiva los includes. Alianza2 Alianza2 4. Por último, la directiva AllowOverride None desactiva el acceso a los archivos .htaccess. Puesto que MediaWiki es un software wiki libre escrito originalmente para Wikipedia, se encuentra en continua evolución y corrección de incidencias de seguridad. Se aconseja visitar habitualmente la web oficial, siguiendo las recomendaciones de seguridad que allí se establezcan. Es importante destacar que al no haberse realizado ninguna modificación en el código de la MediaWiki, todos los procesos de actualización que se faciliten desde la web oficial deberían poder ser ejecutados sin afectar al comportamiento de la ayuda del portal Agrega. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 4.8. ACTUALIZACIÓN MEDIAWIKI 142 5. BLOQUE IV: INTEGRACIÓN CON LA PLATAFORMA 5.1. INTRODUCCIÓN Alianza2 La plataforma de Agrega se concibe como un repositorio de almacenamiento de Objetos Alianza2 Digitales Educativos en la que se pone a disposición de los usuarios capacidades de creación, visualización, catalogación y compartición de sus contenidos. Para añadir valor a los objetos almacenados, potenciar su distribución y facilitar su acceso, se definen dentro de la comunidad educativa una serie de estándares, normas y protocolos que se orientan a la Los repositorios, además de concebirse como almacenes de recursos digitales, contemplan un almacenamiento de metadatos para aportar información sobre los componentes y facilitar su compartición hacia el exterior sin necesidad de conocimiento previo de la organización o la estructura del almacén. Con estos fines, Agrega ofrece los interfaces de OAIPMH y DRI. No obstante, al tratarse de una arquitectura SOA, la mayor parte de los módulos expone una interfaz web vía WebServices que permitiría la integración de otros desarrollos con la plataforma. NOTA: los WebServices de los ejemplos podrán ser invocados mediante la herramienta gratuita SoapUI. 5.2. WEBSERVICES PUBLICADOS Algunos módulos desplegados en el servidor de aplicaciones resultan de especial interés de cara a posibles integraciones desde otras plataformas. Cada módulo expone las operaciones y los WSDL que las describen siendo accesibles directamente desde cualquier navegador. 5.2.1. BUSCAR INTRODUCCIÓN Buscar es el módulo de Agrega que ejecuta las búsquedas en el repositorio y se encarga de aunar y cachear los resultados en el caso de realizar búsquedas federadas. Depende del buscador, que es el módulo que trabaja con el índice. Desde la funcionalidad buscar se permite buscar sabiendo el identificador del ODE y el idioma en el que esta catalogado: - solicitarMetadato: busca en el repositorio por el idioma de catalogación la ficha del ODE. - buscarAvanzado: permite la realización de búsquedas. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico facilitación de los contenidos. 143 WSDL En la URL http://redes.agrega.indra.es/buscar-1/services se listan todos los servicios Alianza2 publicados, resultando de interés para realizar las búsquedas el siguiente servicio: Alianza2 http://redes.agrega.indra.es/buscar-1/services/SrvBuscarService?wsdl Ejemplo <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://servicios.buscar.negocio.buscar.pode.es"> <soapenv:Header/> <soapenv:Body> <ser:solicitarMetadato> <ser:parametros> <ser:identificadorODE>es_20070901_3_0260900</ser:identificadorODE> <ser:idioma>es</ser:idioma> <ser:busquedaSimpleAvanzada>POSICIONADO_DETALLE</ser:busquedaSimpleAvanzada > </ser:parametros> </ser:solicitarMetadato> </soapenv:Body> </soapenv:Envelope> Respuesta: se obtiene como respuesta los metadatos del ODE. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <solicitarMetadatoResponse xmlns="http://servicios.buscar.negocio.buscar.pode.es"> <solicitarMetadatoReturn> <ambito> <ambito>universal</ambito> </ambito> <descripcion>Secuencia didáctica para el reconocimiento de situaciones de discriminación. Los cinco objetos que la componen simulan casos en los que se fomenta que el alumnado participa en proyectos de integración</descripcion> <destinatarios> <destinatarios>learner</destinatarios> <destinatarios>teacher</destinatarios> <destinatarios>family</destinatarios> <destinatarios>individual</destinatarios> </destinatarios> <formato> <formato>text/html</formato> <formato>audio/mpeg</formato> <formato>application/x-shockwave-flash</formato> <formato>text/xml</formato> <formato>application/pdf</formato> <formato>image/jpg</formato> <formato>image/gif</formato> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Llamada 144 </formato> <identificadorODE>es_20070901_3_0260900</identificadorODE> <idioma>es</idioma> <imagen>/galeriaimg/es_20070901_3_0260900/es_20070901_3_0260900.png</imagen> <licencias> <licencias>creative commons: attribution - non commercial - share alike</licencias> </licencias> 5.2.2. ENTREGAR INTRODUCCIÓN La plataforma AGREGA contiene un repositorio de Objetos Digitales Educativos, cumpliendo con la especificación SCORM 2004. Con SCORM se hace posible la creación de contenidos que puedan importarse dentro de sistemas de gestión de aprendizaje diferentes, siempre que estos soporten la norma SCORM. Los principales requerimientos que el modelo SCORM trata de satisfacer son: Accesibilidad: capacidad de acceder a los componentes de enseñanza desde un sitio distante a través de las tecnologías web, así como distribuirlos a otros sitios. Adaptabilidad: capacidad de personalizar la formación en función de las necesidades de las personas y organizaciones. Durabilidad: capacidad de resistir a la evolución de la tecnología sin necesitar una reconcepción, una reconfiguración o una reescritura del código. Interoperabilidad: capacidad de utilizarse en otro emplazamiento y con otro conjunto de herramientas o sobre otra plataforma de componentes de enseñanza desarrolladas dentro de un sitio, con un cierto conjunto de herramientas o sobre una cierta plataforma. Existen numerosos niveles de interoperabilidad. Reusabilidad: flexibilidad que permite integrar componentes de enseñanza dentro de múltiples contextos y aplicaciones. De acuerdo con estos requerimientos, el módulo Entregar permite el intercambio de ODEs del repositorio de la plataforma, reutilización por plataformas que soportan modelos anteriores, como SCORM 1.2 o IMS-CP, y además se permite reutilizar los recursos de los ODEs, de manera que el educador o el alumno pueda utilizar o visualizar los recursos sin necesidad de una herramienta de gestión del aprendizaje. Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <localizadorODE>uploads/repositorio/23062008/es_20070901_3_0260900</localizadorODE > <nivelAgregacion>3</nivelAgregacion> <tamanio>13074256</tamanio> <titulo>Yo soy el otro</titulo> <valoracion>4.0</valoracion> </solicitarMetadatoReturn> </solicitarMetadatoResponse> </soapenv:Body> </soapenv:Envelope> Alianza2 145 WSDL El WSDL puede ser accedido desde la URL: http://redes.agrega.indra.es/entregarAlianza2 1/services/SrvEntregarService?wsdl Alianza2 Veamos los métodos publicados más interesantes: - generarPaquetePIF: este método necesita como parámetro una cadena de caracteres conteniendo el identificador del Objeto Digital Educativo que se solicita. Como salida obtiene un objeto del tipo PaquetePifVO, conteniendo el ODE - obtenerTiposPIF: devuelve un array de Strings con los tipos soportados por la plataforma. Actualmente son: - o SCORM_2004 o SCORM_2004_SIN_SUBMANIFIESTO o SCORM_12 o IMS_CP o HTML o CONTENIDOS generarPaquetePIFTipoPIF: este método necesita como parámetro un objeto del tipo TipoPifVO que empaqueta el identificador del ODE solicitado, el formato de exportación elegido y el idioma de exportación. Se obtiene como salida un objeto del tipo PaquetePifVO, descrito anteriormente Ejemplos Ejemplo 01: llamada al método generarPaquetePif solicitando un ODE que es válido. Llamada <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <generarPaquetePIF xmlns="http://servicios.negocio.entregar.pode.es"> <identificador>ODE-fd61edbc-ee56-38d4-935241bab971b013</identificador> </generarPaquetePIF> </soapenv:Body> </soapenv:Envelope> Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información devuelta por el método y un attach conteniendo el ODE serializado. ------=_Part_1_31262813.1214307945828 Content-Type: text/xml; charset=UTF-8 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico empaquetado con formato SCORM2004 y mensajes de error, en caso de producirse. 146 Content-Transfer-Encoding: binary Content-Id: <08C458B838D1365A5864E6985429AF52> <?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <generarPaquetePIFResponse xmlns="http://servicios.negocio.entregar.pode.es"> <generarPaquetePIFReturn> <paquetePIF href="cid:74D53F983C9A2A6730C4D468C80BF990"/> <resultadoValidacion> <esValidoManifest>true</esValidoManifest> <resultadoValidacion></resultadoValidacion> <rutaManifest xsi:nil="true"/> </resultadoValidacion> </generarPaquetePIFReturn> </generarPaquetePIFResponse> </soapenv:Body> </soapenv:Envelope> {…. contenido binario Alianza2 del Ejemplo 02: llamada al método generarPaquetePif solicitando un ODE que no es válido. Llamada: <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:enc="http://schemas.xmlsoap.org/soap/encoding" > <soap:Body> <impl:generarPaquetePIF xmlns:impl="http://servicios.negocio.entregar.pode.es"> <impl:identificador>ODE-387f38a4-0f82-3492-b9b5-a28eb3f0bbcd</impl:identificador> </impl:generarPaquetePIF> </soap:Body> </soap:Envelope> Respuesta: se obtiene como respuesta solo el mensaje SOAP con la información necesaria para saber porque el ODE no fue entregado. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <generarPaquetePIFResponse xmlns="http://servicios.negocio.entregar.pode.es"> <generarPaquetePIFReturn> <paquetePIF xsi:nil="true"/> <resultadoValidacion><esValidoManifest>false</esValidoManifest> <resultadoValidacion>Al menos un elemento (item) es obligatorio dentro de una organización ;Error LOM-ES, Metadatos incorrectos;</resultadoValidacion> <rutaManifest xsi:nil="true"/> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico ------=_Part_1_31262813.1214307945828 Content-Type: application/octet-stream Content-Transfer-Encoding: binary Content-Id: <74D53F983C9A2A6730C4D468C80BF990> DataHandler…} Alianza2 147 </resultadoValidacion> </generarPaquetePIFReturn> </generarPaquetePIFResponse> </soapenv:Body> </soapenv:Envelope> Alianza2 Ejemplo 03: llamada al método generarPaquetePifTipoPif solicitando un ODE que es válido. Alianza2 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:enc="http://schemas.xmlsoap.org/soap/encoding"> <soap:Body> <impl:generarPaquetePIFTipoPIF xmlns:impl="http://servicios.negocio.entregar.pode.es"> <impl:tipoPifVO> <impl:idODE>ODE-fd61edbc-ee56-38d4-9352-41bab971b013</impl:idODE> <impl:tipoPif>SCORM_2004</impl:tipoPif> <impl:idioma>es</impl:idioma> </impl:tipoPifVO> </impl:generarPaquetePIFTipoPIF> </soap:Body> </soap:Envelope> Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información devuelta por el método y un attach conteniendo el ODE serializado. ------=_Part_8_24005374.1214321990043 Content-Type: text/xml; charset=UTF-8 Content-Transfer-Encoding: binary Content-Id: <AD48DDF0E86D4BD7DC1D8883665A86> <?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <generarPaquetePIFTipoPIFResponse xmlns="http://servicios.negocio.entregar.pode.es"> <generarPaquetePIFTipoPIFReturn> <paquetePIF href="cid:86JD2583DDE885DE5E5GF56H7HH331"/> <resultadoValidacion> <esValidoManifest>true</esValidoManifest> <resultadoValidacion></resultadoValidacion> <rutaManifest xsi:nil="true"/> </resultadoValidacion> </generarPaquetePIFTipoPIFReturn> </generarPaquetePIFTipoPIFResponse> </soapenv:Body> </soapenv:Envelope> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Llamada 148 ------=_Part_8_24005374.1214321990043 Content-Type: application/octet-stream Alianza2 Content-Transfer-Encoding: binary Alianza2 Content-Id: <86JD2583DDE885DE5E5GF56H7HH331> {…. contenido binario del DataHandler…} 5.3.1. INTRODUCCIÓN OAI-PMH (Open Archives Initiative Protocol for Metadata Harvesting) se define como un protocolo para la transmisión de metadatos a través de Internet. En este protocolo participan dos tipos de agentes: Proveedores de datos: exponen públicamente sus metadatos codificados en Dublín Core en un fichero xml. Proveedores de servicios: realizan servicios de búsqueda para recopilar (harvesting) los metadatos de un proveedor. La comunicación con el proveedor de datos se realiza mediante llamadas HTTP. Desde la plataforma Agrega se ofrece la posibilidad de integración con su repositorio a través del protocolo OAI-PMH actuando como proveedora de datos. Un cliente que quiera obtener información del repositorio de Agrega deberá establecer una comunicación con la plataforma mediante una llamada HTTP a una dirección pública de Internet que se facilitará en la plataforma. En dicha comunicación se deberán parametrizar los términos en los que se realiza la petición (de la manera que veremos más adelante), a lo que la plataforma Agrega contestará en el contexto de la misma petición (de forma síncrona) con el resultado de la operación, indicando el éxito de la misma o la causa de su fracaso. A continuación, se detallan todos los métodos del protocolo OAI-PMH implementados en Agrega. 5.3.2. IDENTIFY Este método devuelve la información sobre el servidor de OAI-PMH, tales como el nombre, la versión del protocolo, el correo del administrador de la plataforma, etc. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico 5.3. OAIPMH 149 ARGUMENTOS verb: Obligatorio. Se pasará la operación que se quiere realizar en este caso Identify. Alianza2 FORMATO DE LA LLAMADA Alianza2 La manera de obtener información sobre el repositorio es mediante una llamada HTTP al método Identify del repositorio: http://urlRepositorioAgrega?verb=Identify Como respuesta el Agrega devolverá un XML codificado en UTF-8 con toda la información del repositorio. EJEMPLO A continuación se describe un ejemplo de llamada al método Identify y la correspondiente respuesta obtenida: http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve rb=Identify <?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns:oai_id="http://www.openarchives.org/OAI/2.0/oai-identifier" xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd http://www.openarchives.org/OAI/2.0/oai-identifier http://www.openarchives.org/OAI/2.0/oai-identifier.xsd"> <responseDate>2008-06-19T17:18:54.653+02:00</responseDate> <request verb="Identify"> http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do </request> <Identify> <repositoryName>Agrega</repositoryName> <baseURL>http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do</baseU RL> <protocolVersion>2.0</protocolVersion> <adminEmail>[email protected]</adminEmail> <earliestDatestamp>2008-03-14</earliestDatestamp> <deletedRecord>no</deletedRecord> <granularity>YYYY-MM-DD</granularity> <description> <oai_id:oai-identifier> <oai_id:scheme>oai</oai_id:scheme> <oai_id:repositoryIdentifier>agrega.es</oai_id:repositoryIdentifier> <oai_id:delimiter>:</oai_id:delimiter> <oai_id:sampleIdentifier>oai:agrega.es:identificadorMec</oai_id:sampleIdentifier> </oai_id:oai-identifier> </description> </Identify> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico FORMATO DE SALIDA 150 </ OAI-PMH> 5.3.3. LISTMETADATAFORMATS Alianza2 Alianza2 Devuelve el listado de los tipos de metadatos que soporta el proveedor. En el caso de la plataforma Agrega sólo se va a soportar el tipo de metadato Dublín Core. verb: Obligatorio. Operación que se quiere realizar en este caso ListMetadataFormats. Identifier: Optativo. En el caso de añadir este parámetro se devolverían únicamente los tipos de metadatos en los que esta disponible el objeto del repositorio cuyo identificador se pasa. FORMATO DE LA LLAMADA http://urlRepositorioAgrega?verb=ListMetadataFormats FORMATO DE SALIDA Como resultado se obtendrá un xml con los tipos de metadatos. EJEMPLO http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve rb=ListMetadataFormats <?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2008-06-19T18:51:36.471+02:00</responseDate> <request verb="ListMetadataFormats">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhR equest.do</request> <ListMetadataFormats> <metadataFormat> <metadataPrefix>oai_dc</metadataPrefix> <schema>http://www.openarchives.org/OAI/2.0/oai_dc.xsd</schema> <metadataNamespace>http://www.openarchives.org/OAI/2.0/oai_dc/</metadataNamespace> </metadataFormat> </ListMetadataFormats> </ OAI-PMH> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico ARGUMENTOS 151 5.3.4. LISTSETS Devuelve el listado de conjuntos soportados por el proveedor de contenidos. Estos conjuntos son creados opcionalmente por el servidor para facilitar una recuperación selectiva de los registros. Sería una clasificación de los contenidos según diferentes entradas, así un cliente Alianza2 podría pedir que se recuperasen solo los registros pertenecientes a una determinada clase. Alianza2 Los conjuntos pueden ser simples listas o estructuras jerárquicas. En el caso de la plataforma Agrega no se van a soportar los conjuntos. verb: Obligatorio. Operación que se quiere realizar en este caso ListSets. resumptionToken: Optativo. Token necesario para el control de flujo. Este atributo será utilizado por más métodos del protocolo para permitir el paginado de la respuesta. FORMATO DE LA LLAMADA http://urlRepositorioAgrega?verb=ListSets FORMATO DE SALIDA Como resultado se obtendrá un xml con los conjuntos. EJEMPLO http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve rb=ListSets <?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2008-06-19T18:59:35.763+02:00</responseDate> <request verb="ListSets">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do</r equest> <error code="noSetHierarchy">La plataforma no soporta conjuntos</error> </OAI-PMH> 5.3.5. LISTIDENTIFIERS Recupera los identificadores de los registros de la plataforma, en lugar de los registros completos. Permite argumentos como el rango de fechas entre los que queremos recuperar los datos. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico ARGUMENTOS 152 ARGUMENTOS verb: Obligatorio. Operación que se quiere realizar en este caso ListIdentifiers. from: Opcional. Fecha a partir de la cual se quiere obtener la lista selectiva de Alianza2 identificadores. until: Opcional. Fecha hasta la cual se quiere obtener la lista selectiva de Alianza2 identificadores. metadataPrefix: Obligatorio. Tipo de metadato que deben soportar los identificadores. En el caso de la plataforma Agrega será oai_dc (Dublín Core) ya que Set: Opcional. Identificador del conjunto. resumptionToken: Opcional. Token necesario para el control de flujo. FORMATO DE LA LLAMADA http://urlRepositorioAgrega?verb=ListIdentifiers&metadataPrefix=oai_d FORMATO DE SALIDA Como resultado se obtendrá un xml con la lista de los identificadores. EJEMPLO http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve rb=ListIdentifiers&metadataPrefix=oai_dc <?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2008-06-19T19:24:45.759+02:00</responseDate> <request verb="ListIdentifiers" metadataPrefix="oai_dc">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequ est.do </request> <ListIdentifiers> <header> <identifier>oai:agrega.es:es-ic_20080410_1_9075517</identifier> <datestamp>2008-04-10</datestamp> </header> <header> <identifier>oai:agrega.es:es-ic_20080430_1_9135930</identifier> <datestamp>2008-04-30</datestamp> </header> <header> <identifier>oai:agrega.es:es-ic_20080613_3_9140808</identifier> <datestamp>2008-06-13</datestamp> </header> <header> <identifier>oai:agrega.es:es-ic_20080613_2_9140827</identifier> <datestamp>2008-06-13</datestamp> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico es el único tipo de metadato soportado. 153 5.3.6. GETRECORD Recupera la información de un registro concreto del repositorio. ARGUMENTOS verb: Obligatorio. Se pasará la operación que se quiere realizar en este caso GetRecord. identifier: Obligatorio. Identificador del registro del que se quiere obtener la información. metadataPrefix: Obligatorio. Tipo de metadato. Como se ha comentado anteriormente la plataforma Agrega únicamente soporta oai_dc. FORMATO DE LA LLAMADA http://urlRepositorioAgrega?verb=GetRecord&metadataPrefix=oai_dc&iden tifier=identificadorRegistro FORMATO DE SALIDA Como resultado se obtendrá un xml con la información del registro. Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico </header> <header> <identifier>oai:agrega.es:es-ic_20080613_2_9140821</identifier> <datestamp>2008-06-13</datestamp> </header> <header> <identifier>oai:agrega.es:es-ic_20080613_2_9140834</identifier> <datestamp>2008-06-13</datestamp> </header> <header> <identifier>oai:agrega.es:es_20071116_3_0182000</identifier> <datestamp>2008-06-13</datestamp> </header> <header> <identifier>oai:agrega.es:es_20071116_3_0162000</identifier> <datestamp>2008-06-13</datestamp> </header> <header> <identifier>oai:agrega.es:es_20071214_2_0102001</identifier> <datestamp>2008-06-13</datestamp> </header> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <resumptionToken expirationDate="2008-06-19T19:24:45.796+02:00" completeListSize="255" cursor="0">1213896285756</resumptionToken> </ListIdentifiers> </OAI-PMH> 154 EJEMPLO http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve rb=GetRecord&metadataPrefix=oai_dc&identifier=oai:agrega.es:esic_20080410_1_9075517 Alianza2 <responseDate>2008-06-19T19:38:36.254+02:00</responseDate> <request verb="GetRecord" identifier="oai:agrega.es:es-ic_20080410_1_9075517" metadataPrefix="oai_dc">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequ est.do</request> <GetRecord> <record> <header> <identifier>oai:agrega.es:es-ic_20080410_1_9075517</identifier> <datestamp>2008-04-10</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Dispositivo de anclaje en una herramienta eléctrica</dc:title> <dc:creator/> <dc:subject>útil</dc:subject> <dc:description>Fotografía detallada de una herramienta denominada espátula eléctrica en la que se aprecia su dispositivo de anclaje</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-04-10</dc:date> <dc:type>photograph</dc:type> <dc:format>image/jpeg</dc:format> <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es-ic_20080410_1_9075517</dc:identifier> <dc:source/> <dc:language>es</dc:language> <dc:relation/> <dc:coverage/> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> </GetRecord> </OAI-PMH> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Alianza2 <?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> 155 5.3.7. LISTRECORDS Devuelve todos los registros del repositorio. Permite argumentos como el rango de fechas entre los que queremos recuperar los datos. Alianza2 ARGUMENTOS verb: Obligatorio. Operación que se quiere realizar en este caso ListRecords. from: Opcional. Fecha a partir de la cual se quiere obtener la lista selectiva de Alianza2 until: Opcional. Fecha hasta la cual se quiere obtener la lista selectiva de registros. metadataPrefix: Obligatorio. Tipo de metadato que deben soportar los registros. En el caso de la plataforma agrega será oai_dc (Dublín Core). Set: Opcional. Identificador del conjunto. resumptionToken: Opcional. Token necesario para el control de flujo. FORMATO DE LA LLAMADA http://urlRepositorioAgrega?verb=ListRecords&metadataPrefix=oai_dc FORMATO DE SALIDA Devuelve un xml con los registros del repositorio. EJEMPLO http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do?ve rb=ListRecords&metadataPrefix=oai_dc <?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> <responseDate>2008-06-19T19:48:48.319+02:00</responseDate> <request verb="ListRecords" metadataPrefix="oai_dc">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequ est.do</request> <ListRecords> <record> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Flexibilidad</dc:title> <dc:creator>Eptron Multimedia S.A.</dc:creator> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico registros. 156 <dc:subject>Flexibilidad</dc:subject> <dc:description>Definir de un modo comprensible para el alumnado la flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-06-13</dc:date> <dc:type>self assessment</dc:type> <dc:format>text/html</dc:format> <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es_20071116_2_0162001</dc:identifier> <dc:source>es_20071116_3_0162000</dc:source> <dc:language>es</dc:language> <dc:relation>ispartof</dc:relation> <dc:coverage>Universal</dc:coverage> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> <record> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Flexibilidad</dc:title> <dc:creator>Eptron Multimedia S.A.</dc:creator> Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es_20071116_2_0162001</dc:identifier> <dc:source>es_20071116_3_0162000</dc:source> <dc:language>es</dc:language> <dc:relation>ispartof</dc:relation> <dc:coverage>Universal</dc:coverage> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> <record> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Flexibilidad</dc:title> <dc:creator>Eptron Multimedia S.A.</dc:creator> <dc:subject>Flexibilidad</dc:subject> <dc:description>Definir de un modo comprensible para el alumnado la flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-06-13</dc:date> <dc:type>self assessment</dc:type> <dc:format>text/html</dc:format> Alianza2 157 <dc:subject>Flexibilidad</dc:subject> <dc:description>Definir de un modo comprensible para el alumnado la flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-06-13</dc:date> <dc:type>self assessment</dc:type> <dc:format>text/html</dc:format> <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es_20071116_2_0162001</dc:identifier> <dc:source>es_20071116_3_0162000</dc:source> <dc:language>es</dc:language> <dc:relation>ispartof</dc:relation> <dc:coverage>Universal</dc:coverage> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> <record> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Flexibilidad</dc:title> <dc:creator>Eptron Multimedia S.A.</dc:creator> Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es_20071116_2_0162001</dc:identifier> <dc:source>es_20071116_3_0162000</dc:source> <dc:language>es</dc:language> <dc:relation>ispartof</dc:relation> <dc:coverage>Universal</dc:coverage> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> <record> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Flexibilidad</dc:title> <dc:creator>Eptron Multimedia S.A.</dc:creator> <dc:subject>Flexibilidad</dc:subject> <dc:description>Definir de un modo comprensible para el alumnado la flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-06-13</dc:date> <dc:type>self assessment</dc:type> <dc:format>text/html</dc:format> Alianza2 158 <dc:subject>Flexibilidad</dc:subject> <dc:description>Definir de un modo comprensible para el alumnado la flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-06-13</dc:date> <dc:type>self assessment</dc:type> <dc:format>text/html</dc:format> <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es_20071116_2_0162001</dc:identifier> <dc:source>es_20071116_3_0162000</dc:source> <dc:language>es</dc:language> <dc:relation>ispartof</dc:relation> <dc:coverage>Universal</dc:coverage> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> <record> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Flexibilidad</dc:title> <dc:creator>Eptron Multimedia S.A.</dc:creator> Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es_20071116_2_0162001</dc:identifier> <dc:source>es_20071116_3_0162000</dc:source> <dc:language>es</dc:language> <dc:relation>ispartof</dc:relation> <dc:coverage>Universal</dc:coverage> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> <record> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Flexibilidad</dc:title> <dc:creator>Eptron Multimedia S.A.</dc:creator> <dc:subject>Flexibilidad</dc:subject> <dc:description>Definir de un modo comprensible para el alumnado la flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-06-13</dc:date> <dc:type>self assessment</dc:type> <dc:format>text/html</dc:format> Alianza2 159 <dc:subject>Flexibilidad</dc:subject> <dc:description>Definir de un modo comprensible para el alumnado la flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-06-13</dc:date> <dc:type>self assessment</dc:type> <dc:format>text/html</dc:format> <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es_20071116_2_0162001</dc:identifier> <dc:source>es_20071116_3_0162000</dc:source> <dc:language>es</dc:language> <dc:relation>ispartof</dc:relation> <dc:coverage>Universal</dc:coverage> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> <record> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Flexibilidad</dc:title> <dc:creator>Eptron Multimedia S.A.</dc:creator> Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es_20071116_2_0162001</dc:identifier> <dc:source>es_20071116_3_0162000</dc:source> <dc:language>es</dc:language> <dc:relation>ispartof</dc:relation> <dc:coverage>Universal</dc:coverage> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> <record> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Flexibilidad</dc:title> <dc:creator>Eptron Multimedia S.A.</dc:creator> <dc:subject>Flexibilidad</dc:subject> <dc:description>Definir de un modo comprensible para el alumnado la flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-06-13</dc:date> <dc:type>self assessment</dc:type> <dc:format>text/html</dc:format> Alianza2 160 <dc:subject>Flexibilidad</dc:subject> <dc:description>Definir de un modo comprensible para el alumnado la flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-06-13</dc:date> <dc:type>self assessment</dc:type> <dc:format>text/html</dc:format> <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es_20071116_2_0162001</dc:identifier> <dc:source>es_20071116_3_0162000</dc:source> <dc:language>es</dc:language> <dc:relation>ispartof</dc:relation> <dc:coverage>Universal</dc:coverage> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> <resumptionToken expirationDate="2008-06-19T19:48:48.349+02:00" completeListSize="255" cursor="0">1213897728309</resumptionToken> </ListRecords> </OAI-PMH> Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <dc:identifier>http://redes.agrega.indra.es/buscador/DetallarODECU/DetallarODECU.do?idio ma=es&amp;identificadorODE=es_20071116_2_0162001</dc:identifier> <dc:source>es_20071116_3_0162000</dc:source> <dc:language>es</dc:language> <dc:relation>ispartof</dc:relation> <dc:coverage>Universal</dc:coverage> <dc:rights>creative commons: attribution - non commercial - share alike</dc:rights> </oai_dc:dc> </metadata> </record> <record> <header> <identifier>oai:agrega.es:es_20071116_2_0162001</identifier> <datestamp>2008-06-13</datestamp> </header> <metadata> <oai_dc:dc> <dc:title>agrega : Flexibilidad</dc:title> <dc:creator>Eptron Multimedia S.A.</dc:creator> <dc:subject>Flexibilidad</dc:subject> <dc:description>Definir de un modo comprensible para el alumnado la flexibilidad. Mostrar diferentes ejercicios para trabajar la flexibilidad.</dc:description> <dc:publisher>catalogado y financiado con fondos FEDER dentro del expediente 502/06-Lote1</dc:publisher> <dc:contributor/> <dc:date>2008-06-13</dc:date> <dc:type>self assessment</dc:type> <dc:format>text/html</dc:format> Alianza2 161 5.3.8. ERRORES A continuación, se detallan algunos de los mensajes de error que puede devolver el repositorio Agrega. Al igual que ocurre con las respuestas correctas éstos serán xml Alianza2 codificados en UTF-8: Alianza2 BADVERB <?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2008-06-20T14:18:09.942+02:00</responseDate> <request>http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest.do</request > <error code="badVerb">El argumento verb es incorrecto</error> </OAI-PMH> BadArgument Indica que algunos de los parámetros de la petición no son correctos o falta alguno obligatorio. <?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2008-06-20T14:18:39.294+02:00</responseDate> <request verb="ListIdentifiers">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequest. do</request> <error code="badArgument">La llamada incluye un parámetro incorrecto o no incluye un argumento obligatorio</error> </OAI-PMH> CannotDisseminateFormat Mensaje de error que indica que el tipo de metadato no esta soportado por la plataforma. <?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2008-06-20T14:18:57.709+02:00</responseDate> <request verb="ListIdentifiers" metadataPrefix="oai_d">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhReque st.do</request> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Mensaje de error que indica que el parámetro verb no es correcto. 162 <error code="cannotDisseminateFormat">Tipo plataforma</error> </OAI-PMH> de metadato no soportado en la Alianza2 idDoesNotExist Alianza2 <?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2008-06-20T14:20:29.974+02:00</responseDate> <request verb="GetRecord" identifier="asdfsdf" metadataPrefix="oai_dc">http://redes.agrega.indra.es/oaipmh/OaiPmhRequest/OaiPmhRequ est.do</request> <error code="idDoesNotExist">El identificador no existe en la plataforma</error> </OAI-PMH> 5.4. GESTOR SESIONES 5.4.1. INTRODUCCIÓN El gestor de sesiones es un módulo de Agrega que permite a los servicios externos interaccionar con los módulos ofrecidos a través del interfaz Web Service donde se requiere un identificador de sesión. Esta funcionalidad permite a la plataforma establecer un interfaz de control mínimo a los servicios externos que interaccionan con los interfaces WS’s públicos de Agrega. Los interfaces WS’s que están relacionados con el servicio de gestión de sesiones en la plataforma son el interfaz DRI y el SQI en los que el concepto de sesión esta presente en las cabeceras de sus métodos. Desde la funcionalidad del gestor de sesiones se implementan funcionalidades básicas como son: - crear sesión: crear una sesión válida dentro del sistema. - crear sesión anónima: crear una sesión anónima dentro de sistema. - eliminar sesión: eliminar una sesión válida dentro del sistema. 5.4.2. ALCANCE El módulo de gestión de sesiones esta concebido para la interacción con el sistema Agrega dentro de las funcionalidades DRI y SQI expuestas mediante Web Services. El concepto de sesión se establece como paso previo para la interacción con estos dos servicios. En el interfaz se define la creación de sesiones autenticadas y sesiones anónimas para las que no hay necesidad de ser un usuario dado de alta en el sistema. La funcionalidad del servicio de EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Indica que el identificador del registro no se existe en la plataforma. 163 sesiones se ha realizado a través del intercambio de mensajes SOAP sobre el protocolo HTTP. La interacción con el servicio de sesiones se puede realizar partiendo del documento WSDL, Alianza2 que describe el funcionamiento y los detalles de invocación del módulo y que permite a Alianza2 cualquier potencial usuario la creación de un cliente SOAP capaz de enviar mensajes SOAP al módulo de sesiones. 5.4.3. INTEGRACIÓN A TRAVÉS DE WEB SERVICES A continuación, se describen en detalle todos los métodos implementados en el API del invocación, los tipos de información devuelta y los errores posibles. createSession DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: CreateSession (String userId, String password) throws Exception Este método requiere como parámetros un identificador de usuario y la clave asociada al mismo. Tanto el usuario como la clave deben estar dados de alta en la plataforma para tener acceso a un identificador válido. En el caso de que esto sea así, el método devuelve un identificador de sesión válido con el que poder interaccionar con la plataforma. EJEMPLO A continuación, se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método CreateSession enviando un usuario y clave. Llamada <?xml version="1.0" encoding="UTF-8" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <createSession xmlns="http://Sesion.servicios.negocio.dri.pode.es"> <userID>admincatalogador</userID> <password>admincatalogador</password> </createSession> </soapenv:Body> </soapenv:Envelope> Respuesta: se obtiene como respuesta identificador de sesión válido. <?xml version="1.0" encoding="UTF-8"?> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico gestor de sesiones así como la descripción de los parámetros necesarios para su correcta 164 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <createSessionResponse xmlns="http://Sesion.servicios.negocio.dri.pode.es"> Alianza2 Alianza2 <createSessionReturn>ff8080811ad87512011ad8a4084d0002</createSessionReturn > </createSessionResponse> </soapenv:Body> </soapenv:Envelope> DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: CreateAnonymousSession () throws Exception Este método no requiere parámetros y devuelve un identificador de sesión válido con el que poder interaccionar con la plataforma. EJEMPLO A continuación, se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método CreateAnonymousSession. Llamada <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <m:createAnonymousSession xmlns:m="http://Sesion.servicios.negocio.dri.pode.es"/> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Respuesta: se obtiene como respuesta identificador de sesión válido. <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <createAnonymousSessionResponse xmlns="http://Sesion.servicios.negocio.dri.pode.es"> <createAnonymousSessionReturn>ff8080811ad87512011ad8a4c2220003</createAn onymousSessionReturn> </createAnonymousSessionResponse> </soapenv:Body> </soapenv:Envelope> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico createAnonymousSession 165 destorySession DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: Alianza2 DestroySession (String sessionID) throws Exception Alianza2 Este método toma como parámetro el identificador de la sesión que se quiere eliminar. El resultado de esta operación es la eliminación del sistema de gestión de sesiones de la sesión a la que corresponde el identificador. EJEMPLO Ejemplo 01: llamada al método DestroySession. Llamada <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <m:destroySession xmlns:m="http://Sesion.servicios.negocio.dri.pode.es"> <m:sessionID>ff8080811ad87512011ad8a4c2220003</m:sessionID> </m:destroySession> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Respuesta: no hay respuesta a esta llamada. <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <destroySessionResponse xmlns="http://Sesion.servicios.negocio.dri.pode.es"/> </soapenv:Body> </soapenv:Envelope> 5.5. SQI 5.5.1. INTRODUCCIÓN SQI son las siglas de “Simple Query Interface”. Se trata de una especificación, enmarcada en el entorno de los repositorios de objetos de aprendizaje, que define una capa para facilitar las búsquedas. Pretende especificar un estándar para resolver la problemática de las búsquedas de contenidos digitales en entornos heterogéneos. El interfaz SQI define un API con las siguientes funcionalidades: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico A continuación se añade un ejemplo de llamada y de respuesta: 166 - set query language: se define el lenguaje con el que se escribe la consulta con la que se va a realizar la búsqueda. El lenguaje de consulta esta definido por el repositorio sobre el que se realiza la búsqueda. - set results format: se especifica el lenguaje en el que se va a generar la respuesta a Alianza2 la consulta. Alianza2 - set max query results: se definen el máximo número de resultados que una consulta puede producir. - set max duration: establece un tiempo máximo de duración para las consultas asíncronas. - set results set size: establece un tamaño máximo del conjunto de resultados que se - sychronous query: ejecuta la consulta sobre el repositorio. - get total results count: devuelve el número total de resultados que produce una consulta sobre un repositorio. - asynchronous query: ejecuta la consulta sobre el repositorio pero de una forma asíncrona. - set source location: establece la localización sobre la que el repositorio tiene que devolver los resultados de consulta en el caso de ser invocado de forma asíncrona. - query results listener: 5.5.2. ALCANCE En la plataforma agrega se ha implementado el servicio de SQI siguiendo las especificaciones del documento CWA 15454 que define con detalle todas las cabeceras, nombres de parámetros, sintaxis, funcionalidad y tipos de datos del API SQI. En dicho documento se hace referencia a la necesidad del desarrollo en paralelo (y alejado del alcance del estándar) de un servicio de sesiones básico a través del cual, el servicio cliente de SQI interacciona con el repositorio de objetos digitales. En Agrega, el servicio de gestión de sesiones se hace cargo de este papel y hace de árbitro entre los clientes SQI y la plataforma. La implementación del interfaz SQI en Agrega admite los lenguajes de consulta VSQI LQS, mientras que el lenguaje en el que se muestran las respuestas es LOM-ES. El interfaz de consultas esta implementado para la realización de consultas síncronas. La implementación del interfaz de SQI se ha realizado a través del intercambio de mensajes SOAP sobre el protocolo HTTP. La interacción con el servicio de SQI se puede realizar partiendo del documento WSDL, que describe el funcionamiento y los detalles de invocación del módulo y que permite a cualquier potencial servicio cliente la creación de un cliente SOAP capaz de enviar mensajes SOAP al módulo de SQI. EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico devuelve como resultado de una búsqueda. 167 5.5.3. INTEGRACIÓN A TRAVÉS DE WEB SERVICES A continuación, se describen en detalle todos los métodos implementados en el API del servicio de SQI así como la descripción de los parámetros necesarios para su correcta Alianza2 invocación, los tipos de información devuelta y los errores posibles. Alianza2 getTotalResultsCount DEFINICIÓN DEL MÉTODO GetTotalResultsCount (String targetSessionID, String queryStatement) throws Exception Este método requiere como parámetros un identificador de sesión y un texto con una consulta. El identificador de sesión debe pertenecer a una sesión válida y la consulta estar escrita en un lenguaje aceptado por la plataforma. En el caso de que esto sea así, el método devuelve el número total de resultados disponibles para la consulta suministrada. En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo ocurrido: identificador de sesión inválido, lenguaje de la consulta no soportado, consulta no soportada o cualquier otro error no contemplado. EJEMPLO A continuación se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método GetTotalResultsCount enviando un identificador de sesión y un texto de búsqueda. Llamada <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><getTotalResultsCount xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><targetSessionID>ff8080811ada04730 11ada6c636b0004</targetSessionID><queryStatement>&lt;simpleQuery&gt;&lt;term&gt;estre llas&lt;/term&gt;&lt;/simpleQuery&gt;</queryStatement></getTotalResultsCount></soapenv:B ody></soapenv:Envelope> Respuesta: se obtiene como respuesta el número de resultados que ha producido la consulta. <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><getTotalResultsCountResponse xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><getTotalResultsCountReturn>1</getT otalResultsCountReturn></getTotalResultsCountResponse></soapenv:Body></soapenv:Env elope> EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico El método tiene el siguiente aspecto: 168 setMaxDuration DEFINICIÓN DEL MÉTODO Alianza2 El método tiene el siguiente aspecto: Alianza2 SetMaxDuration (String targetSessionID, Integer maxDuration) throws Exception Este método requiere como parámetros un identificador de sesión y un número de entero positivo. El identificador de sesión debe pertenecer a una sesión válida y la cifra se interpreta como milisegundos. En el caso de que esto sea así, el método configura la máxima duración En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo ocurrido: identificador de sesión inválido, número de milisegundos inválido o cualquier otro error no contemplado. EJEMPLO A continuación, se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método SetMaxDuration enviando un identificador de sesión y número de milisegundos. Llamada <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <m:setMaxDuration xmlns:m="http://SQI.servicios.negocio.dri.pode.es"> <m:targetSessionID>ff8080811ada0473011ada465ad10001</m:targetSessionID> <m:maxDuration>123456789</m:maxDuration> </m:setMaxDuration> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Respuesta: este método no devuelve ningún dato. <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <setMaxDurationResponse xmlns="http://SQI.servicios.negocio.dri.pode.es"/> </soapenv:Body> </soapenv:Envelope> setResultsFormat DEFINICIÓN DEL MÉTODO EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico de una consulta asíncrona con el número de milisegundos que se pasan. 169 El método tiene el siguiente aspecto: SetResultsFormat (String targetSessionID, String resultsFormat) throws Exception Este método requiere como parámetros un identificador de sesión y el identificador de un Alianza2 lenguaje de respuesta de resultados de búsqueda. El identificador de sesión debe pertenecer Alianza2 a una sesión válida y el lenguaje, a un lenguaje admitido por la plataforma (en este caso, LOM-ES). En el caso de que esto sea así, el método configura el lenguaje de los resultados de búsqueda. En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo soportado o cualquier otro error no contemplado. EJEMPLO A continuación se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método SetResultsFormat enviando un identificador de sesión y un identificador de lenguaje resultado de búsqueda. Llamada <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <m:setResultsFormat xmlns:m="http://SQI.servicios.negocio.dri.pode.es"> <m:targetSessionID>ff8080811ada0473011ada465ad10001</m:targetSessionID> <m:resultsFormat>LOM-ES</m:resultsFormat> </m:setResultsFormat> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Respuesta: este método no devuelve ningún dato. <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <setResultsFormatResponse xmlns="http://SQI.servicios.negocio.dri.pode.es"/> </soapenv:Body> </soapenv:Envelope> setResultSetSize DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico ocurrido: identificador de sesión inválido, lenguaje de los resultados de búsqueda no 170 SetResultSetSize (String targetSessionID, Integer resultSetSize) throws Exception Este método requiere como parámetros un identificador de sesión y una cifra con el tamaño del conjunto de elementos devueltos. El identificador de sesión debe pertenecer a una sesión válida y el tamaño del conjunto de resultados ser válido. En el caso de que esto sea así, el Alianza2 método configura el tamaño del conjunto de resultados de búsqueda. Alianza2 En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo ocurrido: identificador de sesión inválido, tamaño de conjunto de resultados inválido o cualquier otro error no contemplado. A continuación, se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método SetResultSetSize enviando un identificador de sesión y un tamaño de conjunto de resultados. Llamada <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <m:setResultsSetSize xmlns:m="http://SQI.servicios.negocio.dri.pode.es"> <m:targetSessionID>ff8080811ada0473011ada5c5b9b0002</m:targetSessionID> <m:resultsSetSize>100</m:resultsSetSize> </m:setResultsSetSize> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Respuesta: este método no devuelve ningún dato. <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <setResultsSetSizeResponse xmlns="http://SQI.servicios.negocio.dri.pode.es"/> </soapenv:Body> </soapenv:Envelope> setQueryLanguage DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: SetQueryLamguage Exception (String targetSessionID, String queryLanguajeID) throws EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico EJEMPLO 171 Este método requiere como parámetros un identificador de sesión y un identificador de lenguaje de consulta. El identificador de sesión debe pertenecer a una sesión válida y el identificador de lenguaje deberá estar entre los identificadores de lenguajes de consulta aceptados por Agrega (VSQI, LQS). En el caso de que esto sea así, el método configura el Alianza2 lenguaje de consultas de las búsquedas. Alianza2 En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo ocurrido: identificador de sesión inválido, lenguaje de consulta no soportado u otro error no contemplado. A continuación se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método SetQueryLamguage enviando un identificador de sesión y un identificador de lenguaje de consulta. Llamada <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <m:setQueryLanguage xmlns:m="http://SQI.servicios.negocio.dri.pode.es"> <m:targetSessionID>ff8080811ada0473011ada62b4b50003</m:targetSessionID> <m:queryLanguageID>VSQI</m:queryLanguageID> </m:setQueryLanguage> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Respuesta: este método no devuelve ningún dato. <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <setQueryLanguageResponse xmlns="http://SQI.servicios.negocio.dri.pode.es"/> </soapenv:Body> </soapenv:Envelope> setMaxQueryResults DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: SetMaxQueryResults (String targetSessionID, Integer maxQueryResults) throws Exception EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico EJEMPLO 172 Este método requiere como parámetros un identificador de sesión y un entero con el máximo número de resultados que una búsqueda puede producir. El identificador de sesión debe pertenecer a una sesión válida y el entero deberá ser una cifra válida de resultados de una búsqueda. En el caso de que esto sea así, el método configura el máximo número de Alianza2 resultados de una búsqueda. Alianza2 En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo ocurrido: identificador de sesión inválido, número de máximo número de resultados inválido u otro error no contemplado. A continuación se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método SetMaxQueryResults enviando un identificador de sesión y un identificador de lenguaje de consulta. Llamada <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><setMaxQueryResults xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><targetSessionID>ff8080811ada04730 11ada6c636b0004</targetSessionID><maxQueryResults>10000</maxQueryResults></setM axQueryResults></soapenv:Body></soapenv:Envelope> Respuesta: este método no devuelve ningún dato. <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><setMaxQueryResultsResponse xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"/></soapenv:Body></soapenv:Envelope > synchronousQuery DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: SynchronousQuery (String targetSessionID, startResult) throws Exception String queryStatement, Integer Este método requiere como parámetros un identificador de sesión, una sentencia con el texto de la consulta y un valor entero que indica el índice del primer resultado sobre el total posible a partir del cual se quieren elementos devueltos. El identificador de sesión debe pertenecer a una sesión válida, la sentencia debe estar escrita en un lenguaje admitido por la plataforma Agrega y el valor del índice sobre el total de resultados. En el caso de que esto sea así, el método realiza una consulta sobre el repositorio de objetos digitales de Agrega con la EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico EJEMPLO 173 consulta suministrada de forma síncrona, y devolviendo un conjunto de resultados indexados respecto del total de hits por el identificador suministrado. En el caso de que ocurra algún problema, se devuelve una excepción con el detalle de lo Alianza2 ocurrido: identificador de sesión inválido, modo de invocación no soportado, tamaño inválido Alianza2 del conjunto de resultados, sentencia de consulta inválida u otro error no contemplado. EJEMPLO A continuación se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método SynchronousQuery enviando un identificador de sesión un Llamada <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><synchronousQuery xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><targetSessionID>ff8080811ada04730 11ada6c636b0004</targetSessionID><queryStatement>&lt;simpleQuery&gt;&lt;term&gt;estre llas&lt;/term&gt;&lt;/simpleQuery&gt;</queryStatement><startResult>1</startResult></synchr onousQuery></soapenv:Body></soapenv:Envelope> Respuesta: este método devuelve los metadatos de los contenidos digitales que ajustan con la consulta suministrada. <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><synchronousQueryResponse xmlns="urn:www.cenorm.be/isss/ltws/wsdl/SQIv1p0"><synchronousQueryReturn>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;lom xmlns=&quot;http://ltsc.ieee.org/xsd/LOM&quot;&gt;&lt;general uniqueElementName=&quot;general&quot;&gt;&lt;identifier uniqueElementName=&quot;identifier&quot;&gt;&lt;catalog uniqueElementName=&quot;catalog&quot;&gt;Cat&#xE1;logo unificado mec-red.es-ccaa de identificaci&#xF3;n de ODE&lt;/catalog&gt;&lt;entry uniqueElementName=&quot;entry&quot;&gt;es_20080630_1_9135401&lt;/entry&g t;&lt;/identifier&gt;&lt;identifier …….contenido del LOM/ES…….. </synchronousQueryReturn></synchronousQueryResponse></soapenv:Body></soapenv:En velope> 5.6. DRI 5.6.1. INTRODUCCIÓN DRI son las siglas de “Digital Repositories Interoperability”. Se trata de una especificación (nacida dentro del IMS Consortium) que se define dentro del contexto de los repositorios de contenidos digitales para facilitar su interoperabilidad. Según la especificación DRI, la EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico texto de búsqueda y un identificador de resultados. 174 interacción de los repositorios se consigue mediante la implementación de una serie de funcionalidades consideradas básicas en cualquier repositorio: búsqueda, exposición, almacenamiento y entrega de los contenidos almacenados. Alianza2 - Búsqueda: Se define como el interfaz a través del cual poder realizar búsquedas sobre los Alianza2 metadatos de los contenidos almacenados en los repositorios. - Exposición: Se define como el interfaz sobre el que poder solicitar los metadatos de los recursos almacenados. - Almacenamiento: Se trata de la definición de la forma en la que un recurso se puede introducir en un repositorio y de cómo se representará dentro del mismo para su posterior - Entrega: Define la forma en que un repositorio puede entregar contenidos 5.6.2. ALCANCE De todas las funcionalidades básicas que especifica el estándar, se han implementado en el módulo de DRI de la plataforma Agrega las funciones de almacenar y entregar a través de los métodos presentar-almacenar, presentar-catalogar y solicitar-entregar. - presentar-almacenar: admite la publicación dentro de la plataforma de objetos externos. - presentar-catalogar: admite objetos externos y los deja en un estado pendiente de catalogación, paso previo dentro de Agrega a la publicación. - solicitar-entregar: se devuelve un objeto digital publicado dentro de la plataforma. La implementación del estándar se ha realizado a través del intercambio de mensajes SOAP sobre el protocolo HTTP. De esta forma se ha implementado una arquitectura de servicio con tecnología Web Services que facilita el intercambio de información entre potenciales clientes del repositorio y la plataforma y que encaja dentro del diagrama de proveedores de servicio y servicios de acceso definidos en la especificación del IMS Consortium. El Web Service que implementa esta funcionalidad trabaja en consonancia con otro servicio de gestión de sesiones. Este servicio facilita la gestión del control de acceso a los contenidos digitales de la plataforma mediante un sencillo mecanismo de autenticación. De esta forma, tanto el almacenamiento de nuevos contenidos como la entrega de información del repositorio están expuestos de forma pública, pero supeditados a un control de acceso. La invocación de los tres métodos se puede realizar mediante el uso de un identificador de sesión (previa creación de una sesión contra el servicio de gestión de sesiones) o mediante el suministro de un identificador de usuario con su correspondiente clave. Dicho usuario debe ser un usuario válido dentro del sistema La interacción con el interfaz DRI se puede realizar partiendo del documento WSDL, que describe el funcionamiento y los detalles de invocación del módulo y que permite a cualquier EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico acceso. 175 potencial usuario la creación de un cliente SOAP capaz de enviar mensajes SOAP al módulo de DRI. 5.6.3. INTEGRACIÓN A TRAVÉS DE WEB SERVICES. Alianza2 Alianza2 A continuación, se describen en detalle todos los métodos implementados en el API de DRI así como la descripción de los parámetros necesarios para su correcta invocación, los tipos de información devuelta y los errores posibles. DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: PresentarAlmacenarSesion (String sesionId, DataHandler pif) throws Exception Este método necesita como parámetro un identificador de sesión válido y el fichero que contiene el ODE que se pretende almacenar en formato Pif. El resultado de la operación es la publicación dentro de la plataforma del ODE suministrado. EJEMPLO A continuación, se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método PresentarAlmacenarSesion enviando un ODE. Llamada <?xml version="1.0" encoding="UTF-8" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <presentarAlmacenarSesion xmlns="http://DRI.servicios.negocio.dri.pode.es"> <sesionId>ff8080811ad87512011ad8a4084d0002</sesionId> <pif href="cid:AFEBB0E5BCC89E61E1B43FF563BC0BC9" /> </presentarAlmacenarSesion> </soapenv:Body> </soapenv:Envelope> ------=_Part_2_4835957.1214824149296 Content-Type: application/octet-stream Content-Transfer-Encoding: binary Content-Id: <C0362C12E70D7B0BD27042C2996704B9> {…. contenido binario del DataHandler…} ------=_Part_2_4835957.1214824149296-Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información devuelta por el método. <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico presentarAlmacenarSesion 176 xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><presentarAlmacenarSesionResponse xmlns="http://DRI.servicios.negocio.dri.pode.es"/></soapenv:Body></soapenv:Envelope> Alianza2 presentarAlmacenar Alianza2 DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: PresentarAlmacenar (String usuario, String clave, DataHandler pif) throws Exception Este método necesita como parámetro un usuario válido, su clave dentro del sistema y el El resultado de la operación es la publicación dentro de la plataforma del ODE suministrado. EJEMPLO A continuación se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método PresentarAlmacenar enviando un ODE. Llamada <?xml version="1.0" encoding="UTF-8" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <presentarAlmacenar xmlns="http://DRI.servicios.negocio.dri.pode.es"> <sesionId>ff8080811ad87512011ad8a4084d0002</sesionId> <pif href="cid:AFEBB0E5BCC89E61E1B43FF563BC0BC8" /> </presentarAlmacenar> </soapenv:Body> </soapenv:Envelope> ------=_Part_2_4835957.1214824149297 Content-Type: application/octet-stream Content-Transfer-Encoding: binary Content-Id: <C0362C12E70D7B0BD27042C2996704B8> {…. contenido binario del DataHandler…} ------=_Part_2_4835957.1214824149297-- Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información devuelta por el método. <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><presentarAlmacenarResponse xmlns="http://DRI.servicios.negocio.dri.pode.es"/></soapenv:Body></soapenv:Envelope> solicitarEntregarSesion DEFINICIÓN DEL MÉTODO EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico fichero que contiene el ODE que se pretende almacenar en formato Pif. 177 El método tiene el siguiente aspecto: SolicitarEntregarSesion (String sesionId, String mec) throws Exception Este método necesita un identificador de sesión válida y un identificador de objeto digital que Alianza2 resida publicado en el repositorio. Se devuelve un ODE en formato Pif. Alianza2 EJEMPLO A continuación se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método SolicitarEntregarSesion enviando un mec. <?xml version="1.0" encoding="UTF-8" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <solicitarEntregarSesion xmlns="http://DRI.servicios.negocio.dri.pode.es"> <sesionId>ff8080811ad92757011ad9275bac0001</sesionId> <mec>es_20070901_3_0261100</mec> </solicitarEntregarSesion> </soapenv:Body> </soapenv:Envelope> Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información devuelta por el método. Dentro de la información devuelta se encuentra un adjunto con el fichero del ODE en formato Pif. ------=_Part_1_17172160.1214825271850 Content-Type: text/xml; charset=UTF-8 Content-Transfer-Encoding: binary Content-Id: <DE89AF93EBB40323FBEF9CD025A66BCB> <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><solicitarEntregarSesionResponse xmlns="http://DRI.servicios.negocio.dri.pode.es"><solicitarEntregarSesionReturn href="cid:E5DB451354A6BD7465318D4DA6E41C8D"/></solicitarEntregarSesionResponse> </soapenv:Body></soapenv:Envelope> ------=_Part_1_17172160.1214825271850 Content-Type: application/octet-stream Content-Transfer-Encoding: binary Content-Id: <E5DB451354A6BD7465318D4DA6E41C8D> {…. contenido binario del DataHandler…} solicitarEntregar DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Llamada 178 SolicitarEntregar (String usuario, String clave, String mec) throws Exception Este método necesita un identificador de usuario válido en la plataforma, su clave dentro del sistema y un identificador de objeto digital que resida publicado en el repositorio. Se devuelve un ODE en formato Pif. Alianza2 Alianza2 EJEMPLO A continuación, se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método SolicitarEntregar enviando un mec. <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><solicitarEntregar xmlns="http://DRI.servicios.negocio.dri.pode.es"><usuario>admincatalogador</usuario><clav e>admincatalogador</clave><mec>es_20070901_3_0261100</mec></solicitarEntregar></so apenv:Body></soapenv:Envelope> Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información devuelta por el método. Dentro de la información devuelta se encuentra un adjunto con el fichero del ODE en formato Pif. ------=_Part_2_19820335.1214826005924 Content-Type: text/xml; charset=UTF-8 Content-Transfer-Encoding: binary Content-Id: <A995CD42245926228341AF8C6C8A1475> <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><solicitarEntregarResponse xmlns="http://DRI.servicios.negocio.dri.pode.es"><solicitarEntregarReturn href="cid:66ACF3BB49B51C3848FC5059ADD0228E"/></solicitarEntregarResponse></soap env:Body></soapenv:Envelope> ------=_Part_2_19820335.1214826005924 Content-Type: application/octet-stream Content-Transfer-Encoding: binary Content-Id: <66ACF3BB49B51C3848FC5059ADD0228E> {…. contenido binario del DataHandler…} presentarCatalogarSesion DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: PresentarCatalogarSesion (String sesionId, DataHandler pif) throws Exception EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Llamada 179 Este método necesita un identificador de sesión válida y un fichero con un ODE válido en formato pif. El resultado de esta operación es la introducción del recurso digital dentro de la plataforma en estado pendiente de catalogación. Alianza2 EJEMPLO Alianza2 A continuación, se añade un ejemplo de llamada y de respuesta: Ejemplo 01: llamada al método SolicitarEntregarSesion enviando un ODE. <?xml version="1.0" encoding="UTF-8" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <presentarCatalogarSesion xmlns="http://DRI.servicios.negocio.dri.pode.es"> <sesionId>ff8080811ad92757011ad9516db60003</sesionId> <pif href="cid:6935E10DBEAC67589B877E24BCDEF3E5" /> </presentarCatalogarSesion> </soapenv:Body> </soapenv:Envelope> ------=_Part_5_14808011.1214826931450 Content-Type: application/octet-stream Content-Transfer-Encoding: binary Content-Id: <6935E10DBEAC67589B877E24BCDEF3E5> {…. contenido binario del DataHandler…} ------=_Part_5_14808011.1214826931450-Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información devuelta por el método. <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><presentarCatalogarSesionResponse xmlns="http://DRI.servicios.negocio.dri.pode.es"/></soapenv:Body></soapenv:Envelope> presentarCatalogar DEFINICIÓN DEL MÉTODO El método tiene el siguiente aspecto: PresentarCatalogar (String usuario, String clave, DataHandler pif) throws Exception Este método necesita un identificador de usuario válido en la plataforma, su clave dentro del sistema y un fichero con un ODE válido en formato pif. El resultado de esta operación es la introducción del recurso digital dentro de la plataforma en estado pendiente de catalogación. EJEMPLO A continuación se añade un ejemplo de llamada y de respuesta: EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Llamada 180 Ejemplo 01: llamada al método PresentarCatalogar enviando un ODE. Llamada Respuesta: se obtiene como respuesta un mensaje SOAP conteniendo la información devuelta por el método. <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"><soapenv:Body><presentarCatalogarResponse xmlns="http://DRI.servicios.negocio.dri.pode.es"/></soapenv:Body></soapenv:Envelope> Alianza2 Alianza2 EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico <?xml version="1.0" encoding="UTF-8" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <presentarCatalogar xmlns="http://DRI.servicios.negocio.dri.pode.es"> <usuario>admincatalogador</usuario> <clave>admincatalogador</clave> <pif href="cid:423B4845FBE2C2B094071BF68336DCBB" /> </presentarCatalogar> </soapenv:Body> </soapenv:Envelope> ------=_Part_5_14808011.1214826931450 Content-Type: application/octet-stream Content-Transfer-Encoding: binary Content-Id: <423B4845FBE2C2B094071BF68336DCBB> {…. contenido binario del DataHandler…} ------=_Part_5_14808011.1214826931450-- 181 6. REFERENCIAS Apache 2.X WebServer http://httpd.apache.org/ http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html http://httpd.apache.org/docs/2.0/mod/mod_deflate.html Alianza2 Alianza2 Apache Directory Studio http://directory.apache.org/studio/ DRI http://www.imsglobal.org/digitalrepositories/driv1p0/imsdri_infov1p0.html#1256215 FFmpeg http://ffmpeg.mplayerhq.hu/ ImageMagick http://www.imagemagick.org/script/index.php JBoss Application Server http://www.jboss.org/jbossas/ http://wiki.jboss.org/wiki/JBossASTuningSliming https://wiki.jboss.org/wiki/OptimalMod_jk1.2Configuration http://docs.jboss.com/jbossas/guides/clusteringguide/r2/en/html_single/#clustering-http-modjk http://tomcat.apache.org/tomcat-5.5-doc/config/http.html JDK 1.6u6 http://java.sun.com/products/archive/ http://java.sun.com/javase/technologies/hotspot/ http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp http://java.sun.com/developer/technicalArticles/Programming/turbo/ http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html LDAP Browser http://www.mcs.anl.gov/~gawor/ldap/ Lucene http://lucene.apache.org/java/docs/index.html LVM Howto http://tldp.org/HOWTO/LVM-HOWTO/ MediaWiki http://www.mediawiki.org/wiki/MediaWiki Mozilla Firefox http://www.mozilla-europe.org/es/firefox/ MySQL http://dev.mysql.com/doc/refman/5.0/en/ NFS (Linux NFS Howto) http://nfs.sourceforge.net/nfs-howto/ EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico Birt http://www.eclipse.org/birt/phoenix/ 182 OAIPMH http://www.openarchives.org http://dublincore.org/ OpenLDAP http://www.openldap.org/ http://www.openldap.org/doc/admin24/slapdconfig.html http://www.openldap.org/doc/admin24/dbtools.html Alianza2 Alianza2 Quartz http://www.opensymphony.com/quartz Tomcat http://tomcat.apache.org/ http://tomcat.apache.org/tomcat-5.5-doc/config/http.html SQI ftp://ftp.cenorm.be/PUBLIC/CWAs/e-Europe/WS-LT/cwa15454-00-2005-Nov.pdf SQUID Cache http://www.squid-cache.org/ http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html XFS http://oss.sgi.com/projects/xfs/ Xvfb http://www.xfree86.org/4.0.1/Xvfb.1.html EXP. 843/08-SD Evolución De La Plataforma De Objetos Digitales Educativos Agrega - Documento de Formación: Manual del curso técnico ReiserFS http://es.wikipedia.org/wiki/ReiserFS 183