Universidad de Valladolid Escuela Técnica Superior de Ingenierı́a Informática Ingeniero Técnico en Informática de Sistemas Sistema de Agenda Parlamentaria para dispositivos móviles Alumno: Alberto González Sánchez Tutores: José Manuel Marqués Corral José Manuel Rodrı́guez Rodrı́guez Preguntado por un periodista por la gran cantidad de fallos ocurridos en la búsqueda de un filamento para su bombilla, Edison respondió: “No he fracasado, he encontrado diez mil maneras que no funcionan” Índice general 1. Presentación y Objetivos 1.1. Introducción . . . . . . . . . . . . . . 1.1.1. Presentación . . . . . . . . . 1.1.2. Propósito general y objetivos 1.1.3. Definiciones y abreviaturas . 1.1.4. Contexto del sistema . . . . . 1.1.5. Sistema actual . . . . . . . . 1.2. Entorno tecnológico . . . . . . . . . 1.2.1. Internet Information Services 1.2.2. Microsoft Sql Server 2000 . . 1.2.3. NHibernate . . . . . . . . . . 1.2.4. .NET . . . . . . . . . . . . . 1.2.5. log4net . . . . . . . . . . . . 1.2.6. NUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 2 3 4 9 15 15 15 16 16 16 16 2. Análisis del sistema 2.1. Requisitos . . . . . . . . . . . . . . . 2.1.1. Requisitos funcionales . . . . 2.1.2. Requisitos no funcionales . . 2.1.3. Escenarios . . . . . . . . . . . 2.2. Modelo de Casos de Uso . . . . . . . 2.2.1. Actores . . . . . . . . . . . . 2.2.2. Casos de Uso . . . . . . . . . 2.2.3. Diagrama de Casos de Uso . 2.2.4. Descripción de Casos de Uso 2.3. Modelo de dominio . . . . . . . . . . 2.4. Modelo de análisis . . . . . . . . . . 2.5. Diagrama de clases de análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 18 18 19 19 20 20 20 22 24 30 32 37 3. Diseño del sistema 3.1. Arquitectura del sistema . . . . 3.1.1. Gestión de persistencia . 3.1.2. Aspectos de seguridad . 3.2. Diseño de los subsistemas . . . 3.2.1. Casos de uso de diseño . 3.2.2. Subsistema Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 42 43 43 43 47 48 . . . . . . . . . . . . . . . . . . ÍNDICE GENERAL 3.2.3. Subsistema Servidor::AcpSvc . . . . . . . . . . . . . . . . . . . . . . . 4. Cliente para PDA 4.1. Descripción general . . . . . . . . . . . . 4.2. Interfaz de usuario . . . . . . . . . . . . 4.3. POOM: Pocket Outlook Object Model . 4.4. Proxy del servicio y sistema de llamada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Documentación del Programador 6. Documentación de Administrador 6.1. Requisitos . . . . . . . . . . . . . . . . . 6.2. Instalación . . . . . . . . . . . . . . . . 6.3. Configuración . . . . . . . . . . . . . . . 6.3.1. Configuración de los parámetros 6.3.2. Configuración de NHibernate . . 6.3.3. Configuración de log4net . . . . 49 57 58 58 60 62 65 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 68 68 71 71 71 73 7. Documentación de Usuario 7.1. Conozca su PDA . . . . . . . . . . . . . . 7.2. Instalación de .NET Compact Framework 7.3. Instalación de µCAPA . . . . . . . . . . . 7.4. Uso diario . . . . . . . . . . . . . . . . . . 7.5. Configuración . . . . . . . . . . . . . . . . 7.5.1. Configuración de su perfil . . . . . 7.5.2. Sincronización de la agenda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 78 78 79 79 79 80 81 8. Conclusiones 8.1. Conclusiones del Proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2. Conclusiones del Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2.1. Tareas para la próxima iteración . . . . . . . . . . . . . . . . . . . . . 83 84 84 85 A. Contenido del CD-ROM 87 vi Lista de Figuras 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. Flujo de información en las Cortes . . . Aspecto de la vista por fechas . . . . . . Aspecto de la vista por iniciativas . . . Aspecto de la vista por Órdenes del Dı́a Aspecto de la vista por órganos . . . . . Aspecto de la vista por procuradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 10 11 12 13 14 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.9. 2.9. Diagrama de casos de uso del sistema . . . . . . . . . Prototipo de interfaz para Iniciar Sesión . . . . . . . . Prototipo de interfaz de Definir Opciones . . . . . . . Prototipo de interfaz para Obtener Agenda Completa Clases del modelo del dominio . . . . . . . . . . . . . . Clases del modelo de análisis . . . . . . . . . . . . . . Diagrama de secuencia de Iniciar Sesión . . . . . . . . Diagrama de secuencia de Definir Opciones . . . . . . Diagrama de secuencia de Obtener Agenda Completa . Diagrama de clases del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 25 27 29 31 32 33 34 35 39 3.1. Arquitectura de 3 capas y 3 niveles . . . . . . . . . . . 3.2. Esquema de la estructura de la base de datos . . . . . 3.3. Diagrama de subsistemas y componentes . . . . . . . . 3.4. Diagrama de despliegue . . . . . . . . . . . . . . . . . 3.5. División interna del subsistema servidor . . . . . . . . 3.6. Patrón fachada en el subsistema servidor . . . . . . . . 3.7. Patrón Estrategia en el subsistema servidor . . . . . . 3.8. Patrón estrategia para los filtros . . . . . . . . . . . . 3.9. Diagrama de clases del paquete de filtros. . . . . . . . 3.10. Diagrama de clases del paquete Remoto. . . . . . . . . 3.11. Diagrama de clases resultante de AcpSvc . . . . . . . . 3.12. Diagrama de secuencia para la generación de agendas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 44 45 46 49 50 52 52 53 54 55 56 4.1. Formularios de la aplicación de PDA . . . . . . . . . . . . . . . . . . . . . . . 4.2. Sección implementada del modelo de objetos de Oulook . . . . . . . . . . . . 59 61 5.1. Aspecto de la documentación generada por NDoc . . . . . . . . . . . . . . . . 66 LISTA DE FIGURAS 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. Pantalla de bienvenida de la instalación . . . Pantalla de selección de directorio y puerto . Pantalla intermedia . . . . . . . . . . . . . . . Pantalla de progreso de instalación . . . . . . Pantalla final . . . . . . . . . . . . . . . . . . Clases de objetos presentes en el sistema . . . Esquema de la estructura de la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 69 69 70 70 74 75 7.1. 7.2. 7.3. 7.4. Pantalla de bienvenida . . . . . . . . . Pantalla de configuración del cliente . Ventana de selección de opciones . . . Ventana de progreso de sincronización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 80 81 82 viii . . . . . . . . . . . . . . . . Capı́tulo 1 Presentación y Objetivos Presentación y Objetivos 1.1. 1.1.1. Introducción Presentación Las Cortes de Castilla y León desean poner a disposición de parlamentarios y público en general la información de las actividades que desarrolla. El Sistema de Gestión de Agenda Parlamentaria tiene el propósito de informar de dichas actividades a quien lo desee (procuradores, empleados de las Cortes, medios de comunicación, público en general. . . ) de una manera independiente a cómo sean mostradas y usadas en cada caso. El objetivo de este Proyecto es el análisis, diseño, codificación y despliegue de un sistema software de gestión de agenda parlamentaria para las Cortes de Castilla y León, siguiendo métodos y prácticas de Ingenierı́a de Software. La metodologı́a de desarrollo utilizada para este proyecto se ha basado en el Proceso Unificado [9], Análisis y Diseño Orientado a Objetos y notación UML. El sistema se ha implementado en C# utilizando el entorno de ejecución .NET Framework sobre el servidor de contenidos IIS y la base de datos SQL Server. También se ha desarrollado un pequeño cliente ilustrativo de las capacidades del sistema que se ejecuta en un PocketPC con Windows Mobile y la .NET Compact Framework. 1.1.2. Propósito general y objetivos De una forma sencilla y descriptiva, el propósito del sistema puede resumirse como una aplicación puente entre los servicios de las Cortes responsables de la gestión de la actividad parlamentaria y todos los potenciales usuarios interesados en conocer los eventos de dicha actividad y sus contenidos. Partiendo de esta premisa, se puede definir nuestra aplicación como un gestor de los mencionados eventos de la vida parlamentaria orientado a prestar servicio a otros sistemas de gestión dentro y fuera de las Cortes, ası́ como a poner a disposición del público dichos eventos. Los potenciales clientes del sistema son: 1. Los Grupos Parlamentarios. 2. Los Procuradores, que han de recibir información puntual y personalizada. 3. Las oficinas parlamentarias y sedes de partidos polı́ticos. 4. Otros organismos, como la Junta de Castilla y León e Instituciones anexas a la vida parlamentaria como el Procurador del Común. 5. Los propios servicios de las Cortes, tanto aquellos relacionados con la vida parlamentaria como el resto de los servicios. 6. Medios de comunicación, que han de recibir información genérica pero de manera constante. 7. Otros receptores de información generalista, como estudiosos de la actividad parlamentaria y ciudadanos en general. El sistema generará agendas personalizadas a partir de unas agendas modelo estándar, que en adelante denominaremos perfiles, definidas por el administrador del sistema, y un conjunto de elementos opcionales que el propio usuario puede incluir. La generación puede 2 1.1 Introducción ser completa o incremental, es decir, se puede demandar una agenda completamente nueva o realizar una combinación de los datos que posea con los datos más recientes. Cada uno de los perfiles representa una presentación diferente de los datos de la agenda parlamentaria, basándose en criterios referidos al tanto a la propia naturaleza del perfil como al usuario del sistema que la solicita. Un perfil no define únicamente la ordenación y presentación de los datos, sino que también define qué datos estarán accesibles. Ası́, la información disponible para un Procurador, es muy distinta de la que puede proporcionarse a un periodista. La obtención del Orden del Dı́a de una reunión, por ejemplo, puede hacerse de una forma muy genérica o profundizando para obtener los participantes, descripción de los expedientes, etc. El sistema estará soportado por las bases de datos de actividad parlamentaria (GAEXPA) y un servidor encargado de atender las peticiones de generación de agenda. El sistema cliente e interfaz de usuario en sı́ no están definidos, ya que se pretende crear un sistema que permita una amplia gama de plataformas. Si bien la parte de datos y lógica de aplicación estarán asentados en un entorno Microsoft, los clientes podrı́an ser interfaces web, ordenadores personales con distintos sistemas operativos, PalmOS, PocketPC, teléfonos “smartphone” con Windows o Java MIDP, etc. De una manera más concreta, partiendo del objetivo global del sistema, “gestión de los eventos de la vida y actividad parlamentaria, su distribución y publicación, ası́ como transferencia de datos e integración en otros sistemas de gestión parlamentaria”, se ha establecido la siguiente lista de objetivos particulares: Mantener un registro de los eventos parlamentarios, los datos particulares de los mismos y sus relaciones con otras entidades parlamentarias. Generar agendas parlamentarias personalizadas siguiendo unos perfiles definidos. Permitir a los usuarios cierta flexibilidad en cuanto a la información que desean recibir, permitiéndoles integrar la información en sus sistemas, ası́ como eliminar o añadir información de carácter opcional. Soportar una diversidad amplia de dispositivos y sistemas clientes. 1.1.3. Definiciones y abreviaturas Evento: unidad mı́nima de información de la agenda parlamentaria. Pueden ser de tres tipos: 1. Parlamentarios: sesiones parlamentarias programadas. 2. Plazos: que son abiertos o cumplen en una determinada fecha. 3. Institucionales: son los referidos a actos, congresos, actividades, etc. que se han de realizar de forma puntual en un determinado momento, sus principales propiedades son: fecha, hora, lugar, tı́tulo, resumen y detalle. Agenda: recopilación de eventos atendiendo a las restricciones impuestas por un perfil y las opciones seleccionadas por el usuario. Perfil: modelo de agenda al que se tiene que ajustar la agenda de algún usuario. Especifica los tipos de eventos a los que un usuario tiene acceso, y en caso afirmativo si son obligatorios u opcionales. 3 Presentación y Objetivos Filtro: criterio de modificación de los datos de un elemento de información del sistema. Pueden modificar el contenido de los mismos (censurándolos) o directamente hacer que no aparezcan de cara al usuario. Generador: unidad de trabajo que recopila la información de la base de datos, aplica los filtros pertenecientes al perfil, y produce la agenda. Procurador: persona electa en representación de una provincia y un grupo parlamentario. Organo Parlamentario: órgano de actividad con una misión especı́fica dentro de la vida parlamentaria. Proponente: persona fı́sica o jurı́dica que insta a las Cortes a tratar un tema, proponiendo la iniciación de la tramitación de un Expediente Parlamentario. 1.1.4. Contexto del sistema Gestión Parlamentaria La gestión parlamentaria puede verse como un motor de tramitación encerrado en un doble circuito de flujo de información: Figura 1.1: Flujo de información en las Cortes 4 1.1 Introducción 1. El flujo horizontal que representa la circulación funcional de datos y documentos y contempla desde la entrada, captura e importación de información en uno de los extremo, a la exportación, publicación y distribución en el otro. 2. El flujo vertical representa el diálogo entre el motor de tramitación y los “depósitos” o repositorios de datos y documentación que le alimentan. Estos depósitos son dos (Documental y Relacional) y dialogan con el motor de tramitación en ambos sentidos. El Motor de tramitación está formado, a su vez, por un núcleo que representa la lógica de tramitación rodeado por las cuatro aplicaciones que conforman las interfaces de tramitación: Registro. Gestión de Sesiones Parlamentarias y Agenda. Gestión del Boletı́n Oficial. Gestión de Personas y Organización de las Cortes de Castilla y León. Estas cuatro aplicaciones son las encargadas de establecer la comunicación del Núcleo de tramitación con los repositorios de información y con los usuarios del sistema, ası́ como conformar y gestionar los medios para la importación de datos desde fuentes predefinidas y su publicación y distribución a los distintos niveles: WEB no estructurado Estructura XML Movilidad o formatos destinados a su lectura en dispositivos remotos móviles (Teléfonos, Ipaq, . . . ). Cada uno de los módulos del anterior esquema, representado por un bloque de color, es totalmente estanco y, a pesar de que publica y expone cuales son sus dialectos de comunicación con el resto de módulos, no realiza ningún tipo de comunicación a bajo nivel o dependiente, estableciendo canales de carácter general mediante mensajes personalizados que se remiten al sistema y que son capturados por el modulo destinatario para ser tratado adecuadamente y que se realicen las acciones que se señalen en el paquete con los datos contenidos en el mismo. Un paquete de comunicación contendrá los siguientes apartados en un formato adecuado (XML) para la interacción con todos los módulos: 1. Identificación de origen. 2. Identificación de destinatarios. 3. Identificación de paquete. 4. Acciones. 5. Datos. 5 Presentación y Objetivos Naturalmente los WEB Services, XML, SOAP, etc. son tecnologı́as muya adecuadas y ajustadas para el desarrollo de esta arquitectura. A su vez los Módulos planteados pueden tener estructuras internas complejas consistentes en varias partes con sus interacciones e interfaces. Los objetivos de este proyecto encajan en el modulo de movilidad, formando parte de los subsistemas que realizan la captura de datos de acuerdo a criterios establecidos, su transformación en formatos adecuados y su envı́o a dispositivos diversos que soliciten la información. Este módulo resulta ciertamente complejo dada la gran cantidad posible de dispositivos móviles que se pueden contemplar y las posibilidades a corto y medio plazo que es necesario considerar. Organización de las Cortes Las Cortes de Castilla y León están formadas por 82 procuradores, agrupados en grupos parlamentarios, que a su vez forman parte de una serie de órganos parlamentarios. Su funcionamiento está regido por el Reglamento de las Cortes [4]. La visión expuesta en los siguientes párrafos corresponde al antiguo reglamento, ya que en la actualidad se está reformando, aunque su estructura básica se conserva. Un Procurador es una persona electa por una provincia y un partido polı́tico, y aunque lo normal es que sea siempre la misma, también puede ser sustituido por otra persona del mismo grupo y provincia. Cada Procurador sólo puede pertenecer a un grupo parlamentario simultáneamente, pero puede darse el caso de que cambie de grupo parlamentario (generalmente al mixto). Un grupo parlamentario es un conjunto de parlamentarios con un nombre, y un mı́nimo de tres integrantes (salvo el grupo mixto). El grupo mixto es el único que siempre existe y no cambia de nombre, el resto pueden variar con cada legislatura. Los procuradores pueden tener cargos asignados (y que pueden cambiar) tanto dentro del conjunto de las Cortes (presidente, vicepresidentes, secretarios. . . ) como en los grupos parlamentarios (portavoz, secretario. . . ). Los órganos parlamentarios son reuniones de procuradores con un tema especı́fico. Los órganos que no varı́an (salvo su composición) con el tiempo son: Presidencia: constituido por una sola persona, el presidente. Mesa de las Cortes: formada por los 5 cargos de las Cortes (presidente, vicepresidentes. . . ). Junta de portavoces: formada por la mesa de las Cortes junto con los portavoces de cada grupo parlamentario. Diputación Permanente: actúa cuando las Cortes no pueden (catástrofes, disolución, guerra, vacaciones. . . ). Pleno: formada por la reunión de los 82 procuradores. Junto a éstos se encuentran las comisiones, clasificadas según: Permanencia: 1. Permanentes: ligadas generalmente a áreas de gobierno (Comisión de Hacienda, Comisión de Turismo. . . ). 6 1.1 Introducción 2. No permanentes: ligadas a temas concretos de interés en un momento dado. Autoridad: 1. Legislativas: con capacidad para proponer leyes. 2. No legislativas: que simplemente generan informes. 3. De investigación: son comisiones especiales con un reglamento especial. Las comisiones también tienen sus distintas formas de reunión, muy similares a las de las Cortes en su conjunto: 1. Pleno: todos los miembros a la vez. 2. Mesa: sólo los cargos de la comisión (presidente, vicepresidente y secretario) 3. Junta de portavoces: la mesa con los portavoces de cada grupo en la comisión. Las Cortes de Castilla y León centran su actividad en torno a Expedientes, también llamados Iniciativas, que son temas propuestos por un “proponente” para su discusión en las Cortes. Estos proponentes pueden ser: Procuradores. Grupos parlamentarios. Junta de Castilla y León. Iniciativa Popular (mediante recogida de firmas). Un expediente se inicia registrando un documento al que se le asocia un número de registro y una fecha de registro. Pero esto no es suficiente para que un expediente se admita, primero tiene que pasar el filtro de la Mesa de las Cortes. Una vez el expediente es aceptado o denegado se le asocia una nueva fecha, la de aprobación. Si la Mesa admite a trámite la iniciativa, debe decidir cómo, quién y de qué forma la tramitará. Cómo se tramita indica un modelo de trámite, que abarca los modelos indicados en la Tabla 1.1. Modelo de trámite Pregunta Escrita Pregunta Oral en Comisión Pregunta Oral en Pleno Interpelación Moción Proposición no de Ley Proyecto de Ley Solicitud de comparecencia Código PE POC POP I M PNL PL SC Tabla 1.1: Modelos de trámite para las iniciativas Quién tramita la iniciativa designa el órgano que lo va a llevar, teniendo en cuenta las caracterı́sticas del modelo de trámite asignado. 7 Presentación y Objetivos De qué forma se tramita designa si el expediente sigue los cauces administrativos habituales y cumple los plazos establecidos. Si un expediente es marcado como “de actualidad”, será tratado inmediatamente en la siguiente reunión del órgano sustanciador. Si un expediente es marcado como “urgente” reducirá sus plazos considerablemente (generalmente a la mitad). Una vez completado este proceso, el expediente puede dejar de identificarse con el número de registro y puede identificarse con un identificador especial que indica la legislatura en la que se tramitó, el modelo de trámite y el número de orden. Ası́ la iniciativa 6-POP-43 se corresponde con la cuadragésimo tercera Pregunta Oral en Pleno de la VI Legislatura. El siguiente paso es su publicación en el Boletı́n Oficial de las Cortes de Castilla y León, en un número, fecha y página concretos, salvo las Solicitudes de Comparecencia y Documentación, que no se publican. Una vez publicado el expediente, queda en estado pendiente. Los órganos mantienen sesiones de trabajo donde se sustancian los expedientes pendientes, y pasan por una serie de estados. Primeramente se decide el dı́a, hora, lugar y órgano que se va a reunir. En este momento se dice que la sesión está planeada. En una sesión se tratarán una serie de iniciativas. Dichas iniciativas, que se toman del conjunto de iniciativas pendientes, conforman el Orden del Dı́a. El orden de las iniciativas no es aleatorio, sino que sigue un orden determinado por el Reglamento: 1. Preguntas Orales 2. Interpelaciones 3. Mociones 4. Proyectos no de Ley 5. Proyectos de Ley 6. . . . Una vez cerrado el orden del dı́a se dice que la sesión está convocada. Durante la reunión se tratan las iniciativas individualmente, trasladándolas a uno de los siguientes estados. 1. contestada, si es una pregunta. 2. decaida, si no está el proponente. 3. retirada, si el proponente lo decide ası́. 4. aprobada 5. rechazada La tramitación de un expediente puede seguirse tanto con el diario de sesiones de los órganos como con los boletines oficiales. 8 1.1 Introducción 1.1.5. Sistema actual En la actualidad existe un sistema de generación de agenda basado en web a partir de los datos contenidos en una base de datos Microsoft Sql Server. La agenda tiene dos vistas: una dinámica y otra estática. La vista dinámica son páginas ASP generadas por el servidor web en cada consulta conteniendo la versión más actualizada de la agenda. Esta vista sólo es accesible desde la Intranet de las CCyL. La vista estática es un conjunto de páginas HTML generadas semanalmente con el contenido de la agenda de la semana entrante. Las dos permiten acceder a los eventos de la vida parlamentaria según diversos criterios: Fechas: se muestra un listado de las actividades con una descripción muy breve. Figura 1.2. Órdenes del dı́a: se muestran los órdenes del dı́a de cada actividad, ordenados también por fechas. Figura 1.4. Iniciativas: se muestra un listado de las reuniones programadas por cada iniciativa, ordenadas por fecha. Figura 1.3. Comparecencias: se muestra un listado de las comparecencias de los altos cargos de CCyL y otras personalidades relevantes. Órganos, se muestran las fechas de reunión ası́ como el orden del dı́a de las mismas. Figura 1.5. Procurador: se muestra un listado de las actividades que tiene que realizar cada procurador en la semana, si es que las tiene. Figura 1.6. Últimas semanas, con la actividad de cada órgano en los últimos tres meses. 9 Presentación y Objetivos Figura 1.2: Aspecto de la vista por fechas 10 Figura 1.3: Aspecto de la vista por iniciativas 1.1 Introducción 11 Presentación y Objetivos Figura 1.4: Aspecto de la vista por Órdenes del Dı́a 12 Figura 1.5: Aspecto de la vista por órganos 1.1 Introducción 13 Presentación y Objetivos Figura 1.6: Aspecto de la vista por procuradores 14 1.2 Entorno tecnológico 1.2. Entorno tecnológico Las Cortes de Castilla y León utilizan en sus sistemas informáticos soluciones de Microsoft, y debido a esta restricción, el proyecto se va a realizar utilizando tecnologı́as proporcionadas por Microsoft, tanto en la parte de servidor como en la de cliente. El servidor va a funcionar sobre Internet Information Services en Windows 2003, y para la gestión de los datos se va a usar el gestor de bases de datos relacional Microsoft Sql Server 2000. El cliente de ejemplo funcionará en una PDA PocketPC con Windows Mobile y .NET Compact Framework, aunque, como se verá, hará falta elaborar alguna biblioteca de adaptación entre el sistema y el código administrado de .NET. 1.2.1. Internet Information Services Internet Information Services es el servidor de contenidos y aplicaciones Web de Microsoft, que en su versión 6.0 viene de serie con todas las instalaciones de Windows Server 2003. IIS 6.0 permite a pequeñas, medianas y grandes empresas desarrollar y desplegar rápidamente sitios y aplicaciones web. Proporciona una plataforma de alto rendimiento para las aplicaciones desarrolladas para la .NET Framework, como es nuestro caso. Las principales caracterı́sticas de IIS 6.0 son: Mayor disponibilidad y f iabilidad. Cada aplicación instalada en el servidor se ejecuta en su propio contenedor, y no es posible que un mal funcionamiento de la misma afecte a otras aplicaciones o al servidor mismo. Todas las aplicaciones son monitorizadas para comprobar si existe algún fallo en ellas, y existe la posibilidad de reiniciar automáticamente los servicios cuando esto ocurra. Una mayor facilidad de configuración y recuperación al usar archivos de configuración basados en XML, que permite la edición con cualquier editor de texto, a diferencia de su predecesores, que usaban un formato binario. Un desarrollo de aplicaciones más rápido, ya que integra directamente ASP.NET y la .NET Framework, lo que proporciona una gran variedad de lenguajes al desarollador, tales como Visual Basic o C#. Una mayor seguridad. IIS 6.0 es mucho más seguro que sus predecesores, con nuevas caracterı́sticas diseñadas para incrementar la seguridad del sistema. IIS además viene desactivado por defecto en Windows 2003, por lo que no ocurrirá como antes, que se podı́an dejar activados servicios y que éste hecho pasara inadvertido. 1.2.2. Microsoft Sql Server 2000 Microsoft SQL Server 2000 es el gestor de bases de datos relacional de Microsoft, y está diseñado con el objetivo de ser el más sencillo de desplegar y mantener. Permite la integración directa con las aplicaciones de Microsoft Office y soporta el lenguaje de marcado XML nativamente. En el desarrollo de la aplicación utilizaremos una versión reducida del mismo, denominada MSDE Microsoft SQL Server 2000 Desktop Engine, que es funcionalmente equivalente a la versión Standard del servidor, pero reducida para permitir su uso durante el desarrollo de aplicaciones o en pequeñas aplicaciones de escritorio que no necesitan de un gran servidor por detrás, pero el uso del motor JET de Access es insuficiente. 15 Presentación y Objetivos 1.2.3. NHibernate NHibernte [19] es un sistema de persistencia de objetos basado en .NET, convertido del sistema Hibernate para Java. Permite el desarrollo de clases persistentes usando toda la potencia del diseño orientado a objetos, incluyendo asociaciones, herencia, polimorfismo, composición, y toda la infraestructura de colecciones de .NET (y más). Incluye un lenguaje de consulta similar a SQL, el HQL, diseñado como una extensión orientada a objetos del mismo, que porporciona un puente entre los mundos relacional y orientado a objetos. HQL permite realizar consultas basándose en las clases y sus atributos en lugar de tablas y campos. NHibernate está liberado con una licencia LGPL. Este proyecto fue diseñado para la versión 0.7 de NHibernate, aunque posteriormente ha aparecido la versión 0.8.3. La relación entre las clases y las tablas se establece en un archivo XML y es totalmente ajena a las clases del negocio. Esto es muy importante en este proyecto, ya que se ha elaborado una biblioteca que recoge parte del funcionamiento de las Cortes de Castilla y León y puede ser reutilizada en otros trabajos, sin necesidad de tener en cuenta si se requiere que sean persistentes o cómo se persisten. 1.2.4. .NET .NET es la estrategia de Microsoft para entrar en el mundo de los servicios Web. Integrada en todos sus nuevos productos, la plataforma .NET permite el rápido desarrollo, despliegue y mantenimiento de aplicaciones que permitan a las empresas integrar sus sistemas de una manera rápida y sencilla para conseguir el objetivo del acceso a la información en cualquier momento, en cualquier lugar y en cualquier dispositivo. Los servicios web desarrollados en .NET están basados en estándares oficiales del W3C, como son XML y SOAP, lo que permite la integración de aplicaciones que no estén desarrolladas usando soluciones de Microsoft, proporcionando verdadera interoperabilidad. 1.2.5. log4net La biblioteca log4net [6] es una herramienta diseñada para permitir al sistema producir bitácoras de funcionamiento en una amplia variedad de destinos. Es una conversión de la bilbioteca log4j de Java a .NET. log4net forma parte del proyecto Apache Logging Services [7] destinado a proporcionar servicios de bitácoras para el depurado y auditorı́a de aplicaciones de manera independiente al lenguaje de programación. log4net está liberado con licencia Apache 2.0. 1.2.6. NUnit NUnit [1] es una biblioteca que permite la elaboración de forma sencilla de baterı́as de test para programas realizados en .NET, basada en la biblioteca jUnit de Java. Se ha utilizado en la elaboración de baterı́as de pruebas. En el cliente no se ha realizado ninguna prueba con NUnit ya que no está disponible para la versión para PocketPC de .NET. 16 Capı́tulo 2 Análisis del sistema Análisis del sistema 2.1. Requisitos La fase de elicitación de requisitos se llevó a cabo en octubre y noviembre de 2004 con una serie de entrevistas con José Manuel Rodrı́guez Rodrı́guez, Director de Informática de las Cortes de Castilla y León. De los datos obtenidos en dichas entrevistas y de un documento interno de las Cortes con la propuesta inicial de la creación del sistema se han identificado los siguientes requisitos, validados por el usuario. 2.1.1. Requisitos funcionales rf.1 Las agendas modelo las definirá el administrador asignando los caracteres (obligatorio, opcional, prohibido) de los eventos del calendario. rf.2 El contenido de cada agenda vendrá determinado por dos tipos de informaciones, definidos en la agenda modelo. Eventos obligatorios: las determina el administrador del sistema en base al tipo de usuario y su rol en las Cortes. Eventos opcionales: el administrador determinará, siguiendo los mismos criterios que en el apartado anterior, un conjunto de informaciones a las que el usuario podrá tener acceso de manera opcional. rf.3 Las agendas serán generadas bajo demanda del usuario, según el tipo de usuario que tenga asignado y las vistas que pertenezcan al tipo. Dicha generación podrá ser: Incremental: contiene los datos nuevos o no actualizados de la agenda. Completa: si se desea recibir una copia desde cero de la agenda (semanal), bien porque se ha perdido o porque no se tiene. rf.4 La información a incluir en cada agenda concreta vendrá determinada por el fichero de perfil de cada usuario. rf.5 Las agendas se generaran explı́citamente con los datos introducidos por el Funcionario responsable a la orden del Administrador. rf.6 Se proporcionará a los usuarios un medio para poder mantener su perfil de información. rf.7 Los tipos de usuarios son: Procuradores. Empleados CCyL. Profesionales. Universitarios. Medios de Comunicación. Ciudadanos en general. rf.8 Al inscribirse un usuario se le asignará un tipo de usuario, su identificador (email), palabra de paso y el perfil de usuarios al que pertenece. 18 2.1 Requisitos rf.9 El perfil asignado a cada tipo de usuario es propio del mismo y no tiene por qué estar accesible a los tipos de usuarios superiores. rf.10 Los usuarios sólo podrán acceder a los eventos permitidos en su perfil. rf.11 Todos los usuarios caducan al final de la legislatura. rf.12 El Administrador y Funcionarios responsables pueden recibir todos los eventos, su perfil es el calendario universal. rf.13 Cada usuario individual podrá configurar qué fragmentos de la información opcional recibir y quedará almacenado en su agenda. La motivación para este requisito es que haya cierto tipo de eventos que sean de obligada recepción, como convocatorias de reuniones, para que el usuario no pueda escaquearse. rf.14 Una vez identificado y conectado se dispondrán los medios para la recepción de la agenda. rf.15 Terminada la transferencia de la agenda, la conexión se cerrará automáticamente. rf.16 Una vez terminada la conexión, la agenda importada actualizará las bases de datos en el usuario y se crearán los medios para visualizar la actividad diaria o las relaciones históricas que ası́ se determinen. rf.17 Siempre se dará al usuario la opción de bajarse el histórico de agenda para recuperar o actualizar los datos en el usuario. Esta conexión será especı́fica a tal efecto. 2.1.2. Requisitos no funcionales rn.1 Los usuarios se identifican en el sistema por su dirección de correo electrónico y una palabra de acceso que ellos mismos elijan. rn.2 El administrador será quien definirá los perfiles y los eventos a los que permiten acceso. rn.3 El sistema servidor guardará registro de las conexiones, descargas realizadas e incidencias en estos procesos para cada usuario. rn.4 La comunicación se realizará a través de Internet. La transmisión de información sensible ha de ser encriptada mediante algún algoritmo seguro. rn.5 El entorno de programación será alguno de los proporcionados por Microsoft. rn.6 La gestión de los datos se realizará con un servidor Sql Server. rn.7 El sistema debe ser compatible con un abanico lo más amplio posible de clientes, no teniendo por qué ser exclusivamente de la órbita Microsoft. 2.1.3. Escenarios Actualización de Base de Datos A lo largo de la semana la base de datos con la información de actividad parlamentaria es actualizada y mantenida mediante los procesos e interfaces definidos a tal propósito. El objetivo de este proyecto no es definir dicho sistema de mantenimiento de la base de datos de información, por lo que no se tratará en profundidad. 19 Análisis del sistema Definición de opciones de usuario Cada usuario, utilizando un cliente con funcionalidad para ello, puede alterar las opciones de su perfil que desea recibir. Una vez ha decidido qué informaciones opcionales incorporará en su agenda, el servidor almacena su elección y se hace efectiva en ese momento. Generación de las agendas Cada agenda, compuesta por el conjunto de eventos parlamentarios y sus atributos, es generada por extracción de la base de datos, empaquetado y conversión de los mismos con formato XML. Los datos de la agenda (en XML), son puestos a disposición de los potenciales usuarios. Recepción e integración de agendas Se conectan e identifican los usuarios y su taxonomı́a. Se envı́a una notificación de la ultima actualización realizada para comprobar las necesarias actualizaciones. Si es necesario actualizar, el servidor envı́a los datos nuevos. Una vez recibidos los datos de la agenda (en formato XML) el cliente del usuario integrará los mismos en los medios y formas establecidos por su parte. Consulta de los datos Integrados en el sistema cliente con los medios dispuestos a tal propósito. Este proyecto no entra tampoco en detalles sobre todos los posibles clientes, pues pueden tener objetivos muy especı́ficos. Como ejemplo de uno de ellos, se ha elaborado un cliente para la plataforma .NET Compact Framework de Microsoft. 2.2. 2.2.1. Modelo de Casos de Uso Actores Administrador: Usuario con permisos especiales para modificar perfiles, cuentas de usuario y contenidos de la agenda. Gestor: Usuario con permiso de modificación de contenidos de la agenda. Usuario: Usuario normal, que consulta la agenda, generada basándose en su perfil. SGBD: Sistema de base de datos de las Cortes de Castilla y León con los datos de la actividad parlamentaria. 2.2.2. Casos de Uso Iniciar Sesión Este caso de uso trata la validación de los usuarios que se conectan al sistema. Se inicia siempre que un usuario se conecta al mismo para la realización de cualquier operación. La secuencia concreta del caso de uso se puede ver en la Tabla 2.2.4 o el diagrama de secuencia de la Figura 2.7. 20 2.2 Modelo de Casos de Uso Modificar Perfiles El usuario administrador debe crear perfiles a los que se ajusten los usuarios, también mantenerlos y eliminarlos. El sistema le presentará una lista de los perfiles ya existentes por si quiere borrarlos o eliminarlos. También puede elegir crear un nuevo perfil, en cuyo caso se le presentarán los eventos que pueden pertenecer a cada perfil, y seleccionará los que desee, indicando su carácter (opcional, obligatorio. . . ). Definir Opciones Este caso de uso ilustra la modificación por parte del usuario de su perfil de agenda, seleccionando las informaciones opcionales que desea recibir. El sistema presenta al usuario los eventos opcionales a los que puede tener acceso. Una vez que el usuario ha seleccionado los que desea, el sistema guarda sus preferencias y las recuerda para las futuras agendas. Puede verse más detalladamente en la Tabla 2.2.4 o el diagrama de la Figura 2.8. Obtener Agenda Se trata de un caso de uso abstracto, base para los dos casos de uso de generación de agenda, el incremental y el completo. El sistema obtiene los eventos disponibles según el criterio del generador, el perfil del usuario y sus opciones. Cuenta con dos métodos de generación, pero se podrı́an incluir más, como por ejemplo una generación semanal, o mensual. También podrı́a incluirse una generación estática en paquete, para evitar sobrecargar el servidor con transacciones innecesarias si se repiten mucho. Obtener Agenda Completa Muestra la generación de una agenda completa, partiendo de cero, según el perfil y las opciones definidas para el usuario. La generación completa es costosa, ya que debe inspeccionar un conjunto muy grande de eventos y enviarlos a través de la red. Para más detalles puede ver la Tabla 2.2.4 o el diagrama de secuencia en la Figura 2.9. Obtener Agenda Incremental Este caso de uso muestra la generación de una actualización de una agenda semanal a partir de una fecha, según el perfil del usuario. Es el método recomendado de acceso al sistema para obtener una agenda. Permite acceder a históricos desde una determinada fecha, u obtener la agenda en tiempo futuro, cosa que la completa no proporciona. Modificar Usuarios El administrador puede añadir un nuevo usuario o eliminar y modificar los datos de un usuario ya existente. Se le presentarán las opciones que cuenta un usuario, ası́ como su perfil y los eventos a los que puede acceder. Una vez realizados los cambios, el sistema guardará el usuario. Modificar Eventos El funcionario gestor de la información del calendario puede agregar nuevos eventos en la base de datos de actividad parlamentaria. También puede modificar los ya existentes o 21 Análisis del sistema eliminarlos. Se le presentarán los datos de un evento que elija y los podrá modificar. Una vez modificados se guardarán los cambios en la base de datos. 2.2.3. Diagrama de Casos de Uso En la figura 2.1 se puede consultar el diagrama de casos de uso del sistema. 22 Figura 2.1: Diagrama de casos de uso del sistema 2.2 Modelo de Casos de Uso 23 Análisis del sistema 2.2.4. Descripción de Casos de Uso Caso de Uso: Iniciar Sesión Actores principales Usuario. Actores secundarios SGBD. Iniciar Sesión ESCENARIO PRINCIPAL Usuario Elige Iniciar Sesión Sistema Solicita el nombre de usuario y contraseña Introduce el identificador y la contraseña Comprueba la contraseña suministrada Guarda en el registro de actividades la conexión, indicando el usuario conectado y el lugar desde el que se conecta La sesión queda establecida ESCENARIO ALTERNATIVO 1: Identificación errónea Usuario Notifica el Decide si vuelve a intentarlo Guarda en La sesión no se establece ESCENARIO ALTERNATIVO 2: Error en el servidor Usuario Notifica el Guarda en La sesión no se establece 24 Sistema error el registro el intento de conexión Sistema error el registro el error 2.2 Modelo de Casos de Uso Figura 2.2: Prototipo de interfaz para Iniciar Sesión 25 Análisis del sistema Caso de Uso: Definir Opciones Actores principales Usuario. Actores secundarios SGBD. Definir Opciones ESCENARIO PRINCIPAL Usuario Elige Definir Opcioens Sistema Obtiene el perfil del usuario. Obtiene los eventos permitidos por el perfil. Muestra los eventos. Selecciona los eventos que quiere recibir. Modifica el perfil del usuario: Los eventos opcionales se añaden si están activados. Almacena el nuevo conjunto de opciones del usuario. Guarda en el registro información de la transacción realizada. El perfil del usuario queda modificado ESCENARIO ALTERNATIVO 1: Error en el servidor Usuario Sistema Notifica el error Guarda en el registro el error Las opciones no son salvadas 26 2.2 Modelo de Casos de Uso Figura 2.3: Prototipo de interfaz de Definir Opciones 27 Análisis del sistema Caso de Uso: Obtener Agenda Completa Actores principales Usuario. Actores secundarios SGBD. Obtener Agenda Completa ESCENARIO PRINCIPAL Usuario Elige Generar Agenda Completa Sistema Obtiene el perfil del usuario. Obtiene los eventos permitidos por el perfil de la base de datos. Para cada evento: si el evento es obligatorio o es opcional y está seleccionado, agregarlo a la agenda. Guarda en el registro información de la transacción realizada. Retorna la agenda. El usuario ha recibido la agenda y su sistema cliente la integra y muestra de la manera que crea sea conveniente. ESCENARIO ALTERNATIVO 1: Error en el servidor Usuario Sistema Notifica el error Guarda en el registro el error La agenda no es generada 28 2.2 Modelo de Casos de Uso Figura 2.4: Prototipo de interfaz para Obtener Agenda Completa 29 Análisis del sistema 2.3. Modelo de dominio A partir del estudio de los requisitos y de los casos de uso se han identificado las siguientes clases de análisis correspondientes al modelo del dominio. Usuario: representa a un usuario del sistema. Los usuarios tienen asignado un perfil que les da el derecho de acceso sobre unos ciertos eventos mientras que les restringe el acceso a otros. Agenda: se trata de una agregación concreta de eventos, recopilada para un usuario según su perfil y las opciones que para él tenga definidas. Es el objeto que se devuelve al usuario. Perfil: representa un tipo de usuario. Define un conjunto de eventos a los que un usuario puede acceder, ası́ como el carácter (opcional, obligatorio, prohibido) de los mismos. Evento: es el eje central del sistema. Cada evento contiene información sobre una actividad del mundo parlamentario o extraparlamentario. Un evento puede ser de tres subtipos: Eventos Parlamentarios: una actividad directamente relacionada con las sesiones de actividad de un órgano de las Cortes. Un evento parlamentario contiene una agregación de Expedientes que conforman su Orden del Dı́a de la Sesión. Eventos Institucionales: eventos no relacionados directamente con la actividad de sesiones de los órganos parlamentarios, pero sı́ que están relacionados con la polı́tica. Ejemplos de eventos institucionales pueden ser inauguraciones, visitas de personalidades, congresos y convenciones, etc. Plazo: representan vencimientos de plazos en la actividad de las Cortes, como los de la tramitación de expedientes, aunque no tienen por qué ser únicamente los relacionados con la actividad parlamentaria. Órgano: representa agrupaciones de procuradores con un fin especı́fico. Cada procurador ocupa un cargo en el órgano, que está representado por la clase asociación Cargo. Los cargos tienen un trato, aparte del que pueda tener el propio procurador. 30 2.3 Modelo de dominio Figura 2.5: Clases del modelo del dominio 31 Análisis del sistema 2.4. Modelo de análisis Siguiendo la propuesta de Jacobson [10], se han identificado las clases boundary y control que intervendrı́an en los casos de uso detallados anteriormente. Figura 2.6: Clases del modelo de análisis Una vez identificadas las clases y detallados los casos de uso, podemos especificar finalmente la secuencia de peticiones entre las clases del análisis en cada uno de los casos de uso detallados, lo que además nos permite indentificar los métodos de que dispondrá cada una de ellas. Dichas interacciones están reflejadas en los siguientes diagramas de secuencia. 32 2.4 Modelo de análisis Figura 2.7: Diagrama de secuencia de Iniciar Sesión 33 Análisis del sistema Figura 2.8: Diagrama de secuencia de Definir Opciones 34 Figura 2.9: Diagrama de secuencia de Obtener Agenda Completa 2.4 Modelo de análisis 35 2.5 Diagrama de clases de análisis 2.5. Diagrama de clases de análisis En la figura 2.9 se refleja el resultado final de las clases de análisis, con sus métodos, atributos y relaciones. La clase boundary y la clase control no están reflejadas en el diagrama debido al reducido espacio de que se dispone. 37 Análisis del sistema 38 2.5 Diagrama de clases de análisis 39 Capı́tulo 3 Diseño del sistema Diseño del sistema 3.1. Arquitectura del sistema Puesto que el sistema está destinado a funcionar en un entorno de Microsoft, el diseño va a seguir los patrones Enterprise Patterns de Microsoft [13], en especial los dedicados a .NET. En su conjunto el sistema está estructurado según el patrón de capas [11], en concreto según el patrón aplicación en tres capas orientada a servicios [12]. Dichas capas son: presentación, aplicación y persistencia. Figura 3.1: Arquitectura de 3 capas y 3 niveles La capa más externa consiste en la lógica de presentación de la información. Como uno de los objetivos del proyecto es que se permita una gran variedad de presentaciones y clientes diferentes, se especificará únicamente de manera general y se desarrollará un ejemplo: un cliente para PocketPC. La capa intermedia es la capa de la lógica de la aplicación. Engloba las entidades identificadas en análisis que estructuran la información de la base de datos de las CCyL junto con las cuentas y agendas de los usuarios del sistema. El comportamiento de las dos capas combinará el patrón MVC pasivo [18] con Gateways de Servicio [16] e Interfaces de Servicio [17], implementados como Servicios Web XML de ASP.NET. En los requisitos del programa, se especificaba que cada evento serı́a incluido en un perfil con un carácter. Puesto que eso no es muy operativo, ya que habrı́a que indicar el caracter de cada evento en cada uno de los perfiles y cada usuario al elegir las opciones recibirı́a una lista excesivamente extensa, una para cada evento, se ha optado por reconcebir dicho requisito en forma de “Filtros”. Al ser recopilados, los eventos son sometidos a cada uno de los filtros que se han establecido en el perfil. Los filtros están definidos de forma extensible, lo que permite la creación de nuevos filtros con simplemente definir nuevas clases que implementen la interfaz IFiltro. La capa más interna es la capa de datos o persistencia. Es la encargada de acceder a la 42 3.2 Diseño de los subsistemas base de datos de las CCyL para recuperar la información de la agenda y las cuentas de los usuarios. Esta capa emplea la funcionalidad de ADO.NET, aunque oculta tras el framework de persistencia NHibernate [19]. 3.1.1. Gestión de persistencia La persistencia en el sistema va a estar soportada sobre un servidor Microsoft SQL Server. Debido a problemas detectados en el diseño de la base de datos de la base de datos parlamentaria de las Cortes de Castilla y León, se ha elaborado un nuevo diseño de base de datos, que puede servir de base para nuevos proyectos. El diagrama de esta base de datos puede verse en la figura 3.2. Las clases persistentes van a utilizar el framework NHibernate [19], versión en .NET de Hibernate para Java. Aquéllas que se desee que sean persistentes han de contar con un archivo de mapeado en xml con la base de datos. Los nuevos objetos se escriben en la base de datos a través del interfaz ISession, cuya implementación actual utiliza el mecanismo de reflexión (introspección) de .NET para extraer los campos de la clase. La utilización de NHibernate permite separar completamente las clases de negocio persistentes de lo que es su almacenamiento y recuperación en una base de datos relacional. La biblioteca CalCCyL no contiene ni una sóla referencia a NHibernate. Es el subsistema que necesita que dichas clases sean persistentes (AcpSvc) el que debe proporcional a NHibernate la descripción de la correspondencia objeto-relacional de las mismas. 3.1.2. Aspectos de seguridad Para proteger la privacidad de la agenda de los parlamentarios se hace necesario establecer un sistema para la identificación de los usuarios, ası́ como para la seguridad de sus comunicaciones. El primer objetivo ha de cumplirse, según los requisitos, mediante una dirección de correo asociada a un password configurable por el usuario. Dado que los servicios web son inherentemente sin estado 1 , el concepto de sesión se desecha y todas las transacciones del sistema deberán proporcionar el nombre de usuario y la contraseña, y ser independientes unas de otras. La seguridad en las comunicaciones se garantiza utilizando como medio de transporte de SOAP el protocolo HTTPS, en lugar de HTTP. Esto se consigue simplemente cambiando una opción en IIS e instalando un certificado de seguridad que autentifique al servidor. 3.2. Diseño de los subsistemas Partiendo del diseño de la arquitectura expuesto en la sección anterior, se han establecido una serie de subsistemas y componentes que puede verse en la Figura 3.3. Siguiendo a su vez el patrón de despliegue en tres niveles, los componentes de los subsistemas se han repartido de la forma que puede verse en la Figura 3.4. En los siguientes apartados expondremos una visión detallada de cada uno de los subsistemas. 1 Esto no es totalmente cierto, los servicios web permiten mantener sesiones de la misma manera que un servidor web, pero no todos los clientes SOAP lo permiten, por lo que la segunda opción es más universal. 43 Diseño del sistema Figura 3.2: Esquema de la estructura de la base de datos 44 3.2 Diseño de los subsistemas Figura 3.3: Diagrama de subsistemas y componentes 45 Diseño del sistema Figura 3.4: Diagrama de despliegue 46 3.2 Diseño de los subsistemas 3.2.1. Casos de uso de diseño Definir Opciones El sistema obtiene los filtros opcionales pertenecientes al perfil de usuario, presentando su estado actual (activado/desactivado). El usuario selecciona los que quiere aplicar en la generación de la agenda, y los guarda y los recuerda para la generación de futuras agendas. Puede verse más detalladamente en la Tabla 3.1. Definir Opciones ESCENARIO PRINCIPAL Usuario Pulsa el botón Definir Opciones. Proporciona su nombre de usuario y constraseña. Sistema Inicia una sesión NHibernate. Busca el usuario que concuerda con el nombre de usuario. Comprueba que el password es correcto. Obtiene el perfil del usuario. Obtiene los filtros del perfil. Para cada filtro: 1. Comprueba si es opcional. 2. Si es opcional consulta si ya está definido un estado por el usuario. 3. Si está definido se usa su opción, si no, se asume que está desactivado por defecto. Devuelve los filtros al usuario Selecciona los filtros que quiere aplicar de una lista de selección Pulsa Guardar Recibe las opciones del usuario. Se asocian las nuevas opciones al usuario, sustituyendo en su caso las anteriores. NHibernate almacena el nuevo conjunto de opciones del usuario. log4net guarda en el registro información de la transacción realizada. El perfil del usuario queda modificado Tabla 3.1: Caso de uso Definir Opciones 47 Diseño del sistema Generar Agenda El sistema obtiene el perfil del usuario y obtiene todos los eventos posibles. Todos los eventos son pasados por los filtros que tiene el usuario en su perfil. Los eventos supervivientes son agregados a la agenda. El usuario recibe la agenda y realiza con ella las operaciones que desee. Para una visión más detallada, consultar la Tabla 3.2. Generar Agenda ESCENARIO PRINCIPAL Usuario Sistema Pulsa el botón Generar Agenda. Proporciona su nombre de usuario y constraseña. Inicia una sesión NHibernate. Busca el usuario que concuerda con el nombre de usuario. Comprueba que el password es correcto. Solicita a NHibernate todos los eventos. Obtiene el perfil del usuario. Obtiene los filtros del perfil. Para cada evento y filtro: 1. Comprueba si el filtro es opcional. 2. Si es opcional consulta si ya está definido su estado por el usuario. 3. Si está definido se usa su opción, si no, se asume que está desactivado por defecto. 4. Se aplica el filtro al evento. Devuelve los eventos al usuario. Se cierra la sesión de NHibernate. log4net guarda en el registro información de la transacción realizada. El usuario tiene una agenda completa. Tabla 3.2: Caso de uso Definir Opciones 3.2.2. Subsistema Servidor El subsistema servidor está dividido en dos paquetes que posteriormente van a ser librerı́as. Por una parte está CalCCyL, con las clases relacionadas exclusivamente con el calendario de las Cortes de Castilla y León, y por otra parte AcpSvc, que es propiamente dicho el Servicio Web de Agenda. El subsistema CalCCyL se ha diseñado como una librerı́a aparte para que pueda ser reutilizado en otros trabajos relacionados con las Cortes. Una consecuencia de este hecho es que el componente AcpSvc contiene un paquete con una réplica de todas las clases del paquete CalCCyL, con una serie de restricciones para que éstas puedan ser 48 3.2 Diseño de los subsistemas enviadas a través de SOAP. En el diseño de CalCCyL no se va a entrar, ya que es básicamente una correspondencia 1:1 con el análisis, en cambio el paquete AcpSvc sı́ que sufre modificaciones debido a la introducción del mecanismo de filtros. Figura 3.5: División interna del subsistema servidor 3.2.3. Subsistema Servidor::AcpSvc El subsistema AcpSvc contiene toda la miga del proyecto. Se han establecido las clases necesarias para la existencia de filtros, y la generación de agendas. AcpSvc es la fachada [8] de todo el sistema servidor, la aplicación concreta de este patrón de diseño puede verse en la Figura 3.6. A través de la interfaz de interfaz AcpSvc se establecen las operaciones soportadas por todo el sistema de cara al usuario. Extiende la clase WebService, lo que lo convierte en un Servicio Web SOAP para su uso en IIS. Esta clase desempeña el rol de Service Interface en el patrón homónimo de Microsoft [17] que podı́a verse en el patrón de aplicación en capas. Los clientes que deseen acceder a su funcionalidad deberán crear un Service Gateway (objeto proxy) que realice las llamadas SOAP apropiadas. Los métodos soportados remotamente son: • ObtenerOpciones: devuelve el conjunto de todas las opciones que el usuario tiene definidas o puede definir. • EstablecerOpciones: establece los filtros opcionales que el usuario desea que se apliquen. 49 Diseño del sistema • GenerarAgendaCompleta y GenerarAgendaIncremental: realizan la generación de la agenda para el usuario que lo invoca. • InfoExpediente, InfoOrgano, InfoGrupo, InfoProcurador: debido a que las clases tienen una gran cantidad de información, y contienen referencias circulares no permitidas en la implementación de SOAP de Microsoft, las llamadas que devuelven un objeto asociado a otro de los 4 tipos anteriores, contienen una información resumida que se puede ampliar llamando a estos métodos. Figura 3.6: Patrón fachada en el subsistema servidor IGenerador define el interfaz que deben soportar las clases que generan las agendas. Este interfaz cumple el rol Estrategia en el patrón GoF del mismo nombre [8]. Las implementaciones concretas de éste determinan cómo se genera la agenda. En la actualidad hay dos especificados, pero no deberı́a ser dificil definir alguno más, como por ejemplo generadores semanales, mensuales, a X dı́as vista, etc. Para ver cómo está aplicado el patrón de diseño puede consultar la Figura 3.7 Filtros Filtros es el paquete en el que se especifican los filtros existentes en el sistema. Al igual que los generadores, los filtros también se han concebido según el patrón estrategia, definiendo 50 3.2 Diseño de los subsistemas una interfaz, IFiltro, e implementándola en dos clases: FiltroProcurador, para obtener sólo eventos relacionados con un procurador concreto, y FiltroClase, para purgar todos los objetos del tipo especificado por el filtro. La realización del patrón puede verse en la Figura 3.8. Remoto El paquete Remoto contiene una réplica de las clases de CalCCyL, pero con la peculiaridad de que son capaces de filtrarse si se las proporciona un objeto de tipo filtro. Esto permite que si una clase posee asociaciones, la propia clase sea la que aplique el filtro también a sus relaciones y de esta forma, los filtros puedan afectar a todo el árbol de información sin que los generadores tengan que preocuparse más que por los Eventos y no de la información que contienen. El hecho de que haya especializaciones de algunas de las clases se debe a que SOAP no admite referencias circulares, y por tanto, cuando se elabora la agenda, se debe eliminar las ramas que pueden dar origen a las referencias circulares. Para que la información eliminada siga estando accesible se puede solicitar la versión extendida del objeto por separado. La clase evento implementa un método factorı́a [8] para crear nuevos eventos aptos para SOAP a partir de los eventos de CalCCyL. 51 Diseño del sistema Figura 3.7: Patrón Estrategia en el subsistema servidor Figura 3.8: Patrón estrategia para los filtros 52 3.2 Diseño de los subsistemas Figura 3.9: Diagrama de clases del paquete de filtros. 53 Diseño del sistema Figura 3.10: Diagrama de clases del paquete Remoto. 54 3.2 Diseño de los subsistemas Figura 3.11: Diagrama de clases resultante de AcpSvc 55 Diseño del sistema Figura 3.12: Diagrama de secuencia para la generación de agendas. 56 Capı́tulo 4 Cliente para PDA Cliente para PDA 4.1. Descripción general Con el objetivo de inlustrar una parte de las posibilidades del sistema, se ha elaborado un cliente sencillo para una PDA con PocketPC y la .NET Compact Framework, que consulta al servicio de ACP5 para obtener los eventos de un usuario. Dado que en una PDA no tiene sentido una funcionalidad muy amplia con complejos menús, se ha optado por que el cliente agregue los eventos definidos directamente en la agenda que viene integrada con Windows Mobile. El cliente proporciona una pantalla de configuración en la que se puede seleccionar la ubicación del servicio web, ası́ como alterar la fecha de la última actualización de la agenda. La configuración es guardada en un archivo XML para que al salir del mismo las opciones queden almacenadas. 4.2. Interfaz de usuario La interfaz de usuario ha sido construida con el diseñador de Visual Studio, creando dos especializaciones de controles ya existentes: un campo de texto que muestra automáticamente el SIP (Soft Input Panel) basado parcialmente en un artı́culo de MSDN [20], y un ListView al que se le ha añadido funcionalidad de MVC con una lista de opciones de filtros. En una PDA es vital que la interfaz de usuario sea limpia y clara. En este sentido, las lı́neas de diseño de interfaces proporcionadas por Microsoft [15], constituyen nuestro modelo a seguir. Nuestra aplicación comprende 4 formularios (ventanas) que pueden verse en la Figura 4.1: Entrada: ventana de entrada al sistema en la que se escribe el nombre de usuario y la contraseña. Configuración: formulario en el que se puede seleccionar la url del servicio web, la fecha de la última actualización, y la posibilidad de que antes de insertar un evento en la agenda, el usuario pueda ver qué información se va a agregar y pueda añadir detalles si lo desea. Perfil: presenta la lista de filtros opcionales asociados a su perfil en la que el usuario puede seleccionar cuáles aplicará. Sincronización: muestra simplemente una barra de progreso con el estado de la operación de sincronización. Los eventos recibidos son añadidos siguiendo el modelo POOM, que se verá más adelante, el cual incluye la posibilidad de mostrar la información de un evento en pantalla, usando la interfaz gráfica estándar del Pocket Outlook. Como puede verse en el formulario de opciones, existe una casilla que indica “mostrar eventos al añadirlos”, que hace que al recibir los eventos en la PDA, se vayan mostrando uno a uno para poder completar la información que se desee según se insertan en la agenda. Esto simlpifica y suaviza mucho la curva de aprendizaje del cliente, ya que utiliza estructuras ya conocidas por el usuario de la PDA, y no tiene que familiarizarse con un nuevo y complicado entorno, sino simplemente con cuatro formularios muy básicos de los cuales sólo utiliza uno con frecuencia. 58 4.2 Interfaz de usuario Entrada Configuración Selección de filtros Sincronización Figura 4.1: Formularios de la aplicación de PDA 59 Cliente para PDA 4.3. POOM: Pocket Outlook Object Model El modelo de objetos de Pocket Outlook [14] es un conjunto de objetos implementados con COM que permiten acceder directamente a las citas, tareas y contactos de la PDA. El hecho de estar implementados como objetos COM supone un reto a la hora de acceder a ellos desde la .NET Compact Framework, ya que, a diferencia de su hermana mayor, ésta no dispone de soporte de interoperabilidad con COM. De lo que sı́ dispone, es de la posibilidad de realizar invocación de plataforma o P/Invoke. Actualmente existen librerı́as de pago para realizar esta función, como son POOM.net [3] de HandyLabs y PocketOutlook [2] de InTheHand, pero no se han cosiderado debido a que en breve aparecerán tanto la .NET Compact Framework 2.0, que ya incluye soporte COM, como Windows Mobile 2005, que viene con su propia biblioteca en .NET para acceder a la funcionalidad de Pocket Outlook. Tomando como base un ejemplo con código en C++ de MSDN, se ha creado un adaptador de COM a C/C++ creado con Embedded Visual Tools 3.0. Dicha biblioteca en código nativo es después accedida desde el código administrado por la .NET-CF con p/invokes (funciones extern de C#). Dado que en el proyecto sólo son necesarias las citas y algunas clases extra, sólo se han implementado completamente las clases Appointment y Application, dejando sólo parcialmente implementadas algunas de las clases relacionadas y sin implementar otras tantas. En la Figura 4.2 puede verse un resumen de la parte implementada de POOM. El único objeto COM que hay que crear explı́citamente es Application, el resto de objetos son creados después por éste, aunque sigue siendo necesario liberar la memoria reservada por ellos cuando no se van a utilizar. Por ello los objetos implementan un destructor que libera el puntero al ser recolectados. Listado 4.1: Creación y destrucción de un objeto COM en .NETCF C: HRESULT I P O u t l o o k A p p _ C r e a t e ( IPOutlookApp ** pApp ) { return C o C r e a t e I n sta nce ( CLSID_Application , NULL , CLSCTX_INPROC_SERVER , IID_IPOutlookApp , reinterpret_cast < void ** >( pApp ) ) ; } ULONG P o c k e t O u t l o o k _ R e l e a s e C O M P t r ( IUnknown * p ) { return p - > Release () ; } C #: internal class PocketOutlook { public static void CheckHRESULT ( int hResult ) { if ( Failed ( hResult ) != 0) { throw new Exception () ; } } [ DllImport (" PocketOutlook . dll " , EntryPoint =" P o c k e t O u t l o o k _ I s F a i l u r e ") ] public extern static uint Failed ( int hResult ) ; [ DllImport (" PocketOutlook . dll " , EntryPoint =" P o c k e t O u t l o o k _ R e l e a s e C O M P t r ") ] public extern static uint ReleaseCOMPtr ( IntPtr p ) ; [...] } public class Application : IDisposable { private IntPtr m _ pIPOutlookApp ; [ DllImport (" PocketOutlook . dll " , EntryPoint =" I P O u t l o o k A p p _ C r e a t e ") ] private static extern int U n m a n a g e d C o n s t r u c t o r ( ref IntPtr rpApp ) ; 60 Figura 4.2: Sección implementada del modelo de objetos de Oulook 4.3 POOM: Pocket Outlook Object Model 61 Cliente para PDA public Application () { m _ p IP O u t l o ok A p p = new IntPtr (0) ; int hResult = U n m a n a g e d C o n s t r u c t o r ( ref m_pIP O ut l o o k A pp ) ; PocketOutlook . CheckHRESULT ( hResult ) ; } public void Dispose () { PocketOutlook . ReleaseCOMPtr ( m_pIPOutlookApp ) ; m _ p IP O u t l o ok A p p = new IntPtr (0) ; } ~ Application () { if ( m _p I P O u t lo o kApp . ToInt32 () != 0) { this . Dispose () ; } } [...] } Muchos de los parámetros que se han de pasar por referencia en el adaptador son en realidad variables de 64 bits, que debido a una limitación en la .NETCF que impide pasar o devolver valores de más de 32 bits, han de pasarse por referencia cuando en realidad son valores de retorno o parámetros por valor, generalmente de tipo DATE (un double). Listado 4.2: Proceso de adaptación de COM a .NETCF COM : HRESULT IAppointment :: put_Start ( DATE daStart ) ; HRESULT IAppointment :: get_Start ( DATE * daStart ) ; C: HRESULT I A p p o i n t m e n t _ p u t _ S t a r t ( IAppointment * thisPtr , DATE * st ) { return thisPtr - > put_Start (* st ) ; } HRESULT I A p p o i n t m e n t _ g e t _ S t a r t ( IAppointment * thisPtr , DATE * pst ) { return thisPtr - > get_Start ( pst ) ; } C #: [ DllImport (" PocketOutlook . dll " , EntryPoint =" I A p p o i n t m e n t _ g e t _ S t a r t ") ] private static extern int do_get_Start ( IntPtr self , ref double pvtStart ) ; [ DllImport (" PocketOutlook . dll " , EntryPoint =" I A p p o i n t m e n t _ p u t _ S t a r t ") ] private static extern int do_put_Start ( IntPtr self , ref double pvtStart ) ; public DateTime Start { set { Double vt = Application . D a t e T i m e T o V a r i a n t T i m e ( value ) ; PocketOutlook . CheckHRESULT ( do_put_Start ( m_pIItem , ref vt ) ) ; } get { Double vt = new Double () ; PocketOutlook . CheckHRESULT ( do_get_Start ( m_pIItem , ref vt ) ) ; return Application . V a r i a n t T i m e T o D a t e T i m e ( vt ) ; } } 4.4. Proxy del servicio y sistema de llamada Para poder acceder al servicio web de calendario, hay que elaborar una serie de clases que emplean la infraestructura de SOAP de .NET. Afortunadamente este proceso está automatizado por Visual Studio.NET y se generan automáticamente a partir del archivo WSDL del 62 4.4 Proxy del servicio y sistema de llamada servicio. La clase proxy se denomina AcpSvc, igual que la clase a la que representa, y dispone de métodos de invocación sı́ncrona y ası́ncrona. Tanto para la obtención de los perfiles como para la de la agenda, se realizan invocaciones ası́ncronas que permiten mostrar una barra de progreso y mantener un cierto grado de interacción del usuario en lugar de congelar la pantalla y no responder a los eventos del usuario. En el momento de la recepción de la confirmación y el resultado, se ha de proporcionar una función delegada que realice el trabajo. Para evitar problemas de bloqueos mutuos entre los hilos de invocación y de interfaz de usuario, la actualización se realiza mediante la llamada Invoke, que ordena al hilo de eventos de la interfaz ejecutar una función. Aquı́ se presenta otra limitación de la .NETCF, ya que en la versión completa de Invoke, además de la función se pueden especificar los parámetros, mientras que en la .NETCF sólo puede realizarse un Invoke a funciones de tipo EventHandler y sin parámetros, teniendo que dejar los parámetros de la función en variables globales de la clase para que el hilo actualizador pueda acceder a ellos. Listado 4.3: Alternativa al paso de parámetros en Invoke para .NETCF private void fr mAgenda_Load ( object sender , System . EventArgs e ) { [...] AcpSvc . AcpSvc svc = new AcpSvc . AcpSvc () ; [...] svc . B e g i n G e n e r a r A g e n d a I n c r e m e n t a l ( m_Config . Login , m_Config . Password , m_Config . UltimaActualizacion , new AsyncCallback ( m a n e j ad o r A s i n c r o no ) , svc ) ; } private void m a n e j a d or A s i n c r o n o ( IAsyncResult iar ) { [...] Agenda a = (( AcpSvc . AcpSvc ) iar . AsyncState ) . E n d G e n e r a r A g e n d a I n c r e m e n t a l ( iar ) ; laAgenda = a ; EventHandler m = new EventHandler ( recibidaA ge nda ) ; this . Invoke ( m ) ; [...] } /* Apa~ n o para el parámetro */ private Agenda laAgenda ; private void recibidaAgenda ( object sender , EventArgs e ) { [...] Agenda a = laAgenda ; [...] } 63 Capı́tulo 5 Documentación del Programador Documentación del Programador En el CD que se distribuye con el proyecto, además de los archivos con el código fuente de cliente y servidor, se incluyen dos archivos de documentación en formato CHM de windows obtenidos automáticamente a partir de los comentarios incluidos en el código. El proceso de generación ha sido muy sencillo gracias a la utilización del programa NDoc. Tras la compilación de las bibliotecas, se suministra a NDoc la localización de los archivos de dll y el xml generado a partir de los comentarios de documentación en el código, y mediante la aplicación de unas reglas de transformación, se llega al resultado final. NDoc no sólo permite crear documentaciones en formato CHM, sino también en HTML, XML o LATEX. El resultado final es una documentación con una presentación de alta calidad, igual que la usada por Microsoft. El único inconveniente es que NDoc no tiene soporte de internacionalización y el texto aparece en una mezcla de Inglés y Español. Figura 5.1: Aspecto de la documentación generada por NDoc 66 Capı́tulo 6 Documentación de Administrador Documentación de Administrador 6.1. Requisitos Para poder instalar y ejecutar el sistema se necesita cumplir con los siguientes requisitos previos: Internet Information Services 5.1 o superior. .NET Framework 1.1 en el servidor. Un sistema de base de datos compatible con NHibernate (DB2, PostgreSQL, MySQL, Oracle, Sybase, SQL Server, Firebird). 6.2. Instalación Para iniciar la instalación del sistema ejecute el archivo setup.exe en el directorio Servidor del CD. Si no tuviera instalada la .NET Framework se le notificará en este momento, en ese caso proceda a descargar e instalar el entorno .NET de la web de Microsoft. Si todo va bien se le presentará la pantalla de la figura 6.1. Figura 6.1: Pantalla de bienvenida de la instalación Pulsando siguiente pasará a la pantalla de la figura 6.2. En ella puede seleccionar la dirección del directorio virtual de IIS en la que instalará el servicio. El servicio quedará accesible desde http:\\nombreservidor\direccion El campo de puerto selecciona el puerto TCP en el que el servicio permanecerá a la escucha. Puesto que el servicio web utiliza HTTP como transporte, por defecto está seleciconado el puerto 80. Al pulsar siguiente se pasa a una pantalla intermedia en la que se le informa de que el proceso de instalación va a comenzar (fig 6.3). Si pulsa siguiente de nuevo se iniciará el copiado de 68 6.2 Instalación Figura 6.2: Pantalla de selección de directorio y puerto los archivos en el servidor (fig 6.4). Una vez haya terminado el proceso se mostrará la pantalla de la figura 6.5, indicado que todo ha ido bien, y pulsando cerrar el proceso habrá terminado. Figura 6.3: Pantalla intermedia 69 Documentación de Administrador Figura 6.4: Pantalla de progreso de instalación Figura 6.5: Pantalla final 70 6.3 Configuración 6.3. Configuración La configuración del sistema se realiza mediante la edición del fichero Web.config, que se encontrará en el directorio en el que haya instalado el servicio. En dicho archivo se establecen las opciones generales del servicio web, las opciones particulares del sistema, y las opciones de NHibernate y log4net. Para configurar completamente el sistema además hay que proporcionar un arhivo de correspondencia entre la base de datos y los objetos del sistema de NHibernate. Para la configuración general del servicio web, consultar la documentación de Microsoft de configuración de servicios web en IIS. 6.3.1. Configuración de los parámetros El archivo Web.config es un archivo XML altamente flexible. Para esta sección utilizaremos los datos contenidos en las etiquetas configSections y appSettings. Dentro de configSections se establecen las secciones extras que contiene Web.config. Es obligatorio que aparezca una referencia a NHibernate, de la siguiente forma: < section name =" nhibernate " type =" System . Configuration . NameValueSectionHandler , System , Version =1.0.3300.0 , Culture = neutral , Public Key To ke n = b 7 7 a 5 c 5 6 1 9 3 4 e 0 8 9 "/ > Si se va a utilizar la capacidad de registro de actividades que ofrece log4net, también se debe incluir la siguiente lı́nea: < section name =" log4net " type =" log4net . Config . Lo g 4N et C on fi g ur at i on S e c t i o n H a n d l e r , log4net "/ > En appSettings sólo es necesaria al inclusión de una lı́nea, que establece la ruta absoluta del archivo que contiene la definición de la correspondencia de NHibernate con la base de datos. < appSettings > < add key =" ArchivoMapa " value =" C :\\ Inetpub \\ wwwroot \\ AcpSvc \\ calccyl . hbm . xml "/ > </ appSettings > 6.3.2. Configuración de NHibernate Como los aspectos relacionados con la configuración de NHibernate son demasiado extensos para el alcance de este manual, es recomendable leer la documentación de NHibernate, accesible en su página [19]. A continuación se comentan las opciones existentes en el archivo de configuración de ejemplo incluido con la instalación. 1 2 3 4 5 6 < nhibernate > < add key =" hibernate . connection . provider " value =" NHibernate . Connection . D r i v e r C o n n e c t i o n P r o v i d e r "/ > < add key =" hibernate . connection . driver_class " value =" NHibernate . Driver . SqlClientDrive r "/ > < add key =" hibernate . dialect " value =" NHibernate . Dialect . M s S q l 2 0 0 0 D i a l e c t "/ > < add key =" hibernate . connection . c on ne c ti on _ s t r i n g " value =" server = SHINCHAN ; uid = acpsvc ; pwd = acp ; database = calccyl "/ > </ nhibernate > ln 2. Proveedor de conexión, en este caso, un driver. ln 3. Clase que contiene el driver: SqlClient para Sql Server. 71 Documentación de Administrador ln 4. Dialecto SQL del sistema de base de datos: MsSql 2000. Los dialectos disponibles se encuentran en la documentación de NHibernate. ln 5. Cadena de conexión al servidor. Depende del controlador usado. Correspondencia O-R La correspondencia objeto-relacional se ha de establecer en un archivo XML, que debe estar situado en la ruta indicada en la sección appSettings como se comentó anteriormente. La sintaxis y semántica de dicho archivo no se va a exponer en este manual, si se desea una visión en profundidad de los archivos de correspondencia de NHibernate debe consultar el manual de dicho paquete. A continuación se presenta un ejemplo comentado de la correspondencia de una clase contenida en el archivo HBM de ejemplo que se incluye con la instalación. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 < class name = " CalCCyL . Evento , CalCCyL " table = " Eventos " discriminator - value = " E " > < id name = " Id " type = " String " length = " 36 " unsaved - value = " 0 " > < generator class = " uuid . hex " > < param name = " format " >D </ param > </ generator > </ id > < discriminator column = " Tipo " type = " Char " / > < property name = " FechaCreacion " type = " DateTime " / > < property name = " FechaEvento " type = " DateTime " / > < property name = " Duracion " type = " Int32 " / > < subclass name = " CalCCyL . EventoInstitucional , CalCCyL " discriminator - value = " I " > < property name = " Descripcion " type = " String " / > < property name = " Lugar " type = " String " / > </ subclass > < subclass name = " CalCCyL . EventoParlamentario , CalCCyL " discriminator - value = " C " > < many - to - one name = " Organo " class = " CalCCyL . OrganoParlamentario , CalCCyL " / > < list name = " OrdenDelDia " table = " OrdenDiaEven t o s " > < key column = " Evento " / > < index column = " Orden " type = " Int32 " / > < many - to - many class = " CalCCyL . Expediente , CalCCyL " column = " Expediente " / > </ list > </ subclass > < subclass name = " CalCCyL . Plazo , CalCCyL " discriminator - value = " P " > < property name = " Breve " type = " String " / > < property name = " Descripcion " type = " String " / > </ subclass > </ class > ln 1. Indica el comienzo de la definición de una clase. name especifica el nombre completo, incluida la librerı́a en la que se encuentra. table tabla de la base de datos que contiene los datos de los objetos de la clase. discriminator-value valor del discriminador de subclase. Necesario si se especifica un esquema de tabla por jerarquı́a. ln 2. Indica la columna de la tabla que contendrá la clave primaria. name nombre del atributo de la clase (que es tambı́en el campo de la tabla). type tipo de datos del atributo de la clase. length longitud del campo. unsaved-value valor que contiene la clave un objeto que se crea en ejecución pero que aún no ha sido salvado por NHibernate. 72 6.3 Configuración ln 3. Generador de claves. En este caso se usa clave UUID en hexadecimal. ln 7. Columna que contiene el discriminador de las subclases de la jerarquı́a. ln 8. Propiedad de la clase que se ha de guardar. name nombre de la propiedad de la clase (también el nombre de la columna). type tipo de datos de la propiedad. ln 11. Comienzo de la definición de una subclase en el modo tabla por jerarquı́a. ln 16. Especificación de una relación 1-n (*-1 en UML). name nombre de la propiedad que nombra la relación. class nombre completo de la clase en el otro extremo de la asociación. ln 17. Comienzo de una relación de multiplicidad mayor que 1. En este caso se trata de una lista (relación ordenada). name nombre de la propiedad que nombra la relación. table tabla intermedia que contiene la relación. En una lista deberı́a ser RELACION(PK1, PK2, ORDEN). ln 18. columna que contiene la clave del lado n de la relación. ln 19. columan que indica la posición dentro de la lista de cada objeto en el otro lado de la relación. ln 20. indica que la relación es n-n, junto con el nombre de la clase y la columna que contiene la clave. Estructura de los objetos del dominio Para la elaboración del esquema y la correspondencia es necesario conocer las propiedades y relaciones de cada uno de los objetos del dominio. En el diagrama UML de la figura 6.6 se presentan dichas propiedades. Estructura de la base de datos En la figura 6.7 puede verse la estructura de la base de datos usada en las pruebas del sistema. Junto con el archivo de instalación, en el CD se encuentra un archivo de comandos SQL con la definición de la estructura de dicha base de datos. En ese mismo directorio puede encontrarse un archivo de base de datos de Microsoft Access con los datos usados durante las pruebas. 6.3.3. Configuración de log4net Para configurar log4net, debido a la gran variedad de sistemas de log con los que cuenta, lo mejor es leer la documentación de la página del proyecto [6]. Un detalle importante a tener en cuenta es que no se pueden usar los appenders de ficheros, ya que .NET en IIS no permite escribir ficheros. El fichero de configuración de ejemplo trae un appender de ejemplo sobre ADO.Net. El nombre del logger de ACP5 es “acpsvc”. 73 Documentación de Administrador Figura 6.6: Clases de objetos presentes en el sistema 74 Figura 6.7: Esquema de la estructura de la base de datos 6.3 Configuración 75 Capı́tulo 7 Documentación de Usuario Documentación de Usuario 7.1. Conozca su PDA Debido a la variedad de arquitecturas existentes en la actualidad de PDAs con Windows Mobile, antes de instalar el programa debe comprobar qué tipo de procesador lleva incorporada la suya. Para ello puntee en Inicio y seleccione Configuración. En la ventana que aparece a continuación, selecciones la etiqueta sistema en la parte inferior de la pantalla. En los iconos que aparecerán al hacer la selección, puntee sobre Acerca de. Si todo ha ido bien, en la siguiente pantalla podrá leer el tipo de procesador de su PocketPC. 7.2. Instalación de .NET Compact Framework .NET Compact Framework es un conjunto de componentes para su PocketPC necesario para que el programa de recepción de agendas pueda funcionar. Para instalar el componente ejecute el archivo NETCFSetup.msi que se distribuye con la aplicación. Si tiene su PocketPC conectado a su ordenador, en el momento que finalice la copia de los archivos, el sistema iniciará la instalación en la PDA. Para instalar la .NET Compact Framework en más PocketPC 78 7.3 Instalación de µCAPA puede ejecutar el archivo NETCFSetup.exe que se encontrará en la carpeta en la que la haya elegido instalar. 7.3. Instalación de µCAPA Para este proceso necesita conocer el procesador presente en su PDA, para ello siga las instrucciones del apartado 1. Una vez conozca su procesador, copie el archivo uCAPA PPC.procesador.CAB en su PDA; por ejemplo, si su PDA tiene un procesador ARM, copie uCAPA PPC.ARM.CAB. Cuando haya finalizado la copia, abra el Explorador de Archivos de su PocketPC y busque la carpeta en la que lo copió. El proceso de instalación se inicia punteando en el archivo CAB. 7.4. Uso diario Para iniciar la aplicación seleccione programas en el menú Inicio. Busque el icono que pone uCAPA y puntee sobre él, la aplicación arrancará y mostrará una pantalla de beinvenida. Figura 7.1: Pantalla de bienvenida 7.5. Configuración La primera vez que inicie el programa, éste le notificará que no ha sido posible encontrar el archivo de configuración y se usarán las opciones por defecto. Pulse OK. Ahora debemos configurar el programa para que pueda aceder al servicio de calendario de las Cortes de 79 Documentación de Usuario Figura 7.2: Pantalla de configuración del cliente Castilla y León. Pulse Menú en la parte inferior izquierda de la pantalla y seleccione Configurar. La ventana que se despliega se corresponde con la de la figura 7.5, y muestra las siguientes opciones disponibles: 1. Dirección del servicio: La dirección de internet en la que se encuentra el servicio. Tiene la misma apariencia que la de una página web, pero en su interior esconde algo mucho más poderoso. La dirección del servicio le debe haber sido suministrada por el administrador del sistema, sin una dirección válida el sistema no puede funcionar. 2. Fecha de última actualización: Fecha en la que se realizó la última actualización de la agenda por parte del cliente. Este parámetro no deberı́a ser alterado en principio, ya que es mantenido por el propio programa para las sincronizaciones de las agendas. Modifique esta opción únicamente si está realmente seguro de ello. 3. Mostrar eventos al añadirlos: El cliente permite que los datos sean verificados antes de ser integrados ne la agenda de la PDA. Ésto le permite añadir información complementaria a la suministrada por el servidor de contenido. La ventana que se muestra con los datos del evento es la propia de la PDA, si no está familiarizado con ella, es recomentable que consulte el manual de su PDA antes de activar esta opción. Cuando esté satisfecho con las opciones puntee OK en la parte superior de la pantalla. 7.5.1. Configuración de su perfil Todos los usuarios del sistema tienen asignado un perfil. Su perfil define qué tipo de usuario es usted y a qué eventos e informaciones puede tener acceso. Los perfiles están definidos como un conjunto de filtros, unos son obligatorios y otros opcionales. Para elegir 80 7.5 Configuración cuáles de los filtros opcionales aplicará el sistema cuando solicite la agenda, escriba su nombre de usuario y su contraseña y pulse Perfil en la ventana principal del programa. A continuación se abrirá una nueva ventana con los filtros que puede seleccionar. Haga click en las casillas de los eventos que desee activar o desactivar. Cuando esté satisfecho con los cambios realizados, pulse OK en la parte superior de la pantalla, se le dará la opción de guardar o descartar los cambios realizados. Figura 7.3: Ventana de selección de opciones 7.5.2. Sincronización de la agenda Para obtener los eventos de la vida parlamentaria, introduzca su nombre de usuario y contraseña en la ventana principal y pulse Sincronizar, se desplegará una nueva ventana en la que podrá seguir el progreso de actualización de su agenda. Cuando haya concluido, pulse Terminar. 81 Documentación de Usuario Figura 7.4: Ventana de progreso de sincronización 82 Capı́tulo 8 Conclusiones Conclusiones 8.1. Conclusiones del Proyecto La elaboración de un Proyecto de Fin de Carrera es una experiencia distinta a las prácticas realizadas para las asignaturas. El seguir una disciplina de trabajo ordenada y sistemática como es el Proceso Unificado [9] ha sido una experiencia totalmente diferente de la empleada en las demás prácticas, que se han basado prácticamente en la improvisación. Durante los dos primeros meses se llevó a cabo al fase de recogida y elicitación de requisitos. En esta fase se comprobó lo difı́cil que puede llegar a ser conseguir una descripción exacta, concisa y no cambiante de los deseos del cliente, cuando el sistema es nuevo en su entorno. Esto nos hace darnos cuenta de la importancia de la fase de entrevistas y recogida de requisitos, ası́ como de su dificultad. El llegar a la fase de implementación con un análisis y un diseño definidos (pero no inmóviles) fue una gran ayuda a la hora de programar con las ideas claras. Esto facilita no sólo la primera implementación, sino sucesivas revisiones, al tener un código más mantenible. No ha sido posible realizar ninguna baterı́a de pruebas de módulos con NUnit, ya que en el lado del servidor se depende de la base de datos y recrear su estructura en código es algo engorroso. En el lado del cliente en cambio sı́ que hay una parte en la que el uso de baterı́as de test hubiera sido beneficioso, el adaptador de POOM, pero puesto que NUnit no está preparado para funcionar sobre la .NETCF, no se pudieron realizar. Otra lección que se ha aprendido con este proyecto es la dificultad que conlleva el tratar de adaptar (o adaptarse a) sistemas heredados. En nuestro caso el sistema heredado en cuestión era la antigua base de datos de actividad parlamentaria, de la que originalmente el sistema deberı́a obtener la información. Tras constatar que la adaptación era casi imposible debido a que dicha base de datos era a su vez la adaptación superpuesta de otros sistemas legados anteriores, se optó, por iniciativa del propio cliente, por elaborar un nuevo diseño de base de datos. Los objetivos porpuestos para esta fase se han cumplido, y se han cumplido en el plazo de un curso, para satisfacción del cliente. Ahora comienza la fase de prueba del sistema en situaciones reales, donde se comprobarán los puntos débiles del sistema, que tendrán que ser rediseñados. 8.2. Conclusiones del Sistema Ya se ha comentado anteriormente que el modelo de desarrollo empleado en el proyecto ha sido UP. Desde el punto de vista del progreso de un proyecto en UP, podrı́a considerarse que nos encontramos al final de un ciclo, tras completar una fase de iteraciones de concepción, elaboración, construcción y transición. El resultado final es una versión mı́nima medianamente usable del sistema, pero a la que aún falta funcionalidad. Una parte de la tecnologı́a con la que se ha implementado este sistema será obsoleta en un periodo de tiempo relativamente corto. Tanto como Sql Server 2000 como el entorno de desarrollo Visual Studio 2003, aún considerados el estándar de producción, van a ser desplazados en no mucho tiempo por sus nuevas versiones (actualmente en beta y planeados para la segunda mitad de 2005). El entrono .NET usado es la versión 1.1, que simultáneamente a la aparición de Visual Studio 2005 será reemplazada por la 2.0. Esta nueva versión incluye nuevas posibilidades como tipos genéricos como los de Java 1.5. En el sistema de la PDA, también va a ocurrir un relevo tecnológico en breve. La .NET Compact Framework 1.1, usada actualmente, va a ser reemplazada por la versión 2.0, que 84 8.2 Conclusiones del Sistema incluye soporte para objetos COM, lo que permitirá el uso de POOM directamente, sin crear ningún adaptador. Aunque el soporte COM no estuviera presente, la nueva versión de Windows Mobile, la 2005, incluye su propio adaptador en código administrado para POOM. A la hora de codificar el adaptador para POOM ya se conocı́a la situación anterior. El haberlo implementado responde al hecho de que la .NETCF 1.1 es una tecnologı́a probada y estable, mientras que la 2.0 aún está en fase de pruebas y existe cierta incertidumbre sobre su fecha de liberación definitiva. Por otra parte, no todos los Pocket PC de los usuarios tienen por que ser de última generación e incorporar Windows Mobile 2005. Por su parte, NHibernate dejará de ser útil cuando aparezca Sql Server 2005, ya que éste incorpora su propio sistema de persistencia de objetos de .NET, denominado ObjectSpaces, aunque parece que esto llevará más tiempo, ya que las ultimas noticias indicaban que el proyecto habı́a sido fusionado con WinFS, el nuevo sistema de archivos que desarrolla Microsoft para Windows Longhorn. 8.2.1. Tareas para la próxima iteración La meta final del sistema es la contribución a la creación de una Oficina Móvil del Procurador, que permita a los procuradores realizar una buena parte de su trabajo fuera del entorno de las Cortes, desde sus oficinas y domicilios. Para alcanzar este objetivo aún queda camino por recorrer y el desarrollo en este sentido deberá progresar en próximas iteraciones. El sistema no cuenta actualmente con una interfaz de administración amigable, por lo que una de las metas de la próxima iteración podrı́a ser la elaboración de un interfaz de aministración que facilite las tareas que en la actualidad se han de realizar desde el propio gestor de base de datos. La información que generan las Cortes de Castilla y León es mucho más amplia que la reflejada en las clases del dominio actuales. En la vida parlamentaria intervienen personas que no desempeñan cargo alguno en las Cortes y se generan una serie de documentos que el sistema podrı́a poner a disposición de los usuarios. Un futuro desarrollo del sistema deberı́a tener en cuenta este aspecto, aparte de estabilizar las caracterı́sticas actuales del sistema. Los filtros y generadores también son mejorables en cuanto a su variedad. En este momento hay sólo dos filtros y dos generadores implementados, pero podrı́an implementarse muchos más, por ejemplo filtros que eliminen campos concretos de un clase según criterios numéricos, de texto, etc. o generadores que empaqueten agendas para el publico en general y los pongan a su disposición en una web. Incluso podrı́a permitirse que tanto filtros como generadores se crearan como plugins que fueran cargados automaticamente por el sistema, permitiendo que el administrador los cree sin tener en cuenta al código del resto del sistema. 85 Apéndice A Contenido del CD-ROM El CD-ROM incluido con la memoria contiene esta memoria en formato PDF, junto con los manuales de administrador y usuario (capı́tulos 6 y 7) de forma separada en formato A4. La estructura de directorios del CD-ROM es la siguiente: memoria: la memoria del proyecto en formato PDF servidor: archivos relacionados con la instalación del servidor y manual de administrador. Incluye un instalador para el servidor, un instalador de .NET y un archivo de comandos SQL para la estructura de la base de datos. • fuente: código fuente del servidor para Visual Studio .Net 2003 • mono: código fuente y binarios para ejecutar el servidor en Linux cliente: archvios relacionados con la instalación del cliente de PDA y manual de usuario. Incluye un instalador de la plataforma .NET para PDA y un instalador .cab para la arquitectura ARM. • fuente: código fuente del cliente extra: archivos extra relacionados con el proyecto Bibliografı́a [1] NUnit [en lı́nea, visitado 20/5/2005]. Disponible en: http://www.nunit.org. [2] PocketOutlook [en lı́nea, visitado 27/5/2005]. Disponible en: http://www.inthehand. com/PocketOutlook.aspx. [3] Poom .Net [en lı́nea, visitado 27/5/2005]. Disponible en: http://www.handylabs.com/ products/poomnet.aspx. [4] Reglamento de las Cortes de Castilla y León [en lı́nea]. Disponible en: http://www. ccyl.es/ccylparl/rp2regla.htm. [5] Sitio Web de las Cortes de Castilla y León [en lı́nea]. Disponible en: http://www.ccyl. es. [6] Apache Foundation. About log4net [en lı́nea, visitado 16/5/2005]. Disponible en: http: //logging.apache.org/log4net/. [7] Apache Foundation. Logging Services [en lı́nea, visitado 16/5/2005]. Disponible en: http://logging.apache.org. [8] E. Gamma, R. Helm, R. Johnson, and J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995. [9] J. Rumbaugh I. Jacobson, G. Booch. El Proceso Unificado de Desarrollo de Software. Addison-Wesley, 2000. [10] I. Jacobson. Object-Oriented Software Engineering. A Use Case Driver Approach. Addison-Wesley, 1992. [11] MSDN. Deployment Patterns: Layered Application [en lı́nea, visitado 20/5/2005]. Disponible en: http://msdn.microsoft.com/library/en-us/dnpatterns/html/ ArcLayeredApplication.asp. [12] MSDN. Deployment Patterns: Three-Layered Services Application [en lı́nea, visitado 20/5/2005]. Disponible en: http://msdn.microsoft.com/library/en-us/ dnpatterns/html/ArcThreeLayeredSvcsApp.asp. [13] MSDN. .NET Architecture Center: Microsoft Patterns [en lı́nea, visitado 20/5/2005]. Disponible en: http://msdn.microsoft.com/architecture/patterns/ default.aspx. BIBLIOGRAFÍA [14] MSDN. Pocket Outlook Object Model [en lı́nea, visitado 27/5/2005]. Disponible en: http://msdn.microsoft.com/library/en-us/guide_ppc/html/ppc_ conpocketoutlookobjectmodel.asp. [15] MSDN. Pocket PC User Interface Guidelines [en lı́nea, visitado 27/5/2005]. Disponible en: http://msdn.microsoft.com/library/en-us/ui_guide_ppc/html/ PPCUser_Interface_Guidelines_SKLK.asp. [16] MSDN. Services Patterns: Service Gateway [en lı́nea, visitado 20/5/2005]. Disponible en: http://msdn.microsoft.com/library/en-us/dnpatterns/html/ DesServiceGateway.asp. [17] MSDN. Services Patterns: Service Interface [en lı́nea, visitado 20/5/2005]. Disponible en: http://msdn.microsoft.com/library/en-us/dnpatterns/html/ DesServiceInterface.asp. [18] MSDN. Web Presentation Patterns: Model-View-Controller [en lı́nea, visitado 20/5/2005]. Disponible en: http://msdn.microsoft.com/library/en-us/ dnpatterns/html/EspWebPresentationPatterns.asp. [19] NHibernate Project. What is NHibernate? [en lı́nea, visitado 16/5/2005]. Disponible en: http://wiki.nhibernate.org/display/NH/Home. [20] Larry Roof. Creating Custom Controls with the .NET Compact Framework [en lı́nea, visitado 27/5/2005]. Disponible en: http://msdn.microsoft.com/library/default. asp?url=/library/en-us/dnroad/html/road11272002.asp. 90