See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/266794630
Aplicaciones Distribuidas en Java con Tecnologia RMI Book · January 2008 DOI: 10.13140/2.1.2208.5127
CITATIONS
READS
0
3,772
2 authors:
Santi Caballé
Fatos Xhafa
Universitat Oberta de Catalunya
Universitat Politècnica de Catalunya
217 PUBLICATIONS 1,370 CITATIONS
690 PUBLICATIONS 5,169 CITATIONS
SEE PROFILE
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
e-Assessment View project
Emotion awareness in CSCL View project
All content following this page was uploaded by Santi Caballé on Caballé on 13 October 2014. The user has requested enhancement of the downloaded file.
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
´ es Profesor de la Universidad Abierta de Catalu na ˜ (UOC) SANTI CABALLE ˜ 2006 siendo profesor-colaborador en esta misma universidad en los desde el a no 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 central´ especialmente para el aprenizados. Las tecnolog´ıas distribuidas y su aplicaci on, dizaje colaborativo virtual, son una de sus ´areas de investigaci o´ n m a´ s activas en la que ha publicado numerosos art´ıculos en congresos y conferencias internacionales. Actualmente, participa en diferentes proyectos de investigaci o´ n 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 e´ cnica de Catalu n˜ a (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 n˜ a 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 o´ n nacional. La programaci on ´ distribuida es a la vez uno de los temas de investigaci o´ n 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 o´ n 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 o´ lo en los planes de estudios inform a´ ticos 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 o´ n distribuida como su herramienta de programaci o´ n ha ido siempre creciendo. Con Internet y otras nuevas tecnolog ´as, la programaci o´ n distribuida ha recibido un nuevo im pulso. 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 o´ n distribuida ha resultado a u´ n m´as importante para los estudios universitarios. ´ disEl libro Aplicaciones Distribuidas con Java explica los fundamentos de la programaci on tribuida 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 apli car para afianzar los conceptos teoricos. ´ Para ello, se ha considerado el caso de la tecnolog´a RMI de manera sistem a´ tica: empezando por los conceptos basicos, ejemplos y aplicaciones sencillas hasta llegar a aplicaciones complejas. El libro tiene un enfoque eminentemente pragm a´ tico combinando los conceptos te o´ ricos 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 o´ digo 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 a´ sicos de Programaci o´ n ´ Orientada a Objetos (POO). Obviamente, en las aplicaciones distribuidas, las bases de datos juegan un papel importante y por tanto algunos conocimientos b a´ sicos 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 a´ cticos. A partir de una lectura secuencial del libro, cualquier lector (estudiante o profesional) podr´a avanzar en sus conocimientos de programaci o´ n distribuida y su aplicaci o´ n en Java de forma gradual. Tambi´en se facilitar a´ al lector la posibilidad de experimentar a fondo con todos los ejemplos ´ de material complementario que se encuentra en el ofrecidos en el libro mediante la disposici on sitio Web de Delta Publicaciones. El objetivo es aprovechar los altos beneficios pedag ogicos ´ que ofrecen las pr a´ cticas en este sentido al implicar la instalaci o´ n y el uso de las tecnolog´ıas necesarias para experimentar con los ejemplos del libro. Nuestros agradecimientos a Joan Carles Gim e´ nez 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 e´ cnicas de Desarrollo de Software de la Universidad Abierta de Catalu n˜ a (UOC) y muy particularmente a los estudiantes del grupo JAVA22 de los estudios de Informatica de Gesti o´ n de la UOC.
Barcelona, Agosto de 2007.
Los autores
Contenido
IX
Contenido Introducci´on 1
El paradigma de la computaci´on distribuida 1.1 Introduccio´ n . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Sistemas distribuidos y centralizados . . . . . 1.2 Que es la computaci´on distribuida . . . . . . . . . . . 1.3 Anatom´ıa de un entorno de computaci o´ n 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 aplicacio´ n . . . . . . . . . . . . . . . . . 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 computacio´ n 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 o´ n . . . . . ´ . . . . . 1.5.4.3 Transparencia de migracion 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 Introduccio´ n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . . . . ´ distribuida . . . . . . . . . . . . . . . . . . . . . 2.2.1 Partes de una aplicacion ´ distribuida . . . . . . . . . . . 2.2.2 Requerimentos b´asicos sobre una aplicaci on 2.3 Tres modelos b´asicos de la programaci o´ n 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 o´ n C/S. . . . . . . . . . . . . . . El server loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interfaces del C/S: interfaces import/export. . . . . . . . . . . . . . C/S: modo de comunicaci o´ n. . . . . . . . . . . . . . . . . . . . . . 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 Como ´ 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 o´ n . . . . . 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
3
XI
2.4.1 Multi-threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Modelo de compartici o´ n de datos . . . . . . . . . . . . . . . . . . . . . . 2.4.3 Modelo basado en paso de mensajes . . . . . . . . . . . . . . . . . . . . . 2.5 Proceso de construcci o´ n de una aplicaci o´ n distribuida . . . . . . . . . . . . . . . . 2.5.1 Descomposici´o n 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 distribuidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Test de auto-evaluacion
58 58 58 59 59 60 61
Java para aplicaciones distribuidas 3.1 Paradigma de orientacion ´ a objetos . . . . . . . . . . . . . . . . . . . 3.1.1 Modularizaci´on y ocultaci´on de la informaci´on . . . . . . . . Ejemplo 3.1.: Gesti´o n 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 Documentacio´ n 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 o´ n . . . . . . . . . . . . . 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. . . . . .
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
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62 63
XII
Programaci´ on Distribuida con Java
Ejemplo 3.8. Fichero de p o´ lizas. . . . . . . . 3.5.2 Seguridad en comunicaci o´ n 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-evaluacion 4
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
Introducci´on a Remote Method Invocation
4.1 4.2 4.3
Que es RMI . . . . . . . . . . . . . . . . . . . . . . . . . . Objetivos de RMI . . . . . . . . . . . . . . . . . . . . . . . Caracter ´ısticas b´asicas de RMI . . . . . . . . . . . . . . . . 4.3.1 Sockets . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2 Serializaci´on . . . . . . . . . . . . . . . . . . . . . ´ . . . . . . . . . . 4.3.2.1 Usos de la serializacion 4.3.2.2 Ventajas y problemas de la serializaci´on . 4.3.2.3 Mec´anica de la serializaci o´ n . . . . . . . . ´ . . 4.3.2.4 Identificador universal de serializaci on 4.3.2.5 Serializando objetos en RMI . . . . . . . 4.3.3 Paso de par a´ metros 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 Evolucio´ n de los stubs y skeletons en Java 4.4.3.2 Proceso de invocaci o´ n Cliente/Servidor . . Ejemplo 4.2.: Contenido del archivo stub . . 4.4.4 RMI Registry . . . . . . . . . . . . . . . . . . . . . ´ . . . . . . . . . . . . . . . . . . . . . . . Test de auto-evaluacion 5
. . . . . . .
98 99 99 100 101 104 107 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
Caso de estudio RMI b a´ sico 5.1 Un ejemplo de RMI b a´ sico: una calculadora remota . . . . . . . . . . . . . . . . . 5.1.1 Desarrollar el objeto remoto . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1.1 La interfaz remota: definicion ´ 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 o´ lizas . . . . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . ´ en un entorno real . . . . . . . 5.4 Despliegue y ejecuci on Test de auto-evaluacion ´ . . . . . . . . . . . . . . . . . . . . 6
XIII . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
Programaci´on RMI avanzada
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 o´ nico . . . . . . . . . . . . . . . . . . . 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 o´ n . . . . . . . . . 6.2.3 Pasos de la implementaci´on . . . . . . . . . . . . . . . . . . . . . 6.2.3.1 Declaraci o´ n de la interfaz remota: MesaRemota . . . . . 6.2.3.2 Implementaci´o n de la interfaz remota: ProgramaMesa . . 6.2.3.3 Implementaci´o n 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
Aplicaciones distribuidas con Java: interfaces gr´aficas de usuario con Swing
7.1 7.2 7.3 7.4
Introduccio´ n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Capa de presentaci o´ n . . . . . . . . . . . . . . . . . . . . . . . . . . . Soporte Java a las interfaces gr´aficas . . . . . . . . . . . . . . . . . . . El paquete Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4.1 Swing b´asico: componentes gr ´aficos habituales . . . . . . . . . 7.4.1.1 Ventanas . . . . . . . . . . . . . . . . . . . . . . . . ´ Ejemplo 7.1.: Codigo completo para crear una ventana. . 7.4.1.2 Paneles y organizadores de contenido (layouts) . . . . Combinaci´o n 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 ´areas de texto . . . . . . . . . . . . . . . . Ejemplo 7.4.: Campo de texto. . . . . . . . . . . . . . . 7.4.1.5 Botones . . . . . . . . . . . . . . . . . . . . . . . .
141 141 142 142 143 145 146 148 151
6.1
7
. . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
151 151 152 155 155 157 157 158 158 161 163 163 163 165 167 171 174 176 179
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
179 180 181 182 183 184 184 185 187 188 189 189 191 191 193
XIV
8
Programaci´ on Distribuida con Java
Ejemplo 7.5.: Creaci o´ n de un boton. . . . . . . . . . . . . . . . . . 7.4.1.6 Gestio´ n de eventos . . . . . . . . . . . . . . . . . . . . . . . . . Ejemplo 7.6.: Gesti o´ n de eventos del bot o´ n con nombre “Aceptar”. Ejemplo 7.7. Gesti´on de eventos del bot´o n de cerrar la ventana. . . Presentaci´on de mensajes. . . . . . . . . . . . . . . . . . . . . . . Ejemplo 7.8.: Codigo ´ para presentar mensajes al usuario. . . . . . . 7.4.2 Swing avanzado: otros componentes gr ´acos . . . . . . . . . . . . . . . . 7.4.2.1 Programaci´on sistem´atica en Swing . . . . . . . . . . . . . . . . Ejemplo 7.9.: C´o digo completo de PantallaElectoral. . . . . . . . . 7.4.2.2 Combos, casillas de vericaci o´ n y botones de radio . . . . . . . Ejemplo 7.10.: Co´ digo completo de PantallaIntroducirElector. . . . 7.4.2.3 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejemplo 7.11.: Co´ digo completo de PantallaMesa. . . . . . . . . . 7.4.2.4 Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejemplo 7.12.: Co´ digo completo de PantallaEmitirVoto. . . . . . . Test de auto-evaluacion ´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
193 195 196 198 198 200 203 203 204 214 214 221 221 224 224 229
Programaci´on Java con JDBC y el paquete java.sql 8.1 Introduccio´ n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 instalacio´ n 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 o´ n a la base de datos. . . . . . . . . . . . . . . . . . La clase GestorDiscoConexion. . . . . . . . . . . . . . . . . . . . 8.3.2 Realizar una session ´ 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´o n 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 o´ n. . . . . . . . . . . . . . Ejecuci´on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ´ de un elector. . . . . . . . . . . . . . . . Resultado de la inserci on 8.3.3.2 Sentencia executeQuery para consultar informaci o´ n . . . . . . .
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 o´ n. . . . . . 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 o´ n de un elector. . . . . . . . . Test de auto-evaluacion ´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Poniendo las piezas juntas...la aplicacion distribuida eVotoSeguro 9.1 Presentaci´on del problema de la votaci o´ n electr ´onica . . . . . . 9.2 Especificaci´on y an´alisis de la aplicaci o´ n eVotoSeguro . . . . . . 9.2.1 Descripcion ´ 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 o´ ricos. . . . . . . . . . Escrutinio. . . . . . . . . . . . . . . . . . . . . 9.2.3 Programa Contrase˜na . . . . . . . . . . . . . . . . . . . Identificaci´on. . . . . . . . . . . . . . . . . . . . Obtenci´on de contrase n˜ a. . . . . . . . . . . . . . 9.2.4 Programa Votantes . . . . . . . . . . . . . . . . . . . . Identificaci´on. . . . . . . . . . . . . . . . . . . . Votaci´on. . . . . . . . . . . . . . . . . . . . . . Introducci´on de la contrase˜na. . . . . . . . . . . Selecci´on del candidato. . . . . . . . . . . . . . Confirmaci´on de la selecci o´ n. . . . . . . . . . . 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
9.2.6 9.2.7
9.3
9.4
9.5
Programaci´ on Distribuida con Java
Recursos necesarios . . . . . . . . . . . . . . . . . . . . . Otros requerimientos . . . . . . . . . . . . . . . . . . . . . Extensibilidad de eVotoSeguro. . . . . . . . . . . . . C´odigos de barras. . . . . . . . . . . . . . . . . . . Pantalla t´actil. . . . . . . . . . . . . . . . . . . . . . Distribuci´on del espacio y disposici o´ n 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 Identificacion . . . . . . ´ y finalizaci on. ´ Caso de uso Identificar elector . . . . . . . . . . . . Caso de uso Comprobar contrasena. ˜ . . . . . . . . . Caso de uso Emitir voto. . . . . . . . . . . . . . . . Caso de uso Crear acta. . . . . . . . . . . . . . . . Arquitectura / dise n˜ o de la aplicaci o´ n eVotoSeguro . . . . . . . . . . 9.4.1 Diagrama de entidades . . . . . . . . . . . . . . . . . . . . 9.4.2 Diagrama de paquetes . . . . . . . . . . . . . . . . . . . . 9.4.3 Subsistema Gesti´on B a´ sica Central Electoral . . . . . . . . 9.4.3.1 Descripcio´ n . . . . . . . . . . . . . . . . . . . . 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 Descripcio´ n . . . . . . . . . . . . . . . . . . . . 9.4.5.2 Diagrama de clases . . . . . . . . . . . . . . . . 9.4.6 Diagrama de estados . . . . . . . . . . . . . . . . . . . . . Persistencia de datos . . . . . . . . . . . . . . . . . . . . . . . . . ´ . . . . . . . . . . . . . . . . . . . . . . . . . . 9.5.1 Descripcion 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 ´ eVotoSeguro . . . . . . Implementaci´on de la aplicaci on 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 comisio´ n (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 Ejecucio´ n de la aplicaci o´ n eVotoSeguro . . . . . . . . . 9.8 Uso de la aplicacion eVotoSeguro ´ . . . . . . . . . . . . . 9.8.1 Programa Electorado de la comisi´on central. . . 9.8.2 Programa Contrase˜n a en las mesas electorales . . 9.8.3 Programa Votantes en las cabinas de votacion ´ . . ´ . . . . . . . . . . . . . . . . . . . . . Test de auto-evaluacion 9.6
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