Upload
jaime-np
View
216
Download
0
Embed Size (px)
Citation preview
7/25/2019 prefacio_LibroAppDistribJAVA
1/19
See discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/266794630
Aplicaciones Distribuidas en Java conTecnologia RMI
BOOK JANUARY 2008
DOI: 10.13140/2.1.2208.5127
READS
910
2 AUTHORS:
Santi Caball
Universitat Oberta de Catalunya
164PUBLICATIONS 683CITATIONS
SEE PROFILE
Fatos Xhafa
PolytechnicUniversity of Catalonia
502PUBLICATIONS 2,479CITATIONS
SEE PROFILE
Available from: Santi Caball
Retrieved on: 03 February 2016
https://www.researchgate.net/institution/Universitat_Oberta_de_Catalunya?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_6https://www.researchgate.net/profile/Santi_Caballe?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_5https://www.researchgate.net/institution/Polytechnic_University_of_Catalonia?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_6https://www.researchgate.net/profile/Fatos_Xhafa?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_5https://www.researchgate.net/?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_1https://www.researchgate.net/profile/Fatos_Xhafa?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_7https://www.researchgate.net/institution/Polytechnic_University_of_Catalonia?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_6https://www.researchgate.net/profile/Fatos_Xhafa?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_5https://www.researchgate.net/profile/Fatos_Xhafa?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_4https://www.researchgate.net/profile/Santi_Caballe?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_7https://www.researchgate.net/institution/Universitat_Oberta_de_Catalunya?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_6https://www.researchgate.net/profile/Santi_Caballe?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_5https://www.researchgate.net/profile/Santi_Caballe?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_4https://www.researchgate.net/?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_1https://www.researchgate.net/publication/266794630_Aplicaciones_Distribuidas_en_Java_con_Tecnologia_RMI?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_3https://www.researchgate.net/publication/266794630_Aplicaciones_Distribuidas_en_Java_con_Tecnologia_RMI?enrichId=rgreq-6893b80a-abfe-4c42-88be-5ea488742c23&enrichSource=Y292ZXJQYWdlOzI2Njc5NDYzMDtBUzoxNTE4MzAyODk5ODE0NTBAMTQxMzIxMDU3MDMxNA%3D%3D&el=1_x_27/25/2019 prefacio_LibroAppDistribJAVA
2/19
Aplicaciones Distribuidas en Java
con Tecnologia RMI
Santi Caballe y Fatos Xhafa
7/25/2019 prefacio_LibroAppDistribJAVA
3/19
I
Portadilla del ttulo completo sin autores
7/25/2019 prefacio_LibroAppDistribJAVA
4/19
II Programacion Distribuida con Java
Acerca de los autores
SANTI CABALLE es Profesor de la Universidad Abierta de Cataluna (UOC)
desde el ano 2006 siendo profesor-colaborador en esta misma universidad en los
dos anos anteriores. Suambito docente se centra en elarea de la Ingeniera del Soft-
ware tanto en el desarrollo de aplicaciones en entornos distribuidos como central-
izados. Las tecnologas distribuidas y su aplicacion, especialmente para el apren-
dizaje colaborativo virtual, son una de sus areas de investigacion mas activas en la
que ha publicado numerosos artculos en congresos y conferencias internacionales. Actualmente,
participa en diferentes proyectos de investigacion tanto nacionales como internacionales relaciona-
dos con el desarrollo de aplicaciones distribuidas. (http://cv.uoc.edu/scaballe/)
FATOS XHAFA es Profesor Titular de la Universidad Polit ecnica de Cataluna
(UPC). Imparte docencia en los estudios presenciales de la UPC desde el ano 1996
y en los estudios a distancia de la Universidad Abierta de Cataluna desde el ano
2000. En su docencia ha impartido e imparte asignaturas relacionadas con la pro-
gramacion distribuida y el desarrollo de aplicaciones distribuidas. Ha publicado
varios libros de docencia de circulacion nacional. La programacion distribuida es
a la vez uno de los temas de investigacion que le interesa; en este respecto ha participado y participa
en varios proyectos de investigacion nacionales y de la EU relacionado con la programacion dis-
tribuida de gran escala, ha publicado numerosos artculos en revistas y conferencias internacionales
y ha organizado eventos internacionales. (http://www.lsi.upc.edu/fatos/)
7/25/2019 prefacio_LibroAppDistribJAVA
5/19
III
Portadilla con ttulo, autores, universidad y logo Delta
7/25/2019 prefacio_LibroAppDistribJAVA
6/19
IV Programacion Distribuida con Java
Pagina de Copyright
7/25/2019 prefacio_LibroAppDistribJAVA
7/19
V
A nuestras famlias.
7/25/2019 prefacio_LibroAppDistribJAVA
8/19
VI Programacion Distribuida con Java
7/25/2019 prefacio_LibroAppDistribJAVA
9/19
VII
Prefacio
La programacion distribuida, des de sus incios, ha formado parte de los currculums de los estudios
de informatica y hoy en da esta presente no solo en los planes de estudios informaticos sino que
tambien en las ingenieras en general, e incluso en nuevas titulaciones como las bioinformatica.
Ademas, la comunidad de los profesionales que usan la programacion distribuida como su her-
ramienta de programacion ha ido siempre creciendo.
Con Internet y otras nuevas tecnologas, la programacion distribuida ha recibido un nuevo im-
pulso. La propia naturaleza de Internet como una plataforma distribuida ha hecho de la progra-
macion distribuida un paradigma indispensable para el desarrollo de aplicaciones de Internet. Comoconsecuencia, la programacion distribuida ha resultado aun mas importante para los estudios uni-
versitarios.
El libro Aplicaciones Distribuidas con Java explica los fundamentos de la programacion dis-
tribuida con Java. El contenido propuesto tiene como objetivo cubrir las necesidades de las titula-
ciones de ingenieras tecnicas y superior en Informatica en cuanto a asignaturas de arquitectura y
programacion intermedia y avanzada. Por otra parte, el contenido representa un punto de partida
para profesionales informaticos que deseen introducirse en la programacion distribuida. Los con-
tenidos del libro cubren el desarrollo de las aplicaciones distribuidas paso a paso transmitiendo as
la metodologa que el estudiante y el profesional necesitan y pueden aplicar para afianzar los con-
ceptos teoricos. Para ello, se ha considerado el caso de la tecnologa RMI de manera sistematica:
empezando por los conceptos basicos, ejemplos y aplicaciones sencillas hasta llegar a aplicacionescomplejas.
El libro tiene un enfoque eminentemente pragmatico combinando los conceptos teoricos prin-
cipales con gran cantidad de ejemplos. Estos ejemplos se encuentran en forma de graficos para
representar los modelos de arquitecturas expuestas conceptualmente y sobretodo incluye casos re-
sueltos tanto especficos como completos en forma de codigo 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 univer-
sitarios que tienen que afrontar ejercicios practicos como parte del plan de estudios para superar
las asignaturas. Ademas se ha concebido como una obra para el aprendizaje incremental desde
los conceptos basicos hasta los mas avanzados. El libro no presupone ningun conocimiento de la
programacion distribuida si bien presupone algunos conocimientos muy basicos de ProgramacionOrientada a Objetos (POO). Obviamente, en las aplicaciones distribuidas, las bases de datos juegan
un papel importante y por tanto algunos conocimientos basicos de bases de datos y SQL facilitaran
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
7/25/2019 prefacio_LibroAppDistribJAVA
10/19
VIII Programacion Distribuida con Java
ejemplos practicos.
A partir de una lectura secuencial del libro, cualquier lector (estudiante o profesional) podra
avanzar en sus conocimientos de programacion distribuida y su aplicacion en Java de forma grad-
ual. Tambien se facilitara al lector la posibilidad de experimentar a fondo con todos los ejemplos
ofrecidos en el libro mediante la disposicion de material complementario que se encuentra en el
sitio Web de Delta Publicaciones. El objetivo es aprovecharlos altos beneficios pedagogicos que
ofrecen las practicas en este sentido al implicar la instalacion y el uso de las tecnologas necesarias
para experimentar con los ejemplos del libro.
Nuestros agradecimientos a Joan Carles Gimenez Alcober por su ayuda en la preparacion del
material. Este libro se ha beneficiado de las sugerencias de los estudiantes de la asignatura Tecnicas
de Desarrollo de Software de la Universidad Abierta de Cataluna (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
7/25/2019 prefacio_LibroAppDistribJAVA
11/19
Contenido IX
Contenido
Introduccion 1
1 El paradigma de la computacion distribuida 11
1.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.1 Sistemas distribuidos y centralizados . . . . . . . . . . . . . . . . . . . . 12
1.2 Que es la computacion distribuida . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3 Anatoma de un entorno de computacion distribuida . . . . . . . . . . . . . . . . . 15
1.3.1 Capa hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3.2 Capa sistema operativo de red . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3.2.1 Procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.2.2 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.2.3 Comunicacion a redes . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.3 Capa software intermediario (middleware) . . . . . . . . . . . . . . . . . . 18
1.3.4 Capa aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.4 Beneficios de la computacion distribuida . . . . . . . . . . . . . . . . . . . . . . . 19
1.4.1 Escalabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.4.2 Apertura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4.3 Heterogeneidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4.4 Fiabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.4.5 Viabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.5 Costes y soluciones en la computacion distribuida . . . . . . . . . . . . . . . . . . 24
1.5.1 Interoperabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.5.2 Eficiencia y seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.5.3 Vision global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5.3.1 Coherencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5.3.2 Sincronizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5.3.3 Administracion . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5.3.4 Balanceo de carga . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.5.4 Transparencia en la computacion distribuida . . . . . . . . . . . . . . . . . 28
1.5.4.1 Transparencia de acceso . . . . . . . . . . . . . . . . . . . . . . 281.5.4.2 Transparencia de ubicacion . . . . . . . . . . . . . . . . . . . . 29
1.5.4.3 Transparencia de migracion . . . . . . . . . . . . . . . . . . . . 29
1.5.4.4 Transparencia de replicacion . . . . . . . . . . . . . . . . . . . 29
1.5.4.5 Transparencia a fallos . . . . . . . . . . . . . . . . . . . . . . . 29
7/25/2019 prefacio_LibroAppDistribJAVA
12/19
X Programacion Distribuida con Java
1.6 Modelos de computacion distribuida . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.6.1 Modelo Cliente/Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.6.2 Arquitectura de ncapas . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.6.3 Entornos Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.6.3.1 Generadores de electricidad . . . . . . . . . . . . . . . . . . . . 32
1.6.3.2 Generadores de computacion . . . . . . . . . . . . . . . . . . . 33
1.6.3.3 Recursos Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . 331.6.3.4 Grid de ciclos inutilizados . . . . . . . . . . . . . . . . . . . . . 34
1.6.4 Sistemas Peer-to-Peer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.6.4.1 Sistemas hbridos . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.6.4.2 Sistemas P2P puros . . . . . . . . . . . . . . . . . . . . . . . . 36
Test de auto-evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2 Desarrollo de aplicaciones distribuidas 39
2.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.1.1 Por que utilizar la programacion distribuida? . . . . . . . . . . . . . . . . 40
2.1.2 Las 8 falacias de la programacion distribuida . . . . . . . . . . . . . . . . 41
2.2 Desarrollo de aplicaciones distribuidas . . . . . . . . . . . . . . . . . . . . . . . . 42
2.2.1 Partes de una aplicacion distribuida . . . . . . . . . . . . . . . . . . . . . 43
2.2.2 Requerimentos basicos sobre una aplicacion distribuida . . . . . . . . . . . 44
2.3 Tres modelos basicos de la programacion distribuida . . . . . . . . . . . . . . . . 44
2.3.1 Modelo Cliente/Servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.3.1.1 Protocolo de solicitud-respuesta del modelo C/S . . . . . . . . . 45
2.3.1.2 Modelo C/S: terminos y definiciones . . . . . . . . . . . . . . . 46
Los componentes de una aplicacion C/S. . . . . . . . . . . . . . . 47
El serverloop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Interfaces del C/S: interfaces import/export. . . . . . . . . . . . . . 47
C/S: modo de comunicacion. . . . . . . . . . . . . . . . . . . . . . 48
2.3.1.3 Tres tipos de procesamiento de solicitudes de servicios . . . . . 48
Proceso servidor dedicado. . . . . . . . . . . . . . . . . . . . . . . 49Clonaje de un proceso servidor. . . . . . . . . . . . . . . . . . . . 49
Threads procesos servidores ligeros. . . . . . . . . . . . . . . . . 49
2.3.1.4 Clientes ligeros/pesados vs. servidores pesados/ligeros . . . . . . 50
2.3.1.5 Middlewarepara aplicaciones Cliente/Servidor . . . . . . . . . . 50
El ejemplo del middleware ODBC. . . . . . . . . . . . . . . . . . 51
2.3.2 Remote Procedure Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.3.3 Como funciona el RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Similitudes y diferencias entre la llamada de procedimientos locales
y remotos. . . . . . . . . . . . . . . . . . . . . . . . . 53
2.3.4 Aplicaciones distribuidas basadas en RPC . . . . . . . . . . . . . . . . . . 53
2.3.5 Modelo basado en objetos distribuidos . . . . . . . . . . . . . . . . . . . . 542.3.5.1 Arquitectura general para sistemas basados en objetos distribuidos 56
2.3.5.2 Transaccion de objetos remotos en tiempo de ejecucion . . . . . 56
2.3.5.3 The Common Object Request Broker Adapter CORBA . . . . . 57
2.4 Otros modelos de la programacion distribuida . . . . . . . . . . . . . . . . . . . . 58
7/25/2019 prefacio_LibroAppDistribJAVA
13/19
Contenido XI
2.4.1 Multi-threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.4.2 Modelo de comparticion de datos . . . . . . . . . . . . . . . . . . . . . . 58
2.4.3 Modelo basado en paso de mensajes . . . . . . . . . . . . . . . . . . . . . 58
2.5 Proceso de construccion de una aplicacion distribuida . . . . . . . . . . . . . . . . 59
2.5.1 Descomposicion en paquetes/componentes y ciclo en espiral . . . . . . . . 59
2.5.2 Modelo-Vista-Controlador con patron Observador . . . . . . . . . . . . . 60
Observer
yObservable
de Java. . . . . . . . . . . . . . . . . 612.5.3 Factores que miden elexito del proceso de desarrollo de aplicaciones dis-
tribuidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Test de auto-evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3 Java para aplicaciones distribuidas 65
3.1 Paradigma de orientacion a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.1.1 Modularizacion y ocultacion de la informacion . . . . . . . . . . . . . . . 66
Ejemplo 3.1.: Gestion de Empleados de una Empresa. . . . . . . . 67
3.1.2 Clasificacion y abstraccion . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Ejemplo 3.2. Abstraer el modelo de un coche. . . . . . . . . . . . . 70
3.1.3 Herencia y polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
3.1.4 Documentacion y mantenimiento . . . . . . . . . . . . . . . . . . . . . . 74
3.2 Interoperabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.2.1 Interoperabilidad a nivel de plataforma . . . . . . . . . . . . . . . . . . . 75
3.2.1.1 Bytecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.2.1.2 Java Native Interface . . . . . . . . . . . . . . . . . . . . . . . 76
Ejemplo de JNI. . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.2.2 Interoperabilidad a nivel de aplicacion . . . . . . . . . . . . . . . . . . . . 78
3.2.2.1 Capa de presentacion . . . . . . . . . . . . . . . . . . . . . . . 78
3.2.2.2 Capa de negocio . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.2.2.3 Capa de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.3 Soporte al trabajo en red (networking) . . . . . . . . . . . . . . . . . . . . . . . . 79
3.3.1 Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803.3.1.1 OutputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Ejemplo 3.3: Manejo de ficheros. . . . . . . . . . . . . . . . . . . 81
3.3.1.2 InputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Ejemplo 3.4.: Fichero de entrada. . . . . . . . . . . . . . . . . . . 82
Ejemplo 3.5.: Streams. . . . . . . . . . . . . . . . . . . . . . . . . 85
3.3.2 Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
3.3.2.1 Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
3.3.2.2 ServerSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Ejemplo 3.6.: Uso desockets. . . . . . . . . . . . . . . . . . . . . 88
3.4 Soporte al modelo de objetos distribuidos . . . . . . . . . . . . . . . . . . . . . . 89
3.4.1 CORBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893.4.2 Remote Method Incocation RMI . . . . . . . . . . . . . . . . . . . . . . 93
3.5 Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.5.1 Seguridad en applets y aplicaciones . . . . . . . . . . . . . . . . . . . . . 95
Ejemplo 3.7.: Ejemplo de norma y permisos. . . . . . . . . . . . . 98
7/25/2019 prefacio_LibroAppDistribJAVA
14/19
XII Programacion Distribuida con Java
Ejemplo 3.8. Fichero de polizas. . . . . . . . . . . . . . . . . . . . 98
3.5.2 Seguridad en comunicacion en red . . . . . . . . . . . . . . . . . . . . . . 99
Ejemplo 3.9.: Permisos. . . . . . . . . . . . . . . . . . . . . . . . 99
Ejemplo 3.10.: Permisos para todo el codigo. . . . . . . . . . . . . 100
3.6 Tratamiento de excepciones y robustez . . . . . . . . . . . . . . . . . . . . . . . . 101
Ejemplo 3.11.: Gestion de Excepciones. . . . . . . . . . . . . . . . 104
Test de auto-evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4 Introduccion a Remote Method Invocation 109
4.1 Que es RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4.2 Objetivos de RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
4.3 Caractersticas basicas de RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
4.3.1 Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
4.3.2 Serializacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
4.3.2.1 Usos de la serializacion . . . . . . . . . . . . . . . . . . . . . . 114
4.3.2.2 Ventajas y problemas de la serializacion . . . . . . . . . . . . . 114
4.3.2.3 Mecanica de la serializacion . . . . . . . . . . . . . . . . . . . . 116
4.3.2.4 Identificador universal de serializacion . . . . . . . . . . . . . . 117
4.3.2.5 Serializando objetos en RMI . . . . . . . . . . . . . . . . . . . 118
4.3.3 Paso de parametros y valores de retorno . . . . . . . . . . . . . . . . . . . 119
4.3.4 Activacion de objetos remotos . . . . . . . . . . . . . . . . . . . . . . . . 120
4.3.5 Recolector de basura distribuido . . . . . . . . . . . . . . . . . . . . . . . 122
4.3.6 Localizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
4.3.7 Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
4.3.8 Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Ejemplo 4.1.: Permiso de aceptar conexiones. . . . . . . . . . . . . 126
4.4 Arquitectura basica RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
4.4.1 El servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
4.4.2 El cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.4.3 Stubsy skeletons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
4.4.3.1 Evolucion de losstubsy skeletonsen Java . . . . . . . . . . . . 130
4.4.3.2 Proceso de invocacion Cliente/Servidor . . . . . . . . . . . . . . 130
Ejemplo 4.2.: Contenido del archivo stub . . . . . . . . . . . . . . 131
4.4.4 RMI Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Test de auto-evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
5 Caso de estudio RMI basico 135
5.1 Un ejemplo de RMI basico: una calculadora remota . . . . . . . . . . . . . . . . . 135
5.1.1 Desarrollar el objeto remoto . . . . . . . . . . . . . . . . . . . . . . . . . 136
5.1.1.1 La interfaz remota: definicion del objeto remoto . . . . . . . . . 136
5.1.1.2 La implementacion de la interfaz: implementar el objeto remoto 1375.1.1.3 La clase servidora . . . . . . . . . . . . . . . . . . . . . . . . . 137
5.1.2 Creacion del fichero de polizas . . . . . . . . . . . . . . . . . . . . . . . . 138
5.1.3 Desarrollar el cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
5.2 Compilar y ejecutar la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
7/25/2019 prefacio_LibroAppDistribJAVA
15/19
Contenido XIII
5.2.1 Compilar la interfaz remota, servidor y cliente . . . . . . . . . . . . . . . 141
5.2.2 Generar stubs yskeletonscon rmic . . . . . . . . . . . . . . . . . . . . . . 141
5.2.3 Arrancar el registro (RMIRegistry) . . . . . . . . . . . . . . . . . . . . . . 142
5.2.4 Ejecutar el servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
5.2.5 Ejecutar el cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
5.3 Automatizacion de tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
5.4 Despliegue y ejecucion en un entorno real . . . . . . . . . . . . . . . . . . . . . . 146Test de auto-evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
6 Programacion RMI avanzada 151
6.1 Conceptos avanzados de la tecnologa RMI . . . . . . . . . . . . . . . . . . . . . 151
6.1.1 Manejo de excepciones remotas . . . . . . . . . . . . . . . . . . . . . . . 151
6.1.2 Acceso RMI a base de datos con JDBC . . . . . . . . . . . . . . . . . . . 152
6.2 Ejemplo completo: Sistema de voto electronico . . . . . . . . . . . . . . . . . . . 155
6.2.1 El problema de voto electronico . . . . . . . . . . . . . . . . . . . . . . . 155
6.2.2 Configuracion y ejecucion . . . . . . . . . . . . . . . . . . . . . . . . . . 157
6.2.2.1 Configuracion . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
6.2.2.2 Arrancarrmiregistry . . . . . . . . . . . . . . . . . . . . . . . . 158
6.2.2.3 Arrancar servicios del servidor . . . . . . . . . . . . . . . . . . 158
6.2.2.4 Arrancar el cliente: realizar una votacion . . . . . . . . . . . . . 161
6.2.3 Pasos de la implementacion . . . . . . . . . . . . . . . . . . . . . . . . . 163
6.2.3.1 Declaracion de la interfaz remota: MesaRemota . . . . . . . . . 163
6.2.3.2 Implementacion de la interfaz remota: ProgramaMesa . . . . . . 163
6.2.3.3 Implementacion del servidor: MesaServidor . . . . . . . . . . . 165
6.2.3.4 Implementacion del cliente: PantallaCabinaClienteMesa . . . . . 167
6.2.4 Juego de pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
6.3 Listado de ficheros de la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Test de auto-evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
7 Aplicaciones distribuidas con Java: interfaces graficas de usuario con Swing 1797.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
7.2 Capa de presentacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
7.3 Soporte Java a las interfaces graficas . . . . . . . . . . . . . . . . . . . . . . . . . 181
7.4 El paquete Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
7.4.1 Swing basico: componentes graficos habituales . . . . . . . . . . . . . . . 183
7.4.1.1 Ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Ejemplo 7.1.: Codigo completo para crear una ventana. . . . . . . . 184
7.4.1.2 Paneles y organizadores de contenido (layouts) . . . . . . . . . . 185
Combinacion de diferentes organizadores. . . . . . . . . . . . . . . 187
Ejemplo 7.2.: Dar color al fondo de pantalla. . . . . . . . . . . . . 188
7.4.1.3 Etiquetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189Ejemplo 7.3.: Etiquetas JLabel. . . . . . . . . . . . . . . . . . . . 189
7.4.1.4 Campos yareas de texto . . . . . . . . . . . . . . . . . . . . . . 191
Ejemplo 7.4.: Campo de texto. . . . . . . . . . . . . . . . . . . . . 191
7.4.1.5 Botones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
7/25/2019 prefacio_LibroAppDistribJAVA
16/19
XIV Programacion Distribuida con Java
Ejemplo 7.5.: Creacion de un boton. . . . . . . . . . . . . . . . . . 193
7.4.1.6 Gestion de eventos . . . . . . . . . . . . . . . . . . . . . . . . . 195
Ejemplo 7.6.: Gestion de eventos del boton con nombre Aceptar. 196
Ejemplo 7.7. Gestion de eventos del boton de cerrar la ventana. . . 198
Presentacion de mensajes. . . . . . . . . . . . . . . . . . . . . . . 198
Ejemplo 7.8.: Codigo para presentar mensajes al usuario. . . . . . . 200
7.4.2 Swing avanzado: otros componentes gracos . . . . . . . . . . . . . . . . 2037.4.2.1 Programacion sistematica en Swing . . . . . . . . . . . . . . . . 203
Ejemplo 7.9.: Codigo completo de PantallaElectoral. . . . . . . . . 204
7.4.2.2 Combos, casillas de vericacion y botones de radio . . . . . . . 214
Ejemplo 7.10.: Codigo completo de PantallaIntroducirElector. . . . 214
7.4.2.3 Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Ejemplo 7.11.: Codigo completo de PantallaMesa. . . . . . . . . . 221
7.4.2.4 Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Ejemplo 7.12.: Codigo completo de PantallaEmitirVoto. . . . . . . 224
Test de auto-evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
8 Programacion Java con JDBC y el paquetejava.sql 231
8.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
8.2 Capa de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
8.3 Soporte Java al acceso a base de datos . . . . . . . . . . . . . . . . . . . . . . . . 235
8.3.1 Pasos a seguir en el desarrollo de un programa Java con JDBC . . . . . . . 236
8.3.1.1 Creacion de las base de datos e instalacion de los controladores . 237
Para MS Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Para PostgreSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
8.3.1.2 Conexion a la base de datos . . . . . . . . . . . . . . . . . . . . 245
Clase java.sql.Connection. . . . . . . . . . . . . . . . . . . . . . . 248
URL de conexion a la base de datos. . . . . . . . . . . . . . . . . . 248
La clase GestorDiscoConexion. . . . . . . . . . . . . . . . . . . . 249
8.3.2 Realizar una session de trabajo con la base de datos . . . . . . . . . . . . . 2528.3.2.1 Conectarse y trabajar con una base de datos . . . . . . . . . . . 252
La clase java.sql.Statement. . . . . . . . . . . . . . . . . . . . . . 252
La clase java.sql.PreparedStatement. . . . . . . . . . . . . . . . . . 253
Gestion de excepciones. . . . . . . . . . . . . . . . . . . . . . . . 255
8.3.2.2 Control de transacciones . . . . . . . . . . . . . . . . . . . . . . 256
8.3.2.3 Conversion entre tipos de datos Java y SQL . . . . . . . . . . . 258
8.3.3 Sentencias SQL para efectuar operaciones elementales . . . . . . . . . . . 260
La clase Persona. . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
La clase Elector. . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
8.3.3.1 Sentencias executeUpdate para insertar informacion . . . . . . . 267
La clase PantallaIntroducirElector. . . . . . . . . . . . . . . . . . . 267La clase GestorDiscoElector para insercion. . . . . . . . . . . . . . 272
Ejecucion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Resultado de la insercion de un elector. . . . . . . . . . . . . . . . 274
8.3.3.2 Sentencia executeQuery para consultar informacion . . . . . . . 276
7/25/2019 prefacio_LibroAppDistribJAVA
17/19
Contenido XV
La clase java.sql.ResultSet. . . . . . . . . . . . . . . . . . . . . . . 276
La clase PantallaConsultarElector. . . . . . . . . . . . . . . . . . . 279
La clase GestorDiscoElector para consulta. . . . . . . . . . . . . . 282
Ejecucion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Resultado de la consulta de un elector. . . . . . . . . . . . . . . . . 284
8.3.3.3 Sentencias executeUpdate para modificar informacion . . . . . . 284
La clase PantallaModificarElector. . . . . . . . . . . . . . . . . . . 285La clase GestorDiscoElector para modificacion. . . . . . . . . . . . 291
Ejecucion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Resultados de modificar un elector. . . . . . . . . . . . . . . . . . 293
8.3.3.4 Sentencias executeUpdate para eliminar . . . . . . . . . . . . . 295
La clase PantallaBorrarElector. . . . . . . . . . . . . . . . . . . . . 295
La clase GestorDiscoElector. . . . . . . . . . . . . . . . . . . . . . 298
Ejecucion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Resultado de la eliminacion de un elector. . . . . . . . . . . . . . . 299
Test de auto-evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
9 Poniendo las piezas juntas...la aplicacion distribuidaeVotoSeguro 303
9.1 Presentacion del problema de la votacion electronica . . . . . . . . . . . . . . . . 303
9.2 Especificacion y analisis de la aplicacioneVotoSeguro . . . . . . . . . . . . . . . . 304
9.2.1 Descripcion del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
9.2.2 Programa Electorado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Electores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Partidos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Candidatos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Circunscripciones. . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Comarcas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Municipios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Centros. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Mesas electorales. . . . . . . . . . . . . . . . . . . . . . . . . . . 308Impresion del acta. . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Envo de los votos a la Central Electoral. . . . . . . . . . . . . . . 308
Creacion de archivos historicos. . . . . . . . . . . . . . . . . . . . 308
Escrutinio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
9.2.3 Programa Contrasena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Identificacion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Obtencion de contrasena. . . . . . . . . . . . . . . . . . . . . . . . 309
9.2.4 Programa Votantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Identificacion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Votacion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Introduccion de la contrasena. . . . . . . . . . . . . . . . . . . . . 310Seleccion del candidato. . . . . . . . . . . . . . . . . . . . . . . . 310
Confirmacion de la seleccion. . . . . . . . . . . . . . . . . . . . . 310
Despido. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
9.2.5 Resumen Esquematico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
7/25/2019 prefacio_LibroAppDistribJAVA
18/19
XVI Programacion Distribuida con Java
9.2.6 Recursos necesarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
9.2.7 Otros requerimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Extensibilidad deeVotoSeguro. . . . . . . . . . . . . . . . . . . . . 311
Codigos de barras. . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Pantalla tactil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Distribucion del espacio y disposicion de la cabina. . . . . . . . . . 312
9.2.8 Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
9.3 Diagramas de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
9.3.1 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
9.3.1.1 Identificacion de los actores . . . . . . . . . . . . . . . . . . . . 314
9.3.1.2 Diagrama de casos de uso de los requisitos . . . . . . . . . . . . 314
9.3.2 Descripcion textual de los casos de uso . . . . . . . . . . . . . . . . . . . 317
Caso de usoGestion electores. . . . . . . . . . . . . . . . . . . . . 317
Caso de usoGestion de partidos. . . . . . . . . . . . . . . . . . . . 317
Caso de usoGestion de candidatos. . . . . . . . . . . . . . . . . . 317
Caso de usoGestion circunscripciones. . . . . . . . . . . . . . . . 318
Caso de usoGestion comarcas. . . . . . . . . . . . . . . . . . . . 318
Caso de usoGestion municipios. . . . . . . . . . . . . . . . . . . . 318
Caso de usoGestion de centros. . . . . . . . . . . . . . . . . . . . 319
Caso de usoGestion mesa electoral. . . . . . . . . . . . . . . . . . 319
Caso de usoTratamiento escrutinio. . . . . . . . . . . . . . . . . . 319
Caso de usoCalcular participacion. . . . . . . . . . . . . . . . . . 320
Caso de usoIdentificacion y finalizacion. . . . . . . . . . . . . . . 320
Caso de usoIdentificar elector. . . . . . . . . . . . . . . . . . . . 320
Caso de usoComprobar contrasena. . . . . . . . . . . . . . . . . . 321
Caso de usoEmitir voto. . . . . . . . . . . . . . . . . . . . . . . . 321
Caso de usoCrear acta. . . . . . . . . . . . . . . . . . . . . . . . 321
9.4 Arquitectura / diseno de la aplicacioneVotoSeguro. . . . . . . . . . . . . . . . . . 322
9.4.1 Diagrama de entidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
9.4.2 Diagrama de paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3229.4.3 Subsistema Gestion Basica Central Electoral . . . . . . . . . . . . . . . . 324
9.4.3.1 Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
9.4.3.2 Diagramas de jerarquas . . . . . . . . . . . . . . . . . . . . . 325
9.4.4 Subsistema Calculo Votos . . . . . . . . . . . . . . . . . . . . . . . . . . 325
9.4.4.1 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
9.4.4.2 Consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
9.4.4.3 Diagrama de clases . . . . . . . . . . . . . . . . . . . . . . . . 328
9.4.5 Subsistema Actividades Centro . . . . . . . . . . . . . . . . . . . . . . . 328
9.4.5.1 Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
9.4.5.2 Diagrama de clases . . . . . . . . . . . . . . . . . . . . . . . . 330
9.4.6 Diagrama de estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3309.5 Persistencia de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
9.5.1 Descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
9.5.2 Diseno conceptual Diagrama ER . . . . . . . . . . . . . . . . . . . . . . 331
Descripcion de los atributos . . . . . . . . . . . . . . . . . . . . . 331
7/25/2019 prefacio_LibroAppDistribJAVA
19/19
Contenido XVII
9.6 Implementacion de la aplicacion eVotoSeguro . . . . . . . . . . . . . . . . . . . . 333
9.6.1 Declaracion de las interfaces remotas . . . . . . . . . . . . . . . . . . . . 334
9.6.1.1 Interfaz Comision remota . . . . . . . . . . . . . . . . . . . . . 334
9.6.1.2 Interfaz de la Mesa remota . . . . . . . . . . . . . . . . . . . . 334
9.6.2 Implementacion de las interfaces remotas . . . . . . . . . . . . . . . . . . 335
9.6.2.1 Programa Comision . . . . . . . . . . . . . . . . . . . . . . . . 335
9.6.2.2 Programa Mesa . . . . . . . . . . . . . . . . . . . . . . . . . . 343
9.6.3 Implementacion de los servidores . . . . . . . . . . . . . . . . . . . . . . 345
9.6.3.1 Servidor Comision . . . . . . . . . . . . . . . . . . . . . . . . . 345
9.6.3.2 Servidor Mesa . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
9.6.4 Implementacion de los clientes . . . . . . . . . . . . . . . . . . . . . . . . 347
9.6.4.1 Cliente de la comision (mesa electoral) . . . . . . . . . . . . . . 347
9.6.4.2 Cliente de la mesa (cabina electoral) . . . . . . . . . . . . . . . 349
9.6.5 La base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
9.6.5.1 Creacion de la base de datos . . . . . . . . . . . . . . . . . . . . 351
9.6.5.2 La conexion con la base de datos . . . . . . . . . . . . . . . . . 353
9.7 Ejecucion de la aplicacioneVotoSeguro . . . . . . . . . . . . . . . . . . . . . . . 357
9.8 Uso de la aplicacioneVotoSeguro . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
9.8.1 Programa Electorado de la comision central. . . . . . . . . . . . . . . . . 361
9.8.2 Programa Contrasena en las mesas electorales . . . . . . . . . . . . . . . . 362
9.8.3 Programa Votantes en las cabinas de votacion . . . . . . . . . . . . . . . . 364
Test de auto-evaluacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Bibliografa 371
Acronimos 373
Indice de terminos 374