Universidad Nacional del Nordeste Facultad de Ciencias Exactas y Naturales y Agrimensura Trabajo Final de Aplicación Acceso a Bases de Datos Multiplataforma desde Dispositivos Móviles Manuales Silvana Daniela Maidana - L.U.: 33.548 Prof. Coordinador: Agr. Castor Herrmann Prof. Orientadores: Mgter. David Luis la Red Martínez y Lic. Valeria Uribe. Licenciatura en Sistemas de Información Corrientes - Argentina 2008 A mi familia Prefacio En los últimos tiempos han habido importantes avances tecnológicos tanto en las áreas de comunicaciones móviles como en las de almacenamiento de datos; asímismo los requerimientos de la población en la sociedad de la información y el conocimiento (SIC), hacen necesario y conveniente estudiar tecnologías que permitan obtener información útil del contenido de las bases de datos, mediante dispositivos móviles. Además, es un hecho de la realidad que en las grandes organizaciones la computación móvil ha adquirido una relevancia sustancial como una etapa dentro del acceso remoto a los datos, lo cual hace sumamente interesante su estudio y el análisis de sus potencialidades, especialmente teniendo presente la posibilidad de generar servicios de acceso remoto y móvil, desde dispositivos de diferentes tipos, con software multiplataforma. Asímismo es una constante en los últimos años que las tecnologías de la computación móvil intentan hacer y de hecho lo logran en muchos casos, una ampliación de las potencialidades del acceso mediante redes, en este caso, redes inalámbricas. Este trabajo se basa en el estudio de software de base que permite el desarrollo de aplicaciones móviles con acceso a base de datos multiplataforma situadas en un servidor web y en el desarrollo de una aplicación Web para la administración y gestión de la información en la base de datos. Contempla la posibilidad de poder consultar datos de la base de datos con respecto a notas de distintas asignaturas por parte de los alumnos registrados en las mismas desde un dispositivo móvil, y la gestión de dichos alumnos, notas y usuarios desde el sistema de administración Web. Objetivos El objetivo inicialmente planteado fue la realización de una aplicación móvil desarrollada en J2ME; otro objetivo también fijado como básico fue el desarrollo de la aplicación Web en Java; ambos desarrollados en productos de software de la familia de WebSphere. Estos objetivos planteados al inicio del trabajo, fueron totalmente cumplidos. Clasificación del Trabajo vi El trabajo se clasifica como de utilización de software de base que permite el desarrollo de aplicaciones móviles con acceso a bases de datos multiplataforma. Etapas de Desarrollo • Se ha efectuado una amplia recopilación bibliográfica específica de los temas pertinentes a la tarea planificada y a los productos de software que se emplearon para la concreción del Trabajo Final. • Se realizaron las traducciones de los manuales correspondientes a las herramientas de desarrollo WebSphere Studio Application Developer, versión 5.0 para Windows y del WebSphere Studio Device Developer, versión 5.7. • Como consecuencia de las gestiones realizadas por el Profesor Orientador ante IBM Argentina se han recibido materiales tanto en CD’s como en libros de dicha empresa, en el marco del Scholars Program de la misma, destinado a Universidades de todo el mundo; se destacan por ser necesarios para la realización del presente Trabajo Final los referentes a productos de software tales como el WebSphere Studio Application Developer versión 5.0, WebSphere Studio Device Developer Versión 5.7, como así también el DB2 database para Linux, UNIX y Windows Versión 9. • Se ha realizado un detallado estudio del lenguaje Java, utilizándose la versión JDK 1.4. • Se ha realizado un detallado estudio del entorno de trabajo Scientific WorkPlace 2.5.0 para la escritura del libro correspondiente al informe final. • Se ha realizado un detallado estudio del software para el desarrollo de la aplicación, es decir el estudio de la plataforma integrada de desarrollo de aplicaciones Web, WebSphere Studio Application Developer. • Se ha realizado el estudio del Manejador de Bases de Datos (DBMS) multiplataforma DB2. • Se ha realizado el desarrollo de la aplicación utilizando páginas HTML y Servlets de Java en el marco de la herramienta WebSphere Studio Application Developer en el entorno Windows. vii • Se ha realizado el correspondiente testeo de la aplicación móvil en diferentes emuladores y el de la aplicación web en diferentes navegadores. • Una vez finalizada la aplicación se realizó la grabación en DVD de todo el material correspondiente al trabajo final: una versión de cada uno de los módulos, otra referente al libro en formato LaTex y el PDF generado. También se icluyeron los instaladores de los productos utilizados para el desarrollo, es decir DB2 UDB, WebSphere Studio Application Developer y WebSphere Studio Devide Developer. Objetivos Logrados Se han alcanzado plenamente la totalidad de los objetivos planteados para el presente trabajo. Organización del Informe Final El informe final comprende un libro impreso y un DVD. El libro impreso está organizado en capítulos, los que se indican a continuación: • Introducción: presenta una visión general de los sistemas de información en la Sociedad de la Información y del Conocimiento, y una introducción a Gobierno Electrónico. • Java: describe las más destacadas características del lenguaje. • Servlets: resume los aspectos más destacados de estas facilidades. • J2ME : da una introducción a este lenguaje en pleno auge. • DB2 : detalla las más relevantes características de esta familia de productos de gestión de bases de datos multiplataforma. • WebSphere: presenta los principales aspectos de este entorno de desarrollo de aplicaciones complejas. • Aplicación: detalla los aspectos más significativos de las aplicaciones desarrolladas utilizando las facilidades antes mencionadas. • Conclusiones: presenta las conclusiones a las que se ha llegado al finalizar el presente trabajo. viii El DVD, adjunto al libro impreso, contiene lo siguiente: • Instaladores del software utilizado. • Libro del informe final. • Presentación para la defensa final. • Copia de seguridad de la base de datos de las aplicaciones. • Aplicación desarrollada. Silvana Daniela Maidana Licenciatura en Sistemas de Información Universidad Nacional del Nordeste L.U.: 33548 Corrientes; 02 de Diciembre de 2008 Índice General 1 Introducción 1.1 Gestión del Conocimiento . . . . . . . . . . . . . . . . . . . . . 1.1.1 Una Visión Global . . . . . . . . . . . . . . . . . . . . . 1.1.2 Definición de Conocimiento . . . . . . . . . . . . . . . . 1.1.3 Ciclo de Vida del Conocimiento . . . . . . . . . . . . . . 1.1.4 Conocimiento: la Nueva Materia Prima de las Empresas 1.1.5 La Cultura en la Sociedad del Conocimiento . . . . . . . 1.1.6 Gestión del Conocimiento . . . . . . . . . . . . . . . . . 1.1.7 Portales del Conocimiento . . . . . . . . . . . . . . . . . 1.1.8 Necesidad de la Gestión del Conocimiento . . . . . . . . 1.1.9 Situación Actual en la GC . . . . . . . . . . . . . . . . . 1.1.10 Objetivos de la Gestión del Conocimiento . . . . . . . . 1.1.11 Globalización de la Economía y el Conocimiento . . . . 1.1.12 La Estrategia de Convertir Datos en Conocimieto . . . . 1.1.13 Nuevo Futuro del Conocimiento . . . . . . . . . . . . . . 1.2 Gobierno Electrónico . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Definición . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3 Modalidades del Gobierno Electrónico . . . . . . . . . . 1.2.4 Las estrategias de Gobierno Electrónico . . . . . . . . . 1 1 2 2 6 7 8 10 15 16 18 20 22 24 25 25 25 29 31 32 2 JAVA 2.1 Introducción al Lenguaje . . . . . . . . . . . . . . 2.1.1 Bibliotecas de Clases Estándares de Java 2.1.2 Java es Multiplataforma . . . . . . . . . . 2.1.3 Características del Lenguaje Java . . . . . 2.2 Estructura General de un Programa Java . . . . 2.3 Conceptos Básicos . . . . . . . . . . . . . . . . . 2.3.1 Clase . . . . . . . . . . . . . . . . . . . . 37 38 39 40 40 43 44 44 ix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x ÍNDICE GENERAL 2.3.2 Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.3.3 2.3.4 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . Package . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 45 . . . . 46 47 49 50 Operadores Aritméticos . . . . . . . . . . . . . . . . . . Operadores de Asignación . . . . . . . . . . . . . . . . . Operadores Unarios . . . . . . . . . . . . . . . . . . . . Operadores Incrementales . . . . . . . . . . . . . . . . . Operadores Relacionales . . . . . . . . . . . . . . . . . . Operador de Concatenación de Cadenas de Caracteres (+) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.7 Precedencia de Operadores . . . . . . . . . . . . . . . . 2.6 Estructuras de Programación . . . . . . . . . . . . . . . . . . . 2.6.1 Sentencias o Expresiones . . . . . . . . . . . . . . . . . . 2.6.2 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . 2.6.3 Bifurcaciones . . . . . . . . . . . . . . . . . . . . . . . . 2.6.4 Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7 Clases en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7.1 Características Importantes de las Clases . . . . . . . . 2.7.2 Métodos o Funciones Miembros . . . . . . . . . . . . . . 2.8 Algunas Clases de Utilidad . . . . . . . . . . . . . . . . . . . . 2.8.1 Clase Arrays . . . . . . . . . . . . . . . . . . . . . . . . 2.8.2 Clases String y StringBuffer . . . . . . . . . . . . . . . . 2.8.3 Clase Double . . . . . . . . . . . . . . . . . . . . . . . . 2.8.4 Clase Integer . . . . . . . . . . . . . . . . . . . . . . . . 2.9 El AWT (Abstract Windows Toolkit) . . . . . . . . . . . . . . . 2.9.1 Qué es el AWT . . . . . . . . . . . . . . . . . . . . . . . 2.9.2 Creación de una Interface Gráfica de Usuario . . . . . . 2.9.3 Objetos “event source” y Objetos “event listener” . . . 2.9.4 Proceso a Seguir Para Crear Una Aplicación Interactiva (Orientada a Eventos) . . . . . . . . . . . . . . . . . . . 2.10 Errores Frecuentes de Programación . . . . . . . . . . . . . . . 2.10.1 Scheduling de Hilos de Ejecución . . . . . . . . . . . . . 2.10.2 Errores en el Uso de las Características de Portabilidad de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.10.3 Uso de Directorios Definidos . . . . . . . . . . . . . . . 50 50 51 51 52 2.4 2.5 2.3.5 La Jerarquía de Clases de Java (API) Variables Dentro del Lenguaje Java . . . . . . 2.4.1 Visibilidad y Vida de las Variables . . Operadores en Java . . . . . . . . . . . . . . 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 54 54 55 55 56 57 60 61 62 63 63 65 66 66 66 66 67 67 68 69 69 71 71 ÍNDICE GENERAL 2.10.4 2.10.5 2.10.6 2.10.7 . . . . 74 75 76 76 . . . . . . . . . . . . . 77 78 78 79 81 81 81 82 83 84 85 85 86 86 4 J2ME 4.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Análisis Comparativo . . . . . . . . . . . . . . . . . . . 4.1.2 Nociones Básicas de J2ME . . . . . . . . . . . . . . . . 4.2 Los MIDlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 El Gestor de Aplicaciones . . . . . . . . . . . . . . . . . 4.3 Interfaces Gráficas de Usuario . . . . . . . . . . . . . . . . . . . 4.3.1 Introducción a las Interfaces de Usuario . . . . . . . . . 4.3.2 La Interfaz de Usuario de Alto Nivel . . . . . . . . . . . 4.3.3 La Interfaz de Usuario de Bajo Nivel . . . . . . . . . . . 4.4 Record Management System . . . . . . . . . . . . . . . . . . . . 4.4.1 Conceptos Básicos . . . . . . . . . . . . . . . . . . . . . 4.4.2 Operaciones Con Record Stores . . . . . . . . . . . . . . 4.5 Comunicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1 Conceptos Básicos . . . . . . . . . . . . . . . . . . . . . 4.5.2 Clases y Conexiones del Generic Connection Framework 4.5.3 Comunicaciones HTTP . . . . . . . . . . . . . . . . . . 4.5.4 Otras Conexiones . . . . . . . . . . . . . . . . . . . . . . 91 92 93 95 106 106 110 110 112 114 117 117 120 121 121 121 126 131 5 Introducción a DB2 135 3 Carga de Drivers JDBC . . Terminación de Líneas . . . Entrada/Salida por Archivo Fuentes de Caracteres . . . xi . . . . . . . . . . . . . . . . . . . . . . . . . . . . Servlet 3.1 Desarrollando Servlets . . . . . . . . . . . . . . 3.1.1 Principios de Codificación de Servlet . 3.1.2 Ciclo de Vida del Servlet . . . . . . . . 3.1.3 Instanciación e Inicialización . . . . . . 3.1.4 Servicio de Demanda . . . . . . . . . . . 3.1.5 Terminación . . . . . . . . . . . . . . . . 3.1.6 Modelos de Acceso JSP . . . . . . . . . 3.1.7 Procesadores JSP . . . . . . . . . . . . . 3.1.8 Compilación Batch de Archivos JSP . . 3.1.9 Desarrollando Aplicaciones . . . . . . . 3.1.10 Fases de Inicialización y de Terminación 3.1.11 Rasgos de Java Servlet API . . . . . . . 3.1.12 Patrones y Guías de Servlets/JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii ÍNDICE GENERAL 5.1 5.2 5.3 DB2 Universal Database (DB2 UDB) . . . . . . Funciones Complementarias . . . . . . . . . . . Configuraciones de Particiones Múltiples . . . . 5.3.1 Particiones con un Procesador . . . . . 5.3.2 Particiones con Múltiples Procesadores . 5.3.3 Particiones Lógicas de Base de Datos . . 5.4 Paralelismo Mejor Adaptable a cada EH . . . . 5.4.1 Herramientas de Administración . . . . 5.4.2 Estándares Soportados en DB2 . . . . . 5.5 Familia de DB2 UDB . . . . . . . . . . . . . . 5.6 DB2 UDB Versión 7.2 . . . . . . . . . . . . . . 5.7 Área de Ejecución de Instalación . . . . . . . . 5.7.1 Área de Ejecución del Depósito . . . . . 5.7.2 Primeros Pasos . . . . . . . . . . . . . . 5.7.3 Visión General Rápida . . . . . . . . . . 5.7.4 Centro de Información . . . . . . . . . . 5.7.5 Mejoras en los Asistentes . . . . . . . . 5.8 DB2 UDB Versión 8.1 . . . . . . . . . . . . . . 5.8.1 Centro de Desarrollo . . . . . . . . . . . 5.8.2 WebSphere . . . . . . . . . . . . . . . . 5.8.3 Mejoras en XML Extender . . . . . . . 5.8.4 DB2 Warehouse Manager . . . . . . . . 5.8.5 DB2 Warehouse Manager (cont.) . . . . 5.8.6 Centro de depósito de datos de DB2 . . 5.8.7 DB2 Spatial Extender . . . . . . . . . . 5.8.8 DB2 Spatial Extender (cont.) . . . . . . 5.8.9 Gestión de los Datos . . . . . . . . . . . 5.8.10 Duplicación (DB2 DataPropagator) . . 5.8.11 Nuevo Centro de duplicación . . . . . . 5.8.12 Posibilidades de Gestión . . . . . . . . . 5.8.13 Soporte de plataformas . . . . . . . . . 5.8.14 Compatibilidad de la Familia de DB2 . 5.9 Principales Ventajas del DB2 UDB . . . . . . . 5.10 Conclusión . . . . . . . . . . . . . . . . . . . . 6 WebSphere 6.1 Introducción . . . . . . . . . . . . . . . 6.2 Eclipse . . . . . . . . . . . . . . . . . . 6.2.1 Arquitectura de la Plataforma 6.3 Características del Workbench . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 138 141 141 142 143 143 144 146 147 148 150 150 150 151 151 151 156 157 157 157 158 159 159 160 161 161 162 162 163 164 164 165 168 . . . . 171 172 173 173 176 ÍNDICE GENERAL 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 6.13 6.14 xiii 6.3.1 Herramientas Basadas en Plug-in . . . . . . . . . . . . . 176 6.3.2 Desarrollo de Herramientas Orientadas en Roles . . . . 177 6.3.3 Integración Vertical y Horizontal . . . . . . . . . . . . . 177 6.3.4 Estándares Abiertos . . . . . . . . . . . . . . . . . . . . 178 6.3.5 Ambiente de Trabajo Distribuido . . . . . . . . . . . . . 178 6.3.6 IDE Basado en Archivo . . . . . . . . . . . . . . . . . . 178 Productos WebSphere Studio . . . . . . . . . . . . . . . . . . . 178 6.4.1 WebSphere Studio Site Developer . . . . . . . . . . . . . 180 6.4.2 WebSphere Studio Application Developer . . . . . . . . 180 6.4.3 WebSphere Studio Application Developer Integration Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 6.4.4 WebSphere Enterprise Developer . . . . . . . . . . . . . 181 Herramientas de WSAD . . . . . . . . . . . . . . . . . . . . . . 181 6.5.1 Herramientas de Desarrollo Java . . . . . . . . . . . . . 183 6.5.2 Herramientas de Desarrollo de Aplicaciones Web . . . . 183 6.5.3 Herramientas de Desarrollo de Servicios Web . . . . . . 185 6.5.4 Herramientas de Desarrollo de Enterprise JavaBeans (EJB)187 6.5.5 Herramientas XML y XSL . . . . . . . . . . . . . . . . . 188 6.5.6 Herramientas de Base de Datos Relacional . . . . . . . . 188 6.5.7 Herramientas de Desarrollo de Aplicaciones Struts . . . 189 La Experiencia Pervasiva de IBM . . . . . . . . . . . . . . . . . 190 Modelo de Programación de WebSphere . . . . . . . . . . . . . 194 Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Alcance de la Arquitectura PvC . . . . . . . . . . . . . . . . . . 196 Modelo de Programación Extremo a Extremo . . . . . . . . . . 197 WebSphere y las Aplicaciones para Dispositivos . . . . . . . . . 198 La Plataforma de Servicios Pervasivos . . . . . . . . . . . . . . 198 Modelo de Programación de WebSphere . . . . . . . . . . . . . 200 WebSphere Studio Device Developer IDE . . . . . . . . . . . . 201 6.14.1 Developer IDE . . . . . . . . . . . . . . . . . . . . . . . 201 6.14.2 WebSphere Studio Device Developer . . . . . . . . . . . 201 6.14.3 Trabajar con el IDE . . . . . . . . . . . . . . . . . . . . 204 6.14.4 Configuración J2ME . . . . . . . . . . . . . . . . . . . . 208 6.14.5 Construcción y Ejecución en Dispositivos . . . . . . . . 208 7 Aplicación 7.1 Descripción General . . 7.2 Análisis del Sistema . . 7.2.1 Modelo de Datos 7.2.2 Casos de Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 215 216 216 216 xiv ÍNDICE GENERAL 7.3 7.4 Aplicación Móvil . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Aplicación Web . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 8 Conclusiones 241 Bibliografía 243 Índice de Materias 247 Índice de Figuras 1.1 1.2 1.3 1.4 1.5 Ciclo de Vida del Conocimiento. . . . . . . . . . . . El Contexto del Capital Intelectual. . . . . . . . . . La Cultura Propicia de la Gestión del Conocimiento. El Proceso de Conocimiento. . . . . . . . . . . . . . Proceso Clave en la Gestión del Conocimiento. . . . . . . . . 7 9 10 13 16 3.1 3.2 3.3 Ciclo de Vida de un Servlet. . . . . . . . . . . . . . . . . . . . . Requerimiento de un Archivo JSP. . . . . . . . . . . . . . . . . Requerimiento de un Servlet. . . . . . . . . . . . . . . . . . . . 80 82 83 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 Versiones de Java . . . . . . . . . . . . . . . . . Relación entre las APIs de la plataforma Java. Entorno de ejecución de J2ME . . . . . . . . . Preverificación de clases en CDLC/KVM. . . . Arquitectura del entorno de ejecución de J2ME Ciclo de vida de un MIDlet. . . . . . . . . . . . Estados de un MIDlet. . . . . . . . . . . . . . . Jerarquía de clases derivadas de Display e Item Comunicación entre un MIDlet y el RMS . . . Acceso a un RMS a través de una MIDlet suite Estructura de un Record Store . . . . . . . . . Estructura completa de un Record Store . . . . Jerarquía de interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 95 96 99 105 107 110 111 118 118 119 120 122 5.1 5.2 5.3 5.4 5.5 5.6 Almacenamiento de Documentos XML en DB2. . Esquema Conceptual de los Almacenes de Datos. Almacenamiento de Datos Espaciales . . . . . . . Centro de Desarrollo . . . . . . . . . . . . . . . . DB2 Warehouse Manager. . . . . . . . . . . . . . Centro de Duplicación de DB2 versión 8.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 139 155 158 159 163 xv . . . . . . . . . . . . . . . . . . . . . . . . . xvi ÍNDICE DE FIGURAS 5.7 Replicación de Datos en DB2. . . . . . . . . . . . . . . . . . . . 167 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 6.13 6.14 6.15 6.16 6.17 6.18 6.19 6.20 Soluciones IBM WebSphere . . . . . . . . . . . . . . . . . . . . Eclipse SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Plataforma Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . Productos WebSphere . . . . . . . . . . . . . . . . . . . . . . . Entorno de desarrollo de WebSphere Studio Application Developer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Experiencia pervasiva de IBM . . . . . . . . . . . . . . . . . . . Computación ubicua . . . . . . . . . . . . . . . . . . . . . . . . Experiencia ubicua extendida a la plataforma WebSphere . . . Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquitectura PVC . . . . . . . . . . . . . . . . . . . . . . . . . Modelo de programación extremo a extremo . . . . . . . . . . . Paquete de la plataforma de servicios pervasivos. . . . . . . . . Modelo de programación de WebSphere. . . . . . . . . . . . . . WebSphere Studio Device Developer IDE . . . . . . . . . . . . WebSphere Studio Device Developer . . . . . . . . . . . . . . . Gestor de Actualizaciones. . . . . . . . . . . . . . . . . . . . . . Barra de herramientas. . . . . . . . . . . . . . . . . . . . . . . . Wizart par configurar construcciones. . . . . . . . . . . . . . . Creación de dispositivos. . . . . . . . . . . . . . . . . . . . . . . Ejecución de una aplicación. . . . . . . . . . . . . . . . . . . . . 182 191 192 193 195 196 197 199 200 202 203 204 206 209 211 213 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16 Modelo de datos. . . . . . . . . . . . . . . . . . . Diagrama de caso de uso de la aplicación móvil. . Diagrama de caso de uso de la aplicación Web. . Pantalla inicial. . . . . . . . . . . . . . . . . . . . Menú principal. . . . . . . . . . . . . . . . . . . . Registro en el sistema. . . . . . . . . . . . . . . . Login. . . . . . . . . . . . . . . . . . . . . . . . . Mensaje de error en el logueo. . . . . . . . . . . . Menú de asignaturas. . . . . . . . . . . . . . . . . Menú de opciones para la consulta de notas. . . . Error en la elección de la asignatura. . . . . . . . Resultado de la consulta. . . . . . . . . . . . . . Pantalla de bienvenida . . . . . . . . . . . . . . . Listado de alumnos de SO. . . . . . . . . . . . . Alta de alumnos. . . . . . . . . . . . . . . . . . . Edición de alumnos. . . . . . . . . . . . . . . . . 217 218 219 220 221 223 224 225 226 227 229 230 231 232 233 234 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 174 175 179 ÍNDICE DE FIGURAS 7.17 7.18 7.19 7.20 7.21 Consulta de alumnos. . . . . Selección del archivo Excel. . Lectura del archivo Excel. . . Confirmación de la operación. Estadísticas. . . . . . . . . . . xvii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 236 237 238 239 Índice de Tablas 2.1 2.2 2.3 2.4 2.5 2.6 Tipos de Variables. . . . . . . . Categorías de Variables. . . . . Tipos Primitivos de Variables. . Operadores de asignación. . . . Operadores relacionales. . . . . Precedencia de Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 48 49 51 52 54 4.1 4.2 4.3 4.4 4.5 4.6 Librerías de configuración CDC. . . . . . . . . . . . . Librerías de configuración CLDC. . . . . . . . . . . . . Tipo de listas. . . . . . . . . . . . . . . . . . . . . . . . Código de teclas. . . . . . . . . . . . . . . . . . . . . . Métodos relacionados con la etapa de establecimiento Tipos de peticiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 103 113 115 128 128 5.1 Paralelismo mejor Adaptable a cada Entorno de Hardware . . . 144 xix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Capítulo 1 Introducción 1.1 Gestión del Conocimiento 1 2 1.1.1 CAPÍTULO 1. INTRODUCCIÓN Una Visión Global Es un hecho de la realidad contemporánea que los vertiginosos adelantos registrados en las TIC (Tecnologías de la Información y de las Comunicaciones) han convertido a nuestro planeta en lo que se ha dado en llamar “la aldea global” [1, Joyanes], permitiendo que nuestra sociedad sea conocida como la “sociedad de la información y el conocimiento” o “cibersociedad” [2, Joyanes, Lombardo], en la cual la profusión de redes de datos ha permitido interconectar a diversidad de equipos informáticos de diferentes tecnologías de hardware y de software constituyendo una verdadera red mundial multiplataforma, que ha generado la posibilidad de nuevas formas de interacción de las personas y de las empresas, impactando en la educación, las actividades sociales, el comercio, etc. Debido a que la información es poder, es muy importante el lugar en donde se almacena, su organización y de qué forma se puede brindarla a las distintas personas y entidades, independientemente de su localización geográfica y de su plataforma tecnológica. La necesidad de mejorar la manera de acceder y manejar los datos ha evolucionado por lo que se debe profundizar el estudio de temas de gran interés, como lo es la tecnología multiplataforma y su aplicación en la red en ambientes comerciales y gubernamentales de dimensiones considerables. El desarrollo del presente trabajo se ve motivado además por la posibilidad de desarrollar experiencias y conocimientos vinculados con entornos de trabajo propios del ambiente universitario, de la seguridad que se precisa en el manejo de la información y de la importancia actual de la interrelación de las actividades de las organizaciones desde el punto de vista de su gestión interna y su interrelación con el medio mediante la Web, todo ello en el contexto mayor de la sociedad de la información y el conocimiento. 1.1.2 Definición de Conocimiento El conocimiento es materia de estudio de distintas disciplinas, tales como la filosofía, la gestión empresarial y, más recientemente la informática, por ello se encuentran diferentes definiciones según el punto de vista e interés de quienes se pronuncien. Conviene conocer, en aras a un mejor entendimiento y colaboración más eficaz con personas de distintas culturas, diversas definiciones así como la terminología que rodea al concepto conocimiento [3, Maestre]. 1.1. GESTIÓN DEL CONOCIMIENTO 3 Para la definición de conocimiento varios autores interesados en la informática, se apoyan en las definiciones de otros dos conceptos: dato e información. Parece oportuno traer aquí las definiciones dadas por la Real Academia Española al respecto: • Dato: antecedente necesario para llegar al conocimiento exacto de una cosa o para deducir las consecuencias legítimas de un hecho. • Información: acción y efecto de informar o informarse. • Conocimiento: acción y efecto de conocer. Noción, ciencia, sabiduría. Cada una de las facultades sensoriales del hombre en la medida en que están activas. Como seguramente resultará útil para completar y para establecer diferenciaciones posteriores con otros términos, se adjuntan las definiciones dadas por la misma institución a los conceptos informar y conocer: • Informar : enterar, dar noticia de una cosa. • Conocer : averiguar por el ejercicio de las facultades intelectuales la naturaleza, cualidades y relaciones de las cosas. Además es oportuno traer hasta aquí la definición del Webster’s New Encyclopedia Dictionary sobre knowledge (conocimiento): Knowledge: • understanding gained by actual experience (a knowledge of carpentry): — the state of being aware of something or of having information. — range of information or awareness. • the act of understanding: clear perception of truth. • something learned and kept in mind. Que puede traducirse por: Conocimiento: • comprensión obtenida por medio de la experiencia efectiva (conocimiento de carpintería): 4 CAPÍTULO 1. INTRODUCCIÓN — el estado de saber de algo o de tener información. — rango de información o sapiencia. • el acto de comprensión: clara percepción de la verdad. • algo aprendido y retenido en la mente. No completamente satisfechos con estas definiciones académicas, expertos de las distintas disciplinas que se ocupan del conocimiento están aportando las suyas. A continuación se exponen algunas de las muchas que, por su enfoque, parecen más relevantes. Stephen Denning, director de programas de gestión del conocimiento del World Bank (Banco Mundial), declara: “En el lenguaje cotidiano se diferencia entre información (datos estructurados en modo significativo) y conocimiento (algo en lo que se cree que es cierto y fiable)”. No obstante, algunas objeciones a los términos cierto y fiable están empañando la distinción. El uso indistinto que a veces se hace de los términos información y conocimiento puede llevar a la confusión si no se hace hincapié en que el término conocimiento se emplea ahora con un sentido nuevo. En un intento por definir el concepto conocimiento nos sirve de ayuda el recordar que la mente humana es capaz de dos clases de conocimiento: el racional y el intuitivo. En el mundo occidental, el conocimiento intuitivo ha sido a menudo devaluado en favor del conocimiento racional científico. Sin embargo, la dificultad de transferir el conocimiento de una persona a otra, ha llevado a intensificar la importancia del conocimiento intuitivo. En el mundo oriental, el conocimiento intuitivo siempre ha sido considerado muy importante, hasta el punto de considerarlo como el conocimiento superior mientras que asocian las ciencias al conocimiento inferior. Dos reconocidos expertos, Nonaka y Takeuchi, en el área de la Ciencia del Conocimiento, tal como se instruye en Japón, afirman que: “el conocimiento se puede definir como creencias justificadamente ciertas y técnicas adquiridas empíricamente”. Thomas H. Davenport, profesor de gestión de la información en la Escuela de Negocios de la Universidad de Boston, y Donald A. Marchand, profesor de gestión y estrategia de la información en el IMD International de Suiza coinciden en afirmar que “el conocimiento es información que se encuentra dentro 1.1. GESTIÓN DEL CONOCIMIENTO 5 de la mente de las personas; sin una persona que conozca y sea consciente de ello, no existe el conocimiento”. Estos profesores se interesan por el conocimiento desde el punto de vista de la gestión empresarial. Y añaden: los datos, la información y el conocimiento son distintos puntos a lo largo de un espectro sin solución de continuidad caracterizado por un valor y una aportación humana cada vez mayores. Los datos -los símbolos que representan los sucesos y actividades humanas a que estamos expuestos cotidianamente- tienen poco valor en sí mismos, aunque tienen la ventaja de ser fáciles de almacenar y manipular informáticamente. La información es lo que obtenemos a partir de los datos cuando los interpretamos y contextualizamos como humanos que somos. Es asimismo el vehículo que utilizamos para expresar y comunicar el conocimiento, tanto en el seno de la empresa como en nuestras propias vidas. La información tiene más valor que los datos y, al mismo tiempo, un mayor grado de ambigüedad, como puede atestiguar cualquier directivo que haya discutido alguna vez sobre las muchas interpretaciones que pueden darse de términos como cliente, pedido y remesa dentro de una misma empresa. El conocimiento tiene un gran valor, ya que los seres humanos crean a partir de él nuevas ideas, visiones e interpretaciones y las aplican directamente al uso de la información y la toma de decisiones. Para otro conocido experto, Joseph Novak , el conocimiento es creado por cada uno de nosotros asimilando lo que sabemos con lo que captamos por medio de nuestras experiencias u observaciones. La consultora PricewaterhouseCoopers conviene en definir el conocimiento como información combinada con experiencia en su uso, situada en un contexto, junto con su interpretación y reflexión. Otra consultora, Arthur Andersen, simplifica la definición de conocimiento afirmado que es información que tiene valor. En la misma línea de pragmatismo, Ernst & Young define el conocimiento como mensajes con valor. Pedro Maestre, conocido y respetado alto ejecutivo español en el campo de las tecnologías de la información y comunicaciones, en su Diccionario de Gestión del Conocimiento e Informática [3, Maestre] propone las definiciones siguientes: • Dato: cadena de caracteres, expresados en un determinado sistema de codificación, asociada a un hecho o concepto. 6 CAPÍTULO 1. INTRODUCCIÓN • Información: conjunto de datos interrelacionados de forma que aporten utilidad en la gestión o dirección de una organización. En cierta medida, la información, es la forma más elemental de conocimiento ya que, en sí misma, no aporta predictibilidad. • Conocimiento: resultado obtenido al aplicar una o varias reglas objetivas de actuación a una información o conjunto de informaciones. El conocimiento implica cierta capacidad de hacer predicciones a partir de unas determinadas informaciones y de unas reglas genéricas. En el ámbito de la literatura sobre organización y gestión empresarial, el concepto conocimiento, muy a menudo, se encuentra entremezclado y poco diferenciado de los conceptos capacidad y habilidad. 1.1.3 Ciclo de Vida del Conocimiento El ciclo de vida del conocimiento depende de la distinción entre conocimiento tácito y conocimiento explícito. Ambos tipos de conocimientos son necesarios y se produce una realimentación continua entre ambos. El conocimiento tácito que se comparte con otras personas pasa a formar parte del nuevo conocimiento tácito de estas últimas (socialización). El conocimiento tácito que se almacena, se transforma en nuevo conocimiento explícito (exteriorización). El conocimiento explícito al ser adquirido por una persona se transforma en nuevo conocimiento tácito, ya que ésta añadirá su juicio, fruto de sus propios conocimientos y experiencias previas (interiorización). El conocimiento explícito puede combinarse con otros conocimientos explícitos dando lugar a nuevos conocimientos explícitos (combinación). Lamentablemente la pérdida de una persona, bien sea por decisión propia o como fruto de un proceso de reducción de costes supone una merma muchas veces irreparable de conocimiento tácito, y por tanto de la totalidad del conocimiento de una organización. El punto esencial del ciclo de vida del conocimiento radica en que el conocimiento que no fluye, no crece y a menudo envejece y se vuelve obsoleto e inútil; por el contrario, el conocimiento que fluye, se comparte y se intercambia, ge- 1.1. GESTIÓN DEL CONOCIMIENTO 7 Figura 1.1: Ciclo de Vida del Conocimiento. nera nuevo conocimiento. El flujo de conocimiento posibilita la interacción entre el conocimiento tácito que poseen e intercambian las personas con el conocimiento explícito que reside en documentos y librerías. Es por esto que el flujo del conocimiento constituye el aspecto fundamental de la gestión del conocimiento (ver figura 1.1 de la página 7). 1.1.4 Conocimiento: la Nueva Materia Prima de las Empresas En la era digital que vivimos la riqueza de las empresas comienza a apoyarse en el producto conocimiento. Conocimiento e información, no solo el conocimiento científico, sino noticias, informes, ocio, comunicación, servicios... se han convertido en las materias primas principales de la economía y sus productos clave. El conocimiento hoy día se compra y se vende en cifras nunca vistas. Los activos de capital que se necesitan para crear riqueza no son la tierra ni el trabajo físico, ni las máquinas, herramientas o fábricas, son y serán los activos del conocimiento. Nos adentramos en la sociedad del conocimiento, que convive sin fisuras con la sociedad de la información o cibersociedad. Las organizaciones empresariales y públicas disponen de un recurso vital e intangible que les permite desarrollar su actividad esencial: el conocimiento. Los soportes básicos del conocimiento son: 8 CAPÍTULO 1. INTRODUCCIÓN 1. Los recursos humanos que intervienen en los proceso de producción o de soporte organizacional (formación, capacidades, cualidades personales, etc.). 2. La información manejada en dichos procesos que capacita a estas personas a incrementar su formación o habilidades para el desarrollo de sus tareas. La función de estos dos factores hace emerger el conocimiento. La organización, en base a ello, necesita convertir los datos en conocimiento y difundirlos rápidamente dentro de ella misma allá donde sea preciso. Esta concepción ha hecho considerar a la organización como una suprarred de recursos humanos, de información y de comunicaciones. Así aparece como un concepto vital en las empresas la gestión del conocimiento y los sistemas y herramientas inteligentes: • Los recursos humanos que intervienen en los proceso de producción o de soporte organizacional (formación, capacidades, cualidades personales, etc). • La información manejada en dichos procesos que capacita a estas personas a incrementar su formación o habilidades para el desarrollo de sus tareas. El contexto del capital intelectual se grafica en la figura 1.2 de la página 9. 1.1.5 La Cultura en la Nueva Sociedad del Conocimiento Las tecnologías de la información y comunicación han tenido un impacto considerable en la cultura. Es de gran importancia el impacto de los medios de comunicación clásicos, y también la influencia de la multimedia, realidad virtual y autopistas de la información en el ámbito cultural y que se denomina cibercultura: es el nuevo concepto que define la cultura, sociedad y vida de los próximos años y es un término que engloba todo lo que sea movimiento, evolución y en definitiva cultura a través del prefijo ciber que le proporciona un nuevo estado, en el que el canal de desarrollo [4, Joyanes] es su propio flujo tecnológico. 1.1. GESTIÓN DEL CONOCIMIENTO Figura 1.2: El Contexto del Capital Intelectual. 9 10 CAPÍTULO 1. INTRODUCCIÓN Innovar Colaborar Compartir Cultura Propicia a la GC Funciones y Responsabilidades Reconocimientos e incentivos Actividades y medios Figura 1.3: La Cultura Propicia de la Gestión del Conocimiento. La cibercultura abarca todo el conjunto de posibilidades que ya existían, añadiendo la ventaja del pensamiento artificial y unos interfaces que simulan los procesos de creación y los transportan a gran velocidad, ya sea en el interior de la propia computadora, o a otras computadoras situadas a distancia. La cultura propicia a la gestión de conocimiento se grafica en la figura 1.3 de la página 10. 1.1.6 Gestión del Conocimiento De todos los tipos de capital intelectual, el del conocimiento es el más complejo y el más difícil de gestionar. Esta disciplina no es nueva, sino que sus raíces se remontan a la inteligencia artificial, cuyo objetivo final ha sido la sintetización del comportamiento humano mediante ordenadores. 1.1. GESTIÓN DEL CONOCIMIENTO 11 Las Bases de Conocimientos son depósitos o almacenes de datos (repositorios) del conocimiento del negocio (funciones, reglas, cálculos, informes, etc.) totalmente independiente de la plataforma de ejecución, que mediante tecnologías de la inteligencia artificial son capaces de deducir, generar y mantener automáticamente estructuras normalizadas de bases de datos y programas. Desde hace algunos años se viene hablando de la gestión del conocimiento (GC) de forma creciente en medios de comunicación, mesas redondas, conferencias, .... En el conjunto del Producto Interior Bruto de los países más desarrollados, cada vez tiene un mayor peso la generación de riqueza por medio de los servicios en detrimento del sector productivo. Esto es, lo inmaterial está desplazando a lo material como base de la formación de riqueza de los países. No es extraño que cuando se consolida una tendencia de esta naturaleza la preocupación por los activos inmateriales, por lo intelectual, se acrecienta de forma muy significativa. Surge así el interés por la gestión de los activos inmateriales. “La necesaria y progresivamente acelerada adaptación a un contexto económico caracterizado por la globalidad y la competitividad, junto con su correlato de desregulación generalizada de los mercados, erige, cada vez con más claridad, al factor humano y su gestión en las empresas como el elemento determinante del diferencial de competitividad de las mismas”. A diferencia de otros factores clave de todo proceso productivo, como la tecnología y la organización de los procesos, no es directamente atribuible el rendimiento del factor humano a un mayor o menor nivel de inversión en el mismo, siendo necesaria una adecuada y compleja gestión de este recurso para poder obtener el desarrollo diferencial [3, Maestre]. La atención que se está prestando a la gestión del conocimiento está creciendo a una velocidad impresionante. Revistas y diarios de economía y libros publican innumerables teorías y casos sobre gestión del conocimiento y sus tópicos; el número de conferencias organizadas por todo el mundo es muy elevado y sigue aumentando. ¿Por qué se habla ahora tanto de gestión del conocimiento? El comienzo del 2000 contempló la emergente y paulatina importancia de la gestión del conocimiento, posiblemente porque después de las distintas teorías de gestión como la calidad, que tuvo su trascendencia en los 80, la reingeniería de procesos o el cambio estratégico, que tanto se han aplicado en los 90, 12 CAPÍTULO 1. INTRODUCCIÓN surge la necesidad de un nuevo enfoque que integre modelos de gestión de negocio anteriores y que se centre en las personas como instrumentos capaces de apalancar los conocimientos y crear valores para la empresa. Los gestores habituados a las reducciones de costes y al incremento continuo de la calidad, como instrumentos de gestión, vuelcan su atención al crecimiento a través del conocimiento y la innovación. Las encuestas indican que la mayoría de las empresas consideran la gestión del conocimiento como un elemento decisivo de su estrategia. Pero el concepto mismo de gestión del conocimiento es problemático. La abundancia de términos que lo rodean crea confusión, y ponerlo en práctica exige la existencia previa de una sólida cultura del aprendizaje y puede ser caro. La creciente aceptación de Internet permite a los trabajadores explorar más y más oportunidades laborales. Los trabajadores son más demandantes y tiene mayor movilidad que nunca. Las organizaciones reconocen que sus activos claves son los activos intelectuales y que sus prácticas de contratación y de retención deben reflejar esta situación. Este reconocimiento está ocasionando en las organizaciones alrededor de todo el mundo que desarrollen nuevos métodos de medida y gestión de estos activos. De hecho, el enfoque se desplaza de una gestión de recursos humanos hacia la optimización de activos humanos. (Oracle Corporation). Parece muy claro que con independencia de su denominación (gestión del capital intelectual, gestión del capital humano, gestión de recursos humanos, gestión del factor humano, gestión del talento), la gestión del conocimiento ha despertado un gran interés entre los distintos agentes del mundo empresarial y económico. El proceso del conocimiento se grafica en la figura 1.4 de la página 13. Tecnologías de la Gestión del Conocimiento Las tecnologías de GC deben permitir: • Identificar conocimientos necesarios. • Identificar dónde y quién tiene el conocimiento o si necesita ser creado. • Reunir y capturar el conocimiento identificado. 1.1. GESTIÓN DEL CONOCIMIENTO 13 Figura 1.4: El Proceso de Conocimiento. • Determinar su importancia. • Resumir y sintetizar la información disponible. • Distribuir la información a distintos niveles. • Actualizar, eliminar y modificar el conocimiento obsoleto. • Guardar y organizar el conocimiento obsoleto, en su caso, para futuras consultas. ¿Porqué gestionar el conocimiento? La importancia del pensamiento sobre el conocimiento en términos de simplicidad es que se pueden: aplicar conceptos similares, recurriendo a situaciones que produzcan efectos predecibles: • Aplicar conceptos a nuevas situaciones para producir innovaciones. • Refinar directrices a través de aplicaciones repetidas y verificación. La gestión del conocimiento es la mezcla de los siguientes componentes: • Personas: Aquellas que producen y aquellas que utilizan conocimiento que será la base para la acción. 14 CAPÍTULO 1. INTRODUCCIÓN • Contenido: El flujo de datos, información y conocimiento importantes en el éxito del negocio. • Tecnología: La infraestructura técnica que facilita la captura, almacenamiento y entrega del contenido a aquellas personas que lo necesitan, en el lugar oportuno y en el momento que lo necesitan. La tecnología es un facilitador, pero no es la solución. Se trata de comenzar la aplicación de conceptos básicos de GC para organizar personas, contenidos y tecnologías para una solución dirigida. Conclusiones y Tendencias Las Intranets/Extranets corporativas serán lugares clave para acceder a la información de gestión y al conocimiento corporativo. La interfaz de usuario será similar a los portales de Internet. Los Portales Corporativos evolucionarán de ser lugares de inicio hasta convertirse en frontales de acceso personalizados de acuerdo con las necesidades y preferencias de cada individuo. Los paquetes de aplicaciones que proporcionan soluciones a la gestión del conocimiento están todavía inmaduros. Su versatilidad depende de su capacidad de integración, al no ser soluciones totales (Soluciones completas/a medida). No parece probable la aparición de una solución integrada en un solo paquete de aplicaciones a corto plazo. Investigación: La UPSAM (Universidad Pontificia de Salamanca) trabaja en metodologías de valoración de GC y CI y su impacto en organizaciones formales en entornos Cliente/Servidor Universales. Herramientas capaces de transformar datos en conocimiento: Datawarehouse, Datamining, DSS, OLAP...etc. Herramientas para la transferencia de conocimiento día a día: Servicios de Colaboración, Groupware: Exchange, Lotus Notes 5, flujos de trabajo (workflow). 1.1. GESTIÓN DEL CONOCIMIENTO 15 Herramientas de Integración: ERP, EAI, Call-centers (Web/IP),...etc. El futuro viene marcado por: • Convergencia telefonía móvil/fija-Internet. • Internet móvil. • m-comercio / e-comercio. • Tecnologías (WAP, GPRS, UMTS, Java, XML, CORBA, XHTML, IP, ...). • El comercio electrónico competirá con el comercio tradicional en pocos años y las formas más usuales serán: — comercio-e (B2C). — negocio-e (B2B). — aprovisionamiento-e (e-procurement). — negocio-e para empleados (B2E). 1.1.7 Portales del Conocimiento La gestión del conocimiento es la nueva filosofía empresarial que pronto será aceptada por universidades, organizaciones e instituciones de todo tipo, se ha convertido en una necesidad más que en una moda. El nuevo activo de las empresas, el capital intelectual, está basado en el conocimiento y la experiencia que toda organización tiene dentro de sí. Sin embargo, la estrategia de convertir datos en información, y esta a su vez en conocimiento para una correcta toma de decisiones, requiere el uso de una interfaz con el usuario. Esta interfaz se está configurando como un portal corporativo: el portal de conocimiento. La planificación, diseño, construcción y mantenimiento de un portal de conocimiento requiere de tecnologías de la información y las comunicaciones que se convierten en la espina dorsal de los programas de gestión de conocimiento. El proceso clave en la gestión del conocimiento se puede observar en la figura 1.5 de la página 16. 16 CAPÍTULO 1. INTRODUCCIÓN Factor Humano Tecnología Conocimiento Figura 1.5: Proceso Clave en la Gestión del Conocimiento. 1.1.8 Necesidad de la Gestión del Conocimiento Ya durante la última década, hemos contemplado cómo la utilización del conocimiento y de otros activos intelectuales ha desplazado a otros factores como fuente de ventaja competitiva. Otras circunstancias han contribuido, también, al reconocimiento del conocimiento como un activo importante [3, Maestre]. En síntesis, se puede afirmar que los factores que han despertado al interés por la gestión del conocimiento son: • Las reestructuraciones y reajustes que han disuelto redes personales y han ocasionado la pérdida de expertos que poseían los conocimientos y experiencias para investigar, analizar problemas y encontrar soluciones. • Las inversiones masivas en tecnologías de información y comunicaciones que permiten un mejor acceso a la información interna y externa a las corporaciones. Tecnologías que facilitan los medios para crear información y capturar el conocimiento. • La necesidad de un contacto más estrecho con los clientes. • La necesidad de difundir y compartir las experiencias con un mayor número de empleados. • Una mayor capacidad de los empleados para aportar soluciones. • Un mayor interés por las técnicas para incorporar las mejores prácticas existentes en otras corporaciones (benchmarking). 1.1. GESTIÓN DEL CONOCIMIENTO 17 • La necesidad de unificar y adaptar respuestas ante la globalización del mercado. • La demanda de los clientes de aprovecharse de las experiencias desarrolladas en cualquier punto de las corporaciones proveedoras. • La necesidad de colaboración de los trabajadores del conocimiento. • La necesidad de reducir los tiempos de respuesta en desarrollo de productos y atención a clientes. El enfoque basado en los resultados, que empieza definiendo el móvil que lleva a toda la corporación y situando la GC en ese contexto, fue el que utilizaron en una encuesta reciente sobre el conocimiento llevada a cabo por la Cranfield School of Management en asociación con la revista Information Strategy. Entre otros temas, se pidió a las empresas europeas encuestadas que clasificaran por orden de importancia once posibles beneficios de los programas de GC. Sorprendentemente, la competitividad (ventaja competitiva) fue valorada muy por encima de cualquier otro beneficio. El único elemento que recibió una valoración equiparable fue la rentabilidad (aumento de beneficios), que aparecía en segundo o tercer lugar en todos los países (excepto en Alemania, donde ocupaba el octavo lugar). El crecimiento de las ventas aparecía en casi todos los casos en último lugar. En conjunto, esto indica que las empresas están buscando nichos de altos márgenes. Y estos sólo pueden mantenerse si las empresas tienen algo único que ofrecer, lo que a su vez, obliga a las organizaciones a aprovechar sus conocimientos. Las firmas consultoras, de las que la casi totalidad de ellas ha implantado procesos internos de gestión del conocimiento, han visto un área clara de negocio en el ofrecimiento de servicios a sus clientes para ayudarles en su propia gestión de conocimiento. Los objetivos que, según declaran, suelen perseguir sus clientes por medio de la gestión del conocimiento son los siguientes: • Incremento de la velocidad de entrega de productos y servicios. • Mejora de los productos y servicios. 18 CAPÍTULO 1. INTRODUCCIÓN • Aceleración de la capacidad de innovación. • Mejora de la cuota de mercado. • Incremento de la flexibilidad. • Reducción de costes. • Adquisición de nuevo conocimiento con mayor rapidez para anticiparse a los cambios. 1.1.9 Situación Actual en la Gestión del Conocimiento Muchas empresas han emprendido programas específicos de la gestión del conocimiento para que esa gestión contribuya a generar mayor valor para sus clientes o destinatarios, sus empleados, y sus accionistas o propietarios. Los pilares o elementos más comunes de esos programas son: • Las personas que crean, guardan, comparten y usan los conocimientos. Son el elemento básico, pero también el más complejo y su conocimiento el más volátil. • Los procesos que facilitan la identificación, selección, captura, elaboración, distribución y uso de los conocimientos. • Los sistemas que almacenan, procesan, transmiten y apoyan la utilización de los conocimientos. No son el pilar central, pero permiten y facilitan la gestión. • La cultura de la organización. Contiene conocimientos profundos, estables y arraigados. Por esa razón la cultura puede constituir un poderoso aliado o impulsor, o un enemigo encarnizado y una barrera para el proceso de utilización de los conocimientos. No todos los programas de gestión del conocimiento conocidos tienen éxito, pero los que se desarrollan exitosamente responden a varios criterios comunes: • Relación con resultados, finales o intermedios, de la actividad, utilizando indicadores adecuados como: calidad del servicio, ingresos, gastos, tiempos, ... Si el conocimiento es un activo, su gestión se orientará hacia la eficacia y la rentabilidad. 1.1. GESTIÓN DEL CONOCIMIENTO 19 • Finalidad y objetivos claros, concretos y prácticos. Lenguaje comprensible y sin jerga técnica. • Apoyo visible y sin reservas de la dirección. Encabezar las iniciativas vale más que todos los discursos. Además, la dirección ha de proporcionar los medios necesarios y clarificar los tipos de conocimientos clave para la organización. • Comienzo con una actitud flexible. Anticipar y adaptarse sin sorpresas a los rápidos cambios que, con toda seguridad, aparecerán. • Obtención inicial de algunos resultados rápidos que resuelvan situaciones o problemas comúnmente compartidos, buscando oportunidades y poniendo en evidencia la utilidad del programa. • Infraestructura técnica, organizativa y humana adecuadas. El énfasis está en las personas, no en las máquinas, pero estas sirven como soportes y facilitadoras del proceso. Por ejemplo, conviene utilizar tecnologías accesibles, fáciles, estándar, y orientadas al conocimiento como infraestructura básica (Internet, extranet, etc.). • Estructura del conocimiento flexible y estándar. El conocimiento está unido a las personas que lo crean, mantienen, y utilizan y puede ser más o menos explícito. Sus categorías y significados cambian con frecuencia. Las reglas para su actualización y uso deben ser simples, conocidas y asumidas por los utilizadores. • Canales múltiples para transferir los conocimientos, reforzándose mutuamente. • Cultura abierta al conocimiento. La forma de trabajar creando, compartiendo, y utilizando los conocimientos, suele demandar un cambio en los patrones actuales. La comunicación y la formación constituyen herramientas de refuerzo para los nuevos modelos. • Reconocimiento, valoración y recompensa de las conductas favorables a la creación, transmisión y utilización de los conocimientos. Quizás el factor de éxito más clave sea la motivación. Por tanto las actuaciones motivadoras para reforzar las conductas positivas están enfocadas al medio y largo plazo, y se enlazan con los sistemas de evaluación de resultados y desempeño, así como con la estructura retributiva. Las corporaciones deberían realizar los siguientes acciones: 20 CAPÍTULO 1. INTRODUCCIÓN • Evaluar el impacto de la gestión del conocimiento en la corporación o analizar la magnitud y los componentes del capital intelectual en el valor del mercado. • Determinar si el capital intelectual debe ser reinvertido para alinearlo con los objetivos corporativos. 1.1.10 Objetivos de la Gestión del Conocimiento De la gestión del conocimiento se ocupan varias disciplinas y subsiguientes teorías, tales como las ciencias sobre gestión o sobre educación, y sobre los sistemas de información o sobre comunicación. A pesar de las diferencias que pueden encontrarse según la óptica de estas disciplinas, podemos observar cuatro objetivos comunes a la hora de aplicar la gestión del conocimiento. Estos son: • Explotar el conocimiento existente del mejor modo posible. El conocimiento que se encuentra disperso entre los empleados que trabajan en localidades diferentes; el conocimiento que se haya almacenado en distintos medios tales como papel, audio, videos, bases de datos, etc. ¿Cómo puede una organización crear sinergia entre todas estas fuentes y mejorar su rendimiento permanentemente? Esencialmente, el objetivo que se persigue es hacer que el conocimiento existente sea más productivo. • Renovar el conocimiento de las personas y de la organización por medio de procesos de aprendizaje. Hay que aprender más rápidamente que los competidores y aplicar el nuevo conocimiento con la mayor eficiencia posible. Este objetivo se encuentra muy próximo al concepto de organización que aprende e innova. • Transformar el conocimiento de las personas en capital estructural de la organización. Los empleados constituyen el principal activo de la organización, pero estos pueden abandonarla en cualquier momento. Para que las organizaciones puedan servir a sus clientes sin altibajos, es necesario que el conocimiento individual pase a ser colectivo. Ello elimina los riesgos de pérdida de conocimiento y aumenta la velocidad a la que el conocimiento sea productivo. 1.1. GESTIÓN DEL CONOCIMIENTO 21 • Alinear la estrategia corporativa con las capacidades y competencias. Ya sea con las existentes así como con las nuevas que surgen para mejorar la ventaja competitiva. Para aprovecharse de las nuevas oportunidades, las organizaciones deben conocer sus competencias actuales. Para lograr estos objetivos las organizaciones deberán poner en práctica varias acciones que dependerán de los siguientes factores: — Estilo directivo y liderazgo. — Estructura organizativa y funcional. — Cultura. — Tecnología (facilitador). Las organizaciones quieren modos sistemáticos para la identificación y conversión de las habilidades, conocimientos y experiencias individuales en conocimiento de la organización. La capacidad de la organización para que el conocimiento se utilice depende sobretodo del grado de entusiasmo de las personas en compartirlo. Esto está muy ligado a la cultura, entendiendo por tal como el ambiente que influye en el comportamiento.. Si el conocimiento es cuidadosamente identificado, desarrollado y aplicado representa una fuente de ventaja competitiva ya que es potencialmente valioso, escaso, difícil de imitar y complicado de sustituir. Las áreas de aplicación, que son los objetivos primeros para la GC, pueden ser clasificadas en dos grupos: • Mejora de actividades. • Comprensión de lo que existe. La aplicación del conocimiento para que las personas realicen las tareas mejor es un área de beneficios claro. Las personas pueden mejorar el diseño de los productos, de los procesos o de los servicios así como las operaciones, ventas y análisis de inversión. Siendo las consecuencias de estas mejoras casi evidentes, los beneficios deben ser medidos y analizados en términos de mejora de resultados corporativos. La GC es un medio para la mejora corporativa y no en fin en sí misma. 22 CAPÍTULO 1. INTRODUCCIÓN Es esencial una colaboración estrecha con los usuarios del conocimiento para determinar donde se encuentran las áreas de mayor potencial de mejora y si ello sería visto como una contribución positiva. El segundo grupo lo constituyen las acciones para entender mejor lo que existe, lo que ocurre y como utilizarlo eficientemente. Un subgrupo de esta área de aplicación consiste en utilizar mejor y proteger el capital intelectual existente. Otro subgrupo lo constituye el uso de la GC para conocer tendencias tecnológicas, nuevas previsiones económicas o nuevas demandas del mercado. Aún cuando se capturen y se pongan a disposición los mejores conocimientos, si no se reutilizan no se obtendrán beneficios. Hay que motivar a los usuarios a la reutilización. Para ello los conocimientos deben cumplir las siguientes cualidades: • Relevancia. • Accesibilidad. • Fiabilidad. • Actualidad. 1.1.11 Globalización de la Economía y el Conocimiento El proceso de creación de la cibersociedad entraña la extensión de la globalidad a todos los aspectos de la vida. De todos estos aspectos, hoy día la economía es el factor más influyente, y por consiguiente la formación de una economía global es uno de los objetivos clave de la sociedad actual. Las tecnologías de la información están contribuyendo a la globalización. La globalización derrumba comodidades, rompe esquemas y rutinas, elimina privilegios y aumenta riesgos a comunidades políticas, empresas e instituciones, sin olvidar a los ciudadanos. La información enriquece a los pueblos que, tradicionalmente aislados por razones geográficas o políticas, acceden a las Tecnologías de la Información. La revolución de la información ha modificado radicalmente la organización de las grandes empresas, que se diseñaron con ideas y organización centralizadora y que ahora han pasado a descentralizarse casi en su totalidad y con grandes 1.1. GESTIÓN DEL CONOCIMIENTO 23 beneficios para estructuras aisladas eficientes, y han abierto la posibilidad del trabajo a domicilio. Varias décadas atrás, respetables profetas del cambio social, tales como Alvin Toffler y Peter Drucker, predijeron la emergencia de una nueva economía en la que el poder del cerebro, en lugar del poder de las máquinas, se convertiría en el centro de la economía y en el activo más crítico de las organizaciones. Hoy en día estas predicciones son ya una realidad: hemos entrado en la era del conocimiento en la que la mayoría de los trabajadores son considerados “trabajadores del conocimiento” y en la que el flujo de la información y del conocimiento tienen más impacto en los resultados que el movimiento de mercancías. Sin duda este desplazamiento de la economía es el resultado del crecimiento y dominio de la industria de los servicios que constituye en los países desarrollados el sector de mayor empleo y de mayor crecimiento (en Europa aproximadamente un 65% de la población activa) [3, Maestre]. Durante la ultima década, hemos contemplado cómo la utilización del conocimiento y de otros activos intelectuales ha desplazado a otros factores como fuente de ventaja competitiva, tanto para la reducción de costes como para la pronta satisfacción de la demanda de clientes. Además, el porcentaje de contenido inmaterial en un producto es cada vez más valorado por el mercado en su conjunto. El conocimiento en sus distintos ámbitos -acerca de nuestros clientes, nuestros competidores, nuestras personas, tecnologías, productos o servicios, procesos y sistemas- constituye una poderosa fuente de ventaja competitiva, probablemente la principal y, cuando el conocimiento es profundo, la más difícilmente adquirible externamente o desarrollable internamente y, por tanto, la más valiosa. El conocimiento puede influir radicalmente en la forma de desarrollar la actividad de las organizaciones y puede incluso transformar la forma de hacer negocio. A medida que el comercio ha seguido desarrollándose, la contribución relativa de la información y el conocimiento al valor de las organizaciones continua creciendo. Esto se traduce en la valoración bursátil de las empresas. Como es notorio la valoración de las empresas en las que las expectativas de crecimiento o el conocimiento de marca son los puntos fuertes supera notablemente la relación valor bursátil/facturación de otras empresas consolidadas correspondientes a sectores productivos tradicionales. Los activos intangibles representan una proporción mayor del valor de mer- 24 CAPÍTULO 1. INTRODUCCIÓN cado comparado a los activos tangibles de capital, terrenos, edificios y bienes de equipo. 1.1.12 La Estrategia de Convertir los Datos en Conocimiento para la Empresa Las empresas están cambiando el modo de capturar, valorar y utilizar el conocimiento. El conocimiento corporativo se define como el quehacer diario y los procesos que definen el modo en que una organización lleva a cabo los negocios. Es preciso convertir el conocimiento en negocio mediante una adecuada gestión que mida y valore el conocimiento en los niveles clave: estratégico, del negocio y operativo. Las herramientas tecnológicas que requiere la empresa para una correcta gestión del conocimiento son: • Navegadores, como portales de acceso a la información, tanto a Internet, a través de la red Intranet de la empresa, como a las redes Extranet de socios y proveedores. Los navegadores deben incluir buscadores inteligentes. • Almacenamiento de datos (datawarehousing) con buenos almacenes de datos (datawarehouse). • Minería de datos (datamining) para facilitar el acceso de información y canales de distribución. • Asistentes digitales personales (PDA). • Tablones de anuncios electrónicos. • Sistemas de audio. • Groupware (trabajo en grupo). Incluyen tecnologías como correo-e, gestión documental, grupos de discusión, sistemas de apoyo a la decisión, tales como Lotus Notes, Exchange, etc. • Videoconferencias. • ...... 1.2. GOBIERNO ELECTRÓNICO 1.1.13 25 Nuevo Futuro del Conocimiento La dimensión globalizadora se extenderá prácticamente a todas las actividades de la sociedad. A medida que se globalice el mundo de los negocios e Internet crezca, se producirá un lugar de trabajo sin fisuras. La globalización facilita que disciplinas y proyectos que antes estaban divididos están ahora colaborando y no compiten entre sí. Está emergiendo un lenguaje común que antes no existía y que permite a la gente entenderse sin importar las fronteras. La misma puede observarse en la figura ?? de la página ??. Internet va a crear una sociedad global que estará más conectada gracias al correo electrónico y en breve por la videoconferencia y a las aplicaciones Web (www) [4, Joyanes]. 1.2 1.2.1 Gobierno Electrónico Introducción Las administraciones públicas del siglo XXI se enfrentan a un cambio en el tipo de relación con los ciudadanos. Se está evolucionando de un esquema administración - administrado hacia un modelo de oferente - demandante de 26 CAPÍTULO 1. INTRODUCCIÓN servicios. El e-Government es uno de los elementos clave de este nuevo escenario, cuyas principales señas de identidad son la irrupción e incorporación masiva de nuevas tecnologías, el incremento en la exigencia de calidad y la estructuración de nuevos servicios públicos. Al igual que ha venido ocurriendo con el sector privado, el sector público ha visto cómo las tecnologías de la información y la comunicación han comenzado a irrumpir en los procedimientos y en el funcionamiento de la administración pública, proclamando mayores dosis de eficiencia, más transparencia y mayor agilidad en la prestación de servicios a los ciudadanos [10]. La mayor parte de estas tecnologías han mostrado su valor añadido en el mundo de la empresa y, con ligeras modificaciones, comienzan a ser abrazadas por el sector público, en algunos casos en busca de eficiencias que impacten positivamente las maltrechas finanzas públicas y, en otros, como respuesta a una ciudadanía que demanda más información, más transparencia y más eficiencia en la administración pública. La adopción de las TIC se ha convertido para los gobiernos de todo el mundo no sólo en un catalizador de una renovación desesperadamente necesitada, sino también en elemento central de desarrollo en la medida en que empuja a ciudadanos y empresarios a participar de las posibilidades de la nueva economía. Sin entrar a valorar si la incorporación de la e en la administración pública para convertirla en gobierno electrónico es buena o mala, resulta un hecho que se trata de un fenómeno imparable y que la cuestión fundamental para los gobiernos no es si deben o no embarcarse en un Plan de Gobierno Electrónico sino cuándo y cómo deben hacerlo. El gobierno es la industria más grande del mundo. Según la OCDE , las compras gubernamentales suponen en promedio el 17% del PIB de cualquier país, por tanto, el nivel de eficiencia en el funcionamiento de la administración pública afecta de forma significativa a la competitividad del país en general. Las empresas relacionadas con las TIC han llevado a cabo enormes esfuerzos de inversión que han permitido no sólo que la famosa Ley de Moore de que la capacidad de procesamiento de un chip se duplica cada 18 meses se cumpla con creces sino que, en general, la tecnología se haya hecho omnipresente en nuestra vida cotidiana para facilitar la atención de forma más sencilla y más 1.2. GOBIERNO ELECTRÓNICO 27 rápida de necesidades como la compra de un billete de avión, la solicitud de una línea telefónica o el envío de dinero a un hijo que está estudiando lejos del hogar. Por supuesto, los gobiernos de todo el mundo han seguido la estela del sector privado y han incorporado tecnologías avanzadas tanto en el manejo interno de sus operaciones como en la gestión de sus relaciones con la ciudadanía. Los herramientas ERP (Enterprise Resource Planning) o CRM (Customer Relationship Management), inicialmente diseñadas para el mundo de la empresa, han experimentado una importante nivel de adopción por parte del sector público. Si bien hay que reconocer la contribución de la tecnología a este proceso modernizador, la experiencia aconseja que los responsables de los proyectos de transformación de la administración pública no sitúen la tecnología en el centro del proyecto sino como herramienta de apoyo fundamental. En el diseño de estos proyectos resulta crítico evitar ciertos errores que se han dado con relativa frecuencia: • automatizar la ineficiencia. • informatizar la corrupción. • rediseñar la administración pública para que funcione de acuerdo con un programa de software. La tecnología debe situarse al servicio de la modernización de la administración, en lugar de diseñar la modernización en función de la tecnología. Las posibilidades de transformación de la administración pública utilizando las nuevas tecnologías son espectaculares y los gobiernos pioneros del gobierno electrónico como los de Australia o Canadá, no sólo muestran con orgullo sus logros y los comparten con la comunidad internacional sino que refuerzan constantemente sus ya de por sí ambiciosos planes de gobierno electrónico. Conviene en cualquier caso, introducir cierta dosis de realismo en la magia del gobierno electrónico. Los ahorros tardan en llegar por dos razones fundamentales. En primer lugar, se requieren elevadas tasas de uso de la solución que lleva un tiempo alcanzar. 28 CAPÍTULO 1. INTRODUCCIÓN En segundo, el gobierno electrónico aún no sustituye la forma tradicional de prestar servicios y el gobierno debe mantener ambas por un tiempo, lo cual, inicialmente incrementa los costos en lugar de disminuirlos. En realidad parece que el límite en las posibilidades de uso de las nuevas tecnologías está en la mente de los seres humanos. Suena a historia de ciencia ficción pensar que los cirujanos desde los Estados Unidos puedan realizar intervenciones quirúrgicas en pacientes que se encuentran en Europa o Africa. Pues es ya una realidad, y un hospital estadounidense ha realizado ya 5 operaciones de este tipo. El cirujano en Estados Unidos dirige el bisturí a través de un mando conectado vía internet con el hospital en el que se encuentra el paciente mientras va siguiendo el proceso a través de una pantalla de televisión. Las posibilidades en el ámbito de la educación se presentan igualmente motivadoras y el Instituto Tecnológico de Monterrey es un excelente ejemplo. Según Douglas Holmes en su libro eGov: eBusiness Strategies for Government, el Tec de Monterrey es el sistema educativo geográficamente más disperso en el mundo proporcionando cursos online a 43.000 (datos del año 2000) estudiantes de México y el resto de América Latina. Volviendo al gobierno electrónico, algunas experiencias han estado operativas durante un período de tiempo suficientemente largo como para afirmar que efectivamente su impacto es ampliamente positivo y justifica con creces la inversión. Todas estas experiencias muestran que la transformación de la administración pública es un proceso complejo, que debe estar bien planificado, que requiere una aproximación gradual y, sobre todo, que debe ser participativo y contar con las aportaciones de todos aquellos que se verán afectados por el cambio: funcionarios del gobierno, empresarios, ciudadanos, sociedad civil y la colectividad académica. 1.2. GOBIERNO ELECTRÓNICO 1.2.2 29 Definición Se entiende por e-Government el conjunto de procesos y sistemas soporte de los mismos, que permiten el acceso telemático interno (gestores) y externo (usuarios) a los servicios ofrecidos por una administración, tanto para la consulta de información como para la teletramitación. El e-Government, como elemento integrante del nuevo esquema de relación entre la administración y los ciudadanos, exige una adaptación y evolución de los sistemas de información públicos actuales. En el sistema resultante, que tecnológicamente ha de sustentarse en un modelo único e integrado, aparecen cuatro conceptos clave, sobre los que debe pivotar su definición y alcance: 1. Accesibilidad. Profundizando en una administración transparente y abierta al ciudadano, aumentando el número de servicios ofrecidos, mejorando la calidad de los mismos, reforzando el papel de terceros colaboradores en los procesos de gestión y avanzando hacia el modelo de ventanilla única. Desde el punto de vista de los sistemas de información, la accesibilidad hace referencia al acceso interno a aplicaciones y datos, así como, fundamentalmente, al acceso externo, en su doble vertiente de consulta y teletramitación; ambos, bajo la cobertura de los aspectos relativos a la seguridad, tanto desde un punto de vista técnico como normativo. 30 CAPÍTULO 1. INTRODUCCIÓN 2. Conocimiento. Estructurando, consolidando e interrelacionando los datos de los sistemas de información para que, a partir de los mismos, sea posible generar información y conocimiento de la realidad que nos rodea en todos sus niveles de agregación: país / comunidad / provincia / municipio / ciudadano. Tecnológicamente, esto implica diseñar y alimentar un repositorio de información corporativo, dotándolo de herramientas (Business Intelligence y Data Warehouse) para explotar los datos en dos vertientes básicas: información a terceros e información a los gestores públicos. 3. Eficacia. Logrando optimizar la actividad operativa de las administraciones, facilitando la agilidad y flexibilidad de la gestión y la racionalización de esfuerzos y recursos. Para ello, el sistema debe abarcar el conjunto de procesos, actividades, tareas y flujos de información de la administración de forma normalizada (procedimientos, documentos, formularios, etc.) e integrada (dato único, imágenes). En otras palabras, el sistema ha de comunicarse con los cuatro grandes grupos de procesos que operan en los sistemas de la administración pública: la gestión económicofinanciera, la gestión de recursos humanos, los procesos departamentales y la gestión de expedientes, que engloba, estructura y da coherencia a todos ellos. 4. Solidez y evolución. Desarrollando los componentes del sistema sobre una arquitectura de sistemas de información basada en el modelo de proceso definido e implementando una plataforma tecnológica avanzada, robusta y con capacidad de evolución, que facilite la incorporación de nuevas herramientas de gestión y permita la reutilización de componentes. Una tentadora aproximación al e-Government desde una perspectiva únicamente de accesibilidad proporciona a corto plazo éxitos aparentes, pero choca inmediatamente con las necesidades derivadas de disponibilidad de información veraz y actualizada y con los requerimientos de la teletramitación, en cuanto a la integración de sus resultados con la tramitación tradicional. Frente a dicha tentación, que tantas experiencias frustradas ha generado, el planteamiento de Ibermática se basa en diseñar un escenario completo e 1.2. GOBIERNO ELECTRÓNICO 31 integrado con los elementos definidos previamente. A partir de dicho objetivo final, cada organización, en función de su situación actual, necesidades, prioridades y recursos, podrá abordarlo en diferentes etapas, secuenciando sus diferentes componentes. Pero no debería perderse la visión global del proceso, si se quiere que la implantación del proyecto sea, en el corto, medio y largo plazo, un éxito. 1.2.3 Modalidades del Gobierno Electrónico Existen 4 ámbitos de operación en la administración pública y el nombre de cada uno define claramente el concepto al que alude [11] [10]: 1. Gobierno-Ciudadanos (G2C) En este ámbito el gobierno debe centrarse en construir puntos únicos de entrada que permitan un acceso fácil y eficiente a cualquier servicio de la administración pública. Estos servicios pueden ser renovaciones de licencia, certificados de nacimiento / muerte, certificados de matrimonio, así como la asistencia a los ciudadanos en los servicios básicos tales como la educación, la atención de la salud, bibliotecas, etc. 2. Gobierno-Empresarios (G2B) En esta área el gobierno debe también construir puntos únicos de entrada, reducir procesos redundantes y facilitar la presentación de información, documentos legales, formularios de impuestos o cualquier otro documento de obligada presentación ante la administración pública. Entre los servicios prestados a las empresas se incluyen la obtención de información empresarial actual, descarga de formularios de solicitud, renovación de licencias, registro de las empresas, obtención de permisos, y el pago de impuestos. Los servicios ofrecidos a través de transacciones G2B también pueden ayudar al desarrollo de las empresas, específicamente el desarrollo de las pequeñas y medianas empresas. 3. Gobierno-Otros Gobiernos (G2G) En este aspecto, el gobierno debe buscar mecanismos que faciliten el uso compartido de información, eviten la duplicación de procedimientos y faciliten la gestión de trámites y documentos entre los diferentes niveles 32 CAPÍTULO 1. INTRODUCCIÓN de gobierno. Hay 2 (dos) niveles,: a nivel local o nacional y a nivel internacional. Los servicios G2G pueden ser utilizados como un instrumento de las relaciones internacionales. 4. Intragobierno (IG) En este ámbito el gobierno debe perseguir la eliminación de la corrupción, la reducción de costos, la mejora de los procedimientos internos de operación y la prestación de un óptimo servicio a los ciudadanos. 1.2.4 Las estrategias de Gobierno Electrónico A pesar de la relativa juventud del término gobierno electrónico o e-gobierno, en los últimos tres años han proliferado los documentos denominados estrategias de gobierno electrónico o planes de gobierno electrónico que, a la par que ordenan las acciones de los gobiernos que los diseñan, contribuyen a la consolidación del concepto e-gobierno. Si bien la aplicación de las tecnologías de la información al funcionamiento de la administración pública es casi tan vieja como la historia de la computadora, la combinación de estas tecnologías con la tecnologías relacionadas de telecomunicación con una visión renovadora del gobierno y su forma de relacionarse con los ciudadanos, es mucho más reciente. La generalización del término gobierno electrónico para referirse a lo descrito en la frase anterior, el establecimiento de departamentos de e-gobierno en las empresas de consultoría y de tecnología, así como la intensificación de la realización de estudios, rankings y ensayos sobre el e-gobierno es un fenómeno de los últimos cinco años. En cualquier caso, desde que en la primera mitad de los 90 internet cobra vida de forma parecida a como lo conocemos hoy, no en sus orígenes como ARPANET hace más de treinta años cuando Larry Roberts y su equipo buscaban un mecanismo seguro de comunicación ante un ataque a los mecanismos de comunicación tradicionales, los esfuerzos aislados por utilizarlo en la administración pública se han sucedido y algunos han quedado para la historia como pioneros del e-gobierno. Como ya se ha mencionado, es justo reconocer en este punto, la valiosa contribución en este aspecto de David Osborne y Ted Gaebler con su libro Reinventing Government, el cual se convirtió en fuente de inspiración para 1.2. GOBIERNO ELECTRÓNICO 33 funcionarios públicos de todo el mundo durante la década de los 90, aluden a las tecnologías de la información y la comunicación (TICs) como la excusa que los gobiernos necesitaban para cambiar y que los medios de comunicación precisaban para sentir cierta atracción por esta transformación. Inspirados por este libro y otros documentos acerca de las posibilidades de las TIC como herramienta de transformación de la administración pública, algunos gobiernos, para ser precisos, algunas agencias o departamentos dentro de los gobiernos, se lanzan a experimentar con la posibilidad de empezar a manejar sus relaciones con los ciudadanos a través de internet. En general, se trataba de esfuerzos aislados, dentro de agencias que tenían la fortuna de contar con algún recurso financiero extra para experimentar con las posibilidades del e-gobierno y, sobre todo, que contaban que con un líder dispuesto a asumir ciertos riesgos y manejar todas las dificultades de este tipo de procesos. Estas actuaciones individuales, pronto se empiezan a extender y, a la vez que permiten comenzar a mostrar resultados a los escépticos acerca de las posibilidades del gobierno electrónico, generan inquietud acerca de como poner orden en cada gobierno, acerca de este nuevo virus que se extiende de forma imparable ya no sólo por la espíritu renovador de ciertos funcionarios públicos, sino por demanda popular. La población quiere que su gobierno sea eficiente, transparente y fácilmente accesible, y descubre que internet puede aportar mucho en esa línea, así es que comienza a demandar servicios públicos en línea, que además de ahorrar tiempo y dinero de desplazamientos, están operativos las veinticuatro horas del día, los siete días de la semana, durante todos los días del año. La proliferación de estas iniciativas aisladas, comienza a generar la preocupación en los gobiernos acerca de cómo establecer mecanismos de coordinación que garanticen tanto un óptimo aprovechamiento de los recursos públicos como la posibilidad de integración de las diferentes soluciones a medida que el gobierno avanza en la senda del gobierno electrónico. Es justo esta inquietud la que empuja a los gobiernos a establecer planes o estrategias de gobierno electrónico y sentar las bases institucionales para llevar a cabo las iniciativas de gobierno electrónico con el necesario orden y la requerida eficiencia. 34 CAPÍTULO 1. INTRODUCCIÓN Funciones de una Estrategia de Gobierno Electrónico Un plan de gobierno electrónico cumple un rol que va más allá del aspecto coordinador y racionalizador del gasto público. Las principales contribuciones de un plan de gobierno electrónico podrían resumirse en los siguientes puntos: • Mapa-guía para el avance del e-gobierno, que orienta las actuaciones de todos los implicados. • Mecanismo de control, que permite asignar responsabilidades y monitorear el cumplimiento de las mismas. • Elemento de referencia para la resolución de dudas operativas relacionadas con la implementación del e-gobierno. • Instrumento de organización y manejo del cambio cultural necesario. • Herramienta de marketing para la venta política del concepto que, bien utilizado, permite conseguir el indispensable apoyo político. • Mecanismo de captación de recursos financieros que puede servir de referente para el establecimiento de alianzas con el sector privado, para la incorporación de inversores privados a proyectos de gobierno electrónico y para la asignación de los recursos públicos a aquellos proyectos que aporten mayor valor añadido al país. Elementos Para la Creación de una Estrategia de Gobierno Electrónico Uno de los pilares de las estrategias de gobierno electrónico de Estados Unidos, Reino Unido y Australia, entre otros países que han logrado avances importantes en gobierno electrónico, es la definición de una serie de estándares tecnológicos que deben respetar todos los proyectos de gobierno electrónico que se desarrollen en la órbita del respectivo gobierno mencionado. La mayor parte de estas estrategias de gobierno electrónico no son documentos interminables e ininteligibles, por el contrario, tienen entre treinta y cincuenta páginas y suelen estar bastante enfocados, incluyendo la siguiente información: 1.2. GOBIERNO ELECTRÓNICO 35 • Análisis de la situación actual que permite identificar los problemas fundamentales. • Visión estratégica del tipo de gobierno que se quiere construir. • Objetivos a alcanzar para materializar esa visión. • Areas de acción con su respectivo nivel de prioridad. • Actividades a realizar en cada área, responsables e hitos. • Aspectos institucionales para el desarrollo del plan de e-gobierno electrónico. • Aspectos organizativos. Gestión del cambio institucional y manejo de los recursos humanos. • Aspectos legales. • Estrategia de marketing interno y externo. • Riesgos, dificultades y mecanismos para combatirlos. • Calendario. • Recursos. Capítulo 2 JAVA 37 38 CAPÍTULO 2. JAVA 2.1 Introducción al Lenguaje Java es un lenguaje orientado a objetos. Esto significa que posee ciertas características que hoy día se consideran estándares en los lenguajes OO: • Objetos. • Clases. • Métodos. • Subclases. • Herencia simple. • Enlace dinámico. • Encapsulamiento. Para programar orientado a objetos es necesario primero diseñar un conjunto de clases. La claridad, eficiencia y mantenibilidad del programa resultante dependerá principalmente de la calidad del diseño de clases. Un buen diseño de clases significará una gran economía en tiempo de desarrollo y mantención. Lamentablemente se necesita mucha habilidad y experiencia para lograr diseños de clases de calidad. Un mal diseño de clases puede llevar a programas OO de peor calidad y de más alto costo que el programa equivalente no OO [5, Castillo-Cobo-Solares]. Por qué entonces la ventaja de programar en un lenguaje OO, si se requiere una experiencia que probablemente una persona nunca tendrá el tiempo de práctica para llegar a obtenerla. La respuesta a este interrogante es que Java es un lenguaje multiparadigma (como muchos otros lenguajes de programación). No se necesita hacer un diseño de clases para programar una aplicación de mil líneas. Entonces otro interrogante podrá ser porque no programar con otro lenguaje más simples, como puede ser Visual Basic, si no se necesita que sea OO. La respuesta a ésto es la gran ventaja de un lenguaje OO, que son las bibliotecas de clases que se pueden construir para la aplicación [12, Joyanes Aguilar-Zahonero Martínez]. Una biblioteca de clases cumple el mismo objetivo de una biblioteca de procedimientos en una lenguaje como C. Sin embargo: 2.1. INTRODUCCIÓN AL LENGUAJE 39 Una biblioteca de clases es mucho más fácil de usar que una biblioteca de procedimientos, incluso para programadores sin experiencia en orientación a objetos. Esto se debe a que las clases ofrecen mecanismos de abstracción más eficaces que los procedimientos. Se puede distinguir entre varios tipos de programadores en Java: — El diseñador de clases: es el encargado de definir qué clases ofrece una biblioteca y cuál es la funcionalidad que se espera de estas clases. Esta persona tiene que ser muy hábil y de mucha experiencia. Un diseño equivocado puede conducir a clases que son incomprensibles para los clientes de la biblioteca. — El programador de clases de biblioteca: sólo programa la clases especificadas por el diseñador de clases. Esta persona debe entender orientación a objetos, pero no requiere mayor experiencia en diseño de clases. — El cliente de bibliotecas: es el programador de aplicaciones. Él sólo usa las clases que otros han diseñado y programado. Como en el caso anterior necesita entender orientación a objetos y conocer la biblioteca que va usar, pero no necesita mayor experiencia. Tanto programadores de clases como clientes de bibliotecas pueden llegar a convertirse en buenos diseñadores de clases en la medida que adquieran experiencia, comparando los diseños de las bibliotecas que utilicen. Por lo tanto es importante destacar que no se necesita gran experiencia en diseño orientado a objetos para poder aprovechar las ventajas de la orientación a objetos [13, Joyanes Aguilar]. 2.1.1 Bibliotecas de Clases Estándares de Java Toda implementación de Java debe tener las siguientes bibliotecas de clases: • Manejo de archivos. • Comunicación de datos. • Acceso a la red Internet.. • Acceso a bases de datos. 40 CAPÍTULO 2. JAVA • Interfaces gráficas. La interfaz de programación de estas clases es estándar, es decir en todas ellas las operaciones se invocan con el mismo nombre y los mismos argumentos. 2.1.2 Java es Multiplataforma Los programas en Java pueden ejecutarse en cualquiera de las siguientes plataformas, sin necesidad de hacer cambios: Windows. Power/Mac. Unix (Solaris, Silicon Graphics, ...). La compatibilidad es total: A nivel de fuentes: el lenguaje es exactamente el mismo en todas las plataformas. A nivel de bibliotecas: en todas las plataformas están presentes las mismas bibliotecas estándares. A nivel del código compilado: el código intermedio que genera el compilador es el mismo para todas las plataformas. Lo que cambia es el intérprete del código intermedio. 2.1.3 Características del Lenguaje Java • Robustez En Java no se pueden cometer los cuatro errores que se mencionarán a continuación: Java siempre chequea los índices al acceder a un arreglo. Java realiza chequeo de tipos durante la compilación (al igual que C). En una asignación entre punteros el compilador verifica que los tipos sean compatibles. 2.1. INTRODUCCIÓN AL LENGUAJE 41 Además, Java realiza chequeo de tipos durante la ejecución (cosa que C y C++ no hacen). Cuando un programa usa un cast para acceder a un objeto como si fuese de un tipo específico, se verifica durante la ejecución que el objeto en cuestión sea compatible con el cast que se le aplica. Si el objeto no es compatible, entonces se levanta una excepción que informa al programador la línea exacta en donde está la fuente del error. Java posee un recolector de basuras que administra automáticamente la memoria. Es el recolector el que determina cuando se puede liberar el espacio ocupado por un objeto. El programador no puede liberar explícitamente el espacio ocupado por un objeto. Java no posee aritmética de punteros, porque es una propiedad que no se necesita para programar aplicaciones. En C sólo se necesita la aritmética de punteros para programa malloc/free o para programar el núcleo del sistema operativo. Por lo tanto Java no es un lenguaje para hacer sistemas operativos o administradores de memoria, pero sí es un excelente lenguaje para programar aplicaciones. • Flexibilidad Java combina flexibilidad, robustez y legibilidad gracias a una mezcla de chequeo de tipos durante la compilación y durante la ejecución. En Java se pueden tener punteros a objetos de un tipo específico y también se pueden tener punteros a objetos de cualquier tipo. Estos punteros se pueden convertir a punteros de un tipo específico aplicando un cast, en cuyo caso se chequea en tiempo de ejecución de que el objeto sea de un tipo compatible. El programador usa entonces punteros de tipo específico en la mayoría de los casos con el fin de ganar legibilidad y en unos pocos casos usa punteros a tipos desconocidos cuando necesita tener flexibilidad. Por lo tanto Java combina la robustez de Pascal con la flexibilidad de Lisp, sin que lo programas pierdan legibilidad en ningún caso. • Administración Automática de la Memoria En Java los programadores no necesitan preocuparse de liberar un trozo de memoria cuando ya no lo necesitan. Es el recolector de basuras el que determina cuando se puede liberar la memoria ocupada por un objeto. 42 CAPÍTULO 2. JAVA Un recolector de basuras es un gran aporte a la productividad. Se ha estudiado en casos concretos que los programadores han dedicado un 40% del tiempo de desarrollo a determinar en qué momento se puede liberar un trozo de memoria. Además este porcentaje de tiempo aumenta a medida que aumenta la complejidad del software en desarrollo. Es relativamente sencillo liberar correctamente la memoria en un programa de 1000 líneas. Sin embargo, es difícil hacerlo en un programa de 10000 líneas. Y se puede postular que es imposible liberar correctamente la memoria en un programa de 100000 líneas. Para entender mejor esta afirmación, se podría suponer que se realizó un programa de 1000 líneas hace un par de meses y ahora se necesita hacer algunas modificaciones. Ahora, para esta altura ya se habrán olvidado gran parte de los detalles de la lógica de ese programa y no será sencillo determinar si un puntero referencia un objeto que todavía existe, o si ya fue liberado. Peor aún, supóngase que el programa fue hecho por otra persona y evalúe cuán probable es cometer errores de memoria al tratar de modificar ese programa. Volviendo al caso de un programa de 100000 líneas. Este tipo de programas los desarrolla un grupo de programadores que pueden tomar años en terminarlo. Cada programador desarrolla un módulo que eventualmente utiliza objetos de otros módulos desarrollados por otros programadores. Entonces, quién libera la memoria de estos objetos, cómo se ponen de acuerdo los programadores sobre cuándo y quién libera un objeto compartido, o cómo probar el programa completo ante las infinitas condiciones de borde que pueden existir en un programa de 100000 líneas. Es inevitable que la fase de prueba dejará pasar errores en el manejo de memoria que sólo serán detectados más tarde por el usuario final. Probablemente se incorporan otros errores en la fase de mantención. Resumiendo, se puede concluir que: todo programa de 100000 líneas que libera explícitamente la memoria tiene errores latentes, sin un recolector de basuras no hay verdadera modularidad y un recolector de basuras resuelve todos los problemas de manejo de memoria en forma trivial. El interrogante sería cuál es el impacto de un recolector de basura en el desempeño de un programa. El sobrecosto de la recolección de basuras no es superior al 100%. Es decir si se tiene un programa que libera explícitamente la memoria y que toma tiempo X, el mismo programa modificado de modo que utilice un recolector de basuras para liberar la memoria tomará un tiempo no 2.2. ESTRUCTURA GENERAL DE UN PROGRAMA JAVA 43 superior a 2X. Este sobrecosto no es importante si se considera el periódico incremento en la velocidad de los procesadores. El impacto que un recolector de basura en el tiempo de desarrollo y en la confiabilidad del software resultante es muchos más importante que la pérdida en eficiencia. 2.2 Estructura General de un Programa Java En el siguiente ejemplo se presenta la estructura habitual de un programa realizado en cualquier lenguaje orientado a objetos u OOP (Object Oriented Programming), y en particular en el lenguaje Java: import java.awt.*; import java.lang.String; import java.lang.Integer; import java.awt.event.WindowEvent; import java.util.*; import java.awt.TextField; public class Simu extends Frame implements ActionListener,ItemListener{ MenuBar barra; m1 =new Menu(“Archivo”); barra.add(m1); m2 =new Menu(“Ver”); barra.add(m2); .... public static void main(String argv [ ]){ Simu menus = new Simu(); menus.setTitle(“Simulación de Redes”); menus.setVisible(true); } } 44 CAPÍTULO 2. JAVA Aparece una clase que contiene el programa principal Simu (aquel que contiene la función main()) y algunas clases de usuario (las específicas de la aplicación que se está desarrollando) que son utilizadas por el programa principal. La aplicación se ejecuta por medio del nombre de la clase que contiene la función main(). Las clases de Java se agrupan en packages, que son librerías de clases. Si las clases no se definen como pertenecientes a un package, se utiliza un package por defecto (default) que es el directorio activo. 2.3 Conceptos Básicos 2.3.1 Clase Una clase es una agrupación de datos (variables o campos) y de funciones (métodos) que operan sobre esos datos. A estos datos y funciones pertenecientes a una clase se les denomina variables y métodos o funciones miembro. La programación orientada a objetos se basa en la programación de clases [13, Joyanes]. Un programa se construye a partir de un conjunto de clases. Una vez definida e implementada una clase, es posible declarar elementos de esta clase de modo similar a como se declaran las variables del lenguaje (int, double, String). Los elementos declarados de una clase se denominan objetos de la clase. De una única clase se pueden declarar o crear numerosos objetos. La clase es lo genérico: es el patrón o modelo para crear objetos. Cada objeto tiene sus propias copias de las variables miembro, con sus propios valores, en general distintos de los demás objetos de la clase. Las clases pueden tener variables static, que son propias de la clase y no de cada objeto [14, Bosz]. Ejemplo: public abstract class FuncionActivacion implements Cloneable,Serializable{ /*constructor sin argumentos que permite la herencia */ public FuncionActivacion () { } } 2.3. CONCEPTOS BÁSICOS 2.3.2 45 Herencia La herencia permite que se puedan definir nuevas clases basadas en clases existentes, lo cual facilita reutilizar código previamente desarrollado. Si una clase deriva de otra (extends) hereda todas sus variables y métodos. La clase derivada puede añadir nuevas variables y métodos y/o redefinir las variables y métodos heredados. En Java, a diferencia de otros lenguajes orientados a objetos, una clase sólo puede derivar de una única clase, con lo cual no es posible realizar herencia múltiple en base a clases. Sin embargo es posible “simular” la herencia múltiple en base a las interfaces. 2.3.3 Interface Una interface es un conjunto de declaraciones de funciones. Si una clase implementa (implements) una interface, debe definir todas las funciones especificadas por la interface. Una clase puede implementar más de una interface, representando una forma alternativa de la herencia múltiple. Una interface puede derivar de otra o incluso de varias interfaces, en cuyo caso incorpora todos los métodos de las interfaces de las que deriva. Ejemplo: La clase TangenteHiperbólica se extiende de la clase FunciónActivación que implementa la interface Serializable. /*función de activación tangente hiperbólica */ public class TangenteHiperbolica extends FuncionActivacion implements Serializable{ /*constructor sin argumentos */ public TangenteHiperbolica () { } } 2.3.4 Package Un package es una agrupación de clases. Existen una serie de packages incluidos en el lenguaje. 46 CAPÍTULO 2. JAVA Además el programador puede crear sus propios packages. Todas las clases que formen parte de un package deben estar en el mismo directorio. Los packages se utilizan con las siguientes finalidades: 1. Para agrupar clases relacionadas. 2. Para evitar conflictos de nombres. En caso de conflicto de nombres entre clases importadas, el compilador obliga a cualificar en el código los nombres de dichas clases con el nombre del package. 3. Para ayudar en el control de la accesibilidad de clases y miembros. Por las razones citadas, durante la etapa de Diseño del Software desarrollado, se ha decido crear dos paquetes, calculos e interfase, utilizando la sentencia package. package myprojects.simu; import myprojects.calculos.*; import myprojects.interfase.*; 2.3.5 La Jerarquía de Clases de Java (API) Durante la generación de código en Java, es recomendable y casi necesario tener siempre a la vista la documentación on-line del API de Java 1.1 o Java 1.2. En dicha documentación es posible ver tanto la jerarquía de clases, es decir la relación de herencia entre clases, como la información de los distintos packages que componen las librerías base de Java. Es importante distinguir entre lo que significa herencia y package. Un package es una agrupación arbitraria de clases, una forma de organizar las clases. La herencia sin embargo consiste en crear nuevas clases en base a otras ya existentes. Las clases incluidas en un package no derivan en general de la misma clase. En la documentación on-line se presentan ambas visiones: “Package Index” y “Class Hierarchy”. La primera presenta la estructura del API de Java agrupada por packages, mientras que en la segunda aparece la jerarquía de clases. Hay que resaltar el hecho de que todas las clases en Java son derivadas 2.4. VARIABLES DENTRO DEL LENGUAJE JAVA 47 de la clase java.lang.Object, por lo que heredan todos los métodos y variables de ésta. Si se selecciona una clase en particular, la documentación muestra una descripción detallada de todos los métodos y variables de la clase. A su vez muestra su herencia completa (partiendo de la clase java.lang.Object). 2.4 Variables Dentro del Lenguaje Java Una variable en Java es un identificador que representa una palabra de memoria que contiene información. El tipo de información almacenado en una variable sólo puede ser del tipo con que se declaró esa variable. En Java hay dos tipos principales de variables: 1. Variables de tipos primitivos. Están definidas mediante un valor único y almacenan directamente ese valor siempre que pertenezca al rango de ese tipo. Por ejemplo una variable int almacena un valor entero como 1, 2, 0, -1, etc. Esto significa que al asignar una variable entera a otra variable entera, se copia el valor de la primera en el espacio que ocupa la segunda variable. 2. Variables referencia. Las variables referencia son referencias o nombres de una información más compleja: arrays u objetos de una determinada clase. Una referencia a un objeto es la dirección de un área en memoria destinada a representar ese objeto. El área de memoria se solicita con el operador new. Al asignar una variable de tipo referencia a objeto a otra variable se asigna la dirección y no el objeto referenciado por esa dirección. Esto significa que ambas variables quedan referenciando el mismo objeto. En Java una variable no puede almacenar directamente un objeto, como ocurre en C y C++. Por lo tanto cuando se dice en Java que una variable es un string, lo que se quiere decir en realidad es que la variable es una referencia a un string. Desde el punto de vista de su papel dentro del programa, las variables pueden ser: 1. Variables miembro de una clase: Se definen en una clase, fuera de cualquier método; pueden ser tipos primitivos o referencias. 48 CAPÍTULO 2. JAVA 2. Variables locales: Se definen dentro de un método o más en general dentro de cualquier bloque entre llaves {}. Se crean en el interior del bloque y se destruyen al finalizar dicho bloque. Pueden ser también tipos primitivos o referencias. En la Tabla 2.1 de la pág. 48 se muestra una declaración, el nombre de la variable introducida y el tipo de información que almacena la variable: Declaración int i; String s; int a []; int[]b; Identificador i s a b Tipo entero referencia a string referencia a arreglo de enteros referencia a arreglo de enteros Tabla 2.1: Tipos de Variables. En la Tabla 2.2 de la pág. 48 se muestran las dos grandes categorías de tipos para las variables en Java: Tipos Primitivos int, short, byte, long char, boolean float, double Referencias a Objetos Strings Arreglos otros objetos Tabla 2.2: Categorías de Variables. En la Tabla 2.3de la pág. 49 se indica para cada tipo primitivo el número de bits que se emplea en su representación y el rango de valores que se puede almacenar en las variables de estos tipos. Se dice que un tipo A es de mayor rango que un tipo B si A es un superconjunto de B. Esto quiere decir que las variables de tipo B siempre se pueden asignar a variables de tipo A (eventualmente con pérdida de significancia). Por ejemplo int es de mayor rango que short, que a su vez es de mayor rango que byte. Float y double son de mayor rango que int. Double es de mayor rango que float. Esto se puede quedar resumido de la siguiente manera: 2.4. VARIABLES DENTRO DEL LENGUAJE JAVA Tipo int short byte long boolean char float double Bits 32 16 8 64 1 16 32 64 Rango −231 ..231 − 1 −215 ..215 − 1 −27 ..27 − 1 −263 ..263 − 1 n/a n/a IEEE IEEE 49 Ejemplos 0,1,5,-120,... 0,1,5,-120,... 0,1,5,-120,... 0,1,5,-120,... false, true ‘a’,‘A’,‘0’,‘*’,... 1.2 1.2 Tabla 2.3: Tipos Primitivos de Variables. double > float > long > int > short > byte 2.4.1 Visibilidad y Vida de las Variables Se entiende por visibilidad, ámbito o scope de una variable, la parte de la aplicación donde dicha variable es accesible y por lo tanto puede ser utilizada en cualquier expresión. En Java todos las variables deben estar incluidas en una clase. En general las variables declaradas dentro de unas llaves {}, es decir dentro de un bloque, son visibles y existen dentro de estas llaves. Por ejemplo las variables declaradas al principio de una función existen mientras se ejecute la función; las variables declaradas dentro de un bloque if no serán válidas al finalizar las sentencias correspondientes a dicho if y las variables miembro de una clase (es decir declaradas entre las llaves {} de la clase pero fuera de cualquier método) son válidas mientras existe el objeto de la clase. Las variables miembro de una clase declaradas como public son accesibles a través de una referencia a un objeto de dicha clase utilizando el operador punto (.). Las variables miembro declaradas como private no son accesibles directamente desde otras clases. Las funciones miembro de una clase tienen acceso directo a todas las variables miembro de la clase sin necesidad de anteponer el nombre de un objeto de la clase. Sin embargo las funciones miembro de una clase B derivada de otra A, tienen acceso a todas las variables miembro de A declaradas como public o protected, pero no a las declaradas como private. Una clase derivada sólo puede acceder directamente a las variables y funciones miembro de su clase base declaradas como public o protected. Otra 50 CAPÍTULO 2. JAVA característica del lenguaje es que es posible declarar una variable dentro de un bloque con el mismo nombre que una variable miembro, pero no con el nombre de otra variable local. La variable declarada dentro del bloque oculta a la variable miembro en ese bloque. Para acceder a la variable miembro oculta será preciso utilizar el operador this. Uno de los aspectos más importantes en la programación orientada a objetos (OOP) es la forma en la cual son creados y eliminados los objetos. La forma de crear nuevos objetos es utilizar el operador new. Cuando se utiliza el operador new, la variable de tipo referencia guarda la posición de memoria donde está almacenado este nuevo objeto. Para cada objeto se lleva cuenta de por cuántas variables de tipo referencia es apuntado. La eliminación de los objetos la realiza el denominado garbage collector, quien automáticamente libera o borra la memoria ocupada por un objeto cuando no existe ninguna referencia apuntando a ese objeto. Lo anterior significa que aunque una variable de tipo referencia deje de existir, el objeto al cual apunta no es eliminado si hay otras referencias apuntando a ese mismo objeto. 2.5 Operadores en Java Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++. Estos operadores se describen brevemente a continuación. 2.5.1 Operadores Aritméticos Son operadores binarios (requieren siempre dos operandos) que realizan las operaciones aritméticas habituales: suma (+), resta (-), multiplicación (*), división (/) y resto de la división (%). 2.5.2 Operadores de Asignación Los operadores de asignación permiten asignar un valor a una variable. El operador de asignación por excelencia es el operador igual (=). La forma general de las sentencias de asignación con este operador es: variable = expression; 2.5. OPERADORES EN JAVA 51 Java dispone de otros operadores de asignación. Se trata de versiones abreviadas del operador (=) que realizan operaciones “acumulativas” sobre una variable. La siguiente Tabla 2.4 de la pág. 51, muestra estos operadores y su equivalencia con el uso del operador igual (=). Operador += -= =* =/ %= Utilización op1 + = op2 op1 - = op2 op1 * = op2 op1 / = op2 op1% = op2 ExpresiónEquivalente op1 = op1 + op2 op1 = op1 - op2 op1 = op1 * op2 op1 = op1 / op2 op1 = op1 % op2 Tabla 2.4: Operadores de asignación. 2.5.3 Operadores Unarios Los operadores más (+) y menos (-) unarios sirven para mantener o cambiar el signo de una variable, constante o expresión numérica. Su uso en Java es el estándar de estos operadores. 2.5.4 Operadores Incrementales Java dispone del operador incremento (++) y decremento (—). El operador (++) incrementa en una unidad la variable a la que se aplica, mientras que (—) la reduce en una unidad. Estos operadores se pueden utilizar de dos formas: 1. Precediendo a la variable (por ejemplo: ++i). En este caso primero se incrementa la variable y luego se utiliza (ya incrementada) en la expresión en la que aparece. 52 CAPÍTULO 2. JAVA 2. Siguiendo a la variable (por ejemplo: i++). En este caso primero se utiliza la variable en la expresión (con el valor anterior) y luego se incrementa. En muchas ocasiones estos operadores se utilizan para incrementar una variable fuera de una expresión. En este caso ambos operadores son equivalente. Si se utilizan en una expresión más complicada, el resultado de utilizar estos operadores en una u otra de sus formas será diferente. La actualización de contadores en bucles for es una de las aplicaciones más frecuentes de estos operadores. 2.5.5 Operadores Relacionales Los operadores relacionales sirven para realizar comparaciones de igualdad, desigualdad y relación de menor o mayor. El resultado de estos operadores es siempre un valor boolean (true o false) según se cumpla o no la relación considerada. La siguiente Tabla 2.5 de la pág. 52 muestra los operadores relacionales de Java. Operador > >= < <= == ! = Utilización op1 > op2 op1 >= op2 op1 < op2 op1 <= op2 op1 == op2 op1 != op2 El resultado es true si op1 es mayor que op2 si op1 es mayor o igual que op2 si op1 es menor que op 2 si op1 es menor o igual que op2 si op1 y op2 son iguales sio p1 y op2 son diferentes Tabla 2.5: Operadores relacionales. Estos operadores se utilizan con mucha frecuencia en las bifurcaciones y en los bucles, que se verán luego. Ejemplo de Operadores Incrementales y Operadores Relacionales en un método. public void cambiarParesEntrenamiento(double[ ] paresEntrenamiento){ 2.5. OPERADORES EN JAVA 53 /* inicialización de sus valores a partir de los valores pasados como argumentos */ for(int i = 0; i< paresEntrenamiento.length; i++) {for(int j = 0; j< numeroNeuronasEntrada; j++) {entradaEntrenamiento[i][j] = paresEntrenamiento[i][j]; } for(int j = 0; j< numeroSalidas; j++) {salidaEntrenamiento[i][j] = paresEntrenamiento[i][j+numeroNeuronasEntrada]; } } } 2.5.6 Operador de Concatenación de Cadenas de Caracteres (+) El operador más (+) se utiliza también para concatenar cadenas de caracteres. Por ejemplo, para escribir una cantidad con un rótulo puede utilizarse la sentencia: editor.append(“Error Obtenido:” + String.valueOf(imprimoError) + “\n”); editor.append(“Iteraciones:”+ String.valueOf(imprimoIteraciones) + “\n”); editor.append(“Inicio: ” + horaInicial.toString() + “\n”); editor.append(“Final: ” + horaFinal.toString() + “\n”); donde el operador de concatenación se utiliza dos veces para construir la cadena de caracteres que se desea imprimir. Las variables imprimoErrror, imprimoIteraciones, horaInicial, horaFinal son convertidas en cadena de caracteres para poder concatenarlas. 54 CAPÍTULO 2. JAVA 2.5.7 Precedencia de Operadores El orden en que se realizan las operaciones es fundamental para determinar el resultado de una expresión. Por ejemplo, el resultado de x/y*z depende de qué operación (la división o el producto) se realice primero. La Tabla 2.6 de la pág. 54 muestra el orden en que se ejecutan los distintos operadores en una sentencia, de mayor a menor precedencia: Nombre Postfijos Unarios De creación Multiplicativo Adición Shift Relacional Igualdad AND Or Excluyente Or Incluyente Logico AND Logico OR Condicional Asignación Sintáxis [ ] .(params) expr++ expr++expr —expr +expr -expr ! (type) expr */% +<< >> >>> <> <= >= instanceof == ! = & ^ | && || ?: = += -= *= /= %= &= ^= |= <<= >>= >>>= Tabla 2.6: Precedencia de Operadores. En Java, todos los operadores binarios, excepto los operadores de asignación, se evalúan de izquierda a derecha. Los operadores de asignación se evalúan de derecha a izquierda, lo que significa que el valor de la izquierda se copia sobre la variable de la derecha. 2.6 Estructuras de Programación Las estructuras de programación o estructuras de control permiten tomar decisiones y realizar un proceso repetidas veces. Son los denominados bifurcaciones y bucles. En la mayoría de los lenguajes de programación, este tipo de 2.6. ESTRUCTURAS DE PROGRAMACIÓN 55 estructuras son comunes en cuanto a concepto, aunque su sintaxis varía de un lenguaje a otro. La sintaxis de Java coincide prácticamente con la utilizada en C/C++, lo que hace que para un programador de C/C++ no suponga ninguna dificultad adicional. 2.6.1 Sentencias o Expresiones Una expresión es un conjunto variables unidos por operadores. Son órdenes que se le dan al computador para que realice una tarea determinada. Una sentencia es una expresión que acaba en punto y coma (;). Se permite incluir varias sentencias en una línea, aunque lo habitual es utilizar una línea para cada sentencia. A continuación se muestra un ejemplo de una línea compuesta de tres sentencias: i = 0; j = 5; x = i + j; 2.6.2 Comentarios Existen dos formas diferentes de introducir comentarios entre el código de Java (en realidad son tres, como pronto se verá). Son similares a la forma de realizar comentarios en el lenguaje C/C++. Los comentarios son tremendamente útiles para poder entender el código utilizado, facilitando de ese modo futuras revisiones y correcciones. Además permite que cualquier persona distinta al programador original pueda comprender el código escrito de una forma más rápida. Se recomienda acostumbrarse a comentar el código desarrollado. De esta forma se simplifica también la tarea de estudio y revisión posteriores. Java interpreta que todo lo que aparece a la derecha de dos barras “// ” en una línea cualquiera del código es un comentario del programador y no lo tiene en cuenta. El comentario puede empezar al comienzo de la línea o a continuación de una instrucción que debe ser ejecutada. La segunda forma de incluir comentarios consiste en escribir el texto entre los símbolos “ /* */ ”. Este segundo método es válido para comentar más de una línea de código. Por ejemplo: // Esta línea es un comentario int a=1; // Comentario a la derecha de una sentencia 56 CAPÍTULO 2. JAVA // Esta es la forma de comentar más de una línea utilizando // las dos barras. Requiere incluir dos barras al comienzo de cada línea /* Esta segunda forma es mucho más cómoda para comentar un número elevado de líneas ya que sólo requiere modificar el comienzo y el final. */ En Java existe además una forma especial de introducir los comentarios (utilizando /***/ más algunos caracteres especiales) que permite generar automáticamente la documentación sobre las clases y packages desarrollados por el programador. Una vez introducidos los comentarios, el programa javadoc.exe (incluido en el JDK) genera de forma automática la información de forma similar a la presentada en la propia documentación del JDK. La sintaxis de estos comentarios y la forma de utilizar el programa javadoc.exe se puede encontrar en la información que viene con el JDK. 2.6.3 Bifurcaciones Las bifurcaciones permiten ejecutar una de entre varias acciones en función del valor de una expresión lógica o relacional. Se tratan de estructuras muy importantes ya que son las encargadas de controlar el flujo de ejecución de un programa. Se exponen dos variantes del de tipo if. Bifurcación if Esta estructura permite ejecutar un conjunto de sentencias en función del valor que tenga la expresión de comparación. Ejemplo: se ejecuta si la expresión de comparación (error < errorMinimo) tiene valor true: protected void comprobarNuevoMinimo() { if (error < errorMinimo) {errorMinimo = error; vectorDisMinimo = (double[ ])(vectorDis.clone()); } /* fin del if */ } Las llaves {} sirven para agrupar en un bloque las sentencias que se han de ejecutar, y no son necesarias si sólo hay una sentencia dentro del if. 2.6. ESTRUCTURAS DE PROGRAMACIÓN 57 Bifurcación if else Análoga a la anterior, de la cual es una ampliación. Las sentencias incluidas en el else se ejecutan en el caso de no cumplirse la expresión de comparación (false), Ejemplo: public double decirSalidaActual(int indiceEtapa) { if(pila != null) {return pila[indiceEtapa];} else {System.out.println(“Fallo: Pila no creada”); return 0; } } 2.6.4 Bucles Un bucle se utiliza para realizar un proceso repetidas veces. Se denomina también lazo o loop. El código incluido entre las llaves {} (opcionales si el proceso repetitivo consta de una sola línea), se ejecutará mientras se cumpla unas determinadas condiciones. Hay que prestar especial atención a los bucles infinitos, hecho que ocurre cuando la condición de finalizar el bucle (booleanExpression) no se llega a cumplir nunca. Se trata de un fallo muy típico, habitual sobre todo entre programadores poco experimentados. Bucle while En el siguiente ejemplo se muestra que se ejecutará la sentencia fin++ mientras la expresión (capas.charAt(fin)!=‘,’ && capas.charAt(fin)!=-1) sea verdadera. for (int j=0; j < numeroCapas; j++) {int fin = principio; try { 58 CAPÍTULO 2. JAVA while (capas.charAt(fin) != ‘,’ && capas.charAt(fin) != -1) {fin++; } } } Bucle for A continuación se podrá apreciar la utilización del bucle for: /* calcular el nuevo vector de diseño */ for (int i = 0; i < vectorDis.length; i++) {vectorDis[i] = vectorDis[i] + learningRate * S[i]; } La sentencia int i = 0 (inicialización) se ejecuta al comienzo del for, e i++ (incremento) después de vectorDis[i] = vectorDis[i] + learningRate * S[i] (sentencia). La expresión booleana (vectorDis.length) se evalúa al comienzo de cada iteración; el bucle termina cuando la expresión de comparación toma el valor false. Bucle do while Es similar al bucle while pero con la particularidad de que el control está al final del bucle (lo que hace que el bucle se ejecute al menos una vez, independientemente de que la condición se cumpla o no). Una vez ejecutados las sentencias, se evalúa la condición: si resulta true se vuelven a ejecutar las sentencias incluidas en el bucle, mientras que si la condición se evalúa a false finaliza el bucle. do{ /* calcular el gradiente del vector fijar el vector de diseño */ 2.6. ESTRUCTURAS DE PROGRAMACIÓN 59 problema.fijoVector(vectorDis); /* incrementar el contador de iteraciones*/ step++; } while (error > errorDeseado && step < iteracionesMaximas); /* ... hasta que el error sea menor o igual que el deseado o */ /* se alcance el número de iteraciones pasado como argumento */ problema.fijoVector(vectorDis); Sentencia return Una forma de salir de un bucle es utilizar la sentencia return. Esta sentencia sale también de un método o de una función. En el caso de que la función devuelva alguna variable, este valor se deberá poner a continuación del return. public double devuelveErrorMinimo() {return errorMinimo; } Bloque try{...} catch{...} finally{...} Java incorpora en el propio lenguaje la gestión de errores. El mejor momento para detectar los errores es durante la compilación. Sin embargo prácticamente sólo los errores de sintaxis son detectados en esta operación. El resto de problemas surgen durante la ejecución de los programas. En el lenguaje Java, una Exception es un cierto tipo de error o una condición anormal que se ha producido durante la ejecución de un programa. Algunas excepciones son fatales y provocan que se deba finalizar la ejecución del programa. En este caso conviene terminar ordenadamente y dar un mensaje explicando el tipo de error que se ha producido. Otras excepciones, como por ejemplo no encontrar un fichero en el que hay que leer o escribir algo, pueden ser recuperables. En este caso el programa debe dar al usuario la 60 CAPÍTULO 2. JAVA oportunidad de corregir el error (dando por ejemplo un nuevo path del fichero no encontrado). Los errores se representan mediante clases derivadas de la clase Throwable, pero los que tiene que chequear un programador derivan de Exception (java.lang.Exception que a su vez deriva de Throwable). Existen algunos tipos de excepciones que Java obliga a tener en cuenta. Esto se hace mediante el uso de bloques try, catch y finally. El código dentro del bloque try está “vigilado”: Si se produce una situación anormal y se lanza como consecuencia una excepción, el control pasa al bloque catch que se hace cargo de la situación y decide lo que hay que hacer. Se pueden incluir tantos bloques catch como se desee, cada uno de los cuales tratará un tipo de excepción. Finalmente, si está presente, se ejecuta el bloque finally, que es opcional, pero que en caso de existir se ejecuta siempre, sea cual sea el tipo de error. En el caso en que el código de un método pueda generar una Exception y no se desee incluir en dicho método la gestión del error (es decir los bucles try/catch correspondientes), es necesario que el método pase la Exception al método desde el que ha sido llamado. Esto se consigue mediante la adición de la palabra throws seguida del nombre de la Exception concreta, después de la lista de argumentos del método. A su vez el método superior deberá incluir los bloques try/catch o volver a pasar la Exception. De esta forma se puede ir pasando la Exception de un método a otro hasta llegar al último método del programa, el método main(). 2.7 Clases en Java Las clases son el centro de la Programación Orientada a Objetos (OOP Object Oriented Programming). Algunos conceptos importantes de la POO son los siguientes: 1. Encapsulación: Las clases pueden ser declaradas como públicas (public) y como package (accesibles sólo para otras clases del package). Las variables miembro y los métodos pueden ser public, private, protected y package. De esta forma se puede controlar el acceso y evitar un uso inadecuado. 2.7. CLASES EN JAVA 61 2. Herencia: Una clase puede derivar de otra (extends), y en ese caso hereda todas sus variables y métodos. Una clase derivada puede añadir nuevas variables y métodos y/o redefinir las variables y métodos heredados. 3. Polimorfismo: Los objetos de distintas clases pertenecientes a una misma jerarquía o que implementan una misma interface pueden tratarse de una forma general e individualizada, al mismo tiempo. Esto facilita la programación y el mantenimiento del código. 2.7.1 Características Importantes de las Clases A continuación se enumeran algunas características importantes de las clases: 1. Todas las variables y funciones de Java deben pertenecer a una clase. No hay variables y funciones globales. 2. Si una clase deriva de otra (extends), hereda todas sus variables y métodos. 3. Java tiene una jerarquía de clases estándar de la que pueden derivar las clases que crean los usuarios. 4. Una clase sólo puede heredar de una única clase (en Java no hay herencia múltiple). Si al definir una clase no se especifica de qué clase deriva, por defecto la clase deriva de Object. La clase Object es la base de toda la jerarquía de clases de Java. 5. En un fichero se pueden definir varias clases, pero en un fichero no puede haber más que una clase public. Este fichero se debe llamar como la clase public que contiene con extensión *.java. Con algunas excepciones, lo habitual es escribir una sola clase por fichero. 6. Si una clase contenida en un fichero no es public, no es necesario que el fichero se llame como la clase. 7. Los métodos de una clase pueden referirse de modo global al objeto de esa clase al que se aplican por medio de la referencia this. 8. Las clases se pueden agrupar en packages, introduciendo una línea al comienzo del fichero (package packageName;). Esta agrupación en packages está relacionada con la jerarquía de directorios y ficheros en la que se guardan las clases. 62 CAPÍTULO 2. JAVA 2.7.2 Métodos o Funciones Miembros Métodos de Objeto Los métodos son funciones definidas dentro de una clase. Salvo los métodos static o de clase, se aplican siempre a un objeto de la clase por medio del operador punto (.). Dicho objeto es su argumento implícito. Los métodos pueden además tener otros argumentos explícitos que van entre paréntesis, a continuación del nombre del método. La primera línea de la definición de un método se llama declaración o header; el código comprendido entre las llaves {} es el cuerpo o body del método. Considérese el siguiente ejemplo: imprimoError=algor.devuelveErrorMinimo(); public double devuelveErrorMinimo() {return errorMinimo; } La Clase Object Como ya se ha dicho, la clase Object es la raíz de toda la jerarquía de clases de Java. Todas las clases de Java derivan de Object. La clase Object tiene métodos interesantes para cualquier objeto que son heredados por cualquier clase. Entre ellos se pueden citar los siguientes: 1. Métodos que pueden ser redefinidos por el programador: • clone(): Crea un objeto a partir de otro objeto de la misma clase. El método original heredado de Object lanza una CloneNotSupportedException. Si se desea poder clonar una clase hay que implementar la interface Cloneable y redefinir el método clone(). Este método debe hacer una copia miembro a miembro del objeto original. No debería llamar al operador new ni a los constructores. • equals(): Indica si dos objetos son o no iguales. Devuelve true si son iguales, tanto si son referencias al mismo objeto como si son objetos distintos con iguales valores de las variables miembro. 2.8. ALGUNAS CLASES DE UTILIDAD 63 • toString(): Devuelve un String que contiene una representación del objeto como cadena de caracteres, por ejemplo para imprimirlo o exportarlo. • finalize(): Este método ya se ha visto al hablar de los finalizadores. 2. Métodos que no pueden ser redefinidos (son métodos final ): • getClass(): Devuelve un objeto de la clase Class, al cual se le pueden aplicar métodos para determinar el nombre de la clase, su super-clase, las interfaces implementadas, etc. Se puede crear un objeto de la misma clase que otro sin saber de qué clase es. • notify(), notifyAll() y wait(): Son métodos relacionados con los threads (hilos). 2.8 2.8.1 Algunas Clases de Utilidad Clase Arrays Los arrays de Java (vectores, matrices, hiper-matrices de más de dos dimensiones) se tratan como objetos de una clase predefinida. Los arrays son objetos, pero con algunas características propias. Los arrays pueden ser asignados a objetos de la clase Object y los métodos de Object pueden ser utilizados con arrays. Algunas de sus características más importantes de los arrays son las siguientes: 1. Los arrays se crean con el operador new seguido del tipo y número de elementos. 2. Se puede acceder al número de elementos de un array con la variable miembro implícita length (por ejemplo, vect.length). 3. Se accede a los elementos de un array con los corchetes [ ] y un índice que varía de 0 a length-1. 4. Se pueden crear arrays de objetos de cualquier tipo. En principio un array de objetos es un array de referencias que hay que completar llamando al operador new. 64 CAPÍTULO 2. JAVA 5. Los elementos de un array se inicializan al valor por defecto del tipo correspondiente (cero para valores numéricos, la cadena vacía para Strings, false para boolean, null para referencias). 6. Como todos los objetos, los arrays se pasan como argumentos a los métodos por referencia. 7. Se pueden crear arrays anónimos (por ejemplo, crear un nuevo array como argumento actual en la llamada a un método). Inicialización de Arrays Los arrays se pueden inicializar con valores entre llaves {...} separados por comas. También los arrays de objetos se pueden inicializar con varias llamadas a new dentro de unas llaves {...}. Si se igualan dos referencias a un array no se copia el array, sino que se tiene un array con dos nombres, apuntando al mismo y único objeto. Ejemplo de creación de una referencia a un array: /*vector de pesos */ public double[ ] pesos; También existen arrays bidimensionales, que se crean de un modo muy similar al de C++ (con reserva dinámica de memoria). En Java una matriz es un vector de vectores fila, o más en concreto un vector de referencias a los vectores fila. Con este esquema, cada fila podría tener un número de elementos diferente. Una matriz se puede crear directamente en la siguiente forma: /*vector de las entradas de los pares de entrenamiento*/ protected double[ ][ ] entradaEntrenamiento; 2.8. ALGUNAS CLASES DE UTILIDAD 2.8.2 65 Clases String y StringBuffer Las clases String y StringBuffer están orientadas a manejar cadenas de caracteres. La clase String está orientada a manejar cadenas de caracteres constantes, es decir, que no pueden cambiar. La clase StringBuffer permite que el programador cambie la cadena insertando, borrando, etc. La primera es más eficiente, mientras que la segunda permite más posibilidades. Ambas clases pertenecen al package java.lang, y por lo tanto no hay que importarlas. Hay que indicar que el operador de concatenación (+) entre objetos de tipo String utiliza internamente objetos de la clase StringBuffer y el método append(). Los métodos de String se pueden utilizar directamente sobre literals (cadenas entre comillas), como por ejemplo: “Hola”.length(). Métodos de la Clase String Algunos métodos de String y la función que realizan: • String(...): Constructores para crear Strings a partir de arrays de bytes o de caracteres. • String(String str) yString(StringBuffer sb): Costructores a partir de un objeto String o StringBuffer. • charAt(int): Devuelve el carácter en la posición especificada. • getChars(int, int, char[ ], int): Copia los caracteres indicados en la posición indicada de un array de caracteres. • length(): Devuelve el número de caracteres de la cadena. • toLowerCase(): Convierte en minúsculas (puede tener en cuenta el locale). • toUpperCase(): Convierte en mayúsculas (puede tener en cuenta el locale). • valueOf (): Devuelve la representación como String de sus argumento. Admite Object, arrays de caracteres y los tipos primitivos. 66 CAPÍTULO 2. JAVA 2.8.3 Clase Double La clase java.lang.Double deriva de Number, que a su vez deriva de Object. Esta clase contiene un valor primitivo de tipo double. Algunos Métodos de la Clase Double • Double(double) y Double(String): Los constructores de esta clase. • doubleValue(), floatValue(), longValue(), intValue(), shortValue(), byteValue(): Métodos para obtener el valor del tipo primitivo. • String toString(), Double valueOf(String): Conversores con la clase String. • isInfinite(), isNaN(): Métodos de chequear condiciones. • equals(Object): Compara con otro objeto. 2.8.4 Clase Integer La clase java.lang.Integer tiene como variable miembro un valor de tipo int. Algunos Métodos de la Clase Integer • Integer(int) y Integer(String): Constructores de la clase. • doubleValue(), floatValue(), longValue(),intValue(), shortValue(), byteValue(): Conversores con otros tipos primitivos. • Integer decode(String), Integer parseInt(String), String toString(), Integer ValueOf(String): Conversores con String del sistema a partir del nombre de dicha propiedad. 2.9 2.9.1 El AWT (Abstract Windows Toolkit) Qué es el AWT El AWT (Abstract Windows Toolkit) es la parte de Java que se ocupa de construir interfaces gráficas de usuario. Aunque el AWT ha estado presente 2.9. EL AWT (ABSTRACT WINDOWS TOOLKIT) 67 en Java desde la versión 1.0, la versión 1.1 representó un cambio notable, sobre todo en lo que respecta al modelo de eventos. La versión 1.2 ha incorporado un modelo distinto de componentes llamado Swing, que también está disponible en la versión 1.1 como package adicional. 2.9.2 Creación de una Interface Gráfica de Usuario Para construir una interface gráfica de usuario hace falta: 1. Un “contenedor” o container, que es la ventana o parte de la ventana donde se situarán los componentes (botones, barras de desplazamiento, etc.) y donde se realizarán los dibujos. Se correspondería con un formulario o una picture box de Visual Basic. 2. Los componentes: menúes, botones de comando, barras de desplazamiento, cajas y áreas de texto, botones de opción y selección, etc. Se corresponderían con los controles de Visual Basic. 3. El modelo de eventos. El usuario controla la aplicación actuando sobre los componentes, de ordinario con el ratón o con el teclado. Cada vez que el usuario realiza una determinada acción, se produce el evento correspondiente, que el sistema operativo transmite al AWT. El AWT crea un objeto de una determinada clase de evento, derivada de AWTEvent. Este evento es transmitido a un determinado método para que lo gestione. En Visual Basic el entorno de desarrollo crea automáticamente el procedimiento que va a gestionar el evento (uniendo el nombre del control con el tipo del evento mediante el carácter _ ) y el usuario no tiene más que introducir el código. En Java esto es un poco más complicado: el componente u objeto que recibe el evento debe “registrar” o indicar previamente qué objeto se va a hacer cargo de gestionar ese evento. 2.9.3 Objetos “event source” y Objetos “event listener” El modelo de eventos de Java está basado en que los objetos sobre los que se producen los eventos (event sources) “registran” los objetos que habrán de gestionarlos (event listeners), para lo cual los event listeners habrán de disponer de los métodos adecuados. Estos métodos se llamarán automáticamente 68 CAPÍTULO 2. JAVA cuando se produzca el evento. La forma de garantizar que los event listeners disponen de los métodos apropiados para gestionar los eventos es obligarles a implementar una determinada interface Listener. Las interfaces Listener se corresponden con los tipos de eventos que se pueden producir. Las capacidades gráficas del AWT resultan pobres y complicadas en comparación con lo que se puede conseguir con Visual Basic, pero tienen la ventaja de poder ser ejecutadas casi en cualquier ordenador y con cualquier sistema operativo. 2.9.4 Proceso a Seguir Para Crear Una Aplicación Interactiva (Orientada a Eventos) Pasos que se pueden seguir para construir una aplicación orientada a eventos sencilla, con interface gráfica de usuario: 1. Determinar los componentes que van a constituir la interface de usuario (botones, cajas de texto, menúes, etc.). 2. Crear una clase para la aplicación que contenga la función main(). 3. Crear una clase Ventana, sub-clase de Frame, que responda al evento WindowClosing(). 4. La función main() deberá crear un objeto de la clase Ventana (en el que se van a introducir las componentes seleccionadas) y mostrarla por pantalla con el tamaño y posición adecuados. 5. Añadir al objeto Ventana todos los componentes y menúes que deba contener. 6. Definir los objetos Listener (objetos que se ocuparán de responder a los eventos, cuyas clases implementan las distintas interfaces Listener) para cada uno de los eventos que deban estar soportados. En aplicaciones pequeñas, el propio objeto Ventana se puede ocupar de responder a los eventos de sus componentes. En programas más grandes se puede crear uno o más objetos de clases especiales para ocuparse de los eventos. 7. Finalmente, se deben implementar los métodos de las interfaces Listener que se vayan a hacer cargo de la gestión de los eventos. 2.10. ERRORES FRECUENTES DE PROGRAMACIÓN 69 En la aplicación se podrá observar la gran variedad de componentes de AWT que se utilizaron. También se acudió a los paquetes de Swing , por ejemplo para la implementación de un hilo en la presentación de la aplicación. El objetivo de este capítulo ha sido brindar nociones leves sobre este lenguaje de programación, mostrando algunos ejemplos que se pueden encontrar en el código fuente de la aplicación. 2.10 Errores más Frecuentes en la Programación con Java A continuación se presenta una varios ejemplos de errores, vistos desde el punto de vista de la portabilidad, porque quizá el sine qua non de Java, en última instancia sea perseguir una verdadera independencia de plataforma. Los errores no tienen ningún orden de dificultad, no son más que algunos de ellos en los que puede caer cualquier programador. Hay muchísimas formas cometer fallos a la hora de programar en Java; algunas se deben simplemente a malos hábitos y son muy difíciles de encontrar, mientras que otros saltan a la vista al instante. Los errores de programación más obvios, también son los que con más frecuencia cometen los programadores. Quizás muchos de los fallos se evitarían si los programadores intentarán aplicar calidad a sus programas desde el momento mismo de concebir el programa, y no la tendencia de aplicar pureza a la aplicación en el último momento. 2.10.1 Scheduling de Hilos de Ejecución El scheduling de los hilos de ejecución, es decir, el tiempo que el sistema destina a la ejecución de cada uno de los hilos de ejecución, puede ser distinto en diferentes plataformas. Si no se tienen en cuenta las prioridades o se deja al azar la prevención de que dos hilos de ejecución accedan a un mismo objeto al mismo tiempo, el programa no será portable. El siguiente programa, por ejemplo, no es portable: class Contador implements Runnable 70 CAPÍTULO 2. JAVA { static long valor = 0; public void run() { valor += 1; } public static void main( String args[] ) { try { Thread hilo1 = new Thread( new Contador() ); hilo1.setPriority( 1 ); Thread hilo2 = new Thread( new Contador() ); hilo2.setPriority( 2 ); hilo1.start(); hilo2.start(); hilo1.join(); hilo2.join(); Systtem.out.println( valor ); } catch( Exception e ) { e.printStackTrace(); } } } Este programa puede no imprimir “2” en todas las plataformas, porque los dos hilos de ejecución no están sincronizados y, desgraciadamente, este es un problema muy profundo y no hay forma de detectar su presencia ni adivinar el momento en que va a ocurrir. 2.10. ERRORES FRECUENTES DE PROGRAMACIÓN 71 Una solución simple, y drástica, es hacer todos los métodos sincronizados. Pero esto también tiene problemas porque puede presentar como puntos sin retorno obvios, lo que en realidad es una corrupción de datos. El scheduling de los hilos de ejecución es uno de los aspectos más problemáticos de la programación Java, porque la naturaleza del problema se vuelve global, al intervenir varios hilos de ejecución. No se puede buscar el problema en una parte del programa, es imprescindible entender y tratar el programa en su globalidad. Además, hay ejemplos de contención de hilos que no serán detectados. Por ejemplo, en la clase Contador anterior no se detectará el problema ya que la contención está en el acceso al campo, en lugar de en el acceso al método. 2.10.2 Errores en el Uso de las Características de Portabilidad de Java Hay características de portabilidad en el API de Java. Es posible, pero menos portable, escribir código que no haga uso de estas características. Muchas de las propiedades del sistema proporcionan información sobre la portabilidad; por ejemplo, se pueden utilizar las propiedades del sistema para conocer cuál es el carácter definido como fin de línea o el que se emplea como terminador del archivo, para emplear el adecuado a la plataforma en que se está ejecutando el programa. Java proporciona dos métodos para facilitar la escritura de programas portables en este sentido. Por un lado, utilizar el método println() en vez de imprimir las cadenas seguidas del terminador de cadena embebido; o también, utilizar la expresión System.getProperty(“line.separator”) para conocer cuál es el terminado de línea que se utiliza en la plataforma en que se está ejecutando el programa. En general, el uso de las propiedades facilita en gran modo la portabilidad y debería extenderse su uso siempre que fuese aplicable. 2.10.3 Uso de Directorios Definidos Un error muy común y fácil de cometer entre los programadores, aunque igual de fácil de corregir es la designación en el código de nombre de los archivos, que 72 CAPÍTULO 2. JAVA pueden dar lugar a problemas de portabilidad, pero cuando se añade el directorio en que se sitúan, seguro que estos problemas aparecerán. Estos fallos son más comunes entre programadores con viejos hábitos, que eran dependientes del sistema operativo, y que son difíciles de olvidar. La forma más portable de construir un File para un fichero en un directorio es utilizar el constructor File(File,String). Otra forma sería utilizar las propiedades para conocer cuál es el separador de ficheros y el directorio inicial; o también, preguntarle al operador a través de una caja de diálogo. Otro problema es la noción de camino absoluto, que es dependiente del sistema. En Unix los caminos absolutos empiezan por /, mientras que en Windows pueden empezar por cualquier letra. Por esta razón, el uso de caminos absolutos que no sean dependientes de una entrada por operador o de la consulta de las propiedades del sistema no será portable. El ejemplo siguiente proporciona una clase útil para la construcción de nombres de archivos. La última versión del JDK es mucho más exhaustiva, y detecta más fácilmente los errores cometidos en los directorios y nombres de ficheros. import java.io.File; import java.util.StringTokenizer; public class UtilFichero { /* Crea un nuevo fichero con el nombre de otros. Si la base inicial es * nula, parte del directorio actual */ public static File dirInicial( File base,String path[] ) { File valor = base; int i=0; if( valor == null && path.length == 0 ) { valor = new File( path[i++] ); } 2.10. ERRORES FRECUENTES DE PROGRAMACIÓN for( ; i < path.length; i++ ) { valor = new File( valor,path[i] ); } return( valor ); } public static File desdeOrigen( String path[] ) { return( dirInicial( null,path ) ); } public static File desdeProp( String nombrePropiedad ) { String pd = System.getProperty( nombrePropiedad ); return( new File( pd ) ); } // Utilizando la propiedad del sistema “user.dir” public static File userDir() { return( desdeProp( “user.dir” ) ); } // Utilizando la propiedad del sistema “java.home” public static File javaHome() { return( desdeProp( “java.home” ) ); } // Utilizando la propiedad del sistema “user.home” 73 74 CAPÍTULO 2. JAVA public static File userHome() { return( desdeProp( “user.home” ) ); } /* Separa el primer argumento, utilizando el segundo argumetno como * carácter separador. * Es muy útil a la hora de crear caminos de ficheros portables */ public static String[] split( String p,String sep ) { StringTokenizer st = new StringTokenizer( p,sep ); String valor[] = new String[st.countTokens()]; for( int i=0; i < valor.length; i++ ) { valor[i] = st.nextToken(); } return( valor ); } } 2.10.4 Carga de Drivers JDBC El interfaz JDBC, definido por el paquete java.sql, proporciona gran flexibilidad a la hora de codificar la carga del driver JDBC a utilizar. Esta flexibilidad permite la sustitución de diferentes drivers sin que haya que modificar el código, a través de la clase DriverManager, que selecciona entre los drivers disponibles en el momento de establecer la conexión. Los drivers se pueden poner a disposición de DriverManager a través de la propiedad del sistema jdbc.drivers o cargándolos explícitamente usando el método java.lang.Class.forName(). También es posible la carga de una selección de drivers, dejando que el mecanismo de selección de DriverManager encuentre el adecuado en el momento de establecer la conexión con la base de datos. 2.10. ERRORES FRECUENTES DE PROGRAMACIÓN 75 Hay que tener siempre en cuenta los siguientes puntos: • La prueba de drivers se intenta siempre en el orden en que se han registrado, por lo que los primeros drivers tienen prioridad sobre los últimos cargados, con la máxima prioridad para los drivers listados en jdbc.drivers. • Un driver que incluya código nativo fallará al cargarlo sobre cualquier plataforma diferente de la que fue diseñado; por lo que el programa deberá recoger la excepción ClassNotFoundException. • Un driver con código nativo no debe registrarse con DriverManager hasta que no se sepa que la carga ha tenido éxito. • Un driver con código nativo no está protegido por la caja negra de Java, así que puede presentar potenciales problemas de seguridad. 2.10.5 Terminación de Líneas Las distintas plataformas de sistemas operativos tienen distintas convenciones para la terminación de líneas en un fichero de texto. Por esto debería utilizarse el método println(), o la propiedad del sistema line.separator, para la salida; y para la entrada utilizar los métodos readLine(). Java internamente utiliza Unicode, que al ser un estándar internacional, soluciona el problema a la hora de codificar; pero el problema persiste al leer o escribir texto en un archivo. En el JDK 1.1 se utilizan las clases java.io.Reader y java.io.Writer para manejar la conversión del set de caracteres, pero el problema puede surgir cuando se leen o escriben archivos ASCII planos, porque en el ASCII estándar no hay un carácter específico para la terminación de líneas; algunas máquinas utilizan \n, otras usan \r, y otras emplean la secuencia \r\n. Enarbolando la bandera de la portabilidad, deberían utilizarse los métodos println() para escribir una línea de texto, o colocar un marcador de fin de línea. También, usar el método readLine() de la clase java.io.BufferedReader para recoger una línea completa de texto. Los otros métodos readLine() son igualmente útiles, pero el de la clase BufferedReader proporciona al código también la traslación. 76 2.10.6 CAPÍTULO 2. JAVA Entrada/Salida por Archivo Las clases de entrada y salida del JDK 1.0 no son portables a plataformas que no soporten formatos nativos de archivos no-ASCII. Es fácil para el programador suponer alegremente que todo el mundo es ASCII. Pero la realidad no es esa, los chinos y los japoneses, por ejemplo, no puedes escribir nada con los caracteres ASCII. Hay que tener esto en cuenta si se quiere que los programas viajen fuera del país propio. 2.10.7 Fuentes de Caracteres El tamaño y disponibilidad de varios tipos de fuentes varía de pantalla a pantalla, incluso en una misma plataforma hardware, dependiendo de la instalación que se haya hecho. Esto es algo que no descalifica totalmente el programa, porque se verá defectuosamente, pero el programa podrá seguir usándose; pero debería prevenirse, porque se presupone que el programador desea que su software aparezca de la mejor manera posible en cualquier plataforma. El modo mejor de evitar todo esto es no codificar directamente el tamaño de los textos, dejar que los textos asuman su tamaño en relación al layout, y utilizar los métodos de la clase FontMetrics para encontrar el tamaño en que aparecen los caracteres de una cadena sobre un Canvas. Cuando se coloca una fuente que no se encuentra entre las de defecto, hay que asegurarse siempre de colocar alguna de respaldo en el bloque catch. Cuando se crea un menú para seleccionar fuentes de caracteres, se debería utilizar el método java.awt.Toolkit.getFontList(), en lugar de especificar una lista de fuentes. Cuando se actualice un programa del JDK 1.0 al JDK 1.1, hay que tener en cuenta que los nombre de las fuentes de caracteres se han actualizado, tal como se indica en la documentación del método getFontList(). Capítulo 3 Servlet 77 78 CAPÍTULO 3. 3.1 SERVLET Desarrollando Servlets Los servlets son programas de Java que construyen respuestas dinámicas para el cliente, tal como páginas Web. Los servlets reciben y responden a las demandas de los clientes Web, normalmente por HTTP. Los servlets son más eficientes que los programas (CGI) porque son cargados de una sola vez en la memoria, y cada demanda es manejada por un hilo de la máquina virtual de Java, no por el sistema operativo. Además los servlets son escalables, dando soporte para una multi-aplicación de configuración del servidor. [17, IBM Press] Permiten utilizar datos caché, acceso a información de base de datos, y compartir datos con otro servlets, archivos JSP y (en algunos ambientes) con los bean empresariales. 3.1.1 Principios de Codificación de Servlet Para crear un servlet de HTTP, es necesario extender las clases: javax.servlet.HttpServlet y sustituir cualquier método que se desee implementar en el servlet. Por ejemplo, un servlet reemplaza el método doGet para manejar las demandas Get de los clientes. El HttpServletRequest representa los requerimientos de un cliente. Este objeto da acceso al servlet, a la información incluida como datos en formato HTML, encabezados HTTP, etc. El HttpServletResponse representa la respuesta del servlet. El servlet usa este objeto para devolverle datos al cliente como errores de HTTP (200, 404, y otros), encabezados de respuesta (Content-Type, SetCookie, y otros), y datos de salida para escribir cadenas de salida de respuesta o salida impresa. El principio de un servlet podría parecerse al siguiente ejemplo: import java.io.*; import javax.servlet.*; 3.1. DESARROLLANDO SERVLETS 79 import javax.servlet.http.*; import java.util.*; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 3.1.2 Ciclo de Vida del Servlet Las clases javax.servlet.http.HttpServlet definen métodos tales como: • Iniciar un servlet. • Solicitar servicios. • Quitar un servlet del servidor. Éstos son conocidos como métodos del ciclo de vida y son llamados en la siguiente secuencia: • Se construye el servlet. • Se inicializa con el método INIT. • Se manejan llamadas de los clientes al método de servicio. • Se saca el servlet de servicio. • Se destruye con el método destruir. • Se finaliza el servlet y la basura es recolectada. En la figura 3.1 de la página 80 se puede apreciar gráficamente el Ciclo de Vida de un Servlet. 80 CAPÍTULO 3. Figura 3.1: Ciclo de Vida de un Servlet. SERVLET 3.1. DESARROLLANDO SERVLETS 3.1.3 81 Instanciación e Inicialización El motor del servlet (la función del Servidor de Aplicaciones que procesa servlets, archivos JSP, y otros tipos de server-side incluyendo codificación) crea una instancia del servlet. El motor del servlet crea el objeto de configuración del servlet y lo usa para pasar los parámetros de inicialización del servlet al método INIT. La inicialización de los parámetros persiste hasta que el servlet se destruye y es aplicada a todas las invocaciones de ese servlet hasta destruirse. Si la inicialización tiene éxito, el servlet está disponible para el servicio. Si la inicialización falla, el motor del servlet descarga el servlet. El administrador puede inhabilitar una aplicación y el servlet para el servicio. En tales casos, la aplicación y el servlet permanecen inhabilitados hasta que el administrador los habilite. 3.1.4 Servicio de Demanda Una demanda del cliente llega al servidor de aplicaciones. El motor del servlet crea un objeto demanda y un objeto respuesta. El motor del servlet invoca al método de servicio del servlet, procesa el requerimiento y usa métodos del objeto respuesta para crear la respuesta para el cliente. El método de servicio recibe información sobre el requerimiento del objeto demanda, procesa el requerimiento, y usa los métodos del objeto respuesta para crear la contestación para el cliente. El método de servicio puede invocar otros métodos para procesar el requerimiento, tales como doGet (), doPost (), o métodos del usuario. 3.1.5 Terminación El motor del servlet invoca al método destroy () del servlet cuando apropia y descarga el servlet. La Máquina Virtual de Java realiza la recolección de basura después de la destrucción del servlet. Cuando el contenedor Web ya no necesita que el servlet o una nueva instancia del servlet se recarguen, invoca al método destroy () del servlet. El contenedor Web también puede llamar al método destroy () si el motor necesita conservar recursos o una llamada pendiente a un método service () del 82 CAPÍTULO 3. SERVLET Figura 3.2: Requerimiento de un Archivo JSP. servlet excediendo el timeout. La Máquina Virtual de Java realiza recolección de basura después del destroy. 3.1.6 Modelos de Acceso JSP Se puede acceder a los archivos JSP de dos maneras: El browser envía un requerimiento para los archivos JSP. Los archivos JSP acceden a los beans u otros componentes que generan contenido dinámico para ser enviado al browser como se muestra en la figura 3.2 de la página 82. Cuando el servidor Web recibe un requerimiento para un archivo JSP, el servidor envía ese requerimiento al servidor de aplicaciones. El servidor de aplicaciones analiza el archivo JSP y genera código fuente de Java que se compila y se ejecuta como un servlet. El requerimiento se envía a un servlet que genera contenido dinámico y llama a un archivo JSP para enviar el contenido a un browser, como se muestra en la figura 3.3 de la página 83. Este modelo de acceso facilita la generación de contenido separado del despliegue de contenido. El servidor de aplicaciones proporciona un juego de métodos en el objeto HttpServiceRequest object y el objeto HttpServiceResponse. Estos métodos permiten una invocación de servlet para colocar un objeto (normalmente un 3.1. DESARROLLANDO SERVLETS 83 Figura 3.3: Requerimiento de un Servlet. bean) en un objeto demanda y pasa ese requerimiento a otra página (normalmente un archivo JSP) para el despliegue. La página invocada recupera el beans del objeto demanda y genera el HTML que recibe el cliente. 3.1.7 Procesadores JSP Cada procesador de JSP es un servlet que se puede adherir a una aplicación Web para manejar todos los requerimientos JSP pertenecientes a la misma. Cuando se instala el Application Server en un servidor Web, la configuración del servidor Web pasa los requerimientos HTTP para los archivos JSP (archivos con la extensión .jsp) al Application Server. El procesador de JSP crea y compila un servlet desde cada archivo JSP. El procesador produce estos archivos para cada JSP: • Archivos Java que contienen el código del lenguaje Java para el servlet. 84 CAPÍTULO 3. SERVLET • Archivos de clase que se compilan en el servlet. El procesador de JSP pone los archivos .java, y .class en un camino específico al procesador. Los archivos .java y .class tienen el mismo nombre de archivos. El procesador usa una convención de denominación que incluye el agregado de subrayado de los caracteres y un sufijo para el nombre del archivo JSP. Por ejemplo, si el nombre del archivo JSP es simple.jsp, los archivos generados son: _simple_xjsp.java y _simple_xjsp.class. Como todos los servlets, un servlet generado desde un archivo JSP se extiende desde javax.servlet.http.HttpServlet. El código Java de servlet contiene declaraciones de importación para las clases necesarias y una declaración de paquete, si la clase del servlet es parte de un paquete. Si el archivo JSP contiene sintaxis de JSP (como directivas y scriptlets), el procesador de JSP convierte la sintaxis de JSP al código Java equivalente. Si el archivo JSP contiene etiquetas HTML, el procesador agrega el código Java a fin de que el servlet realice la salida de HTML carácter por carácter. 3.1.8 Compilación Batch de Archivos JSP WebSphere Application Server proporciona un compilador batch de JSP. Al usar la función del compilador batch de archivos JSP, se habilitan respuestas más rápidas al requerimiento inicial del cliente para los archivos JSP en el servidor Web de producción. El compilador batch ahorra recursos del sistema y proporciona seguridad en el servidor de aplicaciones, especificando cuándo el servidor está chequeando un archivo de clase o recompilando un archivo JSP. El servidor de aplicaciones supervisará la compilación de los archivos JSP para cambios, y automáticamente compilará y recargará los archivos JSP, siempre que el servidor de aplicaciones descubra que el archivo JSP ha cambiado. Modificando este proceso, se puede ahorrar tiempo y recursos consumidos por las compilaciones y asegurar que se tenga el control de la compilación de los archivos JSP. También es útil como una manera rápida al sincronizar todos los archivos JSP para una aplicación. 3.1. DESARROLLANDO SERVLETS 3.1.9 85 Desarrollando Aplicaciones Para WebSphere Application Server, las aplicaciones son combinaciones de bloques que trabajan conjuntamente para el logro de una función de la lógica comercial. Las aplicaciones Web son grupos de uno o más servlets, más el contenido estático. Aplicaciones Web = servlets + archivos JSP + archivos XML + archivos HTML + gráficos. El modelo de programación de WebSphere Application Server está basado en la plataforma Java de Sun (J2SE). El ambiente J2SE soporta la base para construir redes centrales de aplicaciones empresariales para correr sobre una variedad de sistemas. El software J2SE consiste en los Java SDK Standard Edition y el Java Runtime Environment (JRE) Standard Edition. 3.1.10 Fases de Inicialización y de Terminación Un motor del servlet crea una instancia de un servlet en los siguientes momentos: • Automáticamente en el arranque de la aplicación, si esa opción se configura para el servlet. • En la primera demanda del cliente para el servlet después del arranque de la aplicación. • Cuando el servlet se vuelve a cargar. El método INIT ejecuta sólo una vez durante la vida del servlet. Ejecuta cuando el motor del servlet carga el servlet. Con el Application Server se puede configurar el servlet para ser cargado cuando comienza la aplicación o cuando un cliente accede por primera vez al servlet. El método INIT no se repite a menos que muchos clientes accedan al servlet. El método destroy () ejecuta sólo una vez durante la vida del servlet. Eso pasa cuando el motor del servlet detiene el servlet. Típicamente, se detienen servlets como parte del proceso de detener la aplicación. 86 CAPÍTULO 3. 3.1.11 SERVLET Rasgos de Java Servlet API Algunos puntos de interés del Java Servlet API son: • Un despachador de requerimientos asociado a cada recurso (servlet). Un despachador de requerimientos de recursos que pueden procesar demandas HTTP (como servlets y archivos JSP) y los archivos relacionados a esos recursos (como HTML estático y GIFs). El motor del servlet genera un solo despachado de requerimiento por cada servlet o JSP cuando se produce una instanciación. El despachador recibe el pedido del cliente y despacha la demanda al recurso. • Un contexto del servlet para la aplicación. 3.1.12 Patrones y Guías de Servlets/JSP En esta sección se proporciona las pautas específicas sobre cómo organizar una aplicación que usa servlets y JSPs. • Patrones Servlet/JSP. Con este modelo es posible organizar una aplicación Web en el servlets y JavaServer Pages de manera tal que es fácil de mantener el código. • Motivación. Para aplicaciones que requieren modelado complejo sobre el nodo del servidor de aplicación Web, no es fácil definir la granularidad de servlets y cómo interactúan los servlets. Pero sin un buen diseño para el servlets y JSP es difícil mantener la aplicación. Además en la fase del análisis de un proyecto, usa casos y diagramas de transición de estados ampliamente usados para describir el resultado de la fase del análisis. Podría ser útil trazar esos resultados en el diseño e implementación de la fase. 3.1. DESARROLLANDO SERVLETS 87 En un caso se puede contemplar el servlet como el evento central y procesa todas las demandas del cliente. Ejecuta la acción necesaria para ese evento y envía el requerimiento a uno (de muchos) JavaServer Page por desplegar el resultado. Usando esta solución, puede ser difícil de desarrollar ese servlet. Así como es responsable para un conjunto de casos de uso, se puede tener que llevar a cabo mucha lógica en ese servlet. En otro caso se puede tener tantos servlets como JavaServer Pages y encadenarlos. Esto significa que un servlet obtiene un requerimiento, ejecuta la acción correcta, y llama al JavaServer Page específico para ese servlet, para desplegar el resultado. Un requerimiento de ese JSP entonces obtiene otro servlet, y así sucesivamente. Será difícil mantener muchos servlets y JSP, puede confundirse al intentar entender el flujo de la aplicación. Una solución que tiene una granularidad entre esos extremos es dividiendo la aplicación en estados diferentes. Se intenta transferir un diagrama de transición de estados (por ejemplo, modelado con RationalRose) en páginas HTML, servlets y JavaServer Pages. • Applicabilidad. Este modelo puede usarse en toda aplicación servlet /JSP. Es recomendable este modelo sobre todo en las aplicaciones Web complejas donde muchas páginas Web y transiciones de páginas tienen que ser desarrolladas. • Componentes. Los componentes en esta estructura son: — Servlet: un requerimiento dado recoge los datos requeridos para el despliegue de un estado dado o invoca la acción que causa una transición fuera del estado. Esta responsabilidad lo hace el controlador en un Modelo-Vista-Controlador (MVC) basado en la aplicación. — JavaServerPage: es el indicador de la generación de código HTML para un resultado del requerimiento dado. — Wrapper de Tareas: encapsula el acceso al proceso empresarial de negocios (datos back-end y función). Esta función realiza el modelo de wrapper de tareas en una aplicación MVC. 88 CAPÍTULO 3. SERVLET — Páginas HTML: en caso de contenido estático y transiciones de estado, no es necesario tecnologías complejas. Un indicador de estado estático de página HTML. • Colaboradores. Un flujo de aplicación Web puede capturarse en un diagrama de transición de estado (que es, a propósito, una documentación buena para el flujo de la aplicación). Un diagrama de transición de estado contiene nombres de estado conectados con los nombres de las ramas. La solución,es trazar cada componente del diagrama de transición de estado a un componente de la arquitectura de e-business para que pueda manejarse mediante WebSphere Aplication Server. Se separa en el diagrama los estados estáticos y los estados dinámicos. Las transiciones de estado estáticos son inherentes. Como ellos son estáticos en el controlador y en las transiciones, se puede codificar un estado como una página HTML que debe ser nombrado después del estado: < el Estado >.html. Cuando hereda estados dinámicos, es un tanto más dificultoso. Conforme a la arquitectura e-business, se divide el estado en modelo, vista y controlador. • Controlador. El servlet actúa como el controlador de estado en este escenario. Esto significa que se captura un servlet por estado dinámico. Nombrando la convención, el servlet es llamado después del estado: < State>Servlet. Haciendo esto se consigue un método fácil de documentación. Pensando sobre cada interacción entre el navegador y el servidor de aplicaciones Web (por ejemplo, el servlet) como una sola unidad de trabajo, de sólo lectura o de actualización. Hay dos flujos básicos de modelos de control, ambos, llevado a cabo por el servlet. Uno se ocupa del despliegue para un estado dado, y el otro maneja las acciones que causan un cambio de estado. • Despliegue de Patrones. 3.1. DESARROLLANDO SERVLETS 89 Este modelo normalmente se manifiesta dentro de HTML como un link, resultando en un requerimiento Get. El flujo de control para este modelo es: — El servlet invoca el método apropiado de sólo lectura en el modelo de estado (ese es el wrapper de la tarea) y selecciona el JSP para ocuparse del resultado. — El servlet inicializa el objeto de datos asociado con el JSP, carga el resultado y coloca la vista del bean en un atributo HttpRequest. — El servlet remite la demanda al JSP escogido. — La Página de JavaServer genera el código del HTML. — El servlet envía el requerimiento al JSP seleccionado. — El JSP genera el código HTML. • Vistas. Las vistas se implementan como un JSP. • Cosecuencias. Usando este modelo, es posible conseguir un acercamiento bueno para diseñar una aplicación Web, mediante la utilización de servlets, JSPs, wrapper de tareas y páginas HTML. Capítulo 4 J2ME 91 92 4.1 CAPÍTULO 4. J2ME Introducción La empresa Sun Microsystems lanzó a mediados de los años 90 el lenguaje de programación Java que, aunque en un principio fue diseñado para generar aplicaciones que controlaran electrodomésticos como lavadoras, frigoríficos, etc., debido a su gran robustez e independencia de la plataforma donde se ejecutase el código, desde sus comienzos se utilizó para la creación de componentes interactivos integrados en páginas Web y programación de aplicaciones independientes [18]. Estos componentes se denominaron applets y casi todo el trabajo de los programadores se dedicó al desarrollo de éstos. Con los años, Java ha progresado enormemente en varios ámbitos como servicios HTTP, servidores de aplicaciones, acceso a bases de datos (JDBC). Como se ve, Java se ha ido adaptando a las necesidades tanto de los usuarios como de las empresas ofreciendo soluciones y servicios tanto a unos como a otros. En estos últimos años Java ha desarrollado soluciones personalizadas para cada ámbito tecnológico. Sun ha agrupado cada uno de esos ámbitos en una edición distinta de su lenguaje Java. Estas ediciones son Java 2 Stantard Edition, orientada al desarrollo de aplicaciones independientes y de applets, Java 2 Enterprise Edition, enfocada al entorno empresarial y Java 2 Micro Edition, orientada a la programación de aplicaciones para pequeños dispositivos. La edición Java 2 Micro Edition fue presentada en 1999 por Sun Microsystems con el propósito de habilitar aplicaciones Java para pequeños dispositivos. En esta presentación, lo que realmente se mostró fue una primera versión de una nueva Java Virtual Machine (JVM) que podía ejecutarse en dispositivos Palm. Java Micro Edition es la versión del lenguaje Java que está orientada al desarrollo de aplicaciones para dispositivos pequeños con capacidades restringidas tanto en pantalla gráfica, como de procesamiento y memoria (teléfonos móviles, PDA’s, Handhelds, Pagers, etc.). La tardía aparición de esta tecnología, puede ser debido a que las necesidades de los usuarios de telefonía móvil ha cambiado mucho en estos últimos años y cada vez demandan más servicios y prestaciones por parte tanto de los terminales como de las compañías. Además el uso de esta tecnología depende 4.1. INTRODUCCIÓN 93 del asentamiento en el mercado de otras, como GPRS, íntimamente asociada a J2ME y que no ha estado a nuestro alcance hasta hace poco. 4.1.1 Análisis Comparativo Sun, dispuesto a proporcionar las herramientas necesarias para cubrir las necesidades de todos los usuarios, creó distintas versiones de Java. El paquete Java 2 se divide en 3 ediciones distintas. Java 2 Platform, Standard Edition (J2SE): Esta edición de Java es la que en cierta forma recoge la iniciativa original del lenguaje Java. Tiene las siguientes características: • Inspirado inicialmente en C++, pero con componentes de alto nivel, como soporte nativo de strings y recolector de basura. • Código independiente de la plataforma, precompilado a bytecodes intermedio y ejecutado en el cliente por una JVM (Java Virtual Machine). • Modelo de seguridad tipo sandbox proporcionado por la JVM. • Abstracción del sistema operativo subyacente mediante un juego completo de APIs de programación. Esta versión de Java contiene el conjunto básico de herramientas usadas para desarrollar Java Applets, así cómo las APIs orientadas a la programación de aplicaciones de usuario final: Interfaz gráfica de usuario, multimedia, redes de comunicación, etc. Java 2 Platform, Enterprise Edition (J2EE): Esta versión está orientada al entorno empresarial. El software empresarial tiene unas características propias marcadas: está pensado no para ser ejecutado en un equipo, sino para ejecutarse sobre una red de ordenadores de manera distribuida y remota mediante EJBs (Enterprise Java Beans). De hecho, el sistema se monta sobre varias unidades o aplicaciones. En muchos casos, además, el software empresarial requiere que se sea capaz de integrar datos provenientes de entornos heterogéneos. Esta edición 94 CAPÍTULO 4. J2ME Figura 4.1: Versiones de Java está orientada especialmente al desarrollo de servicios web, servicios de nombres, persistencia de objetos, XML, autenticación, APIs para la gestión de transacciones, etc. El cometido de esta especificación es ampliar la J2SE para dar soporte a los requisitos de las aplicaciones de empresa. Java 2 Platform, Micro Edition (J2ME): Esta versión de Java está enfocada a la aplicación de la tecnología Java en dispositivos electrónicos con capacidades computacionales y gráficas muy reducidas, tales como teléfonos móviles, PDAs o electrodomésticos inteligentes. Esta edición tiene unos componentes básicos que la diferencian de las otras versiones, como el uso de una máquina virtual denominada KVM (Kilo Virtual Machine, debido a que requiere sólo unos pocos Kilobytes de memoria para funcionar) en vez del uso de la JVM clásica, inclusión de un pequeño y rápido recolector de basura y otras diferencias que se verán más adelante (ver fig. 4.1 de la pág. 94). 4.1. INTRODUCCIÓN 95 J2ME J2SE J2EE javax.microedition Figura 4.2: Relación entre las APIs de la plataforma Java. J2ME representa una versión simplificada de J2SE. Sun separó estas dos versiones ya que J2ME estaba pensada para dispositivos con limitaciones de proceso y capacidad gráfica. También separó J2SE de J2EE porque este último exigía unas características muy pesadas o especializadas de E/S, trabajo en red, etc. Por tanto, separó ambos productos por razones de eficiencia. Hoy, J2EE es un superconjunto de J2SE pues contiene toda la funcionalidad de éste y más características, así como J2ME es un subconjunto de J2SE (excepto por el paquete javax.microedition) ya que, contiene varias limitaciones con respecto a J2SE (ver fig. 4.2 de la pág. 95). 4.1.2 Nociones Básicas de J2ME Los componentes que forman parte de esta tecnología son: • Por un lado se tiene una serie de máquinas virtuales Java con diferentes requisitos, cada una para diferentes tipos de pequeños dispositivos. 96 CAPÍTULO 4. J2ME Figura 4.3: Entorno de ejecución de J2ME • Configuraciones, que son un conjunto de clases básicas orientadas a conformar el corazón de las implementaciones para dispositivos de características específicas. Existen 2 configuraciones definidas en J2ME: Connected Limited Device Configuration (CLDC ) enfocada a dispositivos con restricciones de procesamiento y memoria, y Connected Device Configuration (CDC ) enfocada a dispositivos con más recursos. • Perfiles, que son unas bibliotecas Java de clases específicas orientadas a implementar funcionalidades de más alto nivel para familias específicas de dispositivos. Un entorno de ejecución determinado de J2ME se compone entonces de una selección de (ver fig. 4.3 de la pág. 96): 1. Máquina virtual. 2. Configuración. 3. Perfil. 4. Paquetes Opcionales. 4.1. INTRODUCCIÓN 97 Máquinas Virtuales J2ME Una máquina virtual de Java (JVM ) es un programa encargado de interpretar código intermedio (bytecode) de los programas Java precompilados a código máquina ejecutable por la plataforma, efectuar las llamadas pertinentes al sistema operativo subyacente y observar las reglas de seguridad y corrección de código definidas para el lenguaje Java. De esta forma, la JVM proporciona al programa Java independencia de la plataforma con respecto al hardware y al sistema operativo subyacente. Las implementaciones tradicionales de JVM son, en general, muy pesadas en cuanto a memoria ocupada y requerimientos computacionales. J2ME define varias JVMs de referencia adecuadas al ámbito de los dispositivos electrónicos que, en algunos casos, suprimen algunas características con el fin de obtener una implementación menos exigente. Como existen dos configuraciones (CLDC y CDC), cada una requiere su propia máquina virtual. La VM (Virtual Machine) de la configuración CLDC se denomina KVM y la de la configuración CDC se denomina CVM. Las características principales de cada una de las máquinas virtuales son: • KVM Se corresponde con la Máquina Virtual más pequeña desarrollada por Sun. Su nombre KVM proviene de Kilobyte (haciendo referencia a la baja ocupación de memoria, entre 40Kb y 80Kb). Se trata de una implementación de Máquina Virtual reducida y especialmente orientada a dispositivos con bajas capacidades computacionales y de memoria. La KVM está escrita en lenguaje C, aproximadamente unas 24000 líneas de código, y fue diseñada para ser: • Pequeña, con una carga de memoria entre los 40Kb y los 80 Kb, dependiendo de la plataforma y las opciones de compilación. • Alta portabilidad. • Modulable. 98 CAPÍTULO 4. J2ME • Lo más completa y rápida posible y sin sacrificar características para las que fue diseñada. Sin embargo, esta baja ocupación de memoria hace que posea algunas limitaciones con respecto a la clásica Java Virtual Machine (JVM): 1. No hay soporte para tipos en coma flotante. No existen por tanto los tipos double ni float. Esta limitación está presente porque los dispositivos carecen del hardware necesario para estas operaciones. 2. No existe soporte para JNI (Java Native Interface) debido a los recursos limitados de memoria. 3. No existen cargadores de clases (class loaders) definidos por el usuario. Sólo existen los predefinidos. 4. No se permiten los grupos de hilos o hilos daemon. Cuándo queramos utilizar grupos de hilos utilizaremos los objetos Colección para almacenar cada hilo en el ámbito de la aplicación. 5. No existe la finalización de instancias de clases. No existe el método Object.finalize(). 6. No hay referencias débiles1 . 7. Limitada capacidad para el manejo de excepciones debido a que el manejo de éstas depende en gran parte de las APIs de cada dispositivo por lo que son éstos los que controlan la mayoría de las excepciones. 8. Reflexión2 . Aparte de la no inclusión de estas características, la verificación de clases merece un comentario aparte. El verificador de clases estándar de Java es demasiado grande para la KVM. De hecho es más grande que la propia KVM y el consumo de memoria es excesivo, más de 100Kb para las aplicaciones típicas. 1 Un objeto que está siendo apuntado mediante una referencia débil es un candidato para la recolección de basura. Estas referencias están permitidas en J2SE, pero no en J2ME. 2 La reflexión es el mecanismo por el cual los objetos pueden obtener información de otros objetos en tiempo de ejecución como, por ejemplo, los archivos de clases cargados o sus campos y métodos. 4.1. INTRODUCCIÓN 99 Figura 4.4: Preverificación de clases en CDLC/KVM. Este verificador de clases es el encargado de rechazar las clases no válidas en tiempo de ejecución. Este mecanismo verifica los bytecodes de las clases Java realizando las siguientes comprobaciones: • Ver que el código no sobrepase los límites de la pila de la VM. • Comprobar que no se utilizan las variables locales antes de ser inicializadas. • Comprobar que se respetan los campos, métodos y los modificadores de control de acceso a clases. Por esta razón los dispositivos que usen la configuración CLDC y KVM introducen un algoritmo de verificación de clases en dos pasos (ver fig. 4.4 de la pág. 99). • CVM La CVM (Compact Virtual Machine) ha sido tomada como Máquina Virtual Java de referencia para la configuración CDC y soporta las mismas características que la Máquina Virtual de J2SE. 100 CAPÍTULO 4. J2ME Está orientada a dispositivos electrónicos con procesadores de 32 bits de gama alta y en torno a 2Mb o más de memoria RAM. Las características que presenta esta Máquina Virtual son: 1. Sistema de memoria avanzado. 2. Tiempo de espera bajo para el recolector de basura. 3. Separación completa de la VM del sistema de memoria. 4. Recolector de basura modularizado. 5. Portabilidad. 6. Rápida sincronización. 7. Ejecución de las clases Java fuera de la memoria de sólo lectura (ROM). 8. Soporte nativo de hilos. 9. Baja ocupación en memoria de las clases. 10. Proporciona soporte e interfaces para servicios en Sistemas Operativos de Tiempo Real. 11. Conversión de hilos Java a hilos nativos. 12. Soporte para todas las características de Java2 v1.3 y librerías de seguridad, referencias débiles, Interfaz Nativa de Java (JNI), invocación remota de métodos (RMI), Interfaz de depuración de la Máquina Virtual (JVMDI). Configuraciones Una configuración es el conjunto mínimo de APIs Java que permiten desarrollar aplicaciones para un grupo de dispositivos. Estas APIs describen las características básicas, comunes a todos los dispositivos: • Características soportadas del lenguaje de programación Java. • Características soportadas por la Máquina Virtual Java. 4.1. INTRODUCCIÓN 101 • Bibliotecas básicas de Java y APIs soportadas. Existen dos configuraciones en J2ME: CLDC, orientada a dispositivos con limitaciones computacionales y de memoria y CDC, orientada a dispositivos con no tantas limitaciones. Configuración de dispositivos con conexión, CDC (Connected Limited Configuration) La CDC está orientada a dispositivos con cierta capacidad computacional y de memoria. Por ejemplo, decodificadores de televisión digital, televisores con Internet, algunos electrodomésticos y sistemas de navegación en automóviles. CDC usa una Máquina Virtual Java similar en sus características a una de J2SE, pero con limitaciones en el apartado gráfico y de memoria del dispositivo. Esta Máquina Virtual es la CVM (Compact Virtual Machine). La configuración CDC está enfocada a dispositivos con las siguientes capacidades: • Procesador de 32 bits. • Disponer de 2 Mb o más de memoria total, incluyendo memoria RAM y ROM. • Poseer la funcionalidad completa de la Máquina Virtual Java2. • Conectividad a algún tipo de red. La CDC está basada en J2SE v1.3 e incluye varios paquetes Java de la edición estándar. Las peculiaridades de la CDC están contenidas principalmente en el paquete javax.microedition.io, que incluye soporte para comunicaciones http y basadas en datagramas (ver table 4.1 de la pág.102). Configuración de dispositivos limitados con conexión, CLDC (Connected Limited Device Configuration). La CLDC está orientada a dispositivos dotados de conexión y con limitaciones en cuanto a capacidad gráfica, cómputo y memoria. Un ejemplo de éstos dispositivos son: teléfonos móviles, buscapersonas (pagers), PDAs, organizadores personales, etc. 102 CAPÍTULO 4. J2ME Nombre de Paquete CDC java.io java.lang java.lang.ref java.lang.reflect java.math java.net java.security java.security.cert java.text java.util java.util.jar java.util.zip javax.microedition.io Descripción Clases e interfaces estándar de E/S. Clases básicas del lenguaje. Clases de referencia. Clases e interfaces de reflection. Paquete de matemáticas. Clases e interfaces de red. Clases e interfaces de seguridad Clases de certificados de seguridad. Paquete de texto. Clases de utilidades estándar. Clases y utilidades para archivos JAR. Clases y utilidades para archivos ZIP y comprimidos. Clases e interfaces para conexión genérica CDC. Tabla 4.1: Librerías de configuración CDC. CLDC está orientado a dispositivos con ciertas restricciones. Algunas de éstas restricciones vienen dadas por el uso de la KVM, necesaria al trabajar con la CLDC debido a su pequeño tamaño. Los dispositivos que usan CLDC deben cumplir los siguientes requisitos: • Disponer entre 160 Kb y 512 Kb de memoria total disponible. Como mínimo se debe disponer de 128 Kb de memoria no volátil para la Máquina Virtual Java y las bibliotecas CLDC, y 32 Kb de memoria volátil para la Máquina Virtual en tiempo de ejecución. • Procesador de 16 o 32 bits con al menos 25 Mhz de velocidad. • Ofrecer bajo consumo, debido a que éstos dispositivos trabajan con suministro de energía limitado, normalmente baterías. • Tener conexión a algún tipo de red, normalmente sin cable, con conexión intermitente y ancho de banda limitado (unos 9600 bps). La CLDC aporta las siguientes funcionalidades a los dispositivos (ver table 4.1. INTRODUCCIÓN 103 4.2 de la pág. 103): • Un subconjunto del lenguaje Java y todas las restricciones de su Máquina Virtual (KVM). • Un subconjunto de las bibliotecas Java del núcleo. • Soporte para E/S básica. • Soporte para acceso a redes. • Seguridad. Nombre de Paquete CLDC java.io java.lang java.lang.ref java.lang.reflect Descripción Clases e interfaces estándar de E/S. Clases básicas del lenguaje. Clases de referencia. Clases e interfaces de reflection. Tabla 4.2: Librerías de configuración CLDC. Perfiles El perfil es el que define las APIs que controlan el ciclo de vida de la aplicación, interfaz de usuario, etc. Más concretamente, un perfil es un conjunto de APIs orientado a un ámbito de aplicación determinado. Los perfiles identifican un grupo de dispositivos por la funcionalidad que proporcionan (electrodomésticos, teléfonos móviles, etc.) y el tipo de aplicaciones que se ejecutarán en ellos. Las librerías de la interfaz gráfica son un componente muy importante en la definición de un perfil. Se puede encontrar grandes diferencias entre interfaces, desde el menú textual de los teléfonos móviles hasta los táctiles de los PDAs. El perfil establece unas APIs que definen las características de un dispositivo, mientras que la configuración hace lo propio con una familia de ellos. Esto hace que a la hora de construir una aplicación se cuente tanto con las APIs del perfil como de la configuración. 104 CAPÍTULO 4. J2ME Un perfil siempre se construye sobre una configuración determinada. De este modo, se podrá pensar en un perfil como un conjunto de APIs que dotan a una configuración de funcionalidad específica. Existen unos perfiles que se construirán sobre la configuración CDC y otros sobre la CLDC. Para la configuración CDC existen los siguientes perfiles: • Foundation Profile. • Personal Profile. • RMI Profile. Para la configuración CLDC los siguientes: • PDA Profile. • Mobile Information Device Profile (MIDP). En la fig. 4.5 de la pág. 105 se puede ver cómo quedaría el esquema del entorno de ejecución al completo. Un perfil puede ser construido sobre cualquier otro. Sin embargo, una plataforma J2ME sólo puede contener una configuración. Foundation Profile: Este perfil define una serie de APIs sobre la CDC orientadas a dispositivos que carecen de interfaz gráfica como, por ejemplo, decodificadores de televisión digital. Este perfil incluye gran parte de los paquetes de la J2SE, pero excluye totalmente los paquetes “java.awt” Abstract Windows Toolkit (AWT) y “java.swing” que conforman la interfaz gráfica de usuario (GUI) de J2SE. Si una aplicación requiriera una GUI, entonces sería necesario un perfil adicional. Personal Profile: El Personal Profile es un subconjunto de la plataforma J2SE v1.3, y proporciona un entorno con un completo soporte gráfico AWT. El objetivo es el de dotar a la configuración CDC de una interfaz gráfica completa, con capacidades web y soporte de applets Java. Este perfil requiere una implementación del Foundation Profile. 4.1. INTRODUCCIÓN 105 Figura 4.5: Arquitectura del entorno de ejecución de J2ME RMI Profile: Este perfil requiere una implementación del Foundation Profile y se construye encima de él. El perfil RMI soporta un subconjunto de las APIs J2SE v1.3 RMI. Algunas características de estas APIs se han eliminado del perfil RMI debido a las limitaciones de cómputo y memoria de los dispositivos. PDA Profile: El PDA Profile está construido sobre CLDC. Pretende abarcar PDAs de gama baja, tipo Palm, con una pantalla y algún tipo de puntero (ratón o lápiz) y una resolución de al menos 20000 pixels (al menos 200x100 pixels) con un factor 2:1. Mobile Information Device Profile (MIDP): Este perfil está construido sobre la configuración CLDC. Al igual que CLDC fue la primera configuración definida para J2ME, MIDP fue el primer perfil definido para esta plataforma. Este perfil está orientado para dispositivos con las siguientes características: • Reducida capacidad computacional y de memoria. • Conectividad limitada (en torno a 9600 bps). • Capacidad gráfica muy reducida (mínimo un display de 96x54 pixels 106 CAPÍTULO 4. J2ME monocromo). • Entrada de datos alfanumérica reducida. • 28 Kb de memoria no volátil para componentes MIDP. • 8 Kb de memoria no volátil para datos persistentes de aplicaciones. • 32 Kb de memoria volátil en tiempo de ejecución para la pila Java. Los tipos de dispositivos que se adaptan a estas características son: teléfonos móviles, buscapersonas (pagers) o PDAs de gama baja con conectividad. Las aplicaciones desarrolladas utilizando MIDP reciben el nombre de MIDlets (por simpatía con APPlets). Entonces un MIDlet es una aplicación Java realizada con el perfil MIDP sobre la configuración CLDC. 4.2 Los MIDlets Los MIDlets son aplicaciones creadas usando la especificación MIDP. Están diseñados para ser ejecutados en dispositivos con poca capacidad gráfica, de cómputo y de memoria. Estos dispositivos no disponen de líneas de comandos donde poder ejecutar las aplicaciones requeridas, si no que reside en él un software que es el encargado de ejecutar los MIDlets y gestionar los recursos que éstos ocupan. Este software no es otro que el gestor de aplicaciones. 4.2.1 El Gestor de Aplicaciones El gestor de aplicaciones o AMS (Application Management System) es el software encargado de gestionar los MIDlets. Este software reside en el dispositivo y es el que permite ejecutar, pausar o destruir las aplicaciones J2ME. El AMS realiza dos grandes funciones: • Por un lado gestiona el ciclo de vida de los MIDlets. • Por otro, es el encargado de controlar los estados por los que pasa el MIDlet mientras está en la memoria del dispositivo, es decir, en ejecución. 4.2. LOS MIDLETS 107 Figura 4.6: Ciclo de vida de un MIDlet. Ciclo de Vida de un MIDlet El ciclo de vida de un MIDlet pasa por 5 fases (ver fig. 4.6 de la pág. 107): descubrimiento, instalación, ejecución, actualización y borrado. El AMS es el encargado de gestionar cada una de estas fases de la siguiente manera: 1. Descubrimiento: Esta fase es la etapa previa a la instalación del MIDlet y es dónde se selecciona a través del gestor de aplicaciones la aplicación a descargar. Por tanto, el gestor de aplicaciones tiene que proporcionar los mecanismos necesarios para realizar la elección del MIDlet a descargar. El AMS puede ser capaz de realizar la descarga de aplicaciones de 108 CAPÍTULO 4. J2ME diferentes maneras, dependiendo de las capacidades del dispositivo. Por ejemplo, esta descarga se puede realizar mediante un cable conectado a un ordenador o mediante una conexión inalámbrica. 2. Instalación: Una vez descargado el MIDlet en el dispositivo, comienza el proceso de instalación. En esta fase el gestor de aplicaciones controla todo el proceso informando al usuario tanto de la evolución de la instalación como de si existiese algún problema durante ésta. Cuándo un MIDlet está instalado en el dispositivo, todas sus clases, archivos y almacenamiento persistente están preparados y listos para su uso. 3. Ejecución: Mediante el gestor de aplicaciones se puede iniciar la ejecución de los MIDlets. En esta fase, el AMS tiene la función de gestionar los estados del MIDlet en función de los eventos que se produzcan durante esta ejecución. 4. Actualización: El AMS tiene que ser capaz de detectar después de una descarga si el MIDlet descargado es una actualización de un MIDlet ya presente en el dispositivo. Si es así, tiene que informar de ello, además de dar la oportunidad de decidir si se desea realizar la actualización pertinente o no. 5. Borrado: En esta fase el AMS es el encargado de borrar el MIDlet seleccionado del dispositivo. El AMS pedirá confirmación antes de proceder a su borrado e informará de cualquier circunstancia que se produzca. Hay que indicar que el MIDlet puede permanecer en el dispositivo todo el tiempo que se desee. Después de la fase de instalación, el MIDlet queda almacenado en una zona de memoria persistente del dispositivo MID. El usuario de éste dispositivo es el encargado de decidir en qué momento quiere eliminar la aplicación y así se lo hará saber al AMS mediante alguna opción que éste suministre. Estados de un MIDlet en Fase de Ejecución Además de gestionar el ciclo de vida de los MIDlets, el AMS es el encargado de controlar los estados del MIDlet durante su ejecución. Durante ésta el MIDlet es cargado en la memoria del dispositivo y es aquí donde puede transitar entre 3 estados diferentes: Activo, en pausa y destruido. 4.2. LOS MIDLETS 109 Cuándo un MIDlet comienza su ejecución, está en el estado “Activo” pero, ¿qué ocurre si durante su ejecución se recibe una llamada o un mensaje?. El gestor de aplicaciones debe ser capaz de cambiar el estado de la aplicación en función de los eventos externos al ámbito de ejecución de la aplicación que se vayan produciendo. En este caso, el gestor de aplicaciones interrumpiría la ejecución del MIDlet sin que se viese afectada la ejecución de éste y lo pasaría al estado de “Pausa” para atender la llamada o leer el mensaje. Una vez que se termine de trabajar con el MIDlet y se salga de él, éste pasaría al estado de “Destruido” dónde sería eliminado de la memoria del dispositivo. Cuándo se dice que el MIDlet pasa al estado “Destruido” y es eliminado de memoria, se refiere a la memoria volátil del dispositivo que es usada para la ejecución de aplicaciones. Una vez finalizada la ejecución del MIDlet se podrá volver a invocarlo las veces que se desee ya que éste permanece en la zona de memoria persistente hasta el momento que se desinstale. Estados de un MIDlet Un MIDlet durante su ejecución pasa por 3 estados diferentes: • Activo: El MIDlet está actualmente en ejecución. • Pausa: El MIDlet no está actualmente en ejecución. En este estado el MIDlet no debe usar ningún recurso compartido. Para volver a pasar a ejecución tiene que cambiar su estado a Activo. • Destruido: El MIDlet no está en ejecución ni puede transitar a otro estado. Además se liberan todos los recursos ocupados por el MIDlet. La fig. 4.7 de la pág. 110 muestra el diagrama de estados de un MIDlet en ejecución: Un MIDlet puede cambiar de estado mediante una llamada a los métodos MIDlet.startApp(), MIDlet.pauseApp() o MIDlet.destroyApp(). El gestor de aplicaciones cambia el estado de los MIDlets haciendo una llamada a cualquiera de los métodos anteriores. 110 CAPÍTULO 4. J2ME Figura 4.7: Estados de un MIDlet. Un MIDlet también puede cambiar de estado por sí mismo. 4.3 4.3.1 Interfaces Gráficas de Usuario Introducción a las Interfaces de Usuario Teniendo en cuenta la diversidad de aplicaciones que se podrán realizar para los dispositivos MID (dispositivos que soportan MIDP), y los elementos que proporcionan la configuración CLDC y el perfil MIDP, se dividirá a estos elementos en dos grupos: • Por un lado se verá los elementos que componen la interfaz de usuario de alto nivel. Esta interfaz usa componentes tales como botones, cajas de texto, formularios, etc. Estos elementos son implementados por cada dispositivo y la finalidad de usar las APIs de alto nivel es su portabilidad. Al usar estos elementos, se pierde el control del aspecto de la aplicación ya que la estética de estos componentes depende exclusivamente del dis- 4.3. INTERFACES GRÁFICAS DE USUARIO 111 Figura 4.8: Jerarquía de clases derivadas de Display e Item positivo donde se ejecute. En cambio, usando estas APIs de alto nivel se gana un alto grado de portabilidad de la misma aplicación entre distintos dispositivos. Fundamentalmente, se usan estas APIs cuando se desea construir aplicaciones de negocios. • Por otro lado se tienen las interfaces de usuario de bajo nivel. Al crear una aplicación usando las APIs de bajo nivel, se tendrá un control total de lo que aparecerá por pantalla. Estas APIs darán un control completo sobre los recursos del dispositivo y se podrá controlar eventos de bajo nivel como, por ejemplo, el rastreo de pulsaciones de teclas. Generalmente, estas APIs se utilizan para la creación de juegos donde el control sobre lo que aparece por pantalla y las acciones del usuario juegan un papel fundamental. El paquete javax.microedition.lcdui incluye las clases necesarias para crear interfaces de usuario, tanto de alto nivel como de bajo nivel. En la fig. 4.8 de la pág. 111 se ve la organización de estas clases. 112 CAPÍTULO 4. J2ME La Clase Display La clase Display representa el manejador de la pantalla y los dispositivos de entrada. Todo MIDlet debe poseer por lo menos un objeto Display. En este objeto Display se podrán incluir tantos objetos Displayable como se desee. La clase Display puede obtener información sobre las características de la pantalla del dispositivo donde se ejecute el MIDlet, además de ser capaz de mostrar los objetos que componen las interfaces. La Clase Displayable La clase Displayable representa a las pantallas de la aplicación. Cada objeto Display puede tener tantos objetos Displayable como se desee. Las aplicaciones estarán formadas por varias pantallas que se crearán dentro del método constructor. Mediante los métodos getCurrent y setCurrent se controlará qué pantalla estará visible y accesible en cada momento. La clase abstracta Displayable incluye los métodos encargados de manejar los eventos de pantalla y añadir o eliminar comandos. 4.3.2 La Interfaz de Usuario de Alto Nivel La clase Screen es la superclase de todas las clases que conforman la interfaz de usuario de alto nivel. Algunas de estas clases son: La Clase Alert El objeto Alert representa una pantalla de aviso. Normalmente se usa cuando se desea avisar al usuario de una situación especial como, por ejemplo, un error. Un Alert está formado por un título, texto e imágenes. 4.3. INTERFACES GRÁFICAS DE USUARIO 113 La Clase List La clase List permite construir pantallas que poseen una lista de opciones. Esto será muy útil para crear menús de manera independiente. La clase List implementa la interfaz Choice y esto da la posibilidad de crear tres tipos distintos de listas (ver tabla 4.3 de la pág. 113). Tipo EXCLUSIVE IMPLICIT MULTIPLE Descripción Lista en la que un sólo elemento puede ser seleccionado a la vez. Lista en la que la selección de un elemento provoca un evento. Lista en la que cualquier número de elementos pueden serseleccionados al mismo tiempo. Tabla 4.3: Tipo de listas. La Clase TextBox: Una TextBox es una pantalla que permite editar texto en ella. Cuando se crea un TextBox, se tendrá que especificar su capacidad, es decir, el número máximo de caracteres. Permite también poner restricciones al texto que se puede incluir en una TextBox. Estas restricciones se encuentran en la clase TextField. La Clase Form Un formulario (clase Form) es un componente que actúa como contenedor de un número indeterminado de objetos. Todos los objetos que puede contener un formulario derivan de la clase Item. El número de objetos que se puede insertar en un formulario es variable. 114 CAPÍTULO 4. J2ME 4.3.3 La Interfaz de Usuario de Bajo Nivel Todas las pantallas que se crean usando las APIs de bajo nivel heredan de la clase Canvas. La clase Canvas es la superclase de todas las pantallas que usan las APIs de bajo nivel, al igual que Screen lo era para las pantallas que usaban las APIs de alto nivel. No existe ningún impedimento que permita usar en el mismo MIDlet pantallas tanto derivadas de Canvas como de Screen. La clase Canvas permite manejar eventos de bajo nivel y dibujar cualquier cosa por pantalla. Por esta razón se usa como base para la realización de juegos. Esta clase posee un método abstracto paint() que se debe implementar obligatoriamente y es el que se encarga de dibujar en la pantalla del dispositivo MID. Eventos de Bajo Nivel Los eventos dentro de la clase Canvas se manejan principalmente de dos formas distintas: • A través de Commands. • A través de códigos de teclas. Este método es el que Canvas proporciona para detectar eventos de bajo nivel. Estos códigos son valores numéricos que están asociados a las diferentes teclas de un MID. Estos códigos se corresponden con las teclas de un teclado convencional de un teléfono móvil (0-9,*,#). La clase Canvas proporciona estos códigos a través de constantes que tienen asociados valores enteros (ver tabla 4.4 de la pág. 115). Con estos códigos anteriores se podrá conocer cuál es la tecla que ha pulsado el usuario. Canvas, además proporciona unos métodos que permitirán manejar estos eventos con facilidad. La implementación de estos métodos es vacía, por lo 4.3. INTERFACES GRÁFICAS DE USUARIO Nombre KEY_NUM0 KEY_NUM1 KEY_NUM2 KEY_NUM3 KEY_NUM4 KEY_NUM5 KEY_NUM6 KEY_NUM7 KEY_NUM8 KEY_NUM9 KEY_STAR KEY_POUND 115 Valor 48 49 50 51 52 53 54 55 56 57 42 35 Tabla 4.4: Código de teclas. que se debe implementar los que se necesiten en la aplicación de acuerdo con el propósito de ésta. Manipulación de Elementos en una Pantalla Canvas El Método Paint() La clase Canvas posee un método abstracto paint (Graphics g) que se ocupa de dibujar el contenido de la pantalla. Para ello, se usa un objeto de la clase Graphics que es el que contiene las herramientas gráficas necesarias y que se pasa como parámetro al método paint(). Cuando se implemente este método se debe tener en cuenta lo siguiente: • El método paint() nunca debe ser llamado desde el programa. El gestor de aplicaciones es el que se encarga de realizar la llamada a éste método cuando sea necesario. • Cuando se desee que se redibuje la pantalla actual debido a alguna acción en concreto del usuario o como parte de alguna animación, se debe realizar una llamada al método repaint(). Al igual que ocurre con los 116 CAPÍTULO 4. J2ME eventos de teclado, la petición se encolará y será servida cuando retornen todas las peticiones anteriores a ella. • La implementación del MID no se encarga de limpiar la pantalla antes de cada llamada al método paint(). Por esta razón, éste método debe pintar cada pixel de la pantalla para, de esta forma, evitar que se vean porciones no deseadas de pantallas anteriores. La Clase Graphics Cuando se invoca al método paint(Graphics g) se debe pasarle como parámetro un objeto Graphics. Este objeto proporciona la capacidad de dibujar en una pantalla Canvas. Un objeto Graphics se obtendrá sólo de dos maneras: • Dentro del método paint() de la clase Canvas. Aquí se puede usar el objeto Graphics para pintar en la pantalla del dispositivo. • A través de una imagen. La clase Graphics posee multitud de métodos que permiten seleccionar colores, dibujar texto, figuras geométricas, etc. Manejo de Colores La clase Graphics proporciona métodos con los que se puede seleccionar colores, pintar la pantalla de un color determinado o zonas de ellas, dibujar líneas, rectángulos, etc. Se dispone de varios métodos que suministra la clase Display con los que se puede saber si el dispositivo en cuestión cuenta con pantalla a color o escala de grises (Display.isColor()), y también se puede conocer el número de colores soportados (Display.numColors()). En particular, la clase Graphics proporciona un modelo de color de 24 bits, con 8 bits para cada componente de color: rojo, verde y azul. Se puede seleccionar un color invocando al método Graphics.setColor(int RGB) o Graphics.setColor(int rojo, int verde, int azul) donde se indica los niveles de los componentes que conforman el color a usar. Graphics g; g.setColor(0,0,0) // Se selecciona el color negro 4.4. RECORD MANAGEMENT SYSTEM 117 g.setColor(255,255,255) // Se selecciona el color blanco g.setColor(0,0,255) // Se selecciona el color azul Manejo de Texto Es posible incluir texto en una pantalla Canvas. Al igual que con los colores, es posible seleccionar un estilo de letra con el que posteriormente se podrá escribir texto por pantalla. Para ello se tiene la clase Font que permitirá seleccionar el tipo de letra y almacenarlo en un objeto de este tipo para posteriormente usarlo en el Canvas. Para seleccionar un tipo de letra se debe tener en cuenta los tres atributos que definen una fuente: Aspecto, Estilo y Tamaño. Realizando combinaciones de atributos se tienen bastantes tipos de fuentes donde elegir. 4.4 4.4.1 Record Management System Conceptos Básicos El sistema de gestión de registros o RMS , permite almacenar información entre cada ejecución del MIDlet. Esta información será guardada en el dispositivo en una zona de memoria dedicada para este propósito. La cantidad de memoria y la zona asignada para ello dependerá de cada dispositivo. Modelo de Datos El RMS está implementado en una base de datos basada en registros (ver fig. 4.9 de la pág. 118). Los MIDlets son los encargados de crear los Record Stores para comunicarse con ellos. Estos Record Stores quedan almacenados en el dispositivo y pueden ser accedidos por cualquier MIDlet que pertenezca a la misma suite (ver fig. 4.10 de la pág. 118). 118 CAPÍTULO 4. J2ME Figura 4.9: Comunicación entre un MIDlet y el RMS Figura 4.10: Acceso a un RMS a través de una MIDlet suite 4.4. RECORD MANAGEMENT SYSTEM 119 Figura 4.11: Estructura de un Record Store Record Stores Las propiedades de estos almacenes de registros son: 1. Cada Record Store está compuesto por cero o más registros. 2. Un nombre de Record Store es sensible a mayúsculas y minúsculas y está formado por un máximo de 32 caracteres UNICODE. 3. Dentro de una suite no pueden coexistir dos Record Stores con el mismo nombre. 4. Si una suite de MIDlets es borrada del dispositivo MID, todos los Record Stores pertenecientes a esa suite se borrarán. 5. Es posible que un MIDlet acceda a un Record Store creado por otra suite, siempre que ésta de permiso para ello. Un Record Store tal como su nombre indica es un almacén de registros. Estos registros son la unidad básica de información que utiliza la clase RecordStore para almacenar datos. Cada uno de estos registros está formado por dos unidades: • Un número identificador de registro (Record ID) que es un valor entero que realiza la función de clave primaria en la base de datos. • Un array de bytes que es utilizado para almacenar la información deseada (ver fig. 4.11 de la pág. 119). Además de un nombre, cada Record Store también posee otros dos atributos: 120 CAPÍTULO 4. J2ME Figura 4.12: Estructura completa de un Record Store • Número de versión: Es un valor entero que se actualiza conforme se vayan insertando, modificando o borrando registros en el Record Store. • Marca temporal: Es un entero de tipo long que representa el número de milisegundos desde el 1 de enero de 1970 hasta el momento de realizar la última modificación en el Record Store (ver fig. 4.12 de la pág. 120). 4.4.2 Operaciones Con Record Stores Creación de un Record Store La clase RecordStore no dispone de ningún constructor, pero posee el método estático: static RecordStore openRecordStore(String name, boolean createIfNeccesary) Este método abre el Record Store con el nombre pasado como parámetro o crea uno si no existe cuando el parámetro createIfNeccesary es true. Además, existen otra versión alternativa de este método: • static RecordStore openRecordStore(String name, boolean createIfNeccesary, int autorización, boolean writable). 4.5. COMUNICACIONES 4.5 Comunicaciones 4.5.1 Conceptos Básicos 121 En J2ME y J2SE se usan streams para escribir y leer datos. Estas clases están en el paquete java.io por lo que no forman parte del perfil MIDP. En cambio, se dispone del paquete javax.microedition.io, el cual contiene las clases que dan soporte para el trabajo en red y comunicaciones en las aplicaciones MIDP. Este paquete existe en contraposición con el paquete java.net de J2SE. Las aplicaciones MIDP usan los paquetes javax.microedition.io y java.io de la siguiente manera. El primer paquete contiene numerosas clases que permitirán crear y manejar diferentes conexiones de red. Estas conexiones podrán usar diferentes formas de comunicación: HTTP, datagramas, sockets. De esta manera, el paquete java.io se encargará de proporcionar las clases necesarias para leer y escribir en estas conexiones. Las clases orientadas a la conexión en red y comunicaciones reciben el nombre de Generic Connection Framwork. En la Figura 4.13 de la página 122 se ve cómo se organizan jerárquicamente. También se verá cómo se organizan las interfaces que nos suministra la especificación MIDP y que están en un nivel superior al GCF ya que implementan los detalles de diversos protocolos de comunicación. Como se ve, la raíz del árbol es la interfaz Connection que representa la conexión más genérica y abstracta que podemos crear. El resto de interfaces que derivan de Connection representan los distintos tipos de conexiones que se pueden crear. 4.5.2 Clases y Conexiones del Generic Connection Framework La anterior jerarquía de clases nos da una idea de la filosofía que sigue el Generic Connection Framework. Los dispositivos MID, poseen bastantes restricciones. Por esta razón, se hace imposible poseer la implementación de los distintos protocolos existentes. Lo que proporciona el Generic Connection Framework es una sola clase Connector que esconde los detalles de la conexión. Esta clase puede por sí misma crear cualquier tipo de conexión: Archivos, Http, socket, etc. 122 CAPÍTULO 4. J2ME Figura 4.13: Jerarquía de interfaces 4.5. COMUNICACIONES 123 Clase Connector public class Connector El GCF proporciona la clase Connector que esconde los detalles de la conexión. De esta forma se podrá realizar cualquier tipo de conexión usando sólo esta clase y sin preocuparse de cómo se implementa el protocolo requerido. La conexión se realiza mediante el siguiente mensaje genérico: Connector.open(protocolo:dirección;parámetros); Algunos ejemplo de invocación son: Connector.open(http://direccionquesea.es); Connector.open(file://autoexec.bat); Connector.open(socket://direccion:0000); La clase Connector se encarga de buscar la clase específica que implemente el protocolo requerido. Si esta clase se encuentra, el método open() devuelve un objeto que implementa la interfaz Connection. Interfaz Connection public abstract interface Connection La interfaz Connection se encuentra en lo más alto de la jerarquía de interfaces del Generic Connection Framework, por lo que cualquier otra interfaz deriva de él. Una conexión de tipo Connection se crea después de que un objeto Connector invoque al método open(). Esta interfaz representa a la conexión más abstracta y genérica posible. Por esta razón, el único método que posee esta interfaz es el de public void close() que cierra la conexión.. Interfaz InputConnection public abstract interface InputConnection extends Connection La interfaz InputConnection representa una conexión basada en streams de entrada. Esta interfaz sólo posee dos métodos que devuelven objetos de tipo 124 CAPÍTULO 4. J2ME InputStreams, estos métodos son DataInputStream openDataInputStream() e InputStream openInputStream(). El siguiente ejemplo ilustra cómo se realiza una conexión a través de esta interfaz: String url = www.midireccion.com; InputConnection conexión = (InputConnection)Connector.open(url); DataInputStream dis = conexion.openDataInputStream(); Interfaz OutputConnection public abstract interface OutputConnection extends Connection La interfaz OutputConnection representa una conexión basada en streams de salida. Esta interfaz sólo posee dos métodos que devuelven objetos de tipo OutputStreams, estos métodos son DataOutputStream openDataOutputStream() y OutputStream openOutputStream(). La conexión a través de esta interfaz se realiza de forma análoga a la interfaz InputConnection. Interfaz StreamConnection public abstract interface StreamConnection extends InputConnection, OutputConnection Esta interfaz representa una conexión basada en streams tanto de entrada como de salida. No añade ningún método nuevo, si no que hereda los métodos de los interfaces que están por encima de él. Su única misión en la jerarquía del GCF es representar un tipo de conexión cuyos datos pueden ser tratados como streams de bytes y en la que es posible leer y escribir. El siguiente ejemplo ilustra cómo se crea una conexión de este tipo en la que se va a crear un stream de entrada del que se leerá la información: StreamConnection sc = (StreamConnection)Connector.open(url); InputStream is = sc.openInputStream(); 4.5. COMUNICACIONES 125 ByteArrayOutputStream baos = new ByteArrayOutputStream(); int c; while((c = is.read()) != -1){ baos.write(c); } Téngase en cuenta que la dirección url que se usa al crear la conexión puede apuntar a un fichero (url = http://www.direccion.com/fichero1.txt) o a una imagen (url = http://www.direccion.com/imagen.png); en cualquier caso, esa información la guardamos en un ByteArrayOutputStream que podemos tratar de la manera que más convenga. Interfaz ContentConnection public abstract interface ContentConnection extends StreamConnection La interfaz ContentConnection extiende a la interfaz StreamConnection. Esta interfaz representa conexiones que pueden describir su contenido de alguna forma. En las conexiones anteriores se transmitían bytes sin importar su composición, pero en estas conexiones la estructura de bytes a transmitir debe ser conocida de antemano. Concretamente, esta interfaz representa a familias de protocolos en los que se definen atributos los cuales describen los datos que se transportan. Con esta interfaz podemos conocer de antemano la longitud de datos que recibimos, con lo que las operaciones de lectura de datos se pueden simplificar mucho haciendo uso de esta información. Este mecanismo de lectura se puede apreciar en el siguiente ejemplo donde se sustituye el bucle usado para realizar la lectura de datos por dos simples líneas de código: ContentConnection cc = (ContentConnection)Connector.open(url); is = cc.openInputStream(); byte[] datos; int long = (int)cc.getLength(); 126 CAPÍTULO 4. J2ME if (long != -1) { datos = new byte[long]; is.read(datos); } else // Realizamos bucle de lectura de datos Este algoritmo mejora al bucle del ejemplo anterior ya que realizamos la lectura de datos de una sola vez, en vez de byte a byte. Interfaz StreamConnectionNotifier public abstract interface StreamConnectionNotifier extends Connection Esta interfaz deriva directamente de Connection. Representa al establecimiento de conexiones lanzadas por clientes remotos. Si la conexión se realiza con éxito, se devuelve un StreamConnection para establecer la comunicación. Interfaz DatagramConnection public abstract interface DatagramConnection extends Connection Esta interfaz define las capacidades que debe tener una conexión basada en datagramas. A partir de esta interfaz se pueden definir distintos protocolos basados en datagramas, pero su implementación habría que realizarla a nivel del perfil. 4.5.3 Comunicaciones HTTP Como se ha dicho, el GCF esconde los detalles de la conexión y además no implementa ningún protocolo en concreto ya que esta implementación debe estar en el nivel de los perfiles. En este punto se verá en detalle la interfaz HttpConnection que implementa el protocolo HTTP. El protocolo HTTP es un protocolo de tipo petición/respuesta. El funcionamiento de este protocolo es el siguiente: El cliente realiza una petición al servidor y espera a que éste le envíe una respuesta. Normalmente, esta 4.5. COMUNICACIONES 127 comunicación es la que suele realizarse entre un navegador web (cliente) y un servidor web (servidor). Una conexión HTTP pasa por tres estados, como ilustra la figura ?? de la página ??. Estados de una conexión HTTP Estado de Establecimiento En este estado es dónde se establecerá los parámetros de la comunicación. El cliente prepara la petición que va a realizar al servidor, además de negociar con él una serie de parámetros como el formato, idioma, etc. Existen dos métodos que sólo pueden ser invocados en este estado (ver Tabla 4.5 en la pág. 128). El primer método establece el tipo de petición que vamos a realizar. Esta petición puede ser de los tipos indicados en la Tabla 4.6 de la pág. 128. El segundo método establece cierta información adicional a la petición. Esta información permite negociar entre el cliente y el servidor detalles de la petición como, por ejemplo, idioma, formato, etc. Estos campos forman parte de la cabecera de la petición. 128 CAPÍTULO 4. J2ME Método public void setRequestMethod(String tipo) public void setRequestProperty(String clave, String valor) Descripción Establece el tipo de petición. Establece una propiedad de la petición. Tabla 4.5: Métodos relacionados con la etapa de establecimiento Tipo GET POST HEAD Descripción Petición de información en la que los datos se env an como parte del URL. Petición de información en la que los datos se env an aparte en un stream. Petición de metainformación. Tabla 4.6: Tipos de peticiones Peticiones GET A continuación se muestra un ejemplo en el que se prepara una conexión mediante la interfaz HttpConnection usando una petición de tipo GET. //Creamos la conexión String url = http://www.midireccion.com/local?sala=1&luz=apagada; HttpConnection hc = (HttpConnection)Connector.open(url); // Informamos del tipo de petición que vamos a efectuar hc.setRequestMethod(HttpConnection.GET); //Establecemos algunos campos de cabecera hc.setRequestProperty(User-Agent,Profile/MIDP-2.0 Configuration/CLDC-1.0); hc.setRequestProperty(Content-Language,es-ES); El código anterior establece la comunicación con el servidor y deja prepara- 4.5. COMUNICACIONES 129 da una conexión para intercambiar información con éste. Como se aprecia, la información sobre la petición va incluida en la cabecera de la dirección URL. El cuerpo de la petición lo forma la cadena sala=1&luz=apagada. Esta información va detrás del símbolo ? situado al final de la dirección URL. Cada parámetro de la petición va separado del siguiente por el símbolo &. Peticiones POST En una petición de este tipo, el cuerpo de la petición se envía en un stream después de iniciar la conexión. El siguiente ejemplo muestra cómo se realiza el envío del cuerpo de la petición: //Creamos la conexión String url = http://www.midireccion.com; HttpConnection hc = (HttpConnection)Connector.open(url); // Informamos del tipo de petición que vamos a efectuar hc.setRequestMethod(HttpConnection.POST); //Establecemos algunos campos de cabecera hc.setRequestProperty(User-Agent,Profile/MIDP-2.0 Configuration/CLDC-1.0); hc.setRequestProperty(Content-Language,es-ES); // Enviamos el cuerpo de la petición OutputStream os = hc.openOutputStream(); os.write(sala=1.getBytes()); os.write(&luz=apagada.getBytes()); os.flush(); Estado de Conexión En este estado se realiza el intercambio de información entre el cliente y el servidor. En los ejemplos anteriores se ha visto la manera de enviar la petición al servidor. Este es un buen momento para ver cómo se realiza la respuesta 130 CAPÍTULO 4. J2ME del servidor hacia el cliente. Respuesta del Servidor Al igual que la petición del cliente poseía distintas partes, la respuesta del servidor se compone de: • Línea de estado. • Cabecera. • Cuerpo de la respuesta. La interfaz HttpConnection dispone de 35 códigos de estado diferentes. Básicamente podemos dividirlos en cinco clases de la siguiente manera: • 1xx Código de información • 2xx Código de éxito. • 3xx Código de redirección. • 4xx Código de error del cliente. • 5xx Código de error del servidor. Por ejemplo, el código 400 corresponde a la constante HTTP_BAD_REQUEST. En realidad la respuesta del servidor posee el siguiente formato: HTTP/1.1 400 Bad Request. HTTP/1.1 200 OK. En la respuesta se incluye el protocolo usado, seguido del código de estado y de un mensaje de respuesta. Este mensaje es el devuelto al invocar el método getResponseMessage(). Estado de Cierre La conexión entra en este estado una vez que se termina la comunicación entre el cliente y el servidor invocando al método close(). 4.5. COMUNICACIONES 4.5.4 131 Otras Conexiones Interfaz HttpsConnection public interface HttpsConnection extends HttpConnection HTTPS es la versión segura del protocolo HTTP. Esta interfaz define los métodos necesarios para establecer una conexión de este tipo. En esta conexión, los parámetros de la petición se deben establecer antes de que ésta se envíe. Un objeto de tipo HttpsConnection es devuelto invocando al método Connector.open(url) de la siguiente manera: String url = https://www.direccion.com; HttpsConnection conexion = (HttpsConnection)Connector.open(url); Algunos métodos de esta interfaz pueden lanzar la excepción CertificateException para indicar distintos fallos mientras se establece una conexión segura. Interfaz UDPDatagramConnection public interface UDPDatagramConnection extends DatagramConnection Esta interfaz representa una conexión basada en datagramas en los que se conoce su dirección final. Esta interfaz se usa cuando el parámetro url del método Connector.open(url) tiene el siguiente formato: url = datagram://<host>:<port>; y la conexión se realiza de la siguiente manera : UDPDatagramConnection dc = UDPDatagramConnection)Connector.open(url); Si la cadena de conexión omite el host y el port, el sistema deberá de localizar un puerto libre. 132 CAPÍTULO 4. J2ME Interfaz CommConnection public interface CommConnection extends StreamConnection Esta interfaz representa una conexión mediante un puerto serie. Tal y como su nombre indica, en esta conexión los bits de datos se transmiten secuencialmente, en serie. Esta conexión se establece cuando el parámetro url que le pasamos al método Connector.open(url) tiene el siguiente formato: url = comm:<port><parámetros>; y la conexión se realiza de la siguiente manera : CommConnection cc = (CommConnection)Connector.open(url); Los parámetros van separados por ; . Por otro lado el nombre del puerto se debe indicar según el siguiente criterio: • COM# para puertos RS-232. • IR# para puertos IrDA IRCOMM. donde # indica el número asignado al puerto. Interfaz SocketConnection public interface SocketConnection extends StreamConnection Esta interfaz define una conexión entre sockets basados en streams. La conexión con el socket de destino tiene el siguiente formato: url = socket://<host>:<port>; y la conexión se realiza de la siguiente manera : SocketConnection sc = (SocketConnection)Connector.open(url); Esta conexión está basada en la interfaz StreamConnection. Un StreamConnection puede ser tanto de entrada como de salida. Por otro lado si, por 4.5. COMUNICACIONES 133 ejemplo, el sistema proporciona un sistema de comunicación duplex, para cerrar la comunicación a través del socket es necesario cerrar los streams de entrada y de salida. Si tan sólo se cierra el canal de entrada, se puede seguir mandando información por el de salida. Incluso una vez cerrados ambos, es posible volverlos a abrir si aún no se ha cerrado el socket. Interfaz SecureConnection public interface SecureConnection extends SocketConnection Esta interfaz representa una conexión segura entre sockets. Esta conexión se consigue invocando al método Connector.open(url) de la siguiente forma: String url = ssl://<host>:<port>; y la conexión se realiza de la siguiente manera : SecureConnection ssc = (SecureConnection)Connector.open(url); Si el establecimiento de la conexión falla, se lanzaría una excepción del tipo CertificateException. Interfaz ServerSocketConnection public interface ServerSocketConnection extends StreamConnectionNotifier Esta interfaz representa una conexión con un servidor de sockets. Este tipo de conexión se establece cuando invocamos al método Connector.open(url) sin especificar el host: ServerSocketConnection ssc = (ServerSocketConnection)Connector.open(socket://:00); Capítulo 5 Introducción a DB2 135 136 CAPÍTULO 5. INTRODUCCIÓN A DB2 5.1 DB2 Universal Database (DB2 UDB) DB2 Universal Database, es una base de datos universal. Es completamente escalable, veloz y confiable. Corre en modo nativo en casi todas las plataformas, como Windows NT, Sun Solaris, HP-UX, AIX, y OS/2 [19]. • Características y funciones: — DB2 UDB es el producto principal de la estrategia de Data Management de IBM. — DB2 UDB es un sistema para administración de bases de datos relacionales (RDBMS) multiplataforma, especialmente diseñada para ambientes distribuidos, permitiendo que los usuarios locales compartan información con los recursos centrales. • Integridad: DB2 UDB incluye características de integridad, asegurando la protección de los datos aún en caso de que los sistemas sufran un colapso; y de seguridad, permitiendo realizar respaldos en línea con distintos grados de granularidad, sin que esto afecte la disponibilidad de acceso a los datos por parte de los usuarios. • Múltiples usos: Provee la capacidad de hacer frente a múltiples necesidades, desde procesamiento transaccional de misión crítica (OLTP), hasta análisis exhaustivo de los datos para el soporte a la toma de decisiones (OLAP). • Escalabilidad: Sus características distintivas de escalabilidad le permiten almacenar información en un amplio rango de equipos, desde una PC portátil hasta un complejo ambiente de mainframes procesando en paralelo. • Web enabled para e-business: 5.1. DB2 UNIVERSAL DATABASE (DB2 UDB) 137 Figura 5.1: Almacenamiento de Documentos XML en DB2. Incluye tecnología basada en Web que permite generar aplicaciones en las Intranets y responder a las oportunidades de negocios disponibles en Internet. Además, DB2 UDB provee soporte a Java.En la figura 5.1 de la pág.137 se grafica el almacenamiento de documentos XML mediante DB2. • Facilidad de instalación y uso: La primera versión de DB2 para NT fue reconocida en el mercado como una base de datos muy poderosa, pero difícil de instalar y usar. En esta versión (DB2 UDB), IBM agregó muchas herramientas gráficas para facilitar el uso tanto de usuarios, como administradores y desarrolladores. Incluye guías para operaciones como instalación, configuración de performance, setup, etc. Además, se agregaron herramientas para facilitar las tareas de integración con otras bases de datos, tecnologías de networking y desarrollo de aplicaciones [20]. • Universalidad: 138 CAPÍTULO 5. INTRODUCCIÓN A DB2 DB2 UDB es la única base de datos realmente universal, es multiplataforma (16 plataformas - 10 no IBM), brinda soporte a un amplio rango de clientes, soporta el acceso de los datos desde Internet y permite almacenar todo tipo de datos incluyendo texto, audio, imágenes y video o cualquier otro definido por el usuario. 5.2 Funciones Complementarias • Conectividad. Las herramientas de conectividad permiten acceder a los datos más allá de donde ellos se encuentren. El slogan “cualquier cliente, a cualquier servidor, en cualquier red” está completamente sustentado por la funcionalidad que sus herramientas ofrecen. EL DB2 Connect permite acceder a los datos de DB2 en mainframe o AS/400, desde Windows NT, Windows 95 / 98, OS/2 o cualquiera de los Unix soportados. Además, el producto Datajoiner posibilita acceder de forma única y transparente a los datos residentes en Oracle, Sybase, Informix, Microsoft SQL Server, IMS, VSAM y otros. • Data Warehousing. DB2 UDB provee la infraestructura necesaria para soportar el proceso de toma de decisiones en cualquier tamaño y tipo de organización. Está dirigido a resolver la problemática a nivel departamental (Data Marts), ya que un único producto provee la capacidad para acceder a datos en Oracle, Sybase, Informix, Microsoft SQL Server, VSAM o IMS, además de la familia DB2. Permite de forma totalmente gráfica acceder, transformar y distribuir los datos automáticamente y sin programar una línea de código.En la figura 5.2 de la pág. 139 se refleja el Esquema Conceptual de Almacenes de Datos en DB2 [19]. • Data Mining. DB2 UDB posibilita el análisis orientado al descubrimiento de información escondida en los datos, realizando modelización predictiva, segmentación de la base de datos, análisis de vínculos, o detección de desviaciones. Incluye las siguientes técnicas: clustering (segmentación), clasificación, predicción, 5.2. FUNCIONES COMPLEMENTARIAS 139 Figura 5.2: Esquema Conceptual de los Almacenes de Datos. descubrimiento asociativo, descubrimiento secuencial de patrones y secuencias temporales. Todas las técnicas mencionadas permiten realizar segmentación de clientes, detección de fraudes, retención de clientes, ventas cruzadas, etc. • Partición Simple sobre un Único Procesador. Este entorno se basa en memoria y disco, conteniendo una única CPU. Este ambiente ha sido denominado de diversas maneras : base de datos aislada (standalone database), base de datos cliente/servidor (client/server database), base de datos serial (serial database), sistema uniprocesador (uniprocessor system), y entorno nodo simple/ no paralelo (single node/non-parallel). La base de datos en este ambiente sirve para cubrir todas las necesidades de un departamento o de una pequeña oficina de una empresa donde los datos y los recursos del sistema (incluyendo un único procesador o CPU) son administrados por un único administrador de la base. • Capacidad y Escalabilidad. A este ambiente se le pueden agregar mas discos. Al tener uno o más servidores de entrada-salida para mas de un disco permite que más de una operación de entrada-salida ocurra al mismo tiempo. 140 CAPÍTULO 5. INTRODUCCIÓN A DB2 Un sistema de procesador único esta limitado por la cantidad de espacio en disco que pueda manejar dicho procesador. Sin embargo, como la carga de trabajo aumenta, una sola CPU puede llegar a ser insuficiente para satisfacer las peticiones solicitadas por los usuarios, aún sin importar cuántos discos y/o memoria adicional hayan sido agregados [21]. Si se ha alcanzado la máxima capacidad o escalabilidad, se podría considerar cambiarse a un sistema de partición única con múltiples procesadores. A continuación se describe esta configuración. — Partición Simple con Múltiples Procesadores Este entorno se compone de varios procesadores de igual potencia dentro de la misma máquina, llamándose a este ambiente Sistema Simétrico Multiprocesador (symmetric multi-processor o SMP). Los recursos tales como espacio de disco y memoria son compartidos. En esta máquina se encuentran más discos y memoria en comparación a una base de datos de partición simple, en el ambiente de procesador único. Este entorno es de fácil administración, debido a que todo esta ubicado en una sola máquina y además los discos y memoria están compartidos. Con varios procesadores disponibles, diferentes operaciones de la base de datos pueden ser completadas significativamente más rápido que en bases de datos asignadas a un solo procesador. DB2 también puede dividir el trabajo de una consulta simple entre los procesadores disponibles para mejorar la velocidad de procesamiento. Otras operaciones de la base de datos, tales como el resguardo (backup) y creación de índices sobre datos existentes pueden también aprovechar la ventaja de trabajar con múltiples procesadores. ∗ Capacidad y Escalabilidad En este entorno se pueden agregar más procesadores. Sin embargo, es posible que los distintos procesadores traten de acceder al mismo dato en el mismo tiempo, lo cual generará la aparición de limitaciones a medida que las operaciones de se incrementen. Con discos y memoria compartidos, se puede efectivamente compartir todos los datos de la base. Una aplicación en un procesador puede estar accediendo un dato al mismo tiempo que otra aplicación lo hace en otro procesador, causando así que la 5.3. CONFIGURACIONES DE PARTICIONES MÚLTIPLES 141 segunda aplicación espere para acceder a ese dato. Se puede incrementar la capacidad de entrada-salida de la partición de la base de datos asociada a un procesador, así como también el número de discos. También se pueden establecer servidores de entrada-salida para repartir las solicitudes de entrada-salida. Al tener uno o mas servidores de entrada-salida para cada disco permite que una o mas operaciones de entrada-salida tengan lugar al mismo tiempo. Si se ha alcanzado la máxima capacidad o escalabilidad, se puede considerar la idea de cambiar la base a un sistema de partición múltiple, descrito a continuación. 5.3 Configuraciones de Particiones Múltiples Además de los entornos antes mencionados, se puede dividir la base de datos en particiones múltiples, cada una en su propia máquina. Y además varias máquinas con particiones múltiples de una base de datos pueden ser agrupadas. Esta sección describe las siguientes configuraciones de particiones posibles : • Particiones en sistemas cada uno con un procesador. • Particiones en sistemas cada uno con múltiples procesadores. • Particiones lógicas de base de datos. 5.3.1 Particiones con un Procesador En este entorno existen varias particiones de base de datos, cada una de las cuales sobre su propia máquina y con su propio procesador, memoria y discos. Una máquina consiste de una CPU, memoria, y disco con todas las máquinas conectadas mediante una instalación de comunicación. Otros nombres dados a este entorno son los siguientes : cúmulo (cluster), cúmulo de uniprocesadores (cluster of uniprocessors), entorno de procesamiento masivo en paralelo (massively parallel procesing o MPP), o configuración 142 CAPÍTULO 5. INTRODUCCIÓN A DB2 compartido-nada (shared-nothing configuration). El último nombre refleja exactamente el arreglo de recursos en este ambiente. A diferencia de un entorno SMP (Sistema Simétrico Multiprocesador ), un entorno MPP (Particiones Múltiples con un procesador ) no tiene discos ni memoria compartidos. El entorno MPP elimina las limitaciones introducidas al compartir memoria y disco. Un entorno de base de datos particionado permite que una base de datos continué siendo un conjunto lógico mientras que físicamente esta dividida a través de más de una partición. Para los usuarios y/o aplicaciones, la base de datos puede ser utilizada como un todo y el hecho de que los datos están particionados es transparente. El trabajo a ser realizado con los datos puede ser dividido para cada administrador de base de datos, de esta forma cada administrador de la base de datos en cada partición, trabaja sobre su propia parte de la base de datos. • Capacidad y Escalabilidad: En este entorno se pueden agregar mas particiones de base de datos (nodos) a la configuración. En algunas plataformas, por ejemplo RS/6000, el máximo es de 512 nodos. Sin embargo, podría existir un problema práctico relacionado con la administración de tal numero de máquinas e instancias. Si se ha llegado a la máxima escalabilidad y capacidad, se puede considerar la opción de migrar a un sistema donde cada partición posea múltiples procesadores. 5.3.2 Particiones con Múltiples Procesadores Como alternativa de una configuración en la cual cada partición tiene un procesador único, se puede utilizar una en la cual una partición posea múltiples procesadores. A esto se lo denomina Cúmulo SMP (SMP Cluster). Esta configuración combina las ventajas de un SMP y el paralelismo de un MPP. Esto significa que una consulta (query) puede ser realizada en una partición simple a través de múltiples procesadores. Además esto implica que una consulta (query) puede ser hecha en paralelo a través de particiones múltiples. 5.4. PARALELISMO MEJOR ADAPTABLE A CADA EH 143 • Capacidad y Escalabilidad En este entorno se pueden adicionar mas particiones a la base de datos, como se vé en la sección anterior. También se pueden agregar mas procesadores a las particiones existentes en la base de datos. 5.3.3 Particiones Lógicas de Base de Datos La partición lógica de una base de datos se diferencia de una partición física en que no se logra el control de la máquina entera. A pesar de que la máquina comparte sus recursos, la partición no lo hace. Esto significa que los procesadores son compartidos pero no lo son el/los discos y la memoria. Una razón lógica para utilizar particiones lógicas es la de brindar escalabilidad. El administrador de base de datos múltiple que se ejecuta en particiones lógicas múltiples, puede hacer un uso más completo de los recursos disponibles que un administrador de una base simple de datos. Se gana mayor escalabilidad sobre una máquina SMP mediante la adición de particiones, particularmente en aquellas máquinas con varios procesadores. Mediante la partición de la base de datos, se puede administrar y recuperar cada partición por separado. También se debe notar que la habilidad de tener dos o mas particiones coexistiendo en la misma máquina (sin importar el número de procesadores) permite una mayor flexibilidad al diseñar configuraciones avanzadas de disponibilidad y estrategias para hacer frente a caídas del sistema. 5.4 Resúmen del Paralelismo Mejor Adaptable a cada Entorno de Hardware La siguiente tabla 5.1 de la pág. 144 resume los tipos de paralelismo que mejor se adaptan a los diferentes entornos de hardware. 144 CAPÍTULO 5. INTRODUCCIÓN A DB2 Entorno de Hardware Paralelismo I/O Si Paralelismo Inter Consulta Paralelismo Intra Partición No Paralelismo Inter Consulta Paralelismo Inter Partición No Partición Simple, Único Procesador Partición Simple, Múltiples Procesadores Particiones Múltiples, Un Procesador Particiones Múltiples, Múltiples Procesadores Particiones Lógicas de Base de Datos Si Si No Si No Si Si Si Si Si Si Si Tabla 5.1: Paralelismo mejor Adaptable a cada Entorno de Hardware 5.4.1 Herramientas de Administración Desde el punto de vista del administrador de base de datos, el DB2 incluye una larga lista de herramientas DBA. Además de esto hay: utilidades para B/R, reorganizador, importar/exportar y alta velocidad de llamadas, están incluidas y pueden ser ejecutadas a través de un objeto GUI Browser. • DB2 Administración de Servidores. El DB2 administración de servidores (DAS) es una instancia de DB2 que habilita administración remota de servidores DB2. Esta instancia es creada y usada en una forma similar a cualquier instancia de DB2. Se puede tener una sola DAS sobre la máquina. • Asistente para la Configuración de clientes. El asistente de configuración de clientes ayuda a manejar las conexiones de las bases de datos con servidores de base de datos remotas [22]. 5.4. PARALELISMO MEJOR ADAPTABLE A CADA EH 145 Este puede correr bajo servidores OS/2 y Windows NT, así como el cliente corre bajo OS/2, Windows NT y Windows 95. Con el asistente de configuración de clientes se podrá : — Definir conexiones a base de datos de modo que éstas pueden ser utilizadas por aplicaciones. Existen 3 métodos: ∗ Examinar la red por base de datos disponibles y seleccionar una. El cliente automáticamente se configura para esa base de datos. ∗ Usar los perfiles de acceso a base de datos que provee el administrador para definir automáticamente las conexiones. ∗ Configuración manual de conexiones a base de datos para modificar algunos parámetros de conexión requeridos. — Remover base de datos catalogadas o modificar sus propiedades. — Testear la conexión con la base de datos identificada en el sistema para asegurar que se puede establecer la conexión con el servidor que necesita. — Enlazar aplicaciones a una base de datos seleccionando utilidades o enlazar archivos de una lista. — Establecer conexiones con servidores DRDA si la conexión DB2 está instalada. • Administrador El administrador es usado para monitorear y cambiar el mejoramiento de aplicaciones que corren a través de la base de datos. Consiste en dos partes: — Una utilidad de frente-final. — Un dominio. Cuando arranca el administrador, se ejecuta el comando de inicio del administrador de utilidades de front-end, quienes ejecutan el dominio. Por default, el dominio es iniciado sobre toda partición en una base de datos particionada, pero se puede también usar la utilidad front-end para iniciar un dominio simple de una partición específica para monitorear la actividad a través de la 146 CAPÍTULO 5. INTRODUCCIÓN A DB2 partición de base de datos encontradas allí. O un dominio puede monitorear la actividad sobre una partición-simple de base de datos. Además un administrador de dominio colecciona estadísticas sobre las aplicaciones que corren a través de la base de datos. Estas son chequeadas a través de reglas que pueden ser especificadas en el archivo de configuración del administrador aplicadas a esa base de datos específica. El administrador actúa de acuerdo a éstas reglas. Por Ej.: una regla puede indicar que la aplicación esta usando demasiados recursos. En éste caso el administrador puede cambiar las prioridades de la aplicación o forzarla a dejar la base de datos, de acuerdo con las instrucciones específicas en el archivo de configuración del administrador. Si la acción asociada con ésta regla cambia las prioridades de la aplicación, el administrador cambia las prioridades del solicitante sobre la partición de la base de datos en la que el administrador detecta la violación de recurso. Si la acción asociada con la regla es de forzar la aplicación, ésta será forzada siempre que el administrador que ha detectado la violación del recurso esté corriendo sobre el nodo coordinador de la aplicación o en un entorno particionado de la base de datos. El administrador también almacena (logs) cualquier acción que tome, se pueden consultar éstos archivos log para rever las acciones tomadas por el administrador. 5.4.2 Estándares Soportados en DB2 La UDB DB2 se adapta muy bien a los estándares industriales haciéndola muy integrable con otros productos IBM y también con aquellos que no lo son. La UDB DB2 soporta estándares API incluyendo ANSI SQL92E, Microsoft OBDC y JAVA/JDBC. Con respecto a las aplicaciones de tipo cliente, se tienen procedimientos almacenados y funciones definidas por el usuario a través de VisualAge. Esto provee una amplia elección de desarrollo de aplicaciones y herramientas finales para ser elegidas por los usuarios. La UDB DB2 también puede ser integrada con servicios de seguridad para administrar servidores de nombre y direcciones. DB2 también soporta SNMP y puede ser monitoreada desde cualquier Sistema de Administración de Servers 5.5. FAMILIA DE DB2 UDB 147 de IBM . Para poder establecer una comunicación con otras bases de datos relacionales, la UDB DB2 soporta la Arquitectura de Base de Datos Relacional (DRDA). Esta arquitectura también incluye el Servidor de Aplicaciones (AS) y gracias a ella DB2 puede correr sobre TCP/IP en forma nativa, haciendo más fácil la implementación de un entorno abierto de redes. La UDB DB2 también incluye las innovaciones en SQL, que satisfacen diferentes requerimientos: • Conversióm Numérica y Aritmética Amigable Una aritmética y conversión numérica amigable para asignar variables, permite que una consulta sea llevada a cabo y proporcione algunos resultados aunque los times de ciertos datos no hayan podido ser evaluados. Esta función favorece la compatibilidad con ciertos sistemas como ser OS/390. 5.5 Familia de DB2 UDB El Software manejador de base de datos ha evolucionado en el corazón de la computación empresarial. Como las compañías se mueven en la era de Internet de la comunicación con banda ancha, las bases de datos pueden ser capaces de almacenar y servir enormes archivos multimedia, manejar volúmenes de datos crecientes, manipular el aumento en el número de usuarios, entregar firmemente mejora en la performance y soportar las aplicaciones de futuras generaciones. Con su habilidad virtual ilimitada para la escalabilidad, extensibilidad multimedia, fiabilidad y performance en la dirección industrial y franqueza en su plataforma, DB2 Universal Database ha ayudado a dirigir esta evolución. El primer sistema manejador de base de datos relacional disponible en la Web multimedia, bastante robusto para encontrar demandas de grandes corporaciones y bastante flexible para servir a grandes y pequeños negocios. Con la Versión 7 de DB2, IBM continua con su rol como innovador de base de datos en: • e-business 148 CAPÍTULO 5. INTRODUCCIÓN A DB2 El poder de DB2 Universal Database más la demanda de aplicaciones ebusines, tal como comercio electrónico, planificación de recursos empresariales, administración de conexión con el cliente, suministro en cadena, autoservicio Web y negocios inteligentes. Con respecto a la escalabilidad, la fuerza industrial de base de datos puede ser la base de la administración de datos para su evolución entre e-business. • Business Intelligence DB2 Universal Database hace uso de datos activos para la mejor toma de decisiones. Acerca del acceso a los datos, análisis y decisiones que ayudan al control de costos, revela nuevas oportunidades, estimulo al mercado compartido e incremento de la lealtad del cliente. • Data Management El Administrador de datos DB2 es más que una simple aplicación. Se refiere a dónde se almacenan los datos, cómo accederlos rápidamente, cómo evitar las pérdidas de datos y como administrar la base de datos para una mejor performance con respecto al hardware y las variadas aplicaciones. • DB2 Family DB2 Universal Database continua para encontrar la demanda del entorno computacional heterogéneos de hoy en día. Es decir, abre soluciones para que puedan acceder e integrar datos de múltiples recursos separados geográficamente en diferentes plataformas. Universal Database es un nombre ambicioso. Sugiere un producto designado para el uso de una variedad de propósitos y entornos, y es una buena descripción de DB2 UDB. Cada nuevo desempeño de DB2 UDB se fundamenta fuertemente en versiones anteriores. 5.6 DB2 UDB Versión 7.2 • La versión 7.2 de DB2 UDB incluye: 5.6. DB2 UDB VERSIÓN 7.2 — — — — — — — — 149 MQ-Assist wizard MQ Series Integration DB2 Enterprise - Edición extendida en Linux DB2 Universal Database Enterprise Edicion para Linux en S/390 DB2 Connect Enterprise Edición para Linux en S/390 DB2 Connect Web Starter Kit JDBC 2.0 soportado en HP-UX y Linux Exploitation of the Linux 2.4 kernel • Incremento en negocios inteligentes, como ser: — Nuevos recursos warehouse, como i2, SAP R/3, requerimientos de mensajes MQSeries y objetos Microsoft OLE DB — El almacenamiento de dato expande su rol como una herramienta de integración central para limpiar y calificar los instrumentos para adicionar apoyo de diferentes tipos — Mejorar el apoyo para crear y cambiar el almacenamiento en tabla — Requerimiento de acceso distribuido para nuevos recursos de datos, como ser Sybase y Microsoft SQL Server, plataformas como el entorno operativo Solaris y Linux — Requerimientos de acceso distribuido desde procedimientos SQL — Replicación de enlace a datos en un entorno operativo Solaris — Proceso lógico en almacenamiento y funciones SQL para realzar la capacidad de transformación y limpiado de los datos • Realce de la administración de datos: — — — — Demanda de archivos lógicos. Cambio de la identidad de las columnas. Soporte de 64-bit en el entorno operativo AIX, HP-UX y Solaris. Encriptación y desencriptación de cadenas de datos para funciones de usuarios definidos Incremental y delta backup. — Serie de soporte. — Creación de contenido paralelo. • Incrementos de la Familia de DB2, tal como: — Capacidad para correr procedimientos SQL sin compilarlos. — Administración de enlace a datos en entorno de desarrollo Solaris. 150 CAPÍTULO 5. INTRODUCCIÓN A DB2 5.7 Área de Ejecución de Instalación Al insertar el CD-ROM del producto DB2 Universal Database Versión 7 , la característica de ejecución automática ya no le lleva a la primera pantalla del programa de configuración de DB2. En lugar de ello, inicia el DB2 Launchpad. El DB2 Launchpad es una ventana que proporciona las opciones siguientes: • Notas del release. • Prerrequisitos de instalación. • Visión general rápida. • Instalar. • Salir. DB2 Launchpad le proporciona acceso a la información necesaria del CDROM antes de iniciar una instalación de DB2. 5.7.1 Área de Ejecución del Depósito La primera vez que abra el Centro de depósito de datos, también se abrirá el Área de ejecución del depósito. Esta área de ejecución simplifica el trabajo de llenar de datos un depósito sirviendo de guía en las tareas relacionadas. Siempre que se necesite crear objetos de depósito, se puede utilizar el área de ejecución seleccionándola en el menú Centro de depósito de datos. 5.7.2 Primeros Pasos En la Versión 7, la herramienta Primeros pasos, que se utiliza para crear y ver la base de datos SAMPLE en un servidor DB2, se ha ampliado para permitir opciones de cliente. En un cliente, existe la opción de conectarse a la base de datos SAMPLE (utilizando el Asistente de configuración de cliente) o de crear una base de datos SAMPLE en un servidor DB2 remoto. También se puede crear bases de datos de ejemplo para el depósito y el proceso analítico en línea (OLAP) 5.7. ÁREA DE EJECUCIÓN DE INSTALACIÓN 151 Estas bases de datos son necesarias para la guía de aprendizaje de Business Intelligence. Dado que Primeros pasos es una aplicación Java, puede utilizarse en todos los sistemas operativos soportados por DB2, a condición de que se instale el JRE (Java Run-Time Environment) apropiado en la estación de trabajo. 5.7.3 Visión General Rápida La Visión general rápida de DB2 Universal Database es una presentación de alto nivel que, en un breve periodo de tiempo (20 a 25 minutos), presenta los cambios, las características, las ventajas, las posibilidades y las fuentes de información asociadas con DB2 Universal Database. Pone un énfasis especial en e-business, business intelligence (inteligencia comercial - BI) y la gestión de datos. La navegación por Visión general rápida es flexible, proporcionándo control sobre la experiencia de aprendizaje. 5.7.4 Centro de Información El Centro de información, al que se puede acceder seleccionando Ayuda Centro de información desde el Centro de control, es ahora más fácil de utilizar. En el Centro de información se puede ver la información por tema o por categoría. El Centro de información contiene un enlace para realizar búsquedas en la biblioteca entera de DB2. También es posible acceder a la ayuda con el mandato db2ic en UNIX o bien desde el menú Inicio en los sistemas operativos Windows. 5.7.5 Mejoras en los Asistentes Todos los asistentes (denominados SmartGuides en versiones anteriores) tienen un aspecto nuevo con una Tabla de contenido (TOC) en el lado izquierdo. Se puede ajustar el tamaño de la TOC para hacerla más grande de forma que se pueda visualizar u ocultar por completo todo el texto. (Algunos asistentes contienen una página de Introducción que presenta el asistente y una página de Resúmen que resume la información que se ha entrado). Se pueden encontrar instrucciones o ayuda en cada página del asistente, en las ventanas emergentes de información para cada campo o control y en los 152 CAPÍTULO 5. INTRODUCCIÓN A DB2 enlaces que se identifican como texto subrayado. También está disponible una función Sugerencias. Esta sección contiene información sobre productos y paquetes que se han unido a la familia DB2 o que se han modificado para la Versión 7. • DB2WarehouseManager Esta nueva oferta reúne las herramientas para crear, gestionar, controlar y acceder a los depósitos de datos de DB2. El DB2 Warehouse Manager simplifica y acelera la creación de prototipos de depósito así como el desarrollo y el despliegue de depósitos. Proporciona al centro de datos el control para manejar las consultas, analizar los costes, gestionar los recursos y hacer un seguimiento del uso. Ayuda a satisfacer los requisitos del usuario para buscar información, acceder a ella e interpretarla. Proporciona herramientas y técnicas flexibles para crear, gestionar y acceder al depósito. Y satisface las necesidades de información más comunes para empresas de cualquier tamaño. • QMF para Windows QMF para Windows está incluido en DB2 Warehouse Manager. Proporciona una herramienta de consulta de múltiples finalidades para la información comercial, el compartimiento de datos, la protección de recursos del servidor, el desarrollo de aplicaciones sólido y la conectividad nativa a todas las plataformas de estación de trabajo DB2. QMF para Windows proporciona soporte nativo para la conectividad TCP / IP a la Versión 5 y posteriores. Se acopla arquitectónicamente con DB2 utilizando la DRDA (Arquitectura de Bases de Datos Relacionales Distribuidas). Hay soporte para un entorno de base de datos heterogéneo disponible mediante el DB2 DataJoiner , que permite a los usuarios acceder a bases de datos de estaciones de trabajo no relacionales o de otro proveedor. • DB2 Query Patroller Query Patroller para DB2 Universal Database está disponible para Enterprise Edition y proporciona soporte para HP-UX y NUMA-Q, además de los sistemas operativos Windows de 32 bits y las plataformas AIX y Solaris. 5.7. ÁREA DE EJECUCIÓN DE INSTALACIÓN 153 Esto permite gestionar, manejar y planificar consultas de análisis comercial y utilizar de forma más completa los recursos disponibles en dichos servidores DB2. • DB2 Relational Connect DB2 Relational Connect se utiliza en un sistema federado para consultar y recuperar datos ubicados en otros DBMS, como, por ejemplo, Oracle, Sybase y Microsoft SQL Server . Las sentencias de SQL pueden hacer referencia a varios DBMS o a bases de datos individuales, dentro de una sola sentencia. Por ejemplo, es posible unir los datos ubicados en una tabla de DB2 UDB, en una tabla de Oracle y en una vista de Sybase. En DB2 Versión 7.1, DB2 Relational Connect estaba disponible para Oracle en las plataformas Windows NT y AIX. En DB2 Versión 7.2, se ha ampliado el soporte de Oracle para incluir sistemas operativos adicionales, pues se ha añadido soporte para las fuentes de datos Sybase y Microsoft SQL Server. Los DBMS soportados incluyen Oracle, Sybase, Microsoft SQL Server y miembros de la familia DB2 Universal Database (tales como DB2 para OS/390, DB2 para OS/400 y DB2 para Windows). DB2 Relational Connect también puede utilizarse con el Centro de depósito de datos para mejorar el rendimiento de selección en las fuentes Oracle, Sybase y Microsoft SQL Server a fin de cargar un depósito de datos de DB2. DB2 Relational Connect funciona bajo algunas restricciones. Las peticiones distribuidas están limitadas a operaciones de sólo lectura en DB2 Versión 7. Además, no pueden ejecutarse operaciones de programa de utilidad (como LOAD, REORG, REORGCHK, IMPORT y RUNSTATS) para los apodos. No obstante, es posible utilizar un recurso de paso a través a fin de emitir sentencias de DDL y DML directamente a los DBMS utilizando el dialecto de SQL asociado con esa fuente de datos. DB2 Relational Connect es un producto opcional que puede utilizarse con DB2 Universal Database Enterprise Edition, DB2 Universal Database Enterprise -Extended Edition, DB2 Connect Enterprise Edition y DB2 Connect Unlimited Edition para los sistemas operativos Windows NT, AIX y Linux y el entorno operativo Solaris. 154 CAPÍTULO 5. INTRODUCCIÓN A DB2 • Kit de iniciación de OLAP de DB2 DB2 Universal Database incluye el Kit de iniciación de OLAP de DB2 que se basa funcionalmente en el Servidor OLAP de DB2 Versión 7. El Kit de iniciación del Servidor OLAP de DB2 permite a los usuarios de DB2 Universal Database explorar y aplicar posibilidades analíticas en línea antes de adquirir el producto completo, el Servidor OLAP de DB2, para realizar un análisis más complejo o para el despliegue en grandes grupos de usuarios. Las aplicaciones desarrolladas por el Kit de iniciación de OLAP de DB2 se pueden continuar extendiendo y aplicando en el producto completo. El Kit de iniciación de OLAP de DB2 y el Servidor OLAP de DB2 se basan en Essbase, la tecnología OLAP líder del mercado de Hyperion Solutions. • DB2 Spatial Extender DB2 Spatial Extender puede tener directamente a DB2 Universal Database como sistema principal. Esto facilita la inclusión de atributos espaciales, por ejemplo distancia o tiempo de manejo, en los análisis comerciales. Esta integración permite a los datos espaciales aprovechar las ventajas de rendimiento disponibles con un sistema de gestión de bases de datos (DBMS ). DB2 Spatial Extender se ajusta a los estándares ISO y OGS (OpenGIS Consortium) para el almacenamiento, la indexación y la consulta de datos espaciales. En la figura 5.3 de la pág. 155 el Almacenamiento de Datos Espaciales en DB2. • DB2 Universal Database Text Information Extender DB2 Universal Database Text Information Extender proporciona una nueva manera de buscar en documentos de texto mediante una consulta de SQL. Con el soporte para los formatos HTML y XML, combina la potencia de un mecanismo de búsqueda de textos rápido con las estrategias inteligentes de DB2 Optimizer . Construido sobre la base del éxito de los expansores actuales, DB2 Universal Database Text Information Extender aumenta, y empieza a combinar, la funcionalidad clave de DB2 Text Extender y DB2 Net Search Extender en un solo producto integrado para el mercado actual orientado a la información. 5.7. ÁREA DE EJECUCIÓN DE INSTALACIÓN 155 Figura 5.3: Almacenamiento de Datos Espaciales Utilizando el mecanismo de búsqueda de textos DB2 Net Search Extender y la interfaz de búsqueda DB2 Text Extender, DB2 Universal Database Text Information Extender proporciona la línea base para una nueva generación de productos de recuperación de textos. El resultado es un método de fácil uso y muy integrado para la búsqueda de documentos de la base de datos o de documentos externos utilizando DB2 Data Links Manager. • DB2 Net Search Extender DB2 Universal Database Net Search Extender proporciona un método de alto rendimiento de búsqueda de texto almacenado en bases de datos DB2. La realización de búsquedas utilizando este producto puede ser especialmente provechosa en aplicaciones de Internet donde el rendimiento es un factor importante. Net Search Extender puede añadir la potencia de la recuperación rápida de textos completos a las aplicaciones Net.Data, Java y CLI. Sus características le permiten almacenar documentos de texto no estructurados de hasta 2 gigabytes en bases de datos. Ofrece a los desarrolladores de aplicaciones un método rápido, versátil e inteligente para realizar búsquedas en dichos documentos. • Application Development Client 156 CAPÍTULO 5. INTRODUCCIÓN A DB2 El Kit del desarrollador de software se llama ahora DB2 Application Development Client. • DB2 Life Sciences Data Connect Cuando los estudiosos de las ciencias de la vida necesitan información para desarrollar su trabajo, a menudo combinan datos de diversas fuentes a fin de conseguir lo que necesitan. No obstante, en las industrias dedicadas a las ciencias de la vida y a la biotecnología, existen enormes cantidades de datos que residen en fuentes de datos especializadas con prestaciones de consulta patentadas. Por tales diferencias de funcionamiento, a los usuarios les resulta difícil recoger los datos en una sola fuente y con un solo formato para trabajar con ellos. IBM DB2 Life Sciences Data Connect es un sistema middleware de bases de datos que permite trabajar con una base de datos virtual cuyos datos subyacentes pueden estar almacenados en múltiples fuentes de datos dentro de la industria dedicada a las ciencias de la vida. Utilizando DB2 Life Sciences Data Connect, ejecuta una sola consulta dirigida a la base de datos virtual y es posible establecer conexiones que, de lo contrario, quizá no se encontraría consultando cada fuente de datos individualmente. 5.8 DB2 UDB Versión 8.1 Cada nueva versión de DB2 Universal Database se crea sobre la base sólida de la versión anterior. En la Versión 8.1 ofrece incluso un soporte más potente para Business Intelligence, Gestión de Datos y Soluciones e-business. DB2 Universal Database Versión 8.1 contiene muchas características nuevas, que incluyen el Centro de desarrollo, funciones ampliadas de XML Extender, soporte de Linux para DB2 Warehouse Manager, integración de Spatial Extender con herramientas de IBM Business Intelligence, un nuevo Centro de duplicación, mejoras de enlace y rendimiento de DB2 Data Links Manager. Nuevas herramientas de gestión y supervisión de bases de datos, soporte de 64 bits ampliado y nuevos asistentes de Instalación de DB2 y Centro de control de DB2. 5.8. DB2 UDB VERSIÓN 8.1 5.8.1 157 Centro de Desarrollo En la versión 8.1, el Centro de desarrollo sustituye al Stored Procedure Builder y proporciona un funcionamiento incrementado. Mediante el Centro de desarrollo, el usuario puede desarrollar procedimientos almacenados y funciones definidas por el usuario como se muestra en la figura5.4 de la página158. También es posible correlacionar tipos estructurados de los Enterprise JavaBeans. Los asistentes simplifican las tareas de desarrollo. Las nuevas características incluyen: • Soporte de varios proyectos y conexiones de base de datos. • La Vista de servidor para examinar los objetos de desarrollo en el servidor. • Depurador de SQL para depurar rutinas; incluye vistas para puntos de interrupción, variables y pila de llamadas. • Una interfaz mejorada para controlar el entorno de desarrollo. • Asistentes para construir funciones definidas por el usuario para MQSeries, fuentes de datos OLE DB y documentos XML. • Asistentes para exportar, importar y desplegar rutinas e información de proyectos Productos y Paquetes Nuevos. 5.8.2 WebSphere Utilizando una tecnología parecida a la que se encuentra en el Centro de desarrollo, WebSphere Studio Application Developer proporciona también un creador de procedimientos almacenados y un creador de funciones definidas por el usuario. Si utiliza WebSphere para desarrollar aplicaciones, puede acceder a muchas de las mismas características del Centro de desarrollo y aprovecharse tanto del conjunto de productos WebSphere como de la potencia de DB2. 5.8.3 Mejoras en XML Extender Se han añadido nuevas características a XML Extender : ahora, XML Extender soporta servicios de Web con los servicios Web Object Runtime Framework 158 CAPÍTULO 5. INTRODUCCIÓN A DB2 Figura 5.4: Centro de Desarrollo (WORF), conjunto de herramientas para implantar servicios de Web con DB2. Asimismo, XML Extender soporta ahora MQSeries, de forma que es posible enviar documentos XML a las colas de mensajes de MQSeries, y recuperarlos de las mismas. 5.8.4 DB2 Warehouse Manager Se han añadido nuevas características y mejoras a DB2 Warehouse Manager: Con el soporte de carga paralela nativa para DB2 Universal Database Enterprise Server Edition, es posible cargar grandes volúmenes de datos con más rapidez. DB2 Warehouse Manager tiene capacidades ampliadas, por lo que se puede incrementar y mejorar el rendimiento de las operaciones de depósito, manipular y localizar metadatos más deprisa, y ejecutar el agente de depósito, programas y transformadores en Linux. Los conectores para la Web y SAP se han mejorado en el paquete de DB2 Warehouse Manager. 5.8. DB2 UDB VERSIÓN 8.1 159 Figura 5.5: DB2 Warehouse Manager. 5.8.5 DB2 Warehouse Manager (cont.) • Ahora, el Gestor de catálogos de información soporta un rango más amplio de sistemas operativos. El Centro de catálogos de información, que es una nueva interfaz, proporciona unas funciones y un uso mejorados para trabajar con metadatos comerciales. • Ahora se soportan XP de Linux y de Windows(R) para el agente de depósito, además de los sistemas operativos que ya se soportaban: Windows NT, Windows 2000, AIX(R) y Solaris Operating Environment(R). • El transformador de limpieza realiza ahora transformaciones con SQL, lo que tiene como resultado un mejor rendimiento. En la figura5.5 de la pégina159 se puede observar un esquema del funcionamiento de DB2 Warehouse Manager. 5.8.6 Centro de depósito de datos de DB2 Se han añadido nuevas características al Centro de depósito de datos: El soporte de servidor de depósito se amplía a AIX. El servidor de depósito y el iniciador de sesiones de depósito, que se ejecutan como servicios en Windows, se ejecutan como daemons en AIX. Es posible exportar e importar metadatos del lenguaje de código y exportar estos objetos: 160 CAPÍTULO 5. INTRODUCCIÓN A DB2 Tablas, archivos y vistas de origen Tablas y archivos de destino El proceso en cascada (varios intervalos) permite gestionar varios pasos definiendo y habilitando una planificación y un flujo de tareas para los procesos que contienen los pasos. Con el nuevo paso Select and Update de SQL, se puede actualizar una tabla de destino del depósito de datos sin sustituir la tabla completa ni grabar código adicional. Ahora, la Guía de aprendizaje de Business Intelligence se compone de dos guías de aprendizaje más cortas: Guía de aprendizaje de Business Intelligence: Introducción al Centro de depósito de datos y Guía de aprendizaje de Business Intelligence: Lecciones ampliadas sobre depósito de datos. 5.8.7 DB2 Spatial Extender Se han añadido nuevas características a Spatial Extender: Ahora, Spatial Extender está integrado en las herramientas de IBM Business Intelligence, que incluyen QMF, Centro de depósito de datos y OLAP. Ahora es posible acceder a datos de DB2 para iSeries y de DB2 para z/OS con soporte federado. El soporte de plataformas incluye ahora los sistemas operativos siguientes: AIX, HP-UX, Linux, Solaris Operating Environment y Windows. El Index Advisor, una nueva herramienta de indexación, tiene dos modalidades operativas: Analizar un índice espacial existente y crear y analizar un índice virtual. Analizar la geometría de una columna espacial que aún no tiene un índice espacial. La interfaz de Spatial Extender está ahora orientada al objeto. 5.8. DB2 UDB VERSIÓN 8.1 5.8.8 161 DB2 Spatial Extender (cont.) Ahora, Spatial Extender ha mejorado su rendimiento y funciones: Se ha mejorado el rendimiento de las funciones de importación y exportación. Se han reestructurado las vistas de Catálogos espaciales. Se han ampliado los procedimientos almacenados soportados. Ahora se puede añadir fácilmente un geocodificador de terceros a Spatial Extender. Se han ampliado las funciones existentes. Ahora se tiene acceso a funciones espaciales adicionales. 5.8.9 Gestión de los Datos Las nuevas características de DB2 Universal Database Versión 8.1 incluyen: Un Servidor de administración de bases de datos rediseñado Agrupamiento multidimensional de los datos El Centro de desarrollo de DB2 El Centro de salud de DB2 Una supervisión mejorada de los puntos muertos SQL en funciones definidas por el usuario Un instalador basado en Java en UNIX(R) La posibilidad de cambiar parámetros en línea Mejoras en la duplicación 162 CAPÍTULO 5. INTRODUCCIÓN A DB2 5.8.10 Duplicación (DB2 DataPropagator) El DataPropagator de DB2 Versión 8.1 ha mejorado el uso, la fiabilidad, el rendimiento, las posibilidades de servicio y la seguridad. El nuevo Centro de duplicación facilita la configuración, el mantenimiento y la supervisión de duplicaciones. La duplicación se ejecuta con más rapidez que antes. 5.8.11 Nuevo Centro de duplicación Las nuevas características del Centro de duplicación incluyen: • Un iniciador que le permitirá configurar con rapidez el escenario de duplicación de extremo a extremo • La posibilidad de especificar “perfiles” específicos del servidor y del sistema operativo, así como de denominar convenios y propiedades para las tablas de destino, tablas de CD y tablas de control • La posibilidad de iniciar y detener los programas Capture, Apply y Monitor desde el Centro de duplicación • Un supervisor de alertas que envía alertas por correo electrónico cuando se superan los umbrales definidos por el usuario o se producen problemas • La posibilidad de calcular estadísticas tales como relación de productividad, valores de latencia y el número de errores de los programas Capture y Apply • Una comprobación mejorada de los errores y una validación de las operaciones de duplicación. En la figura 5.6 de la página 163 se puede observar el nuevo esquema de funcionamiento junto con las nuevas características del Centro de Duplicación de la versión 8.0. 5.8. DB2 UDB VERSIÓN 8.1 163 Figura 5.6: Centro de Duplicación de DB2 versión 8.0. 5.8.12 Posibilidades de Gestión Fundaciones de Bases de Datos de Autogestión Disponibles A partir de DB2 Universal Database Versión 8.1, verá incorporada en DB2 una apasionante tecnología inteligente; la base de datos se supervisa a sí misma y aconseja a los administradores de bases de datos cuando se requiere una acción. Esta tecnología de bases de datos inteligentes libera a los administradores de bases de datos de las tareas mundanas, de forma que se pueden centrar en las actividades que hacen prosperar el negocio. Visualizador de Memoria El Visualizador de memoria ayuda a los administradores de bases de datos a supervisar, gráficamente y en tiempo real, el rendimiento relativo a la memoria de una instancia y las bases de datos de la misma. 164 CAPÍTULO 5. INTRODUCCIÓN A DB2 Supervisor de salud Herramienta para la “gestión por excepción”, el Supervisor de salud evalúa la salud del sistema de bases de datos y notifica al usuario, por correo electrónico o mediante un buscapersonas, los problemas potenciales o existentes. El supervisor se ejecuta sobre cada una de las instancias de DB2. 5.8.13 Soporte de plataformas Con el soporte de 64 bits, se dispone de más espacio de direcciones para almacenar más datos en la memoria y poder acceder a ellos con mucha mayor rapidez. Los productos DB2 Versión 8.1 siguientes proporcionan soporte de 64 bits: • DB2 Personal Edition. • DB2 Enterprise Server Edition. • DB2 Connect Personal Edition. • DB2 Connect Enterprise Edition. • DB2 Application Development Client. • DB2 Administration Client. • DB2 Run-Time Client. • DB2 Warehouse Manager. • DB2 Spatial Extender. 5.8.14 Compatibilidad de la Familia de DB2 Asistente para la Configuración de DB2 La instalación de DB2 en plataformas Windows y UNIX resulta ahora más fácil mediante la utilización del Asistente para la configuración de DB2. Esta interfaz gráfica permite instalar productos DB2 directamente o crear archivos de respuestas para permitir una instalación posterior. En los sistemas 5.9. PRINCIPALES VENTAJAS DEL DB2 UDB 165 UNIX, también se puede utilizar el Asistente para la configuración de DB2 para realizar funciones de gestión de instancias. Asistentes del Centro de Control En DB2 Versión 8.1, los asistentes que están disponibles en las Herramientas de administración se han ampliado para abarcar un ámbito más amplio de funciones, en comparación con las de que se disponía en versiones anteriores de DB2. Por ejemplo, un asistente de DB2 Versión 8.1 brinda el conjunto total de opciones disponibles para crear una tabla. 5.9 Principales Ventajas del DB2 UDB • Fácil y simple Muchos expertos de la industria y usuarios han elogiado las nuevas herramientas que IBM desarrolló para facilitar la administración y uso del DB2 Universal Database. Utiliza una interfase gráfica, estilo browser, para acceder y manejar objetos de la base de datos. Incluye “smart.guides” que facilitan la tarea de configuración, sirviendo como guía paso a paso para lograr un rendimiento óptimo de la base de datos y para asistir al usuario en la creación de teclas con plantillas predefinidas. Las herramientas mencionadas, más otras incluidas en DB2 Universal Database, están listas para ser integradas a Tivoli. 166 CAPÍTULO 5. INTRODUCCIÓN A DB2 • Aplicaciones existentes Más del 70% de las empresas top del mundo confían en DB2 Universal Database para manejar aplicaciones críticas, las cuales pueden hacer uso de las siguientes aplicaciones de negocios: — — — — On-line Transaction Processing (OLTP) Data Warehousing Decision Support Data Mining Al evaluar DB2 Universal Database por primera vez, se deben considerar los beneficios a corto y largo plazo al utilizar un código base unificado para todas las aplicaciones, y para todas las plataformas, desde laptops hasta sistemas de procesamiento paralelo. Además, se dispone de numerosas aplicaciones desarrolladas a nivel mundial, entre ellas las de SAP, People Soft. y Baan. • Herramientas de replicación La replicación de datos es la tecnología clave para aprovechar todo el poder de los ambientes distribuidos ya que permite enviar los datos a cualquier sitio para cubrir todos los requerimientos de la empresa; desde oficinas centrales a sucursales, usuarios móviles, proveedores, clientes y socios de negocios. En la figura 5.7 de la pág. 167 se muestra un esquema de replicación de datos en DB2. DB2 Universal Database incluye todo lo necesario para implementar una solución de replicación de datos en cualquier tipo de ambiente distribuido o heterogéneo. • Soporte OLAP DB2 Universal Database ofrece nuevas capacidades para realizar análisis multidimensional y procesamiento analítico en línea (OLAP). Incluye funciones de ROLLUP, CUBE y grouping sets. Soporta STAR JOINS . Estas facilidades son utilizadas normalmente en todas las aplicaciones de business intelligence. 5.9. PRINCIPALES VENTAJAS DEL DB2 UDB 167 Figura 5.7: Replicación de Datos en DB2. • Lista para Internet Gracias a su alcance global y bajo costo, Internet puede ser una solución de negocios muy poderosa. Si se desea realmente aprovechar las oportunidades de negocios utilizando la Web, se debe considerar la mejor manera de llegar a un mercado que está esperando las 24 horas de los 7 días de la semana. La base de datos a seleccionar debe estar preparada para brindar acceso rápido y alta disponibilidad a información que requiere actualización constante. DB2 Universal Database provee la capacidad de hacer backups en línea, evitando interrupciones en la disponibilidad del sistema. Permite realizar operaciones comerciales garantizando un alto nivel de seguridad y confiabilidad. DB2 cumple con los siguientes requerimientos: • Soporta el paradigma de network-computing utilizando Java y JDBC. Permite el acceso a DB2 Universal Database desde una amplia variedad de plataformas de clientes, utilizando JDBC vía Java applets desde cualquier Web Browser. Adicionalmente, se puede desarrollar una aplicación Fen Java y acceder a DB2 utilizando directamente JDBC. También permite codificar “stored procedures” en Java. • Brinda excelente nivel de seguridad. Brinda servicios de autenticación y autorización que pueden ser fácilmente integrados a servicios de redes y sistemas operativos. 168 CAPÍTULO 5. INTRODUCCIÓN A DB2 • Net.Data brinda acceso a sus datos corporativos desde la Web. Ofreciendo un alto nivel de performance y escalabilidad en el acceso de datos residentes en DB2 Universal Database, incorporando multimedia. • Multimedia. DB2 Universal Database incluye la capacidad nativa de almacenar variados tipos de datos: alfanuméricos, video, imagen, audio y los que defina el usuario. Otra gran diferencia: la escalabilidad de DB2 Universal Database permite el almacenamiento de grandes volúmenes de datos aprovechando al máximo la capacidad de las plataformas soportadas por DB2. DB2 Universal Database permite realizar búsquedas sofisticadas e inteligentes en cualquier documento utilizando innumerables criterios. Además, permite que el usuario defina funciones -llamadas UDFs- y tipos de datos propios -llamados UDTs. Estos facilitan enormemente la tarea de administración de datos por parte de los desarrolladores, asegurando la consistencia de los mismos y minimizando los errores por operaciones inválidas. Formida Software Corp. ha desarrollado una solución para la industria de la salud, que incluye las capacidades multimedia de DB2 Universal Database. La aplicación maneja datos complejos, tales como: imágenes de rayos X, gráficos, video, mapas para la localización de médicos y hospitales, además de archivos de historias clínicas e información de seguros. 5.10 Conclusión DB2 Universal Database es un sistema de gestión de bases de datos relacionales completamente habilitado para la Web que se puede escalar, desde procesadores simples hasta multiprocesadores simétricos y agrupamientos paralelos masivos. Mediante él, se puede influir en todos los aspectos relativos a la información de la empresa, más allá de simples filas y columnas de datos alfanuméricos, incluyendo información en formato XML, imágenes, video en modalidad 5.10. CONCLUSIÓN 169 continua y otros formatos ricos en medios. También se pueden realizar transacciones más allá de las cargas de trabajo, que incluyen la toma de decisiones en tiempo real, el depósito de datos y la gestión del contenido. El uso de DB2 Universal Database se ha mejorado de forma que incluso los usuarios novatos puedan realizar tareas de administración de bases de datos. Delegando la identificación anticipada de problemas de base de datos, la determinación y la resolución a los usuarios novatos de DB2, se puede reducir el coste asociado y, a la vez, rebajar el coste total de la propiedad. Además, DB2 proporciona un soporte aún más potente de e-business a través de una regrabación y optimización automática de consultas mejoradas, el agrupamiento multidimensional de los datos, las tablas automáticas de resumen, Java, XML, servicios Web, posibilidades federadas, soluciones portátiles y un soporte incorporado ampliado para soluciones de Business Intelligence (BI). Capítulo 6 WebSphere 171 172 CAPÍTULO 6. WEBSPHERE Figura 6.1: Soluciones IBM WebSphere 6.1 Introducción WebSphere fue diseñado para integrar personas, procesos, información y aplicaciones con nuevos desarrollos (ver fig. 6.1 de la pág. 172). La plataforma Websphere está desarrollada a partir de estándares abiertos como J2EE, XML y Web Services. Esta plataforma tiene la fiabilidad, escalabilidad y seguridad extensamente probada en todos los productos de Software IBM. WebSphere Studio Application Developer es uno de los productos de la familia WebSphere Studio que ha sido desarrollado basado en el Workbench de Eclipse. La plataforma del Workbench de Eclipse fué diseñado por IBM y liberado a la comunidad open source. Es una plataforma abierta, portable y universal de herramientas que provee marcos, servicios y herramientas para la construción de aplicaciones [17]. En esencia, Workbench proporciona la insfraestructura de herramientas. Con esta insfraestructura, los desarrolladores de heramientas son capaces de concentrarse en la real construcción de sus herramientas. 6.2. ECLIPSE 173 El Workbench ha sido diseñado para una máxima flexibilidad para apoyar el desarrollo de herramientas de las nuevas tecnologías que puedan surgir en el futuro. Ambientes de desarrollo escritos por Workbench deben soportar un modelo de desarrollo basado en roles, en el cual los resultados del trabajo de los desarrolladores será consistente. Los desarrolladores no deberían estar preocupados en cómo las diferentes herramientas individuales pueden estar tratando sus archivos. La familia de productos de WebSphere Studio se basa en un ambiente de desarrollo integrado (IDE ) para desarrollar, testear, depurar y ejecutar las aplicaciones. Brinda soporte a cada fase del ciclo de vida del desarrollo de la aplicación. 6.2 Eclipse Eclipse en una plataforma abierta para la integración de herramientas construida por una comunidad de proveedores de herramientas. Esta provee de máxima flexibilidad y control sobre su tecnología de software a los desarrolladores, con una licencia pública común que provee código fuente libre y derechos de redistribución. Industrias líderes como IBM, Borland, Merant, QNX Software Systems, Rational Software, RedHat, SuSE, TogetherSoft, y WebGain formaron la junta inicial directiva del proyecto Eclipse (ver fig. 6.2 de la pág. 174). 6.2.1 Arquitectura de la Plataforma Eclipse es una plataforma que ha sido diseñada desde cero. Por diseño, la plataforma no provee en si misma de gran cantidad de funcionalidades. El valor de la plataforma es lo que fomenta: un rápido desarrollo de características integradas basadas en un modelo de plug-in (ver fig.6.3 de la pág. 175). Eclipse provee un modelo de interfaz de usuario (UI ) para trabajar con herramientas. Está diseñado para funcionar en múltiples sistemas operativos mientras que brinda una fuerte integración con cada uno de los mismos. Los plug-ins pueden ser programados por las APIs portables de Eclipse y funcionar sin cambios en cualquiera de los sistemas operativos. 174 CAPÍTULO 6. WEBSPHERE Figura 6.2: Eclipse SDK 6.2. ECLIPSE 175 Figura 6.3: Plataforma Eclipse 176 CAPÍTULO 6. WEBSPHERE La plataforma Eclipse utiliza el modelo de un Workbench común para integrar las herramientas desde el punto de vista del usuario final. 6.3 Características del Workbench Eclipse Workbench brinda un conjunto de APIs, modelos y marcos para editores de fuentes de desarrollo y otras interfaces de usuario, así como también el acceso a servicios comunes para la gestión de recursos, depuración y equipos de programación. Las principales características del Workbench Eclipse son las siguientes: • Herramientas basadas en plug-in. • Desarrollo de herramientas orientadas en roles. • Integración vertical y horizontal. • Estándares abiertos. • Ambiente de trabajo distribuido. • IDE basado en archivo. 6.3.1 Herramientas Basadas en Plug-in Workbench proporciona una plataforma plug-in flexible. Diferentes herramientas pueden conectarse al mismo, con cada herramienta provee una nueva funcionalidad para ser agregada al Workbench o a los plug-in ya existentes. Cada plug-in se integra al Workbench y a las otras herramientas. Lo ideal sería que el usuario final no notara ninguna diferencia al pasar de una herramienta a otra. Al programar con las APIs de Eclipse, los plug-in pueden fusionar sin cambios en cualquiera de los sistemas operativos. La plataforma se encarga de la logística del ambiente de base y provee un modelo estándar de navegación de usuario. 6.3. CARACTERÍSTICAS DEL WORKBENCH 177 Cada plug-in puede concentrarse en el desempeño de un pequeño número de tareas. Algunos ejemplos de tales tareas son: testear, depurar y diagramar. Ya que Workbench está basado en una arquitectura abierta cada equipo de desarrollo de plug-ins puede centrarse en su área de especialización. Esto permite al equipo de expertos en gestión construir interfaces y a los expertos de utilidades, construir las herramientas del usuario final. Si éstas están bien diseñadas y utilizan la norma API, nuevas e importantes características pueden añadirse al Workbench y productos basados en Workbench sin afectar otras herramientas. 6.3.2 Desarrollo de Herramientas Orientadas en Roles El Workbench está diseñado para proporcionar soporte para el desarrollo ebusiness o un conjunto de roles. Dentro de los productos basados en Workbench, las perspectivas orientadas a tareas filtran la complejidad general y presentan al desarrollador sólo con aquellas funciones que son relevantes para la tarea. Los usuarios pueden cambiar las perspectivas en función de lo que están trabajando en cualquier momento dado, o en función de su papel actual en el proyecto. Debido a que diferentes desarrolladores están acostumbrados a trabajar en diferentes formas, cualquier perspectiva puede ser aún más personalizada, y ya que todas las herramientas y perspectivas se construyen utilizando la tecnología de Eclipse Workbench, éstas comparten una vista y diseño común, lo que reduce las curvas de aprendizaje y ayuda a maximizar la productividad. Todos los recursos de desarrollo para todos los proyectos se almacenan en un único repositorio, por lo tanto, los desarrolladores son capaces de compartir fácilmente su trabajo. 6.3.3 Integración Vertical y Horizontal Tradicionalmente los proveedores de software han proporcionado herramientas verticales obligando a los clientes a hacer su propia integración. El objetivo de Eclipse Workbench es proporcionar una plataforma que los proveedores de software pueden ampliar fácilmente. 178 CAPÍTULO 6. WEBSPHERE Por ejemplo, cada producto de la familia de WebSphere Studio que se basa en Workbench ofrece un conjunto de herramientas integradas permitiendo centrarse en la construcción de aplicaciones en lugar de la integración de herramientas. Además se puede integrar fácilmente otras herramientas de otros vendedores o desarrolladores locales, siempre y cuando se ajusten al protocolo de plug-in de Workbench. 6.3.4 Estándares Abiertos El conjunto Workbench Eclipse, así como todos los productos de la familia de WebSphere Studio, se basan en estándares abiertos y el código que generan también cumple con ellos. Esto permite construir y desplegar del lado del servidor las aplicaciones que se ajustan a las especificaciones de Servlet, JavaServer Pages y EJB. 6.3.5 Ambiente de Trabajo Distribuido Los equipos de desarrollo de aplicaciones son cada vez más distribuidos, y se encuentran bajo una creciente presión para entregar soluciones con rapidez. En ese medio ambiente es fundamental disponer de herramientas de desarrollo que puedan apoyar estas necesidades y al mismo tiempo abordar las necesidades personalizadas. 6.3.6 IDE Basado en Archivo Todo el contenido se guarda como archivos. Recursos tales como clases Java y archivos HTML son almacenados en el sistema de archivos, lo que los hace de fácil acceso. 6.4 Productos WebSphere Studio La familia de productos de WebSphere Studio tiene los siguientes miembros: (ver fig. 6.4 de la pág. 179). 6.4. PRODUCTOS WEBSPHERE STUDIO 179 Figura 6.4: Productos WebSphere • WebSphere Studio Site Developer Advanced. • WebSphere Studio Application Developer. • WebSphere Studio Application Developer Integration Edition. • WebSphere Studio Enterprise Developer. Estos productos proporcionan apoyo para el desarrollo, testeo y despliegue aplicaciones Webs y J2EE. Desde la perspectiva de la arquitectura de Eclipse, WebSphere Studio Site Developer es un conjunto de plug-ins para WebSphere Studio Workbench. WebSphere Studio Application Developer es otro conjunto de plug-ins para WebSphere Studio Workbench que es un superconjunto de WebSphere Studio Site Developer, y así sucesivamente. WebSphere Studio Device Developer no es parte de esta cadena, sin embargo se basa en WebSphere Studio Workbench al igual que los otros. Además, WebSphere Studio Device Developer puede funcionar como un plug-in para 180 CAPÍTULO 6. WEBSPHERE WebSphere Studio Site Developer y WebSphere Studio Application Developer para ampliar su funcionalidad y permitir que tanto el cliente como el servidor, estén dentro de una plataforma, o puede ser instalado stand-alone. 6.4.1 WebSphere Studio Site Developer WebSphere Studio Site Developer es un IDE destinado a los desarrolladores Web para desarrollar y gestionar complejos sitios Web. Es fácil de utilizar, minimiza el tiempo y esfuerzo necesario para crear, administrar y depurar sitios web de multi-plataforma. Es diseñado de acuerdo con el J2SE y J2EE y soporta las especificaciones JSP, servlets, HTML, JavaScript y DHTML. Además, incluye herramientas para el desarrollo de imágenes y GIFs animados. Con WebSphere Studio Site Developer se podrá desarrollar aplicaciones Web que utilizan las siguientes tecnologías: • JSP. • Servlets. • Web services. 6.4.2 WebSphere Studio Application Developer WebSphere Studio Application Developer está diseñado para desarrolladores profesionales de Java y J2EE, que requieren integrar Java, Web, XML, y servicios Web. Incluye todas las características del WebSphere Studio Site Developer , y añade herramientas para el desarrollo de aplicaciones EJB, así como la ejecución de perfiles, etc. Los desarrolladores pueden construir rápidamente, testear la lógica de negocio y mejorar la presentación antes de desplegar en un servidor de producción. 6.5. HERRAMIENTAS DE WSAD 6.4.3 181 WebSphere Studio Application Developer Integration Edition Incluye toda la funcionalidad del Application Developer, además de: • Potentes herramientas gráficas para construir rápida y facilmente aplicaciones para integrar aplicaciones J2EE con sistemas back.end, ayudando a ahorrar tiempo y dinero por la reutilización de recursos existentes. • Asistentes que ayudan en la construcción y despliegue de servicios Web complejos, componentes EJB, flows, y otros servicios Web. • Apoyo para toda la Empresa. 6.4.4 WebSphere Enterprise Developer Enterprise Developer incluye toda la funcionalidad de WebSphere Studio Application Developer Integración Edition , además de, entre otros: • Integración de entornos transaccionales como CICS e IMS. • Crear nuevas aplicaciones EIS, como parte de una aplicación J2EE. • Desarrollar y mantener aplicaciones z / OS. • Soporta Java, COBOL, PL / I, y EGL. Otro núcleo de tecnología que se integra dentro de Enterprise Developer: • WebSphere Studio Asset Analyzer (WSAA): Identifica los procesos de aplicación y puntos de conexión, y proporciona la capacidad de generar componentes de código existente. 6.5 Herramientas de desarrollo suministradas con WebSphere Studio Application Developer Entre las herramientas que podemos encontrar en WSAD tenemos las siguientes (ver fig. 6.5 de la pág. 182): 182 CAPÍTULO 6. WEBSPHERE Figura 6.5: Entorno de desarrollo de WebSphere Studio Application Developer. 6.5. HERRAMIENTAS DE WSAD 6.5.1 183 Herramientas de Desarrollo Java Las herramientas de desarrollo Java incluidas junto con WebSphere Studio permiten desarrollar cualquier aplicación Java. Añaden perspectivas Java al entorno de trabajo, así como varias vistas, editores, asistentes, constructores y herramientas para fusionar y propagar código. Las herramientas de desarrollo Java ofrecen las siguientes prestaciones: • Soporte de JDK 1.3. • Soporte conectable en tiempo de ejecución para la conmutación de JRE y para pasar a múltiples entornos de tiempo de ejecución de IBM y otros distribuidores. • Compilación incremental automática. • Un depurador para la depuración local y remota. • Capacidad para ejecutar código que tenga errores en los métodos. • Protección contra errores y recuperación automática. • Notificación y corrección de errores. • Editor de texto Java con resaltado completo de la sintaxis y ayuda total del contenido. • Herramientas de propagación que permiten reorganizar las aplicaciones Java. • Herramientas de búsqueda inteligente, de comparación y de fusión para los archivos fuente Java. • Cuaderno para evaluar los fragmentos de código. 6.5.2 Herramientas de Desarrollo de Aplicaciones Web El entorno de desarrollo Web de WebSphere Studio proporciona las herramientas necesarias para desarrollar aplicaciones Web tal como se define en la especificación de Sun Microsystems Java Servlet 2.3 Specification y la especificación de Sun Microsystems JSP 1.2. 184 CAPÍTULO 6. WEBSPHERE Las aplicaciones Web incluyen páginas Web estáticas, JavaServer Pages (JSP), servlets Java, descriptores de despliegue (archivos web.xml) y otros recursos Web. Este entorno reúne todos los aspectos del desarrollo de aplicaciones Web en una interfaz común. Todos los miembros del equipo del sitio Web, incluidos los autores del contenido, los artistas gráficos, los programadores y los webmasters, pueden trabajar en los mismos proyectos y acceder a los archivos que necesitan. Dentro del entorno de desarrollo Web integrado resulta fácil crear, ensamblar, publicar, desplegar y mantener en colaboración aplicaciones Web dinámicas e interactivas. El entorno de desarrollo Web incluye las siguientes posibilidades de alto nivel: • Herramientas para JavaServer Faces, llamadas componentes Faces y Objetos de datos de Service (SDO, anteriormente WDO). JavaServer Faces es una infraestructura de IU que proporciona componentes GUI y un modelo de eventos para desarrollar interfaces de usuario Web gestionadas por datos dinámicos. Los Objetos de datos de Service pueden facilitar la conectividad de datos y el enlace de datos con la IU, sin que sea necesario programar. • Creación de proyectos Web, ya sea utilizando la jerarquía definida por J2EE o una versión estática que reduce la actividad general del proyecto cuando los elementos generales no son necesarios. • Creación y edición de un archivo descriptor de despliegue Web (web.xml). • Creación, validación, edición y depuración de archivos JSP y HTML. Están disponibles tanto el editor WYSIWYG como el editor de fuente para la creación de páginas JSP y HTML. • Edición, depuración y validación de JavaScript. • Soporte de códigos JSP (taglib) personalizados, basado en la especificación JSP 1.2. • Una vista ampliable, llamada vista fragmentos de código que puede utilizarse para añadir, catalogar y organizar objetos de programación re- 6.5. HERRAMIENTAS DE WSAD 185 utilizables, como por ejemplo código HTML, JavaScript y JSP conjuntamente con archivos y bibliotecas de códigos. • Edición y animación de imágenes. • Soporte de edición de hoja de estilos en cascada (CSS). • Importación HTTP/FTP. • Exportación FTP (copia de un solo recurso) a un servidor. • Importación, exportación y validación de archivadores Web (WAR). • Visión, análisis, validación y gestión de enlaces lo que incluye la conversión de enlaces, el marcado de enlaces rotos y el arreglo de los enlaces al mover o redenominar recursos. • Creación de servlets mediante un asistente para la creación de servlets nuevos y la adición de correlaciones de servlet al archivo de descriptor de despliegue (web.xml). • Generación de aplicaciones Web mediante asistentes que crean recursos Web a partir de beans y consultas de base de datos (SQL). • Integración con el entorno de prueba de WebSphere. • Soporte de publicación para varios tipos de servidor Web. • Desarrollo de Struts y JSF portlet que es parecido al desarrollo de aplicaciones Web. • Web Site Designer permite editar todo un sitio Web. Puede ver el sitio Web en una vista Navegación para añadir páginas nuevas y suprimir y mover páginas en este sitio. Además, utilizando una plantilla de página, es posible hacer coherentes el diseño y el estilo a través de un sitio. Las páginas de un sitio Web están organizadas en una jerarquía y Web Site Designer utiliza esta información de estructura para generar automáticamente enlaces de navegación y mapas de sitios 6.5.3 Herramientas de Desarrollo de Servicios Web WebSphere Studio proporciona asistentes y otras herramientas para hacer posible el rápido desarrollo de servicios Web. 186 CAPÍTULO 6. WEBSPHERE Los servicios Web son aplicaciones e-business modulares y basadas en estándares que las empresas pueden combinar y emparejar dinámicamente para efectuar transacciones complejas con un mínimo de programación. Los servicios Web permiten a los compradores y vendedores de todo el mundo descubrirse unos a otros, conectarse dinámicamente y ejecutar transacciones en tiempo real con la mínima interacción humana. Algunos ejemplos de servicios Web podrían ser artículos de revistas teatrales, informes meteorológicos, comprobaciones de crédito, cotizaciones en bolsa, asesores de viajes, o procesos de reserva para viajes en compañías aéreas. Cada uno de estos servicios empresariales autocontenidos es una aplicación que se puede integrar fácilmente junto con otros servicios, sean de la misma o de otra compañía, para crear un proceso comercial completo. Esta interoperatividad permite a las empresas publicar, descubrir y enlazar dinámicamente un rango de servicios Web por Internet. Las herramientas de desarrollo de servicios Web proporcionadas en WebSphere Studio están basadas en estándares abiertos (de distintas plataformas): • UDDI (descripción, descubrimiento e integración universales), que permite a las empresas autodescribirse, publicar especificaciones técnicas sobre cómo quieren llevar a cabo el e-business con otras compañías, y buscar otras empresas que les proporcionen los bienes y servicios que necesitan, todo ello por medio de registros UDDI en línea. • El protocolo simple de acceso a objetos (SOAP), que es un estándar para transportar de manera fiable mensajes de negocio electrónico desde una aplicación empresarial a otra por Internet. • El lenguaje de descripción de servicios Web (WSDL), que describe los programas accesibles por Internet (o por otras redes), así como los formatos de mensaje y los protocolos empleados para comunicarse con ellos. WebSphere Studio facilita los siguientes procesos para ayudar a construir y desplegar aplicaciones habilitadas para servicios Web: • Descubrir : Examinar el Registro Comercial UDDI con el fin de localizar servicios Web existentes para la integración. 6.5. HERRAMIENTAS DE WSAD 187 • Crear o transformar : Crear servicios Web a partir de artefactos existentes como son los beans Java, los beans EJB, los URL que toman y devuelven datos, las llamadas a DB2(R) XML Extender, los procedimientos almacenados de DB2 y las consultas SQL. • Construir : Se puede crear un archivo WSDL que describe el servicio y a continuación genera los envoltorios de Servicio web y bean Java desde dicho WSDL. • Desplegar : Desplegar servicios Web en los entornos de prueba de WebSphere Application Server o Apache Tomcat mediante las herramientas de servidor. • Probar : Probar servicios Web en ejecución local o remota para obtener un intercambio de información instantáneo. • Desarrollar : Generar aplicaciones de ejemplo para ayudar a crear la propia aplicación cliente de servicios Web. • Publicar : Publicar los servicios Web en el registro comercial UDDI anunciándolos para que otras empresas puedan acceder a ellos. 6.5.4 Herramientas de Desarrollo de Enterprise JavaBeans (EJB) El entorno de desarrollo de EJB presenta un soporte completo de EJB 1.1 y 2.0, un cliente de prueba EJB, un entorno de prueba unitario para J2EE y soporte de despliegue para archivadores Web (WAR) y archivadores de empresa (EAR). Es posible correlacionar beans de entidad con bases de datos y generar componentes EJB para compaginarlos en sistemas de proceso de transacciones. XML proporciona un formato ampliado para los descriptores de despliegue en EJB. Se incluyen las herramientas de desarrollo EJB siguientes: • Herramientas para importar / exportar, para la creación y la generación de código, y para editar, así como soporte para descriptores de despliegue estándar y para extensiones y enlaces específicos de WebSphere Application Server. 188 CAPÍTULO 6. WEBSPHERE • Herramientas de correlación entre EJB y RDB, que proporcionan el modelo, el entorno de tiempo de ejecución y la interfaz para editar la correlación entre los beans EJB y las tablas de bases de datos relacionales con las posibilidades descendente y ascendente. Los correlacionadores dan soporte a las asociaciones, a la herencia, y a los conversores y compositores como ayudantes en las correlaciones de columnas. • Un motor de consulta que da soporte al código desplegado, a base de generar series SQL en clases persistentes. • Herramientas que proporcionan capacidad para crear, editar y validar archivos EAR. • Editores para los descriptores de despliegue. • Visión de esquema RDB gráfico y herramientas de edición. • Las herramientas de despliegue para los beans de empresa proporcionan un entorno de línea de mandatos de forma que el usuario puede ejecutar procesos de construcción durante la noche y generar automáticamente el código de despliegue en modalidad de proceso por lotes. 6.5.5 Herramientas XML y XSL El completo juego de herramientas XML incluye componentes para generar DTD, esquemas XML y archivos XML, XSD y XSL. También soporta la integración de datos relacionales y XML. 6.5.6 Herramientas de Base de Datos Relacional WebSphere Studio proporciona herramientas de base de datos relacional necesarias para trabajar con bases de datos relacionales en el desarrollo de aplicaciones. Las herramientas de base de datos relacional incluyen vistas, asistentes, editores y otras características que facilitan el desarrollo y la prueba de los elementos de base de datos de la aplicación. A menos que se indique explícitamente, la característica de las herramientas de base de datos relacional da soporte a todos los distribuidores de bases de datos. 6.5. HERRAMIENTAS DE WSAD 189 Se puede gestionar las definiciones y conexiones de base de datos que se necesite para el desarrollo de las aplicaciones. Se puede conectar con bases de datos e importar definiciones de base de datos, o definir bases de datos, esquemas, tablas y vistas nuevas. Conectarse con o realizar importaciones desde varios tipos de bases de datos, como por ejemplo DB2(R), Oracle, SQL Server, Sybase, Cloudscape e Informix. El constructor de consultas SQL proporciona una interfaz visual para crear y ejecutar sentencias SQL. Se puede crear una sola sentencia o añadir expresiones y agrupamientos complejos. Se puede crear una consulta simple utilizando el asistente de sentencias SQL o bien utilizar el constructor de consultas SQL que da soporte a una amplia variedad de sentencias. También hay un editor de SQL con resaltado y ayuda de contenido y que permite editar y crear manualmente archivos .sql. El componente constructor de procedimientos almacenados y UDF de DB2 proporciona asistentes y herramientas para crear y trabajar con procedimientos almacenados y funciones definidas por usuario (UDF) para utilizarlos con DB2 Universal Database. Cuando se crea una aplicación que acceda a datos DB2, se podrá mejorar el rendimiento de la misma incorporando procedimientos almacenados y UDF registrados con el servidor de bases de datos. Se puede reducir el tráfico de la red y hacer un mejor uso de la lógica de gestión compartida. 6.5.7 Herramientas de Desarrollo de Aplicaciones Struts Struts es un conjunto de clases Java y bibliotecas de códigos JSP que proporcionan una infraestructura conceptual para el desarrollo de aplicaciones Web. La tecnología Struts es de código fuente abierto y se ha desarrollado como parte del proyecto Jakarta de Apache Software Foundation. Un diagrama web es un archivo que ayuda a visualizar el flujo de una aplicación web basada en Struts. Debido a los niveles de elementos indirectos que implica una aplicación Struts, la posibilidad de tener una imagen gráfica del flujo de la aplicación 190 CAPÍTULO 6. WEBSPHERE puede ayudar a entenderla mejor. El editor de diagramas web (Web Diagram Editor - WDE ): • Se utiliza para crear diagramas de los flujos de página dirigidos por lógica. • Tiene soporte portlet para la creación de portlets de Struts. Se puede utilizar el editor de diagramas para mostrar una aplicación Struts o parte de ella. Por ejemplo, se tiene una aplicación Struts en tres partes. Una parte gestiona el proceso lógico, otra se encarga de las consultas del producto y la tercera maneja las actualizaciones del mismo. En este caso, la aplicación se puede organizar en tres módulos con tres diagramas web o en un módulo con un diagrama web. También se puede interactuar directamente con los nodos que se representan dentro de un diagrama. Por ejemplo, si un nodo está sin realizar, efectuando una doble pulsación con el ratón sobre el nodo se invoca un asistente que ayuda a crear el nodo. Si un nodo ya está realizado, la doble pulsación invoca el editor que tenga asociado. 6.6 La Experiencia Pervasiva de IBM La experiencia pervasiva cubre múltiples ubicaciones para acceder a aplicaciones y datos a través de diferentes tipos de redes de área local, área personal, y redes de área amplia. Estas pueden ser cableada, inalámbrica o una combinación. El punto final puede ser cualquiera de los pilares pervasivos (un vehículo, una casa, una máquina o una combinación). Las aplicaciones pueden ser comunes a todas las ubicaciones, o específicos para un subconjunto (ver fig. 6.6 de la pág. 191). Las ubicaciones individuales tienen necesidades únicas, por lo tanto, la 6.6. LA EXPERIENCIA PERVASIVA DE IBM Figura 6.6: Experiencia pervasiva de IBM 191 192 CAPÍTULO 6. WEBSPHERE Figura 6.7: Computación ubicua computación ubicua también debe acomodarse a las distintas “ubicaciones” móviles que interactúan entre sí. En la experiencia pervasiva, los usuarios tienen la necesidad de acceder a sus aplicaciones desde diversos lugares y las mismas aplicaciones necesitan estar disponibles a través de diversas redes y para cualquier dispositivo (ver fig. 6.7 de la pág. 192). El objetivo es el acceso a datos y aplicaciones en cualquier momento y en cualquier lugar desde cualquier dispositivo. Esto es lo que significa pervasivo: acceso, interacción, integración. La experiencia pervasiva se extiende a la plataforma WebSphere para entregar datos y voz a todos los dispositivos ubicuos (ver fig. 6.8 de la pág. 6.6. LA EXPERIENCIA PERVASIVA DE IBM Figura 6.8: Experiencia ubicua extendida a la plataforma WebSphere 193 194 CAPÍTULO 6. WEBSPHERE 193). 6.7 Modelo de Programación de WebSphere para Dispositivos Pervasivos El modelo de programación de WebSphere para dispositivos pervasivos está diseñado para mover el actual modelo de programación de WebSphere a lo más bajo de la cadena, desde que los dispositivos acceden al navegador. Proporciona un modelo estándar para los dispositivos de programación que sea compatible con el modelo que se está utilizando en el desarrollo J2EE, extendiendo el modelo J2EE para hacerlo más utilizable en el ambiente de dispositivos [22]. 6.8 Alcance El modelo J2EE está diseñado para soportar en general algún tipo de lenguaje para la conexión a navegadores. Se crean servlets o Java Server Pages y, a continuación son entregados a un navegador para su interpretación. El dispositivo de salida es siempre un navegador o un agente similar de prestación. Este agente está siempre conectado a una red con el fin de alcanzar el servidor. Si bien se trata de un excelente modelo de programación, se excluyen muchos otros métodos de conexión y de salida. El portal de WebSphere extiende este modelo para soportar a otros formatos de salida a través de transcodificación. Por ejemplo, un portlet que produce Voice XML va a interactuar con un teléfono, en lugar de un navegador, pero la lógica básica de la aplicación de negocio seguirá siendo la misma. Naturalmente, aún mejorando el modelo anterior, todavía existen espacios vacíos. El modelo de programación de WebSphere para dispositivos pervasivos extiende este modelo aún más a los dispositivos que no son necesariamente navegadores, y no pueden estar conectados todo el tiempo. 6.8. ALCANCE 195 Figura 6.9: Alcance 196 CAPÍTULO 6. WEBSPHERE Figura 6.10: Arquitectura PVC Por ejemplo, WebSphere Everyplace Access proporciona navegación fuera de línea (puede procesar formularios HTML mientras está desconectado, ya que esas operaciones han subido cuando la red estaba disponible). 6.9 Alcance de la Arquitectura PvC La arquitectura de la computación pervasiva (PVC ) es bastante simple: un dispositivo de algún tipo se conecta por alguna red a un servidor que puede tener acceso a datos. Todas las piezas aquí se basan en estándares (XML, SyncML, JDBC, y así sucesivamente), la industria de tecnologías aceptó que no hay estándares todavía por lo que las aplicaciones interoperarán con otras aplicaciones soportando esas normas (ver fig. 6.10 de la pág. 196). 6.10. MODELO DE PROGRAMACIÓN EXTREMO A EXTREMO 197 Figura 6.11: Modelo de programación extremo a extremo Dentro de este ámbito, se podrá apoyar el modelo basado en navegador de J2EE, dispositivos con navegadores, navegación fuera de línea, VXML entregado a un teléfono móvil del usuario, y muchas otras opciones. No se especifica cómo los datos son entregados o cómo son interpretados por el cliente final. El modelo sólo establece que los datos se mueven de un servidor a través de una red (o redes) a un dispositivo. 6.10 Modelo de Programación Extremo a Extremo El modelo de programación se basa en la metodología estándar modelo-vistacontrolador. Generalmente en J2EE, un servlet actúa como controlador, Java Server Pages (JSP) proporciona la vista (o la aplicación de salida) y los datos se acceden a través de Enterprise Java Beans (EJBs), que son los modelos de lógica y datos de negocio en la parte final (ver fig. 6.11 de la pág. 197). 198 CAPÍTULO 6. WEBSPHERE Esta arquitectura está siendo empujada a través de la red a nuevos dispositivos. La desconexión de operaciones permitirá a la lógica de negocio funcionar si el dispositivo está actualmente conectado a la red o no. R Por ejemplo, las transacciones podrán ser almacenadas en un DB2 Everyplace (DB2e), base de datos a nivel local en un dispositivo, si la red no está disponible, y fluía a la parte final una vez que los sistemas de conectividad de la red fue restaurada. Con esta funcionalidad, los dispositivos comienzan a actuar como puntos finales en el modelo de programación. 6.11 WebSphere y las Aplicaciones para Dispositivos Todas estas aplicaciones son construidas por las herramientas de WebSphere Studio. Todas las solicitudes están basadas en estándares abiertos para permitir la conectividad y la interoperabilidad con otras aplicaciones, plataformas y dispositivos. Desde un punto de vista del desarrollo, es posible considerar la utilización de WebSphere Studio Device Developer como un plug-in para WebSphere Studio Application Developer. 6.12 La Plataforma de Servicios Pervasivos La plataforma de servicios pervasivos abarca una serie de diferentes entornos de desarrollo (ver fig. 6.12 de la pág. 199). Sin embargo, el código debería ser similar a través de los ambientes, y todos los códigos se llevarían a cabo en alguna de las variantes de Java - J2SE, J2ME, etc. Los pilares soportan diferentes familias de dispositivos, pero la codificación sigue siendo básicamente la misma. Para teléfonos móviles y PDAs, probablemente todavía se verá la progra- 6.12. LA PLATAFORMA DE SERVICIOS PERVASIVOS Figura 6.12: Paquete de la plataforma de servicios pervasivos. 199 200 CAPÍTULO 6. WEBSPHERE Figura 6.13: Modelo de programación de WebSphere. mación de MIDP, ya que es habitual del modelo de programación. Para set-top boxes y otros dispositivos, se puede tener SMF (kit de utilidades de desarrollo que facilita la creación de aplicaciones gestionadas por el servidor implementadas en el Services Management Framework) como marco para entregar paquetes. 6.13 ¿Cuál es el Modelo de Programación de WebSphere para la Computación Ubicua? En este punto se desarrolla cómo el modelo de programación extiende el modelo J2EE : los navegadores son extendidos más allá de HTML a visual (VXML), o una combinación (navegadores y aplicaciones multimodales). El cliente podrá ser un ordenador portátil, PDA u otro dispositivo. 6.14. WEBSPHERE STUDIO DEVICE DEVELOPER IDE 201 La red conecta el cliente a un servidor, pero la conexión de red puede ser esporádica (ver fig. 6.13 de la pág. 200). Con el fin de hacer que esto funcione, se necesitará de inteligencia en el dispositivo. Por ejemplo, WebSphere Everyplace Access tiene un cliente que R sincroniza Lotus Notes databases, buzones de correo Exchange, y bases de datos DB2 con un solo clic. DB2 Everyplace podrá ser utilizado como un área de almacenamiento a nivel local, hasta que la red está disponible para fluir las transacciones. MQ Everyplace podrá ser usado para la cola de mensajes a nivel local hasta que la red está disponible para enviar los mensajes a sus destinos. SMF contiene un motor de servlets y procesador JSP que permite el procesamiento en el dispositivo, y también proporciona un conjunto de instrumentos para convertir archivos WAR a paquetes para facilitar la distribución y el despliegue de un código de J2EE a SMF. 6.14 WebSphere Studio Device Developer IDE 6.14.1 Developer IDE WebSphere Studio Device Developer es una plataforma para el desarrollo, depuración y despliegue de aplicaciones para dispositivos pequeños. Es miembro de la familia WebSphere. El entorno de desarrollo integrado también viene con una copia del WebSphere Micro Environment (IBM-compatible con J2ME JVM), con licencia para el desarrollo (ver fig. 6.14 de la pág. 202 ). 6.14.2 WebSphere Studio Device Developer Esta es la funcionalidad básica de WebSphere Studio Device Developer. WebSphere Studio Device Developer contiene un entorno de desarrollo integrado por el WebSphere Micro Environment (WME, una potencia de Java en tiempo de ejecución que implementa las especificaciones J2ME), el WebSphere Custom Environment (WCE, Java en tiempo de ejecución que no implementa las especificaciones de J2ME, por lo que es más personalizable), funcionalidad 202 CAPÍTULO 6. WEBSPHERE Figura 6.14: WebSphere Studio Device Developer IDE 6.14. WEBSPHERE STUDIO DEVICE DEVELOPER IDE 203 Figura 6.15: WebSphere Studio Device Developer adicional a través de plug-ins, y el gestor de actualizaciones para permitir la actualización del código a través de la Web (ver fig. 6.15 de la pág. 203). El WebSphere Custom Environment no se entrega con WebSphere Studio Device Developer, pero está disponible en la Web a través del Administrador de Actualizaciones. El WebSphere Studio Device Developer puede también ser instalado como plug-in en el Site Developer o en el Application Developer, si alguno es detectado en la máquina. En anteriores emisiones, había una opción para instalarlo como plug-in o stand-alone. Si se desea utilizar WebSphere Studio Application Developer y WebSphere Studio Device Developer por separado en la misma máquina, se deberá instalar el WebSphere Studio Device Developer primero, luego el WebSphere Studio Application Developer. Si se necesita más funcionalidad, se podrá añadir plug-ins para WebSphere Studio Device Developer (o cualquier miembro de la familia WebSphere Studio). Las actualizaciones están disponibles a través del gestor de actualizaciones, 204 CAPÍTULO 6. WEBSPHERE Figura 6.16: Gestor de Actualizaciones. en la perspectiva Instalación / Actualización (ver fig. 6.16 de la pág. 204). Se podrá descargar versiones actualizadas de los módulos existentes, así como añadir nuevas funcionalidades al WebSphere Studio Device Developer. 6.14.3 Trabajar con el IDE WebSphere Studio Device Developer utiliza un concepto de espacio de trabajo, un directorio que contiene el código de trabajo (un subdirectorio por cada proyecto), y un subdirectorio de metadatos que contienen información sobre el código. WebSphere Studio Device Developer también utiliza el concepto de proyecto, una colección de paquetes que componen la totalidad de una aplicación 6.14. WEBSPHERE STUDIO DEVICE DEVELOPER IDE 205 Java (u otra). Por ejemplo, se podrá crear un Java, J2ME, MIDlet, C u otro proyecto. Se deberá pensar un proyecto como un super-paquete. Cuando se empieza un desarrollo desde cero, se crea un proyecto. por lo cual se deberá escoger el tipo apropiado de proyecto. Varios espacios de trabajo permiten mantener múltiples proyectos por separado, todos los proyectos en el espacio de trabajo son reconstruidos cuando se hace un “Reconstruir todos”. En versiones anteriores, esta fue la principal forma para evitar la sobrecarga de la reconstrucción de proyectos. Sin embargo, en siguientes emisiones, se puede cerrar un proyecto, desde la perspectiva de recursos entonces el proyecto no será reconstruido. Si no se encuentra un proyecto, o se está intentando importar un proyecto y muestra que ya existe, se debe ir a la perspectiva Recursos y asegurarse de que no existe, o si está cerrado. La pantalla de bienvenida actúa como un archivo readme para la versión de la herramienta, y se muestra automáticamente la primera vez que invoca el producto. También se encuentra en el menú Ayuda. La herramienta se divide en Perspectivas, barras de herramientas, vista, y editores. La pantalla entera es a veces llamado el Workbench. Una perspectiva es una colección predefinida de barras de herramientas, vistas y editores [26]. Barra de Herramientas La barra de herramientas superior (bajo la barra de menús) contiene todos los wizards disponibles de WebSphere Studio Device Developer, que cambian para que coincida con la perspectiva actual. Los Wizards están disponibles para crear aplicaciones, definir dispositivos, probar código y crear estructuras Java (clases, interfaces, etc) dentro de sus programas (ver fig. 6.17 de la pág. 206). La barra izquierda de herramientas contiene todas las perspectivas y / o vistas abiertas. Cuando se abre una perspectiva, su ícono se añadirá a la parte superior 206 CAPÍTULO 6. WEBSPHERE Figura 6.17: Barra de herramientas. derecha de la barra de herramientas. Perspectiva, Editores y Vistas. Una perspectiva es un grupo de vistas y editores en la ventana del espacio de trabajo diseñadas para centrarse en una determinada tarea. En una ventana del espacio de trabajo pueden existir una o varias perspectivas. Cada perspectiva contiene una o varias vistas y editores. Dentro de una ventana, cada perspectiva puede tener un conjunto distinto de vistas, pero todas las perspectivas comparten el mismo conjunto de editores También se puede personalizar perspectivas y guardarlas. Una vista es un componente visual del espacio de trabajo. Se suele utilizar para navegar en una jerarquía de información (como los recursos del espacio de trabajo), abrir un editor o visualizar propiedades del editor activo. Las modificaciones efectuadas en una vista se guardan inmediatamente. 6.14. WEBSPHERE STUDIO DEVICE DEVELOPER IDE 207 Sólo puede existir una instancia de un tipo de vista concreto en una ventana del espacio de trabajo. Un editor se utiliza para modificar los archivos, y es específico para el tipo de archivo que está siendo editado. Con WebSphere Studio Device Developer, se puede especificar editores externos para determinados tipos de archivo. Sólo un editor puede estar activo en cualquier momento, varios editores se podrán abrir, pero todos estarán en la misma ventana, disponible a través de pestañas. Si se cambia algo en un editor, por lo general se guardará antes de que se utilice (antes de ejecutar el código, por ejemplo). Se podrá configurar una opción en preferencias para guardar automáticamente un archivo antes de que sea utilizado. Espacio de Trabajo (Workspaces) Todo el código se almacena en archivos separados en un “espacio de trabajo”, un directorio de repositorios basados en valores predeterminados para el espacio de trabajo dentro del directorio de instalación de WebSphere Studio Device Developer. R Se trata de una importante partida de la familia VisualAge de herramientas que almacenan código en un repositorio, en lugar de archivos separados. Esto significa que podrá editar y procesar todos los archivos fuera de WebSphere Studio Device Developer. Se podrá cambiar el espacio de trabajo, para que tome efecto se deberá reiniciar WebSphere Studio Device Developer para cambiar al nuevo espacio de trabajo. Un espacio de trabajo contiene un directorio “. metadata ” que WebSphere Studio Device Developer utiliza para mantener la información del proyecto. 208 CAPÍTULO 6. WEBSPHERE 6.14.4 Configuración J2ME Java 2 Micro Edition (J2ME) es un conjunto estándar de configuraciones y perfiles para el desarrollo de Programas Java en dispositivos embebidos. Si una aplicación puede aprobar una serie de pruebas, es certificada “Java Powered”, lo que significa que cumple con las normas de la especificación J2ME. WebSphere Micro Edition ha sido certificado “Java Powered”. WebSphere Studio Device Developer por defecto incluye soporte para J2ME en PalmOS y PocketPC. Otras configuraciones y el soporte de otras plataformas están disponibles a través del administrador de actualizaciones. WebSphere Studio Device Developer soporta la descarga de código a un PDA para su ejecución y depuración. 6.14.5 Construcción y Ejecución en Dispositivos WebSphere Studio Device Developer soporta el despliegue de código para varios dispositivos. Se debe definir los dispositivos y, a continuación, crear proyectos, se podrá configurar la ejecución de un proyecto en un dispositivo específico. Dentro de cada proyecto, se es capaz de construir código para una plataforma concreta, o múltiples plataformas. Una vez que el código se construye, se podrá ejecutar en un dispositivo específico (ya sea real o un emulador). WebSphere Studio Device Developer utiliza un emulador MIDP y también se podrá ejecutar código en un JVM separado. Soporta directamente los dispositivos Palm y el emulador de Palm y PocketPC. Otros dispositivos pueden ser soportados a través de plug-ins desde el fabricante del aparato. Construcción Al crear una construcción, se deberá especificar una plataforma y un nombre para la construcción. 6.14. WEBSPHERE STUDIO DEVICE DEVELOPER IDE Figura 6.18: Wizart par configurar construcciones. 209 210 CAPÍTULO 6. WEBSPHERE Una posible convención de nombres es el nombre del proyecto, así como el nombre del dispositivo de destino (ver fig.6.18 de la pág. 209). Las plataformas básicas son PalmOS, PocketPC, WINx86, Linux x86, y JAR genéricos. Otros dispositivos se podrán descargar desde el gestor de actualizaciones Para pruebas sencillas que no requieren un emulador, se podrá seleccionar “Ejecutar como → Java Application”. La aplicación se compila y luego es ejecutada en una JVM. Se verá la salida en la ventana de consola de la perspectiva depuración. Sin embargo, cada vez que se desee ejecutar en un dispositivo físico o ejecutar una aplicación MIDP (que requiere un emulador), se debe crear un constructor aparte. Un proyecto puede tener múltiples constructores, en función de sus necesidades. Cada constructor debe tener un nombre único dentro del proyecto. Dispositivos Cada dispositivo requiere una configuración separada. Todos los dispositivos se comparten, por lo que cualquier proyecto puede ser desplegados en un dispositivo específico. WebSphere Studio Device Developer soporta dispositivos Palm (a través de HotSync), emulador Palm, y dispositivos PocketPC (a través de ActiveSync). WebSphere Studio Device Developer también ejecutará proyectos a nivel local JVM, y aplicaciones MIDP pueden ser desplegados en un emulador MIDP. Otros proveedores pueden incluir emuladores soportados a través de plugins Eclipse. Estos deben estar disponibles a través del gestor de actualizaciones, o directamente desde el proveedor. Creación de Dispositivos Hay una función soportada para Palm y dispositivos PocketPC. Por defecto, estas son las únicas opciones para la creación de dispositivo. Si se añaden plug-ins para otros dispositivos o emuladores, esos nuevos 6.14. WEBSPHERE STUDIO DEVICE DEVELOPER IDE Figura 6.19: Creación de dispositivos. 211 dispositivos deberían aparecer como opciones en esta pantalla (ver fig. 6.19 de la pág. 211). Ejecutar una Aplicación Cuando se inicia un proyecto, se podrá configurar que WebSphere Studio Device Developer automáticamente cambie a la perspectiva de depuración en preferencias. Si el dispositivo no es compatible con WebSphere Studio Device Developer, se tendrá que exportar el código y luego transferirlo al dispositivo para ejecutarlo. Al configurar una ejecución, en primer lugar hay que elegir el tipo de aplicación que se está construyendo. A continuación, se debe dar un nombre, y seleccionar el proyecto. Dependiendo del tipo de aplicación, también seleccionar qué constructor usar, por último, a qué dispositivo está dirigido. Si no se ha definido todos los dispositivos, se podrá pulsar el botón Configurar junto al dispositivos del menú desplegable para definir uno. Se debe tener un dispositivo definido con el fin de crear una ejecución (ver fig. 6.20 de la pág. 213). 6.14. WEBSPHERE STUDIO DEVICE DEVELOPER IDE Figura 6.20: Ejecución de una aplicación. 213 214 CAPÍTULO 6. WEBSPHERE Capítulo 7 Aplicación 7.1 Descripción General El presente trabajo se basa en el estudio de software de base que permite el desarrollo de aplicaciones Móviles y aplicaciones Web. Consiste en el desarrollo de dos aplicaciones: 1. Una Aplicación Móvil con acceso a base de datos multiplataforma que permita la consulta de notas correspondientes a parciales, laboratorios y monografías de diferentes asignaturas por parte de los alumnos inscriptos en las mismas. 2. Una Aplicación Web para gestión y administración de usuarios, alumnos y notas. El Objetivo es realizar la aplicación Móvil en J2ME, con la cual el alumno pueda consultar sus notas desde cualquier lugar sin necesidad de dirigirse al establecimiento educativo, como así también el desarrollo de la aplicación de administración en Java, mediante la cual los usuarios autorizados (por ej. profesores, adscriptos, etc.) puedan agregar, editar y eliminar tanto usuarios como alumnos. 215 216 CAPÍTULO 7. APLICACIÓN 7.2 7.2.1 Análisis del Sistema Modelo de Datos El Modelo de Datos del sistema no es complejo ya que no se requiere muchas entidades para el propósito del mismo (ver fig. 7.1 de la pág. 217). Entidades: • Alumnos: Contiene información referida al alumno inscrito en las asignaturas. • Asignatura: Contiene información referida a la asignatura. • Nota: Contiene información de las notas correspondientes a un alumno según la asignatura en la que se encuentra inscripto. • Usuarios: Contiene información referente a los usuarios que tienen acceso al sistema de Administración. • Consultas: Entidad para mantener información sobre la cantidad de consultas realizadas en el sistema por parte de los alumnos. • Excel : Entidad utilizada como tabla intermedia en el proceso de carga del Excel que contiene la información de los alumnos y sus notas. 7.2.2 Casos de Uso En el Diagrama de Casos de Uso se puede observar los actores y casos de usos del sistema, incluyendo sus interacciones, tanto de la Aplicación Móvil (ver fig. 7.2 de la pág. 218), como de la Aplicación Web (ver fig. 7.3 de la pág. 219). 7.3 Aplicación Móvil La Aplicación Móvil cuenta con un menú inicial mediante el cual se puede ingresar al sistema, consultar la ayuda, configurar la url a la cual se conectará y salir de la aplicación (ver fig. 7.5 de la pág. 221). 7.3. APLICACIÓN MÓVIL Figura 7.1: Modelo de datos. 217 218 CAPÍTULO 7. APLICACIÓN Figura 7.2: Diagrama de caso de uso de la aplicación móvil. 7.3. APLICACIÓN MÓVIL Figura 7.3: Diagrama de caso de uso de la aplicación Web. 219 220 CAPÍTULO 7. APLICACIÓN Figura 7.4: Pantalla inicial. 7.3. APLICACIÓN MÓVIL Figura 7.5: Menú principal. 221 222 CAPÍTULO 7. APLICACIÓN En la opción entrar, se puede: 1. Registrar en el sistema. 2. Loguear en el sistema. La opción registrar permite al alumno que haya sido previamente dado de alta en el sistema de Administración en alguna de las asignaturas, obtener una clave para poder loguearse, la cual obtiene ingresando su DNI, LU y un password elegido por el mismo y si el DNI y LU ingresados coinciden con los datos registrados en la base de datos, se asigna dicho password proveído a ese alumno. En caso de que el alumno haya olvidado su clave, puede volver a realizar este procedimiento las veces que así lo requiera (ver fig. 7.6 de la pág. 223). La opción de loguearse permite ingresar al sistema propiamente dicho, mediante el ingreso del DNI y el password obtenido en el proceso de registro (ver fig. 7.7 de la pág. 224). Si el alumno ingresa mal los datos, el sistema muestra un aviso de error (ver fig. 7.8 de la pág. 225), en caso contrario permite acceder al menú de asignaturas (ver fig. 7.9 de la pág. 226). En el menú de asignaturas se pueden observar las asignaturas para las cuales los alumnos pueden realizar las consultas de sus respectivas notas, en este caso se tiene: 1. SO (Sistemas Operativos). 2. DAD (Diseño y Administración de Datos). 3. TP (Teleproceso y Sistemas Distribuídos). Una vez seleccionada cualquiera de las asignaturas se accede al menú de las diferentes opciones, ya sea parciales, laboratorios o monografía, teniendo dos parciales con sus respectivos recuperatorios y extraordinario para cada asignatura, cuatro laboratorios para SO, y seis para DAD y TP (ver fig. 7.10 de la pág. 227). Teniendo en cuenta que las asignaturas corresponden a diferentes años y cuatrimestres de la carrera de Licenciatura en Sistemas de Información, un 7.3. APLICACIÓN MÓVIL Figura 7.6: Registro en el sistema. 223 224 CAPÍTULO 7. APLICACIÓN Figura 7.7: Login. 7.3. APLICACIÓN MÓVIL Figura 7.8: Mensaje de error en el logueo. 225 226 CAPÍTULO 7. APLICACIÓN Figura 7.9: Menú de asignaturas. 7.3. APLICACIÓN MÓVIL Figura 7.10: Menú de opciones para la consulta de notas. 227 228 CAPÍTULO 7. APLICACIÓN alumno no puede estar dado de alta en más de una asignatura, con lo cual si un alumno ingresa a una asignatura en la que no se encuentra registrado el sistema muestra un error (ver fig. 7.11 de la pág. 229), en caso contrario, si el alumno selecciona la asignatura en la cual se encuentra inscripto (cursando), el sistema muestra el resultado de su consulta (ver fig. 7.12 de la pág. 230). 7.4 Aplicación Web La Aplicación Web, como se mencionó anteriormente, permite la gestión de los alumnos en condiciones de cursar las asignaturas, como así también gestionar los usuarios que tienen acceso a la misma. Una vez logueado en el sistema, se tiene un menú con diferentes opciones: • SO: Muestra el listado de alumnos inscriptos en Sistemas Operativos (ver fig. 7.14 de la pág. 232). • DAD: Muestra el listado de alumnos inscriptos en Diseño y Administración de Datos. • TP: Muestra el listado de alumnos inscriptos en Teleproceso y Sistemas Distribuídos. • Estadísticas: Muestra el total de alumnos que realizaron la registración desde el dispositivo móvil, y total de consultas realizadas desde el móvil en cada asignatura. • Usuarios: Muestra los usuarios autorizados en el sistema web. • Ayuda: Despliega una breve ayuda del sistema para resolver dudas. En el sistema se puede agregar, editar, consultar y eliminar tanto alumnos como usuarios (ver fig. 7.15 de la pág. 233, fig. 7.16 de la pág. 234 y fig. 7.17 de la pág. 235). También el sistema permite leer archivos de Excel, para realizar la carga masiva de alumnos en cada una de las asignaturas. Se debe seleccionar el archivo a importar, ver fig. 7.18 de la pág. 236, luego se muestra una página con los datos a importar, ver fig. 7.19 de la pág. 237, y una vez confirmado el 7.4. APLICACIÓN WEB Figura 7.11: Error en la elección de la asignatura. 229 230 CAPÍTULO 7. APLICACIÓN Figura 7.12: Resultado de la consulta. 7.4. APLICACIÓN WEB Figura 7.13: Pantalla de bienvenida 231 232 CAPÍTULO 7. APLICACIÓN Figura 7.14: Listado de alumnos de SO. 7.4. APLICACIÓN WEB Figura 7.15: Alta de alumnos. 233 234 CAPÍTULO 7. APLICACIÓN Figura 7.16: Edición de alumnos. 7.4. APLICACIÓN WEB Figura 7.17: Consulta de alumnos. 235 236 CAPÍTULO 7. APLICACIÓN Figura 7.18: Selección del archivo Excel. 7.4. APLICACIÓN WEB Figura 7.19: Lectura del archivo Excel. 237 238 CAPÍTULO 7. APLICACIÓN Figura 7.20: Confirmación de la operación. Figura 7.21: Estadísticas. proceso se muestra una página de confirmación del mismo (ver fig. 7.20 de la pág. 238). En la opción Estadísticas del menú, se puede observar la cantidad de alumnos registrados (alumnos que ingresaron al sistema móvil y se registraron desde allí), y la cantidad de consultas realizadas en las respectivas asignaturas desde el sistema móvil. 240 CAPÍTULO 7. APLICACIÓN Capítulo 8 Conclusiones Conclusiones Acerca de las Tecnologías y Software Utilizados Se ha podido comprobar las grandes ventajas de la utilización de tecnologías y software, tanto de base de datos como de desarrollo de aplicaciones. Los productos de WebSphere han demostrado ser herramientas muy potentes al momento de desarrollar tanto aplicaciones móviles como web, contando con asistentes, corrección de errores y otras facilidades que hacen más rápido y eficiente el trabajo. Con respecto al motor de bases de datos DB2, se debe destacar la escalabilidad, Integridad y seguridad; interfaces sencillas y entendibles, completas, intuitivas y con diversos asistentes, permitiendo de esa manera una mejor comprensión en la utilización de la herramienta. Asimismo se pudo apreciar las facilidades del Scientific WorkPlace para escribir libros, por la calidad del producto obtenido, la automatización en el manejo de índices, la gestión dinámica de espacios, listas de figuras, de tablas, referencias dinámicas a objetos, bibliografía, etc. Se destaca la gran potencialidad de este conjunto de herramientas para el desarrollo de aplicaciones de gran porte y alta complejidad, utilizables en una amplia gama de sistemas operativos y con diversos motores de bases de datos. Líneas Futuras de Acción Se considera que las principales líneas futuras de acción derivadas del pre241 sente trabajo serían las siguientes: • Ampliar el modelo de datos actual para soportar una estructura de múltiples Facultades y carreras. • Adaptar la aplicación para poder soportar este nuevo modelo de datos. • Mejorar el alcance de la protección de datos almacenados mediante la incorporación de métodos de encriptación de datos. Bibliografía [1] L. Joyanes Aguilar. Cibersociedad. Mac Graw-Hill, 1997. [2] J. M. Lombardo Enríquez; L. Joyanes Aguilar; S. Ríos Aguilar; J. M. Saíz Álvares; F. Mata Mata. Gestión e Informática "Orientada al Conocimiento"en los Modelos de Comercio Electrónico en JIS2002 IV Jornadas Informática y Sociedad. La Salle, Barcelona-España, 2002. [3] P. Maestre Yenes. Diccionario de Gestión del Conocimiento e Informática. Fundación para la Difusión de las Ingenierías, Informática y Telecomunicación. Madrid-España, 2000. [4] L. Joyanes Aguilar. La Carrera Mundial por el Conocimiento. Una Visión Desde la Nueva Economía. Universidad Pontificia de Salamanca, MadridEspaña, 2000. [5] E. Castillo; A. Cobo; P. Gómez; C. Solares. JAVA - Un Lenguaje de Programación Multiplataforma para Internet. Paraninfo, España, 1997. [6] A. S. Tanenbaum. Redes de Computadoras. Prentice Hall Hispanoamericana S. A., México, 1997. [7] A. S. Tanenbaum. Sistemas Operativos Distribuidos. Prentice Hall Hispanoamericana, S.A., México, 1996. [8] E. Castillo. Curso de LaTex. Universidad de Cantabria, CantasbriaEspaña, 1998. [9] M. C. Muñoz; J. F. Guerra; B. Flores Muro; J. Meza Jaque; F. Sanchis Marco. Valoración de la Gestión del Conocimiento a Través de los Indicadores del Capital Intelectual en I Congreso Internacional Sociedad de la información. McGrawHill, Madrid-España, 2002. 243 244 BIBLIOGRAFÍA [10] M. A. Porrúa Vigón. Elementos para la creación de una estrategia de gobierno electrónico. VIII Congreso Internacional del CLAD sobre la Reforma del Estado y de la Administración Pública, Panamá, 2003. [11] Patricia J. Pascual. e-Government. UNDP-APDIP, 2003. [12] L. Joyanes Aguilar; I. Zahonero Martínez. Estructura de Datos - Algoritmos, Abstracción y Objetos. Mc Graw Hill/Interamericana de España, S.A.U., España, 1998. [13] L. Joyanes Aguilar. Programación Orientada a Objetos - Segunda Edición. Mc Graw Hill/Interamericana de España, S.A.U., España, 1998. [14] L. Boszörményi. Why Java is not my Favourite First-course Language. Software - Concepts & Tools, N◦ 19, 141-145, 1998. [15] J. H. Kingston. Algorithms and Data Structures. Desing, Correctnes, Analysis. Second Edition. Addison-Wesley, 1998. [16] G. Brassard; P. Bratley. Fundamentos de Algoritmia. Prentice Hall, Madrid-España, 1997. [17] F. Ferraz M. Schumacher y H. Sjostrand U. Wahli, I. Brown. WebSphere Studio Application Developer Version 5 Programming Guide. ibm.com/redbooks, 2003. [18] Sergio G. Rojas; Lucas O. Díaz. Java a Tope: J2ME(Java 2 Micro Edition). [19] IBM. IBM DB2 Warehouse Manager Guía de Instalación Versión 7. IBM Press, USA, 2001. [20] IBM Corporation. IBM DB2 Universal Database para Windows Guía Rápida de Iniciación Versión 7. IBM Press, USA, 2000. [21] IBM Corporation. IBM DB2 Universal Database Suplemento de Instalación y Configuración Versión 7. IBM Press, USA, 2000. [22] Using WebSphere Studio Device Developer to Build Embedded Java Applications. ibm.com/redbooks, Abril 2004. [23] IBM Corporation. IBM DB2 Universal Database Consulta de Mandatos. IBM Press, USA, 2000. BIBLIOGRAFÍA 245 [24] IBM Corporation. IBM DB2 Universal Database Consulta de Mensajes. IBM Press, USA, 2000. [25] IBM Corporation. IBM DB2 Connect Enterprise Edition para OS/02 y Windows Guía Rápida de Iniciación. [26] WebSphere Studio Device Developer Product Documentation. ibm, 19982004. Índice de Materias activos, 11 intangibles, 23 intelectuales, 23 AIX, 136, 149, 152 aldea global, 2 API, 146 API (Application Programming Interface), 46 aplicación, 215 aplicación móvil, 216 aplicación Web, 228 Casos de Uso, 216 modelo de Datos, 216 aplicación interactiva, 68 aplicación Java, 151 aplicación construcción, 208 arquitectura PvC, 196 arrays, 63 asistentes mejoras en los, 151 AWT concepto, 66 interface gráfica de usuario, 67 base de datos relacional arquitectura de, 147 bases de conocimientos, 11 bibliotecas de clases, 38 bifurcaciones, 56 if, 56 if else, 57 bloque try, catch, finally, 59 bucles, 57 do while, 58 for, 58 while, 57 Business Intelligence, 151, 156 business intelligence, 166 C/C++, 55 CD-ROM, 150 CDC, 96 centro de depósito, 150 Centro de Desarrollo, 156, 157 centro de información, 151 cibercultura, 8 cibersociedad, 2 Clase, 44 clase características, 61 clase en Java, 60 clase object, 62 clases de utilidad, 63 clase Arrays, 63 B/R, 144 B2B, 15 B2C, 15 B2E, 15 barra de herramientas, 205 base de datos Segmentación de la, 138 247 248 clases string y StringBuffer, 65 Double, 66 integer, 66 CLDC, 96 client/server database, 139 cluster, 141 cluster of uniprocessors, 141 comentarios, 55 competitividad, 17 conclusiones, 241 conectividad herramientas de, 138 conocer, 3 conocimiento, 3 ciclo de vida del, 6 corporativo, 24 definición de, 2 era del, 23 gestión del, 10 la estrategia de convertir los datos en, 24 materia prima de las empresas, 7 nuevo futuro del, 25 portales del, 15 sociedad del la cultura en la, 8 Content-Type, 78 CORBA, 15 CUBE, 166 DAS, 144 Data Marts, 138 Datajoiner El producto, 138 datamining, 14, 24 datawarehouse, 14, 24 datawarehousing, 24 dato, 3 datos espaciales, 154 ÍNDICE DE MATERIAS Davenport Thomas H., 4 DB2 administrador de datos, 148 Introducción a, 135 Universal Database, 136, 165 DB2 Connect, 138 DB2 Data Links Manager, 155 db2 Data Links Manager, 156 DB2 DataJoiner, 152 DB2 Optimizer, 154 DB2 Spatial Extender, 154 DB2 UDB Versión 8.1, 156 DB2 Warehouse Manager, 152, 156 db2ic, 151 DBA, 144 DDL y DML sentencias de, 153 Denning Stephen, 4 destroy, 81 desviaciones Detección de, 138 dispositivos, 210 creación, 210 doGet, 78 doGet (), 81 doPost (), 81 Double, 66 métodos de la clase, 66 DRDA, 145, 152 Drucker Peter, 23 DSS, 14 e-business Web enabled para, 136 e-Government, 29, 30 estrategias, 32 modalidades, 31 ÍNDICE DE MATERIAS e-procurement, 15 EAI, 15 Eclipse Arquitectura de la plataforma, 173 economía global, 22 EJB, 187 ejecutar una aplicación, 212 ejemplo de arrays, 64 bifurcación if, 56 bifurcación if else, 57 bucle for, 58 bucle while, 57 clase, 44 comentario, 55 construcción de nombres de archivos en Java, 72 do while, 58 interface, 45 línea compuesta por tres sentencias, 55 método, 62 matriz, 64 operadores incrementales y relacionales, 52 programa no portable, 69 sentencia return, 59 encapsulación, 60 era digital, 7 ERP, 15 errores de programación carga de drivers JDBC, 74 entrada/salida por archivo, 76 fuentes de caracteres, 76 scheduling de los hilos de ejecución, 69 terminación de líneas, 75 249 uso de características de portabilidad, 71 uso de directorios definidos, 71 escalabilidad, 148 Essbase, 154 estructuras de programación, 54 evento, 67 sources, 67 eventos listeners, 67 Exchange, 14, 24 experiencia pervasiva, 190 expresión, 55 Familia de DB2 UDB, 147 Fen Java, 167 front-end Administrador de utilidades, 145 GC, 11 Gestión de Datos, 156 gestión del conocimiento conclusiones y tendencias, 14 factores, 16 necesidad de la, 16 objetivos de la, 17, 20 programas de la, 18 situación actual en la, 18 tecnologías de la, 12 globalización, 22 de la economía y del conocimiento, 22 GPRS, 15 granularidad grados de, 136 grouping sets, 166 Groupware, 14 groupware, 24 GUI Browser, 144 herencia, 45, 46, 61 250 HP-UX, 136, 149, 152 HTML y XML formatos, 154 HttpServletRequest, 78 HttpServletResponse, 78 IBM Data Management de, 136 IDE, 204 IMS, 138 información, 3 informar, 3 Informix, 138 inialización de arrays, 64 INIT, 79, 81 instalación área de ejecución de, 150 instanciación e inicialización, 81 integer, 66 métodos de la clase, 66 interface, 45 Internet, 25 Intranets, 137 introducción, 1 IP, 15 ISO y OGS estándares, 154 J2EE, 93 J2ME, 91, 94 clase Alert, 112 clase Canvas, 114 clase Display, 112 clase Displayable, 112 clase Form, 113 clase Graphics, 116 clase List, 113 clase TextBox, 113 comunicaciones, 121 clase Connector, 123 ÍNDICE DE MATERIAS comunicaciones HTTP, 126 Generic Connection Framwork, 121 Interfaz CommConnection, 132 Interfaz Connection, 123 Interfaz ContentConnection, 125 Interfaz DatagramConnection, 126 Interfaz HttpsConnection, 131 Interfaz InputConnection, 123 Interfaz OutputConnection, 124 Interfaz SecureConnection, 133 Interfaz ServerSocketConnection, 133 Interfaz SocketConnection, 132 Interfaz StreamConnection, 124 Interfaz StreamConnectionNotifier, 126 Interfaz UDPDatagramConnection, 131 peticiones GET, 128 peticiones POST, 129 configuración, 208 configuración CDC, 101 configuración CLDC, 101 configuraciones, 100 CVM, 99 Foundation Profile, 104 JVM, 97 KVM, 97 Mobile Information Device Profile, 105 PDA Profile, 105 perfiles, 103 Personal Profile, 104 RMI Profile, 105 RMS, 117 clase RecordStore, 120 ÍNDICE DE MATERIAS J2SE, 93 Java, 15, 39, 40, 137 applets, 167 características, 40 conceptos, 38 conceptos básicos, 44 errores de programación, 69 estructura general de un programa, 43 flexibilidad de, 41 introducción a, 37 Jerarquía de clases en, 46 y JDBC, 167 javax.servlet.HttpServlet, 78 JDK, 56, 75 JRE, 151 JSP compilación batch de, 84 modelos de, 82 procesadores, 83 knowledge, 3 laptops, 166 launchpad, 150 listener, 68 logs, 146 Lotus Notes, 24 Lotus Notes 5, 14 métodos, 62 de la clase object, 62 de objeto, 62 Maestre Pedro, 5 Marchand Donald A., 4 memoria administrador automático de la, 41 Microsoft SQL Server, 138, 153 251 middleware, 156 MIDlets, 106 AMS, 106 modelización predictiva, 138 modelo de programación de WebSphere, 194, 200 MPP massively parallel procesing o, 141 multiplataforma, 2, 138 Multiprocesador Sistema Simétrico, 140 navegadores, 24 Net Search Extender, 155 Net.Data, 168 Net.Data, Java y CLI aplicaciones, 155 Nonaka, 4 Novak Joseph, 5 NT Windows, 136 NUMA-Q, 152 OLAP, 14, 136 Kit de iniciación, 154 OLTP, 136 OOP, 43, 60 operadores, 50 aritméticos, 50 de asignación, 50 de concatenación de cadenas de caracteres, 53 incrementales, 51 precedencia de, 54 racionales, 52 unarios, 51 Oracle, 138 Oracle Corporation, 12 252 OS/2, 136 OS/390, 147 OS/400, 136 package, 45, 46 packages, 44 particiones lógicas, 143 particiones múltiples, 141 PDA, 24 perfiles de acceso, 145 perspectiva, editores y vistas, 206 plataforma de servicios pervasivos de WebSphere, 198 polimorfismo, 61 procesamiento paralelo sistemas de, 166 prototipos de depósitos, 152 PVC computación pervasiva, 196 QMF para Windows, 152 RDBMS, 136 replicación de datos, 166 return do while, 59 ROLLUP, 166 RS/6000, 142 Sample, 150 sentencia, 55 serial database, 139 server-side, 81 servers de IBM sistema de administración de, 147 servicio de demanda, 81 servlet, 77 ciclo de vida del, 79 codificación de, 78 ÍNDICE DE MATERIAS desarrollo, 78 motor del, 81 Set-Cookie, 78 shared-nothing configuration, 142 single node/non-parallel, 139 Smart Guides, 151 SMF, 200 SMP, 140 SMP Cluster, 142 SNMP, 146 SOAP, 186 sociedad de la información y el conocimiento, 2 software, 46 Solaris, 149 Soluciones e-business, 156 soporte OLAP, 166 Spatial Extender, 156 SQL, 147 standalone database, 139 STAR JOINS, 166 stored procedures, 167 String, 65 métodos de la clase, 65 string, 47 StringBuffer, 65 Struts, 189 Sun Solaris, 136 swing, 69 Sybase, 138 Takeuchi, 4 TCP/IP, 147 Tex Information Extender, 154 TI, 22 TIC, 2, 8 Tivoli, 165 TOC, 151 ÍNDICE DE MATERIAS Toffler Alvin, 23 UDDI, 186 UDFs, 168 UDTs, 168 UMTS, 15 uniprocessor system, 139 vínculos análisis de, 138 variable clasificación, 47 local, 48 miembro de una clase, 47 referencia, 47 variables miembro, 49 tipo primitivo, 47 visibilidad y vida de las, 49 Versión 7 DB2 Universal Database, 150 visión general rápida, 151 VisualAge, 146 VSAM, 138 WAP, 15 WDE, 190 Web, 2 aplicaciones, 85 Web Browser, 167 Web/IP, 15 WebSphere, 172 WebSphere Studio Device Developer, 201 workflow, 14 Workspaces, 207 WSAA, 181 WSAD, 181 XHTML, 15 253 XML, 15 XML Extender, 156