Aplicaciones Distribuidas en Java con Tecnologia RMI (PDF Free ...

January 15, 2018 | Author: Anonymous | Category: Java
Share Embed


Short Description

El libro Aplicaciones Distribuidas con Java explica los fundamentos de la programaci´ ... representar los modelos de ar...

Description

Aplicaciones Distribuidas en Java con Tecnologia RMI Santi Caball´e y Fatos Xhafa

I

Portadilla del t´ıtulo completo sin autores

II

Programaci´on Distribuida con Java

Acerca de los autores

SANTI CABALLE´ es Profesor de la Universidad Abierta de Catalu˜na (UOC) desde el a˜no 2006 siendo profesor-colaborador en esta misma universidad en los dos a˜nos anteriores. Su a´ mbito docente se centra en el a´ rea de la Ingenier´ıa del Software tanto en el desarrollo de aplicaciones en entornos distribuidos como centralizados. Las tecnolog´ıas distribuidas y su aplicaci´on, especialmente para el aprendizaje colaborativo virtual, son una de sus a´ reas de investigaci´on m´as activas en la  que ha publicado numerosos art´ıculos en congresos y conferencias internacionales. Actualmente, participa en diferentes proyectos de investigaci´on tanto nacionales como internacionales relacionados con el desarrollo de aplicaciones distribuidas. (http://cv.uoc.edu/∼scaballe/)

FATOS XHAFA es Profesor Titular de la Universidad Polit´ecnica de Catalu˜na (UPC). Imparte docencia en los estudios presenciales de la UPC desde el a˜no 1996 y en los estudios a distancia de la Universidad Abierta de Catalu˜na desde el a˜no 2000. En su docencia ha impartido e imparte asignaturas relacionadas con la programaci´on distribuida y el desarrollo de aplicaciones distribuidas. Ha publicado  varios libros de docencia de circulaci´on nacional. La programaci´on distribuida es a la vez uno de los temas de investigaci´on que le interesa; en este respecto ha participado y participa en varios proyectos de investigaci´on nacionales y de la EU relacionado con la programaci´on distribuida de gran escala, ha publicado numerosos art´ıculos en revistas y conferencias internacionales y ha organizado eventos internacionales. (http://www.lsi.upc.edu/∼fatos/)

III

Portadilla con t´ıtulo, autores, universidad y logo Delta

IV

Programaci´on Distribuida con Java

P´agina de Copyright

V

A nuestras fam´ılias.

VI

Programaci´on Distribuida con Java

VII

Prefacio La programaci´on distribuida, des de sus incios, ha formado parte de los curr´ıculums de los estudios de inform´atica y hoy en d´ıa est´a presente no s´olo en los planes de estudios inform´aticos sino que tambi´en en las ingenier´ıas en general, e incluso en nuevas titulaciones como las bioinform´atica. Adem´as, la comunidad de los profesionales que usan la programaci´on distribuida como su herramienta de programaci´on ha ido siempre creciendo. Con Internet y otras nuevas tecnolog´ıas, la programaci´on distribuida ha recibido un nuevo impulso. La propia naturaleza de Internet como una plataforma distribuida ha hecho de la programaci´on distribuida un paradigma indispensable para el desarrollo de aplicaciones de Internet. Como consecuencia, la programaci´on distribuida ha resultado a´un m´as importante para los estudios universitarios. El libro Aplicaciones Distribuidas con Java explica los fundamentos de la programaci´on distribuida con Java. El contenido propuesto tiene como objetivo cubrir las necesidades de las titulaciones de ingenier´ıas t´ecnicas y superior en Inform´atica en cuanto a asignaturas de arquitectura y programaci´on intermedia y avanzada. Por otra parte, el contenido representa un punto de partida para profesionales inform´aticos que deseen introducirse en la programaci´on distribuida. Los contenidos del libro cubren el desarrollo de las aplicaciones distribuidas paso a paso transmitiendo as´ı la metodolog´ıa que el estudiante y el profesional necesitan y pueden aplicar para afianzar los conceptos te´oricos. Para ello, se ha considerado el caso de la tecnolog´ıa RMI de manera sistem´atica: empezando por los conceptos basicos, ejemplos y aplicaciones sencillas hasta llegar a aplicaciones complejas. El libro tiene un enfoque eminentemente pragm´atico combinando los conceptos te´oricos principales con gran cantidad de ejemplos. Estos ejemplos se encuentran en forma de gr´aficos para representar los modelos de arquitecturas expuestas conceptualmente y sobretodo incluye casos resueltos tanto espec´ıficos como completos en forma de c´odigo fuente. Los ejemplos presentados a lo largo del libro se han escogido cuidadosamente y motivados por problemas reales. El objetivo del libro es que se pueda utilizar como material de soporte para estudiantes universitarios que tienen que afrontar ejercicios pr´acticos como parte del plan de estudios para superar las asignaturas. Adem´as se ha concebido como una obra para el aprendizaje incremental desde los conceptos b´asicos hasta los m´as avanzados. El libro no presupone ningun conocimiento de la programaci´on distribuida si bien presupone algunos conocimientos muy b´asicos de Programaci´on ´ Orientada a Objetos (POO). Obviamente, en las aplicaciones distribuidas, las bases de datos juegan un papel importante y por tanto algunos conocimientos b´asicos de bases de datos y SQL facilitar´ıan la lectura del libro. Remarcamos, de todas formas, que no ha sido objetivo de este libro explicar temas de bases de datos si bien se han explicado en detalle las bases de datos en el contexto de los

VIII

Programaci´on Distribuida con Java

ejemplos pr´acticos. A partir de una lectura secuencial del libro, cualquier lector (estudiante o profesional) podr´a avanzar en sus conocimientos de programaci´on distribuida y su aplicaci´on en Java de forma gradual. Tambi´en se facilitar´a al lector la posibilidad de experimentar a fondo con todos los ejemplos ofrecidos en el libro mediante la disposici´on de material complementario que se encuentra en el sitio Web de Delta Publicaciones. El objetivo es aprovechar los altos beneficios pedag´ogicos que ofrecen las pr´acticas en este sentido al implicar la instalaci´on y el uso de las tecnolog´ıas necesarias para experimentar con los ejemplos del libro. Nuestros agradecimientos a Joan Carles Gim´enez Alcober por su ayuda en la preparaci´on del material. Este libro se ha beneficiado de las sugerencias de los estudiantes de la asignatura T´ecnicas de Desarrollo de Software de la Universidad Abierta de Catalu˜na (UOC) y muy particularmente a los estudiantes del grupo JAVA22 de los estudios de Informatica de Gesti´on de la UOC.

Barcelona, Agosto de 2007.

Los autores

Contenido

IX

Contenido Introducci´on 1 El paradigma de la computaci´on distribuida 1.1 Introducci´on . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Sistemas distribuidos y centralizados . . . . 1.2 Que es la computaci´on distribuida . . . . . . . . . . 1.3 Anatom´ıa de un entorno de computaci´on distribuida . 1.3.1 Capa hardware . . . . . . . . . . . . . . . . 1.3.2 Capa sistema operativo de red . . . . . . . . 1.3.2.1 Procesos . . . . . . . . . . . . . . 1.3.2.2 Threads . . . . . . . . . . . . . . 1.3.2.3 Comunicaci´on a redes . . . . . . . 1.3.3 Capa software intermediario (middleware) . . 1.3.4 Capa aplicaci´on . . . . . . . . . . . . . . . . 1.4 Beneficios de la computaci´on distribuida . . . . . . . 1.4.1 Escalabilidad . . . . . . . . . . . . . . . . . 1.4.2 Apertura . . . . . . . . . . . . . . . . . . . 1.4.3 Heterogeneidad . . . . . . . . . . . . . . . . 1.4.4 Fiabilidad . . . . . . . . . . . . . . . . . . . 1.4.5 Viabilidad . . . . . . . . . . . . . . . . . . . 1.5 Costes y soluciones en la computaci´on distribuida . . 1.5.1 Interoperabilidad . . . . . . . . . . . . . . . 1.5.2 Eficiencia y seguridad . . . . . . . . . . . . 1.5.3 Visi´on global . . . . . . . . . . . . . . . . . 1.5.3.1 Coherencia . . . . . . . . . . . . . 1.5.3.2 Sincronizaci´on . . . . . . . . . . . 1.5.3.3 Administraci´on . . . . . . . . . . 1.5.3.4 Balanceo de carga . . . . . . . . . 1.5.4 Transparencia en la computaci´on distribuida . 1.5.4.1 Transparencia de acceso . . . . . . 1.5.4.2 Transparencia de ubicaci´on . . . . 1.5.4.3 Transparencia de migraci´on . . . . 1.5.4.4 Transparencia de replicaci´on . . . 1.5.4.5 Transparencia a fallos . . . . . . .

1

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11 11 12 13 15 16 16 17 17 17 18 18 19 20 21 22 22 23 24 24 25 26 26 27 27 28 28 28 29 29 29 29

X

Programaci´on Distribuida con Java 1.6

Modelos de computaci´on distribuida . . . . . . 1.6.1 Modelo Cliente/Servidor . . . . . . . . 1.6.2 Arquitectura de n−capas . . . . . . . . 1.6.3 Entornos Grid . . . . . . . . . . . . . . 1.6.3.1 Generadores de electricidad . 1.6.3.2 Generadores de computaci´on 1.6.3.3 Recursos Grid . . . . . . . . 1.6.3.4 Grid de ciclos inutilizados . . 1.6.4 Sistemas Peer-to-Peer . . . . . . . . . 1.6.4.1 Sistemas h´ıbridos . . . . . . 1.6.4.2 Sistemas P2P puros . . . . . Test de auto-evaluaci´on . . . . . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

2 Desarrollo de aplicaciones distribuidas 2.1 Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Por qu´e utilizar la programaci´on distribuida? . . . . . . . . . . . . . . . . 2.1.2 Las 8 falacias de la programaci´on distribuida . . . . . . . . . . . . . . . . 2.2 Desarrollo de aplicaciones distribuidas . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Partes de una aplicaci´on distribuida . . . . . . . . . . . . . . . . . . . . . 2.2.2 Requerimentos b´asicos sobre una aplicaci´on distribuida . . . . . . . . . . . 2.3 Tres modelos b´asicos de la programaci´on distribuida . . . . . . . . . . . . . . . . 2.3.1 Modelo Cliente/Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1.1 Protocolo de solicitud-respuesta del modelo C/S . . . . . . . . . 2.3.1.2 Modelo C/S: t´erminos y definiciones . . . . . . . . . . . . . . . Los componentes de una aplicaci´on C/S. . . . . . . . . . . . . . . El server loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interfaces del C/S: interfaces import/export. . . . . . . . . . . . . . C/S: modo de comunicaci´on. . . . . . . . . . . . . . . . . . . . . . 2.3.1.3 Tres tipos de procesamiento de solicitudes de servicios . . . . . Proceso servidor dedicado. . . . . . . . . . . . . . . . . . . . . . . Clonaje de un proceso servidor. . . . . . . . . . . . . . . . . . . . Threads –procesos servidores ligeros. . . . . . . . . . . . . . . . . 2.3.1.4 Clientes ligeros/pesados vs. servidores pesados/ligeros . . . . . . 2.3.1.5 Middleware para aplicaciones Cliente/Servidor . . . . . . . . . . El ejemplo del middleware ODBC. . . . . . . . . . . . . . . . . . 2.3.2 Remote Procedure Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.3 C´omo funciona el RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . Similitudes y diferencias entre la llamada de procedimientos locales y remotos. . . . . . . . . . . . . . . . . . . . . . . . . 2.3.4 Aplicaciones distribuidas basadas en RPC . . . . . . . . . . . . . . . . . . 2.3.5 Modelo basado en objetos distribuidos . . . . . . . . . . . . . . . . . . . . 2.3.5.1 Arquitectura general para sistemas basados en objetos distribuidos 2.3.5.2 Transacci´on de objetos remotos en tiempo de ejecuci´on . . . . . 2.3.5.3 The Common Object Request Broker Adapter –CORBA . . . . . 2.4 Otros modelos de la programaci´on distribuida . . . . . . . . . . . . . . . . . . . .

29 29 30 31 32 33 33 34 35 35 36 38 39 39 40 41 42 43 44 44 45 45 46 47 47 47 48 48 49 49 49 50 50 51 51 52 53 53 54 56 56 57 58

Contenido

XI

2.4.1 Multi-threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Modelo de compartici´on de datos . . . . . . . . . . . . . . . . . . . 2.4.3 Modelo basado en paso de mensajes . . . . . . . . . . . . . . . . . . 2.5 Proceso de construcci´on de una aplicaci´on distribuida . . . . . . . . . . . . . 2.5.1 Descomposici´on en paquetes/componentes y ciclo en espiral . . . . . 2.5.2 Modelo-Vista-Controlador con patr´on Observador . . . . . . . . . . Observer y Observable de Java. . . . . . . . . . . . . . 2.5.3 Factores que miden el e´ xito del proceso de desarrollo de aplicaciones tribuidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Test de auto-evaluaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Java para aplicaciones distribuidas 3.1 Paradigma de orientaci´on a objetos . . . . . . . . . . . . . . . . . . . 3.1.1 Modularizaci´on y ocultaci´on de la informaci´on . . . . . . . . Ejemplo 3.1.: Gesti´on de Empleados de una Empresa. 3.1.2 Clasificaci´on y abstracci´on . . . . . . . . . . . . . . . . . . . Ejemplo 3.2. Abstraer el modelo de un coche. . . . . . 3.1.3 Herencia y polimorfismo . . . . . . . . . . . . . . . . . . . . 3.1.4 Documentaci´on y mantenimiento . . . . . . . . . . . . . . . 3.2 Interoperabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Interoperabilidad a nivel de plataforma . . . . . . . . . . . . 3.2.1.1 Bytecode . . . . . . . . . . . . . . . . . . . . . . . 3.2.1.2 Java Native Interface . . . . . . . . . . . . . . . . Ejemplo de JNI. . . . . . . . . . . . . . . . . . . . . 3.2.2 Interoperabilidad a nivel de aplicaci´on . . . . . . . . . . . . . 3.2.2.1 Capa de presentaci´on . . . . . . . . . . . . . . . . 3.2.2.2 Capa de negocio . . . . . . . . . . . . . . . . . . . 3.2.2.3 Capa de datos . . . . . . . . . . . . . . . . . . . . 3.3 Soporte al trabajo en red (networking) . . . . . . . . . . . . . . . . . 3.3.1 Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1.1 OutputStream . . . . . . . . . . . . . . . . . . . . Ejemplo 3.3: Manejo de ficheros. . . . . . . . . . . . 3.3.1.2 InputStream . . . . . . . . . . . . . . . . . . . . . Ejemplo 3.4.: Fichero de entrada. . . . . . . . . . . . Ejemplo 3.5.: Streams. . . . . . . . . . . . . . . . . . 3.3.2 Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2.1 Socket . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2.2 ServerSocket . . . . . . . . . . . . . . . . . . . . . Ejemplo 3.6.: Uso de sockets. . . . . . . . . . . . . . 3.4 Soporte al modelo de objetos distribuidos . . . . . . . . . . . . . . . 3.4.1 CORBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.2 Remote Method Incocation –RMI . . . . . . . . . . . . . . . 3.5 Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 Seguridad en applets y aplicaciones . . . . . . . . . . . . . . Ejemplo 3.7.: Ejemplo de norma y permisos. . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . dis. . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58 58 58 59 59 60 61 62 63 65 65 66 67 70 70 73 74 74 75 76 76 77 78 78 79 79 79 80 81 81 82 82 85 86 86 86 88 89 89 93 95 95 98

XII

Programaci´on Distribuida con Java Ejemplo 3.8. Fichero de p´olizas. . . . . . . . 3.5.2 Seguridad en comunicaci´on en red . . . . . . . . . . Ejemplo 3.9.: Permisos. . . . . . . . . . . . Ejemplo 3.10.: Permisos para todo el c´odigo. 3.6 Tratamiento de excepciones y robustez . . . . . . . . . . . . Ejemplo 3.11.: Gesti´on de Excepciones. . . . Test de auto-evaluaci´on . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

98 99 99 100 101 104 107

4 Introducci´on a Remote Method Invocation 4.1 Que es RMI . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Objetivos de RMI . . . . . . . . . . . . . . . . . . . . . . . 4.3 Caracter´ısticas b´asicas de RMI . . . . . . . . . . . . . . . . 4.3.1 Sockets . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2 Serializaci´on . . . . . . . . . . . . . . . . . . . . . 4.3.2.1 Usos de la serializaci´on . . . . . . . . . . 4.3.2.2 Ventajas y problemas de la serializaci´on . 4.3.2.3 Mec´anica de la serializaci´on . . . . . . . . 4.3.2.4 Identificador universal de serializaci´on . . 4.3.2.5 Serializando objetos en RMI . . . . . . . 4.3.3 Paso de par´ametros y valores de retorno . . . . . . . 4.3.4 Activaci´on de objetos remotos . . . . . . . . . . . . 4.3.5 Recolector de basura distribuido . . . . . . . . . . . 4.3.6 Localizaci´on . . . . . . . . . . . . . . . . . . . . . 4.3.7 Excepciones . . . . . . . . . . . . . . . . . . . . . 4.3.8 Seguridad . . . . . . . . . . . . . . . . . . . . . . . Ejemplo 4.1.: Permiso de aceptar conexiones. 4.4 Arquitectura b´asica RMI . . . . . . . . . . . . . . . . . . . 4.4.1 El servidor . . . . . . . . . . . . . . . . . . . . . . 4.4.2 El cliente . . . . . . . . . . . . . . . . . . . . . . . 4.4.3 Stubs y skeletons . . . . . . . . . . . . . . . . . . . 4.4.3.1 Evoluci´on de los stubs y skeletons en Java 4.4.3.2 Proceso de invocaci´on Cliente/Servidor . . Ejemplo 4.2.: Contenido del archivo stub . . 4.4.4 RMI Registry . . . . . . . . . . . . . . . . . . . . . Test de auto-evaluaci´on . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . .

109 109 110 112 112 113 114 114 116 117 118 119 120 122 123 124 125 126 126 127 129 129 130 130 131 133 134

5 Caso de estudio RMI b´asico 5.1 Un ejemplo de RMI b´asico: una calculadora remota . . . . . . . . . . . . . . . . . 5.1.1 Desarrollar el objeto remoto . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1.1 La interfaz remota: definici´on del objeto remoto . . . . . . . . . 5.1.1.2 La implementaci´on de la interfaz: implementar el objeto remoto 5.1.1.3 La clase servidora . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.2 Creaci´on del fichero de p´olizas . . . . . . . . . . . . . . . . . . . . . . . . 5.1.3 Desarrollar el cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Compilar y ejecutar la aplicaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . .

135 135 136 136 137 137 138 139 141

Contenido 5.2.1 Compilar la interfaz remota, servidor y cliente 5.2.2 Generar stubs y skeletons con rmic . . . . . . . 5.2.3 Arrancar el registro (RMIRegistry) . . . . . . . 5.2.4 Ejecutar el servidor . . . . . . . . . . . . . . . 5.2.5 Ejecutar el cliente . . . . . . . . . . . . . . . . 5.3 Automatizaci´on de tareas . . . . . . . . . . . . . . . . 5.4 Despliegue y ejecuci´on en un entorno real . . . . . . . Test de auto-evaluaci´on . . . . . . . . . . . . . . . . . . . .

XIII . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

6 Programaci´on RMI avanzada 6.1 Conceptos avanzados de la tecnolog´ıa RMI . . . . . . . . . . . . . . . . 6.1.1 Manejo de excepciones remotas . . . . . . . . . . . . . . . . . . 6.1.2 Acceso RMI a base de datos con JDBC . . . . . . . . . . . . . . 6.2 Ejemplo completo: Sistema de voto electr´onico . . . . . . . . . . . . . . 6.2.1 El problema de voto electr´onico . . . . . . . . . . . . . . . . . . 6.2.2 Configuraci´on y ejecuci´on . . . . . . . . . . . . . . . . . . . . . 6.2.2.1 Configuraci´on . . . . . . . . . . . . . . . . . . . . . . 6.2.2.2 Arrancar rmiregistry . . . . . . . . . . . . . . . . . . . 6.2.2.3 Arrancar servicios del servidor . . . . . . . . . . . . . 6.2.2.4 Arrancar el cliente: realizar una votaci´on . . . . . . . . 6.2.3 Pasos de la implementaci´on . . . . . . . . . . . . . . . . . . . . 6.2.3.1 Declaraci´on de la interfaz remota: MesaRemota . . . . 6.2.3.2 Implementaci´on de la interfaz remota: ProgramaMesa . 6.2.3.3 Implementaci´on del servidor: MesaServidor . . . . . . 6.2.3.4 Implementaci´on del cliente: PantallaCabinaClienteMesa 6.2.4 Juego de pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Listado de ficheros de la aplicaci´on . . . . . . . . . . . . . . . . . . . . . Test de auto-evaluaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

141 141 142 142 143 145 146 148

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

151 151 151 152 155 155 157 157 158 158 161 163 163 163 165 167 171 174 176

7 Aplicaciones distribuidas con Java: interfaces gr´aficas de usuario con Swing 7.1 Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Capa de presentaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Soporte Java a las interfaces gr´aficas . . . . . . . . . . . . . . . . . . . . . 7.4 El paquete Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.1 Swing b´asico: componentes gr´aficos habituales . . . . . . . . . . . 7.4.1.1 Ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . Ejemplo 7.1.: C´odigo completo para crear una ventana. . . . 7.4.1.2 Paneles y organizadores de contenido (layouts) . . . . . . Combinaci´on de diferentes organizadores. . . . . . . . . . . Ejemplo 7.2.: Dar color al fondo de pantalla. . . . . . . . . 7.4.1.3 Etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . Ejemplo 7.3.: Etiquetas JLabel. . . . . . . . . . . . . . . . 7.4.1.4 Campos y a´ reas de texto . . . . . . . . . . . . . . . . . . Ejemplo 7.4.: Campo de texto. . . . . . . . . . . . . . . . . 7.4.1.5 Botones . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

179 179 180 181 182 183 184 184 185 187 188 189 189 191 191 193

XIV

Programaci´on Distribuida con Java

Ejemplo 7.5.: Creaci´on de un boton. . . . . . . . . . . . . . . . . . 7.4.1.6 Gesti´on de eventos . . . . . . . . . . . . . . . . . . . . . . . . . Ejemplo 7.6.: Gesti´on de eventos del bot´on con nombre “Aceptar”. Ejemplo 7.7. Gesti´on de eventos del bot´on de cerrar la ventana. . . Presentaci´on de mensajes. . . . . . . . . . . . . . . . . . . . . . . Ejemplo 7.8.: C´odigo para presentar mensajes al usuario. . . . . . . 7.4.2 Swing avanzado: otros componentes gr´aficos . . . . . . . . . . . . . . . . 7.4.2.1 Programaci´on sistem´atica en Swing . . . . . . . . . . . . . . . . Ejemplo 7.9.: C´odigo completo de PantallaElectoral. . . . . . . . . 7.4.2.2 Combos, casillas de verificaci´on y botones de radio . . . . . . . Ejemplo 7.10.: C´odigo completo de PantallaIntroducirElector. . . . 7.4.2.3 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejemplo 7.11.: C´odigo completo de PantallaMesa. . . . . . . . . . 7.4.2.4 Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejemplo 7.12.: C´odigo completo de PantallaEmitirVoto. . . . . . . Test de auto-evaluaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Programaci´on Java con JDBC y el paquete java.sql 8.1 Introducci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Capa de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Soporte Java al acceso a base de datos . . . . . . . . . . . . . . . . . . . . . . . 8.3.1 Pasos a seguir en el desarrollo de un programa Java con JDBC . . . . . . 8.3.1.1 Creaci´on de las base de datos e instalaci´on de los controladores Para MS Access. . . . . . . . . . . . . . . . . . . . . . . . . . . Para PostgreSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3.1.2 Conexi´on a la base de datos . . . . . . . . . . . . . . . . . . . Clase java.sql.Connection. . . . . . . . . . . . . . . . . . . . . . URL de conexi´on a la base de datos. . . . . . . . . . . . . . . . . La clase GestorDiscoConexion. . . . . . . . . . . . . . . . . . . 8.3.2 Realizar una sessi´on de trabajo con la base de datos . . . . . . . . . . . . 8.3.2.1 Conectarse y trabajar con una base de datos . . . . . . . . . . La clase java.sql.Statement. . . . . . . . . . . . . . . . . . . . . La clase java.sql.PreparedStatement. . . . . . . . . . . . . . . . . Gesti´on de excepciones. . . . . . . . . . . . . . . . . . . . . . . 8.3.2.2 Control de transacciones . . . . . . . . . . . . . . . . . . . . . 8.3.2.3 Conversi´on entre tipos de datos Java y SQL . . . . . . . . . . 8.3.3 Sentencias SQL para efectuar operaciones elementales . . . . . . . . . . La clase Persona. . . . . . . . . . . . . . . . . . . . . . . . . . . La clase Elector. . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3.3.1 Sentencias executeUpdate para insertar informaci´on . . . . . . La clase PantallaIntroducirElector. . . . . . . . . . . . . . . . . . La clase GestorDiscoElector para inserci´on. . . . . . . . . . . . . Ejecuci´on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resultado de la inserci´on de un elector. . . . . . . . . . . . . . . 8.3.3.2 Sentencia executeQuery para consultar informaci´on . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

193 195 196 198 198 200 203 203 204 214 214 221 221 224 224 229 231 231 232 235 236 237 237 239 245 248 248 249 252 252 252 253 255 256 258 260 261 265 267 267 272 274 274 276

Contenido

XV

La clase java.sql.ResultSet. . . . . . . . . . . . . . . . . La clase PantallaConsultarElector. . . . . . . . . . . . . La clase GestorDiscoElector para consulta. . . . . . . . Ejecuci´on. . . . . . . . . . . . . . . . . . . . . . . . . . Resultado de la consulta de un elector. . . . . . . . . . . 8.3.3.3 Sentencias executeUpdate para modificar informaci´on La clase PantallaModificarElector. . . . . . . . . . . . . La clase GestorDiscoElector para modificaci´on. . . . . . Ejecuci´on. . . . . . . . . . . . . . . . . . . . . . . . . . Resultados de modificar un elector. . . . . . . . . . . . 8.3.3.4 Sentencias executeUpdate para eliminar . . . . . . . La clase PantallaBorrarElector. . . . . . . . . . . . . . . La clase GestorDiscoElector. . . . . . . . . . . . . . . . Ejecuci´on. . . . . . . . . . . . . . . . . . . . . . . . . . Resultado de la eliminaci´on de un elector. . . . . . . . . Test de auto-evaluaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Poniendo las piezas juntas...la aplicacion distribuida eVotoSeguro 9.1 Presentaci´on del problema de la votaci´on electr´onica . . . . . . 9.2 Especificaci´on y an´alisis de la aplicaci´on eVotoSeguro . . . . . . 9.2.1 Descripci´on del sistema . . . . . . . . . . . . . . . . . 9.2.2 Programa Electorado . . . . . . . . . . . . . . . . . . . Electores. . . . . . . . . . . . . . . . . . . . . . Partidos. . . . . . . . . . . . . . . . . . . . . . Candidatos. . . . . . . . . . . . . . . . . . . . . Circunscripciones. . . . . . . . . . . . . . . . . Comarcas. . . . . . . . . . . . . . . . . . . . . . Municipios. . . . . . . . . . . . . . . . . . . . . Centros. . . . . . . . . . . . . . . . . . . . . . . Mesas electorales. . . . . . . . . . . . . . . . . Impresi´on del acta. . . . . . . . . . . . . . . . . Env´ıo de los votos a la Central Electoral. . . . . Creaci´on de archivos hist´oricos. . . . . . . . . . Escrutinio. . . . . . . . . . . . . . . . . . . . . 9.2.3 Programa Contrase˜na . . . . . . . . . . . . . . . . . . . Identificaci´on. . . . . . . . . . . . . . . . . . . . Obtenci´on de contrase˜na. . . . . . . . . . . . . . 9.2.4 Programa Votantes . . . . . . . . . . . . . . . . . . . . Identificaci´on. . . . . . . . . . . . . . . . . . . . Votaci´on. . . . . . . . . . . . . . . . . . . . . . Introducci´on de la contrase˜na. . . . . . . . . . . Selecci´on del candidato. . . . . . . . . . . . . . Confirmaci´on de la selecci´on. . . . . . . . . . . Despido. . . . . . . . . . . . . . . . . . . . . . 9.2.5 Resumen Esquem´atico . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

276 279 282 283 284 284 285 291 292 293 295 295 298 299 299 299

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . .

303 303 304 304 305 305 305 306 306 307 307 307 308 308 308 308 308 309 309 309 309 309 309 310 310 310 310 310

XVI

Programaci´on Distribuida con Java 9.2.6 9.2.7

9.3

9.4

9.5

Recursos necesarios . . . . . . . . . . . . . . . . . . . . Otros requerimientos . . . . . . . . . . . . . . . . . . . . Extensibilidad de eVotoSeguro. . . . . . . . . . . . C´odigos de barras. . . . . . . . . . . . . . . . . . Pantalla t´actil. . . . . . . . . . . . . . . . . . . . . Distribuci´on del espacio y disposici´on de la cabina. 9.2.8 Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagramas de casos de uso . . . . . . . . . . . . . . . . . . . . . 9.3.1 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1.1 Identificaci´on de los actores . . . . . . . . . . . 9.3.1.2 Diagrama de casos de uso de los requisitos . . . 9.3.2 Descripci´on textual de los casos de uso . . . . . . . . . . Caso de uso Gesti´on electores. . . . . . . . . . . . Caso de uso Gesti´on de partidos. . . . . . . . . . . Caso de uso Gesti´on de candidatos. . . . . . . . . Caso de uso Gesti´on circunscripciones. . . . . . . Caso de uso Gesti´on comarcas. . . . . . . . . . . Caso de uso Gesti´on municipios. . . . . . . . . . . Caso de uso Gesti´on de centros. . . . . . . . . . . Caso de uso Gesti´on mesa electoral. . . . . . . . . Caso de uso Tratamiento escrutinio. . . . . . . . . Caso de uso Calcular participaci´on. . . . . . . . . Caso de uso Identificaci´on y finalizaci´on. . . . . . Caso de uso Identificar elector. . . . . . . . . . . Caso de uso Comprobar contrase˜na. . . . . . . . . Caso de uso Emitir voto. . . . . . . . . . . . . . . Caso de uso Crear acta. . . . . . . . . . . . . . . Arquitectura / dise˜no de la aplicaci´on eVotoSeguro . . . . . . . . . 9.4.1 Diagrama de entidades . . . . . . . . . . . . . . . . . . . 9.4.2 Diagrama de paquetes . . . . . . . . . . . . . . . . . . . 9.4.3 Subsistema Gesti´on B´asica Central Electoral . . . . . . . 9.4.3.1 Descripci´on . . . . . . . . . . . . . . . . . . . 9.4.3.2 Diagramas de jerarqu´ıas . . . . . . . . . . . . 9.4.4 Subsistema C´alculo Votos . . . . . . . . . . . . . . . . . 9.4.4.1 Resultados . . . . . . . . . . . . . . . . . . . . 9.4.4.2 Consultas . . . . . . . . . . . . . . . . . . . . 9.4.4.3 Diagrama de clases . . . . . . . . . . . . . . . 9.4.5 Subsistema Actividades Centro . . . . . . . . . . . . . . 9.4.5.1 Descripci´on . . . . . . . . . . . . . . . . . . . 9.4.5.2 Diagrama de clases . . . . . . . . . . . . . . . 9.4.6 Diagrama de estados . . . . . . . . . . . . . . . . . . . . Persistencia de datos . . . . . . . . . . . . . . . . . . . . . . . . 9.5.1 Descripci´on . . . . . . . . . . . . . . . . . . . . . . . . . 9.5.2 Dise˜no conceptual –Diagrama ER . . . . . . . . . . . . . Descripci´on de los atributos . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

311 311 311 312 312 312 312 313 314 314 314 317 317 317 317 318 318 318 319 319 319 320 320 320 321 321 321 322 322 322 324 324 325 325 327 328 328 328 328 330 330 331 331 331 331

Contenido 9.6

Implementaci´on de la aplicaci´on eVotoSeguro . . . . . . 9.6.1 Declaraci´on de las interfaces remotas . . . . . . 9.6.1.1 Interfaz Comision remota . . . . . . . 9.6.1.2 Interfaz de la Mesa remota . . . . . . 9.6.2 Implementaci´on de las interfaces remotas . . . . 9.6.2.1 Programa Comision . . . . . . . . . . 9.6.2.2 Programa Mesa . . . . . . . . . . . . 9.6.3 Implementaci´on de los servidores . . . . . . . . 9.6.3.1 Servidor Comisi´on . . . . . . . . . . . 9.6.3.2 Servidor Mesa . . . . . . . . . . . . . 9.6.4 Implementaci´on de los clientes . . . . . . . . . . 9.6.4.1 Cliente de la comisi´on (mesa electoral) 9.6.4.2 Cliente de la mesa (cabina electoral) . 9.6.5 La base de datos . . . . . . . . . . . . . . . . . 9.6.5.1 Creaci´on de la base de datos . . . . . . 9.6.5.2 La conexi´on con la base de datos . . . 9.7 Ejecuci´on de la aplicaci´on eVotoSeguro . . . . . . . . . 9.8 Uso de la aplicaci´on eVotoSeguro . . . . . . . . . . . . . 9.8.1 Programa Electorado de la comisi´on central. . . 9.8.2 Programa Contrase˜na en las mesas electorales . . 9.8.3 Programa Votantes en las cabinas de votaci´on . . Test de auto-evaluaci´on . . . . . . . . . . . . . . . . . . . . .

XVII . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

333 334 334 334 335 335 343 345 345 346 347 347 349 350 351 353 357 361 361 362 364 369

Bibliograf´ıa

371

Acr´onimos

373

´ Indice de t´erminos

374

View more...

Comments

Copyright © 2017 DATENPDF Inc.