prefacio_LibroAppDistribJAVA

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_2
  • 7/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