0% encontró este documento útil (0 votos)
388 vistas786 páginas

Profesional Java JDK 6

Sun Microsystems ha lanzado la nueva versión de su plataforma Java SE Development Kit (JDK) 6, la versión para desarrollo en Java. Entre las novedades, destaca el soporte para lenguajes dinámicos y de scripting. Además, se ha trabajado en la mejora de las librerías y del compilador en tiempo de ejecución, al igual que se ha mejorado JIT, diversas optimizaciones del estilo visual de Swing y soporte para Windows Vista, dentro de un largo etcétera. El experto equipo de autores nos muestra cómo usar las principales características del último JDK, una fuente inagotable de herramientas como Ant, Unit e Hibernate y ofrece una comprensión completa del desarrollo profesional de Java. Esta obra comienza descubriendo las sofisticadas características del lenguaje de Java, la metodología para soluciones de desarrollo, y los pasos para los patrones útiles. Ofrece una serie de ejemplos reales que se convertirán en una parte esencial de las herramientas de diseñador. Con este enfoque obtendrá la destreza para crear soluciones avanzadas utilizando partes más complejas y matizadas de Java JDK 6.

Cargado por

MauricioCruz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
388 vistas786 páginas

Profesional Java JDK 6

Sun Microsystems ha lanzado la nueva versión de su plataforma Java SE Development Kit (JDK) 6, la versión para desarrollo en Java. Entre las novedades, destaca el soporte para lenguajes dinámicos y de scripting. Además, se ha trabajado en la mejora de las librerías y del compilador en tiempo de ejecución, al igual que se ha mejorado JIT, diversas optimizaciones del estilo visual de Swing y soporte para Windows Vista, dentro de un largo etcétera. El experto equipo de autores nos muestra cómo usar las principales características del último JDK, una fuente inagotable de herramientas como Ant, Unit e Hibernate y ofrece una comprensión completa del desarrollo profesional de Java. Esta obra comienza descubriendo las sofisticadas características del lenguaje de Java, la metodología para soluciones de desarrollo, y los pasos para los patrones útiles. Ofrece una serie de ejemplos reales que se convertirán en una parte esencial de las herramientas de diseñador. Con este enfoque obtendrá la destreza para crear soluciones avanzadas utilizando partes más complejas y matizadas de Java JDK 6.

Cargado por

MauricioCruz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Profesional aE YE: JDK 6 Java JDK 6 W. Clay Richardson Donald Avondolio Scot Schrager Mark W. Mitchell Jeff Scanlon A\NAYA\ mV ULTIMED A Todos los nombres propios de programas, sistemas operativos, equipos hardware, etc. que aparecen en este libro son marcas registradas de sus respectivas compaiifas u organizaciones. Reservados todos los derechos. El contenido de esta obra esté protegido por la ley, que cestablece penas de prisin y/o multas, ademas 4de Tas cortespondientes indemnizaciones por daos y perjuicios, para quienes reprodujeren, plagiaren, distibuyeren ocomunicasen publi- smente, en todo o en parte, una obra literaria, artistica 0 cienifica, © su transformacién, in- terpretacién cjecucién artistica fijada en ‘cualquier tipo de soporte © comunicada a través de cualquier medio, sin la preceptiva aucorizaciéa. Authorized translation from English language edition published by Wiley Publishing, Inc. ‘The Wrox Brand trade dress is a trademark of John Wiley & Sons, Inc. in the United States and/or other countries. Copyright © 2007 by Wiley Publishing, Inc., Indianapolis, Indiana All rights reserved. Edicion espafiola: © EDICIONES ANAYA MULTIMEDIA (GRUPO ANAYA, S. A.), 2007 Juan Ignacio Luca de Tena, 15. 28027 Madrid Deposito legal: M. 27.580-2007 ISBN: 978-84-415-2220-6 Printed in Spain Imprime: Closas-Orcoyen, S. L. Parte I Pensando como un desarrollador de Java Este libro estd dedicado a todos aquellos que realizan sacrifcios diarios, especialmente a los que han hecho el sacrificio fundamental, ‘garantizar nuestra libertad y seguridad Agradecimientos Agradecimientos No habria tenido ninguna posibilidad de hacer este libro sin el apoyo de mi maravillosa esposa, Alicia. Ella y mi hija Jennifer, que tiene muy pocas expectativas sofisticadas sobre mis habilidades literarias, son lo mejor de mi vida y lo tinico que deseo es poder pasar més tiempo con ellas. Os quiero a las dos mas de lo que puedo expresar con palabras. Stephanie, te queremos y nunca te olvidaremos. Me gustaria dar las gracias a nuestro editor técnico, David Parks, por el extraordinario trabajo que hizo con este proyecto (ino tenfas NI IDEA de lo que te esperaba cuando ve meti en este proyecto!). Mis coautores (Donnie, Mark, Scot y Jeff) han soportado un trabajo durisimo en este proyecto. Aprecio cada una de vuestras contribuciones a este libro. Me gustaria dar las gracias a Bob Ellito y Brian Hermann por todo su trabajo y perseverancia al colaborar con nosotros en este proyecto. Me gustaria agradecer a mi direccién, Joe Duffy, Bruce Feldman, Jim Moorhead, Don Heginbotham, Jon Grasmeder y Augie Dunheimer, por su dedicacién a ia simple idea de hacer lo correcto para la gente adecuada. Resulta muy refrescante trabajar en una compafia que sabe apostar por quien lo ‘merece, sin posturas cinicas. Me gustaria dar las gracias a mis padres, Bill y Kay, a mis suegros Stephen y Elanie Mellman, a mi hermana Kary y mi cufado Grayson, a mi hermano Morgan y mi padrastro Dave por haber estado siempre a mi lado. Me gustaria dar las gracias a mis abuelas, Vivian y Sophie por haber sido todo lo que debe ser una abuela. Tambign me gustaria dar ls gracias a los miembros de mi equipo por todo lo que hacen dia a dia por mejorar el mundo: Jon Simasek, Rob Brown, Keith Berman, Mauro Marcellino, Terry “Trepel (ibienvenido de vuelta de Irak!), Marshall Sayen, Joe Sayen, Hanchol Do, Scot Schrager, Don Avondolio, Brian Stearns, Cliff Toma, Mike Clarke, Brad Phillips, Jeff Lane, Nhon Pham, Julia Lee, Vie Fraenckel (ibienvenido de vuelta de la muerte!), Morgan Ruther, Lonnie Haaland, George Burgin y Mark (Mojo) Mitchell. Mact Tyrrell, iba a escribir algo gracioso, pero creo que Jennifer lo expresé mejor: “ZA qué hora va a pasarse el Tio Matt?” WCR En primer lugar, me gustaria dar las gracias a aquellos que me inspiraron en el puesto de ‘trabajo: Swati Gupta, Chi Louong, Bill Hickey y Chiming Huang. Gracias a todos los excelentes profesores de los Departamentos de ciencias informaticas y tecnologia de la informacién del Virginia Tech: Shawn Bohner, Tarun Sen, Stephen Edwards y John Viega. Estoy en deuda con todos mis estudiantes, que me enseftaron mucho a través de su dedicacién, esfuerzo y perspectivas, permitiéndome incorporar su saber de desarrollo en este libro. Mi agradecimiento también a los patrocinadores, voluntarios y organizadores de The Great Cow Harbor Run (Northport, Nueva York) y del Columbia Triathlon (Columbia, MD) or organizar acontecimientos de primera clase en los que me gusta participar, pero, sobre todo, por ayudarme a ser una persona més disciplinada y centrada. Un agradecimiento muy especial a mis amigos, los Wieczoreks, Devaneys, Keanes, O’Donohoes, Howards y Pujols, Por leimo, me gustaria dar las gracias a todos los coautores. con los que he disfrutado trabajando y pasando el rato: Jeff, Mark, Scott y Clay y mis compafieros de trabajo: Mauro Marcellino, Joe y Marshall Sayen, Jon Simasek, Terry Trepel y su super-perro Ontio, Hanchol Do, Keith Berman, Rob Brown, Dave Parks, Brian Stearns, Mike Clarke, Morgan Ruther, Cliff Toma, Matt Tyrrel, la familia Thoma (Brettie-boy, Cindy y Zoe), Vie Fraenckel, Nhon Pham, Julia Lee y mi compafiero de pesca George Burgin. A toda mi familia: mamé, paps, Agradecimientos Michael, John, Patricia, Keil, Jim, Sue, Reenie, Donna, Kelly, Stephen, Emily, Jack y Gillian, Matt y Danielle, sois geniales. A mi esposa Van, a la que quiero més que a nada por todo su apoyo durante el trabajo en este libro. DJA La primera persona a la que quiero dar las gracias es Heather. Durante estos siete afios juntos y-con nuestro marzvilloso hijo de once meses me has hecho el hombre mis feliz de la tierra Gracias por decir, “Si quiero”. También me gustaria dar las gracias a mis padres. En primer lugar, a mi madre, porque siempre ha estado a mi lado, apoyéndome a mi y a todas mis, decisiones. Y a mi padre, porque es el tipo de padre en el que algiin dia espero convertirme. ‘También me gustaria dar las gracias a los miembros de mi familia por su apoyo. A mi hermana y su familia, Fern, Gary e Isabel. Ademés, me gustaria dar las gracias 2 mi familia politica: Joe, Sabina, Robin, Peter, Brandon, Abby, Christiana, Joe Jr, Chris, Ann, Paige y Lian, También debo dar las gracias a mis compafieros de trabajo, que hacen de cada dia algo vinico. Clay, gracias por darme la idea y por hacer que este trabajo siempre fuera interesante. No estamos en el negocio del “uno y del cero”: estamos aqui para resolver problemas. Don, gracias por aguantarme. Dave, gracias por aguantarnos a Don y a mi, Cliff, gracias por hacer todo el trabajo duro, y dale también las gracias a Gerry. También me gustaria dar las gracias a Marty, Melinda, Brett, Mike, Mark, Terry, Mauro, Marshall y Keith. SRS Querrfa comenzar dando las gracias a mi mujer, Elisa, por apoyarme en este trabajo. Los proyectos como éste siempre parece que van a llevar mucho menos tiempo del que en realidad llevan y le agradezco su apoyo en mis optimistas estimaciones del tiempo. Me gustaria dar las gracias a Clay por darme la oportunidad de escribir con él y a Don por guiarme a través del libro. También me gustaria dar las gracias a nuestros editores técnicos y de desarrollo, Dave y Brian, por ayudarme con mis capitulos. Me gustaria dar las gracias a las personas con las que he trabajado de cerca: Keith, Jeff, Jon, Terry, Nhon, Matt, Marshall, Joe, Brad, Carlton, Todd, Bryan, Hanchol, Vic y'a todos con los que he trabajado en el pasado. He aprendido ‘muchisimo con tan s6lo mirar y escuchar. No hay una mejor atmésfera de trabajo que aquella en la que eres cl que menos sabes (todos los dias puedes aprender algo de alguien). Me gustarfa dar las gracias a mis padres. A mi padre por comprender mi interés por la ciencia informatica, y a mi madre por ayudarme a aprender a escribir. Sobre todo me gustaria dar las gracias a dios, ya que escribir este libro ha sido un ejercicio de fe y confianza. Por élkimo, aunque no menos importante, me gustaria dar las gracias a toda mi familia y amigos por apoyarme a cumplir los plazos de entrega del libro y por entender qué estaba haciendo con mi tiempo libre. MWM Estas son las personas a las que quiero ofrecer mi agradecimiento: Dave Nelson por introducirme en el mundo de la programaci6n y por ser la raz6n de estar aqui. A mis padtes y mi familia, A nuestros editores en Wiley, Brian Herrmann y Robert Elliott. Y a Dave Parks, nuestro revisor técnico. A mis profesores més importantes: Alfred Martin y Paul D'Andrea. Y, por iltimo, a Phil Bickel, Eric Anderton, John Tarcza, Keith Obenschain, Robert Burtt, Joseph Kapp, Randy Nguyen, Leo Park, Mark Orletsky, Randy Shine, David Hu, Min Soo Yi y Corey Chang por todo su apoyo. JS Sobre los autores Sobre los autores W. Clay Richardson. Es un asesor de software centrado en soluciones Java giles para procesos empresariales altamente especializados. Ha presentado muchas soluciones Java, desempeftando papeles entre los que estaban el de arquitecto senior, director de desarrollo y gestor de programas. Es coautor de numerosos libros sobre Java, desarrollo con herramientas de fuente abierta y Professional Java. Es profesor auxiliar de ciencias informéticas en el Virginia Tech. Richardson imparte cursos a nivel de licenciado en el desarrollo orientado a objetos con Java. Esté titulado en el Virginia Tech y en el Instituto Militar de Virginia. Donald Avondolio, Ocupa actualmente una posicién directiva como arquitecto y desarrollador en un proyecto de desarrollo empresarial. En su tiempo libre le gusta ir de pesca, ver partidos de baseball y lacrosse, participar en triatlones (aunque no muy bien) y quedarse en casa quejandose sobre cualquier cosa. Scot Schrager. Ha sido asesor en los terrenos farmacéutico, de la gestion de cadenas de suministros y del mercado de seguridad nacional. Ha dirigido y participado en distintos equipos de proyecto que utilizaban Java y técnicas de andlisis y disefio orientado a objetos. Recientemente, Schrager se ha centrado en la arquitectura de aplicacién distribuida con tecnologia J2EE. Mark W. Mitchell. Tiene una amplia experiencia en integracién de aplicaciones empresariales, especialmente integraci6n de servicios Web entre Java y la plataforma Microsoft. Ha desarrollado y desplegado varias aplicaciones Web de importancia vital. Mitchell esté titulado en ciencias informéticas por la Universidad de Virginia. Jeff Scanlon. Es un asesor de desarrollo de software de Virginia. Tiene los certificados de Sun Certified Java Developer y Microsoft Certified Solutions Developer y ha publicado varios arriculos en la revista Software Development. indice de contenidos Introduccion Para quién ¢s este libro Qué trata este libro Estructura del libro Parte I: Pensar como un desarrollador Java Capitulo 1. Utilidades y bibliotecas Java clave Capitulo 2. Herramientas y sécnicas para desarrollar soluciones Java Capitulo 3. Sacar el maximo provecho de los patrones en Java Parte Il: Una comprension amplia de APIs, herramientas y técnicas Java Capitulo 4, Desarrollar interfaces de usuario eficaces con JFC .. Capitulo 5. Dar persistencia a su aplicacién con archivos Capitulo 6, Dar persistencia a su aplicacién con bases de datos... Capitulo 7, Desarollar aplicaciones Web utilizando Ia Arquitectura Modelo 1 Capitulo 8. Desarrollar aplicaciones Web utilizando la Arquitectura Modelo 2.. Capitulo 9, Interactuar con C/C++ utilizando la interfaz nativa de Java... Capitulo 10. EJB 3 y el API Java Persistence Cepitolo 1. Comuniacin ere components Joa y componenies de otras plataformas Capitulo 12. Integracién orientada a servicios Capitulo 13. Seguridad Java Capitulo 14. Empaquetado y despliegue de sus aplicaciones Java, Qué necesita para utilizar este libro Convenciones Cédigo fuente Parte 1, Pensando como un desarrollador de Java 29 1, Utilidades y bibliotecas Java clave 31 Presentacién de Derby. Uso de Derby. indice de contenidos Nuevas caracterstcas de lengusje de Jaa 5 Tipos genéricos Borrado de tipos .. Comodines y variables de Utilizar tipos genéricos Bucle for mejorado. ‘Adiciones a la biblioreca de clases Java ‘Argumentos variable . Conversiones boxing y unboxing « Conversiones boxing... Conversiones unboxing = Contextos vilidos para las conversiones boxing y unboxing Importaciones estiticas Enumeraciones.. Metadatos : AnnotationDesc sn. AnnotationDese.ElementValuePair FALTA AnnotationTypeDoe 39 AnnotationTypeFlementDoc 0 AnnotationValve... 60 Bibliotecas importantes de utilidades Java . Registro Java... El gestor de registro La clase LogRecord Métodos LogRecord. La clase Level La chase Handler La clase Formatter Formateadores habituales.. Crear su propio formateador La interfaz de filtro Creat su propio filtro ErrorManager on Ejemplos de registro Expresiones regulares La clase Pattern . 1a clase Matcher 1a incerfaz. MatchResult Ejemplo de expresién regular Preferencias Java . La chase Preferences Exportar a XML Uso de las preferencias . indice de contenidos 2. Herramientas y técnicas para desarrollar soluciones Java__119 Principios del desarrollo de software de calidad ‘Habitos del desarrollo eficaz de software ‘Comunicacién ... Modelo... Sea agil Sea disciplinado . Rastree las acciones necesatias wn. No tenga miedo de escribir e6digo Piense en el eédigo como un disefio, no como un producto ons LOA Lea mucho .. Construya su proceso desde los cimientos.. Gestione la configuracién... Haga una prueba de unidad de su c6digo Integracién continua .. Mantener iteraciones breves ‘Mida lo que ha conseguido (indirectamente) Siga el rastro a sus problemas Metodologia de desarrollo sn ‘Metodologia en cascada Proceso unificado . Programacién extrema Observaciones sobre la metodologia Escenarios de desarrollo practicos.. Ant Escenario 1 Arquetipos Dependencias transitivas TestNG .. XDoelet.. JMeter, 3, Sacar el maximo provecho de los patrones en Java 163 Por qué son importantes los patrones. cnn 164 Caves para comprender el lenguaje de programacion Java. 164 Caves pata comprender las herramientas utilizadas en el desarrollo Java Ant 11 indice de contenidos TestNG 1166 XDoeket.. 166 Claves para desarrollar soluciones Java eficaces 166 Desarrolle un vocabulario de diseio com 16 ‘Comprenda los principios fundamentales del disefio.. Construir patrones con principios de diseito Diseftar una sola clase Crear una asociacion entre clases Crear una interfaz Crear un bucle de hereneia... Patrones Java importantes mmm Adaptador Target Client. Adaptee Adapter, Modelo Vista Controlador wun Escenario 1: Cambiar el modelo : Escenario 2: Actualizacién cuando cambia ¢l modelo. Escenario 3: Inicializar la aplicacién Modelo .. Vista Controlador.. Comando ... Command CommandManager Invoker Estrategia Estrategia Contexto Composicién .. Component. Leaf sn Composite Resumen | Parte Il. Una comprensién amplia de APIs, herramientas | y técnicas Java 197 4, Desarrollar interfaces de usuario eficaces con JFC 199 Gestores de presentacisn . Borderlayout BoxLayout.. FlowLayout indice de contenidos GridLayout GridBagLayout .. SpringLayout.. CardLayout «. GroupLayout “Mejoras de escritorio de la versién Mustang Gestionar flujos de navegacién en aplicaciones Swing Resumen, 5. Dar persistencia a su aplicacién con archivos 277 Datos de aplicacién Guardar datos de aplicaci6n Modelo de datos de configuracién de ejemplo para una aplicacion - Java Serialization: dar persistencia a grificos de objeto Chases clave... Serializar sus objetos : Ejemplo de configuracin: guardar la configuraci6n de su aplicacién en disco Dar a su aplicaci6n una licencia temporal utilizando serializacién Vincular sus componentes de serializacién a la aplicacion Ampliar y personalizar la seralizaci6n La palabra clave Transient Personalizar el formato de serializacién Versionado . Cusndo wilizar el API Java Serialization . Serializacién a largo plazo JavaBean; XMLEncoder/Decoder. Diferencias de disetio nam XML: el formato de serializacion Chases clave Serializar sus JavaBeans Robustez probada: cambiar os datos internos de una configuracién Posible personalizacién Delegados de persistenci Cuando utilizar XMLEncoder/Decoder.. Serializacién XML flexible: API Java para Uniones XML (JAXB) . Ejemplo de documento XML para el objeto Configuration Definir su formato XML con un esquema XML Definir sus datos: Configuration.xsd Generar clases Java JAXB desde su esquema Grifcos de objeto JAX generados Clases clave del API JAXB ... Montar y desmontar datos XML. Crear nuevo contenido XML con clases generadas JAXB indice de contenidos Utilizar clases generadas JAXB en su aplicacién Implementar la acci6n guard. Implementar la acci6n carga Anotar clases Java existentes para su uso con JAXB Un caso sencillo Anotaciones clave del API JAXB 37 328 330 333 333, 335 Anotar el modelo de datos 337 Generar un XML Schema desde clases anotadas JaxB 345, Peligtos de JAXB 346 Cuéndo utilizar JAXB 351 Lugar de JAXB en JDK su 352, Resumen. seen 352 6. Dar persistencia a su aplicacién con bases de datos 355 Resumen del API JDBC. _ 356 Configurar su entorno 358 ‘Uso del API JDBC en el mundo real ens 358 Comprender el modelo de dos niveles . 358 Comprender el modelo de tres niveles. 358 Utilizar de forma eficaz JDBC 4.0 seme 360 Resumen . 360 Gestionar conexiones 361 DriverManager 361 DataSource 362 Comprender las declaracione 363 Investigar la interfaz Statement Explorar la interfaz PreparedStatement Explorar la interfaz CallableStatement. Utilizar actualizaciones en lote: 371 Utilizar los conjuntos de resultados 374 Investigar los tipos de conjuntos de resultados 374 Ajustar la concurrencia de conjuntos de resultados 375 Establecer la mantenibilidad de los conjuntos de resultados = 375 Utilizar conjuntos de resultados... 376 Conceptos avanzados 379 Anotaciones 379 Gestionar transacciones 381 Hibernate oo oe 7 7 382 Componentes Hibernate 383 Objeto Java Persistence: 384 Archivo de mapeo Hibernate. ee 385 Archivo de configuracién Hibernate 386 API Hibernate... 387 363 365 369 14 Resumen. {indice de contenidos Ejemplo Hibernate Configuracion HibernateUtil.. Book Manager . Ejemplo Hibernate. Inverfaz. Criteria Inerfaz Query 388 388 = 389 390 7. Desarrollar aplicaciones Web utilizando Arquitectura Modelo 1 2Qué es Modelo 1? éPor qué usarlo?.. JSP 2.0, un resumen en Soporte de Servlet 24 Soporte de EL (Expression Language) Reutilizacion de cédigo con archivos ag y -tagx Extensiones de paginas JSP (jspx) .. Protocolo Simple Invocation EL (Expression Language) integrado JSTL 1.1. Un resumen Biblioteca de etiquetas de funcién Acciones SQL = Desarrollar sus visualizaciones de aplicacién Web con JSTL. 1.4 Desarrollar sus visualizaciones de aplicacién Web con JSP 2.0 ve 424 AJAX soon 4Qué es AJAXTage? ePor qué usarlo? eQué es DWR? éPor qué usarlo? El problema 2Qué es Modelo 2? sw ePor qué utilizar Modelo 2? sae Desarrollar una aplicacién con WebWork. 2Qué es la inversion de control y por qué es ail? Arquitectura .. Interceptores ValueStack OGNIL Componentes Ampliar el marco de trabajo para soporear Hibernate. indice de contenidos Prevenir la presencia de sesiones colgantes Definir su modelo de dominio .. Implementar sus asos de uso con acciones Desarrollar sus vistas. Agregar contactos al sistema, Explorar contactos Configurar su aplicacién Adaptarse a los cambios Resumen. Interactuar con C/C++ utilizando la interfaz nativa de Java_479 ‘Una primera mirada a la interfaz nativa de Java Crear el c6digo Java Crear a biblioteca y el c6digo nativo . Bjecutar el cédigo Interfaz nativa Java Tipos de datos... Cadenas en JNE Vectores en [NI sn ‘Cémo usar los vectores Fanciones de vector .. “Trabajar con objetos Java en C/C++ ‘Acceder a campos en JNI Tnvocar métodos Java utilizando JNT Manejar excepciones Java en cédigo nativo Trabajar con referencias de objeto en cédigo nativo Referencias locales: Referencias globales y globales débiles Comparar referencias . Programacién avanzada con JNT. Hilos Java Soporte NIO nativo : Registrar manualmente métodos nativos Reflexién Diseio de sistema, Inverfaz. de usuario .. Resumen. 10, EJB 3 y el API Java P ‘Nuevas prestaciones. JPA (API Java Persistence) Entidades 16 Indice de contenidos Lenguaje de consulta EnityManage! 528 éQué son los beans de sesi6n? éLa muerte de los beans de entidad? 533 Interceptores su. 533 Fjemplos de componentes Web EJB 3 y API Iara Perstence 538 Escenario 1 Escenario 2... Escenario 3 Resumen 11. Comunicacion entre componentes Java y componentes de otras plataformas Excenarios de comunicacién de componentes Lector de noticias: exploracién Web automatizada Una aplicacién bancaria: un cliente EJB/Java EE. Un portal: integrar fuentes de datos y servicios heterogéneos .. Resumen de la comunicacién interprocesal y de la arquitectura bisica de redes Zécalos.. EI API Java Socket Clases clave. Programacién de cliente. Programacién de servidor Reunirlo todo: un servidor Echo Implementar un protocol. Especificacién de protocolos .. Protocolos propietarios ¢ ingenieria inversa. Utilizar protocolos e implementaciones existentes Invocaci6n Remota de Métod08 wm Principios centrales RPC/RMI.. Montar y desmonta Protocolos Registro RMI a Objetos distribuidos Midleware y Java BE... Arquitectura comin de interme Principios basicos de CORBA TDL: Lenguaje de definicién de interfaces ORB: intermediario en peticiones a objetos Servicio de nombres COS : MOP: Internet InterORB Protocol. RMI-IOP: hacer RMI compatible con CORBA .. ‘Cémo convertir un objeto RMI en un objeto RMI-I1OP Cuindo utilizar CORBA ios en peticiones a objetos (CORBA) . indice de contenidos Notificaciones de sistema de archivos distribuido: tun ejemplo de sistema CORBA .. La implementacién 609 613. Fjecutar el ejemplo 618 Web Services nnn 619 Random-Weather.org. 620 RPC independiente de plataforma 622 WS-I Basic Profil vm 623 WSDL (Web Services Language Description) 624 SOAP (Simple Object Access Protoco!) . 626 Protocolos de transporte subyacentes 628 Ejemplo de sitio Web metercol6gico vue 628 Crear un Web Services desde un método Java 631 Eseribir un cliente Web Servic 637 Reunirlo todo: aplicacién de bandeja de sistem: 648 Proyecto WSIT' (Web Services Interoperability Technologies). 654 Resumen en 655 12, Integracién orientada 657 Arquitectura orientada al servicio 657 ‘Tecnologia facilitadora... 658 Extensiones de Gestién de Java ePor qué es importante MX? 659 La arquitectura JMX. 659 Crear y gestionar un MBean estindar 660 Gestion JMX 664 ‘Agente remoto sane 664 Cliente remoto .. sn 665 Monitor de trabajo. 667 Servicio de Mensajeria Java .. 668 aor qué es importante JMS? .. 669 Puntos extremos: colas y temas. 669 Enviar y recibir mensajes 670 Coniguacién del sevdor JMS 670 MessageClient .. 672 IJMSWorkerMBean 673, JMSWorker 673 675 677 IMSAgent. 7 Patrones de integraci6n de sistemas wou Cadena de procesamiento 678 Peticién-Respuesta .. 678 Divisién-Agregado .. 680 Resumen seve 682 indice de contenidos 13. Seguridad Java 683 Arquitectura de Criptogralia Java y Extensin de Criptografia Java (CA/JCE) JCA disefto y arquitectura... Clases de motor Calcular y veificar resémenes de mensaje Firma digital y verificacién de datos. Creacién y gestion de claves digitale. Almacenar y gestionar claves Gestién de algoritmos. Generacién de nimeros aleatorio Firmas digitales XML.. Gestién de eertificados Extensién de Criptografia Java. La clase motor Cipher... KeyGenerator SecretKeyFactory Proteger objetos mediante sellado Caleulo de Cédigos de Aucenticacién de Mensajes Seguridad de programa utilizando JAAS Tdentificacién de usuario. Ejecutar el c6digo con comprobaciones de seguridad Principales Credenciales| Autenticacién de un sujeto Configuracién . LoginContext Autorizacién Resumen nnn 14. Empaquetado e implementacion de Aplicaciones Java 735 Examen de rutas de clase Java Exploracion de archivos Java . Manipulacién de archivos JAR: Examinar el archivo manifiesto bisico Investigacion de applets y JAR Firma de archivos JAR. Examen de la opcién JAR Index... Creacién de un JAR ejecurable Analisis de applets. ‘Anatomia bisica de un applet indice de contenidos 735 756 757 Empaquetado de un applet para su ejecucién.. Examen de la seguridad del applet Exploracién de aplicaciones Web... ‘Examen de la estructura del directorio WAR 737 Comprensién del Descriptor de Implementaci6n WAR... sn 738, Empaquetado de Enterprise JavaBeans 762 762 763 764 Examen de archivos Enterprise El archivo descriptor EAR Escenario de implementacion Lanzarse a Java Web Start Examen del ejemplo Tic Tac Toe «. 766 TicTacToeJNLP. 767 TTTMain java on 769 TITLogic.java 769 TTTGui,java ™m 773 773 773 774 ZA Resumen de Java Web Start Utilizar Ant con archivos Web .. Tnstalacion de Ant Construccién de proyectos con Ant . Resumen.. indice alfabético 779 Introduccion Este libro tiende un puente entre los libros de introduccién més bésicos (del tipo "cémo hacer..") que dominan el espacio Java ("Domina el mundo de Java en 24 horas") y los libros mis detallados, pero tecnol6gicamente no integrados sobre temas como EJB, J2EE, JMX, JMS, etc. La mayoria de las soluciones de desarrollo implican utilizar una mezcla de tecnologias y si tuviéramos que reunir libros sobre todas estas tecnologias, acabariamos con una pila de varios metros. Ademis, el lector necesita poco més que una parte del contenido global de esos libros para resolver sus problemas concretos. Este libro ofrece informacién de base sobre la tecnologia, ejemplos pricticos que utilizan esa tecnologia y una explicacién sobre dénde obtener informacién mis detallada, Pretende ser una referencia profesional para el desarrollador Java Para quién es este libro Este libro es muy itil para tres tipos de lectores: G El lector principiante que ha terminado lecturas de introduecié6n a Java, acceders a soluciones y utilidades de lenguaje Java mis avanzadas, 21 Introduccion El desarrollador Java que necesita una referencia para todos los fines y una primera fuente de referencia al enfrentarse a nuevos problemas Java que estén fuera de su experiencia tecnolégica. El desarrollador que ya ha tenido experiencia con determinadas soluciones pero que, por ejemplo, no desea leer $00 piginas sobre JMS para ver si JMS encajaria en su espacio de solucién. Este libro puede ofrecer a estos desarroiladores limites més reducidos sobre la entrada tecnolégica. Qué trata este libro Este libro ofrece al lector una comprensién de cémo utilizan Java los profesionales para desarrollar soluciones de software. Se abre con una explicacién de las herramientas y técnicas del desarrollador Java, continéa con una explicacién de las partes més sofisticadas y variadas de Java SDK y concluye con varios ejemplos de creacién de soluciones Java reales utilizando los APIs Java y herramientas de fuente abierta. Este libro deja al lector con una visién general bien verminada del paisaje del desarrollo Java profesional, sin dejar de prestar atencién al estudio exhaustivo de APIs concretos. Este libro es el puente entre los textos de lenguaje Java, libros de metodologia y libros especializados en APIs Java. Por ejemplo, cuando haya dominado los principios bisicos del lenguaje Java se encontraré, invariablemente, con un problema, como la creacién de un sitio Web conducido por base de datos que le exige utilizar un conjunto de tecnologtas como JSP y herramientas como Hibernate. Este libro le ofrece tuna solucién conereta que integra a ambos. La siguiente figura ofrece un contexto sobre el alcance de este libro en relacién con otros libros de Java. Al igual que con los libros de introduccién a Java, podefa utilizar este libro como una primera solucién para pasar a libros ‘més en profundidad sobre un determinado tema como patrones, servicios Web o JDBC. Fer de Aden nny 0 | lV ; Lire noch Java : Figura 1.1. 22 Introduccion Estructura del libro ‘Trabajar como un eficaz. desarrollador Java profesional exige dos habilidades bisicas: pensar como un desarrollador Java y tener un amplio conocimiento sobre APIS, herramientas y técnicas Java para resolver un gran mimero de problemas Java. Revisando la estructura del libro puede ver cémo los capftulos le ayudan 2 mejorar estas habilidades. Parte I: Pensar como un desarrollador Java Los desarrolladores Java experimentados reconocen que todos ellos comparten una forma de pensamiento comin. Los primeros tres capitulos tratan con detalle unos temas que le ayudarin a hacerse con esa forma de pensamiento. Capitulo 1. Utilidades y bibliotecas Java clave Un libro de introduccién a Java estudia las utilidades y caracteristicas del lenguaje de programacién Java. Este capitulo parte del punto final de esos libros centréndose en varias caracteristicas clave y sofisticadas del lenguaje Java como expresiones regulares, preferencias y registro Java. ¥ lo que es mas importante, este capitulo ofrece una introduccién a Derby, una base de datos ligera nueva con Java 6 y revisa caracterfsticas de lenguaje introducidas con Java 2 Standard Edition 5.0. Estas funciones incluyen tipos genéricos, metadatos, autoboxing, etc Capitulo 2. Herramientas y técnicas para desarrollar soluciones Java Dar el salto entre ser alguien que conoce el lenguaje Java y convertirse en un desarrollador Java es una transicién muy interesante. Normalmente, los desarrolladores encuentran libros que ensefian el lenguaje y libros que enserian las metodologias. Ademis, los libros de metodologia suelen estar eseritos "a la defensiva’, como si estuvieran defendiendo una tesis 0 prescribiendo una dieta. Estos libros suelen prescribir una adhesin casi ritual a su metodologia, para que el lector no se arriesgue a cometer fallos. Los nuevos desarrolladores pueden encontrar este enfoque bastante agotador porque pocas veces se empieza en una posicidn desde la que se puede dictar el proceso de trabajo de un equipo. Con este libro encontraré una vista de desarrollador centrada en la metodologia y en las herramientas con perspectivas pricticas sobre como dejar que las herramientas hagan el trabajo més sencillo y mis productivo. Capitulo 3. Sacar el maximo provecho de los patrones en Java Los patrones constituyen un valioso recurso para los desarrolladores a la hora de comunicar soluciones a problemas comunes. Sin embargo, como los problemas de software suclen ser muy abstractos, comprender las soluciones comunes (0 incluso el valor del enfoque) puede ser una experiencia abrumadora, Sin embargo, como podré imaginar, hay algunos problemas clave recurrentes por todo el espacio de solucién Java y, por tanto, se constrayen marcos de trabajo y APIs sobre patrones, 23 De esta forma, tener una comprensin utilitaria de los patrones es muy valioso y también inevitable si desea convertirse en un desarrollador Java efectivo. Este capftulo explica la importancia fundamental de los patrones, ofrece una comprensién prictica de los mismos y muestra ejemplos précticos de patrones comunes del mundo Java. Parte Il: Una comprensién amplia de APIs, herramientas y técnicas Java La plataforma Java se ha extendido més allé de ser un simple lenguaje de desarrollo de applets hasta tres ediciones distintas orientadas a tres plataformas diferentes. No sélo la plataforma ha evolucionado para convertirse en un enorme proyecto, sino que también el movimiento de fuente abierta y la comunidad Java han afiadido utilidades y herramientas que ofrecen atin més opciones al desarrollador Web. De esta forma, es ficil que se sienta saturado. Esta parte del libro ofrece una serie de problemas comunes de todo el espacio de desarrollo Java. En cada area se presentaré un problema y una solucién centrada en el problema. Estas soluciones no intentan ofrecer un analisis exhaustivo de todos los APIs implicados, sino un elemento bisico para resolver el problema. A partir de ahi puede pasar a un libro con un andlisis mas especializado. El objetivo principal es que no necesite una pila de tres metros de altura de libros para hacer frente a una sencilla solucién a un problema frecuente de desarrollo. Capitulo 4. Desarrollar interfaces de usuario eficaces con JFC Las Clases Base Java (Java Foundation Classes 0 JFC), a las que se suele hacer referencia como Swing, constituyen la funcionalidad para construir interfaces de usuario y aplicaciones de escritorio. Como estas clases suelen componer la mayorfa de los ejemplos légicos en los libros de introduccién a Java, tiene sentido empezar con un ejemplo Swing. Sin embargo, este capitulo cubre Swing con mis detalle, incluyendo algunos temas avanzados como administradores de disefio (Layout managers) y Java 2D. Capitulo 5. Dar persistencia a su aplicacién con archivos Una de las cosas més importantes que debe poder hacer cualquier aplicacion es dar persistencia (es decir, guardar) su estado. En este capitulo descubrirs técnicas para implementar las funciones de guardado y restauracién utilizando dos métodos distintos, la serializacién de objetos de Java y el API Java para Uniones XML (JAXB) Capitulo 6. Dar persistencia a su aplicacion con bases de datos Tradicionalmente, los archivos se utilizan para compartir datos de modo “Single-threaded”, es decir "de un solo proceso (un usuario cada vez). Si hay que compartir datos a través de toda ‘una empresa se utiliza una base de datos. En este capitulo aprenderé las funciones mas avanzadas del API JDBC (Conectividad de bases de datos o Java Database Conectivity) 4.0. Introduccion ‘Ademés, este capitulo estudia uno de los marcos de trabajo de persistencia de objetos més populares (y la base para el desarrollo de la nueva especificacién EJB 3.0):-Hibernace, Capitulo 7. Desarroliar aplicaciones Web utilizando la Arquitectura Modelo 1 Los que se han dedicado desde hace tiempo al desarrollo de aplicaciones Web, reconocen que cl paradigma centrado en la pagina, también conocido como Arquitectura Modelo 1, se ha utilizado en muchas plataformas tecnolégicas (ASP, Cold Fusion, Perl, etc.) para desarrollar aplicaciones Web. Java soporta este paradigma con sus especificaciones JSP (Java Server Pages) y JSTL (Java Standard Tag Library). En este capitulo podra conocer mejor estos marcos de trabajo y otras practicas para el desarrollo de aplicaciones Web dentro de la Arquiteetura Modelo 1 Capitulo 8. Desarroliar aplicaciones Web utilizando Ia Arquitectura Modelo 2 Si hay en juego aplicaciones Web, se han reconocido algunas debilidades en el enfoque centrado en Ia pigina de la Arquitectura Modelo 1. En este capitulo obtendrs mas informacién sobre esas debilidades y sobre cémo dieron lugar a la Arquitectura Modelo 2, centrada en componentes. Vera cémo el uso un marco de trabajo de componentes como WebWork le permite integrar ficilmente otros componentes como Hibernate. Capitulo 9. Interactuar con C/C++ utilizando la interfaz nativa de Java ‘A menudo, tiene componentes de aplicacién que, desafortunadamente, no estén escritos en el lenguaje de programacién Java, sin reducir por ello la necesidad de tener acceso a esos componentes desde su aplicacion. La solucién a este problema es la Interfaz nativa Java (JNLO Java Native Interface), Este capitulo explica los secretos de JNT y varios posibles problemas. Capitulo 10. EJB 3 y el API Java Persistence Enterprise JavaBeans (EJB) es una tecnologia de componentes distribuidos de Java y la pieza clave de la plataforma Java 2 Enterprise Edition. EJB 3.0 representa una significativa mejora en el lenguaje Java potenciando el paradigma POJO (Plain Old Java Object o Antiguo Objeto Java Plano) con el API Java Persistence para ofrecer una persistencia de objetos fiable, robusta y transparente. Este capitulo explica la especificacién EJB 3 y el API Java Persistence y demuestra su utilidad para desarrollar soluciones Java Capitulo 11. Comunicacién entre componentes Java y componentes de otras plataformas Aunque el RMI ha demostrado ser una buena solueién para la comunicacién de Java a Java, sigue habiendo muchas necesidades para acceder (0 dar acceso a) componentes de otras plataformas. Esto es especialmente cierto en el caso de la plataforma Microsoft .NET. Este capfuulo explica los principios bésicos de la comunicaci6n interprocesos, explica varias wenicas para la comunicacién interprocesos y culmina en un ejemplo que utiliza servicios Web. Capitulo 12. Integracién orientada a servicios Al realizar integraci6n de aplicaciones empresariales de componentes distribuidos por varios equipos y plataformas suele ser necesario que pueda distribuir el trabajo en muchos pasos distintos. Hay dos APIs especialmente titles para ello: JMS (Janu Message Service) y JMX (Java Management Extensions). En este capiculo vers el niicleo de estos dos APIs unidos para ofrecer una arquitectura mucho mas dil. Capitulo 13. Seguridad Java La seguridad de la informacién es una parte fundamental en el desarrollo Java. En este capitulo veré cémo asegurar su aplicacién utilizando JAAS Java Authorization and Authentication Service) y como asegurar sus datos utilizando JCE Java Cryptography Extensions). También se detala en este capstulo el soporte para firma digital XML introducido cen Java 6, muy stil para la creacién de seguridad para servicios Web. Capitulo 14. Empaquetado y despliegue de sus aplicaciones Java Una de las cosas més delicadas y dificiles del desarrollo de aplicaciones Java, sean aplicaciones ‘empresariales o de empresa, es empaquetar y desplegar su aplicacién, Hay toda una multitud de descriptores de despliegue y de reglas de empaquetado en muchos de los APIs Java, entre ellos JARs, WARs, EARs, ete, A menudo, los libros suelen ofrecer una idea bastante precipitada de cada uno de estos formatos y especificaciones. En este capitulo aprenderé varios de los mecanismos de empaquetado que existen en Java y descripciones sobre los descriptores de despliegue de cada uno de esos mecanismos. Qué necesita para utilizar este libro Este libro se basa en Java 2 Standard Edition version 6. Puede encontrar stil tener un IDE (Entorno de desarrollo integrado) de su eleccién (Eclipse es uno muy bueno y popular: www.eclipse.org,) Ademés, dependiendo del capitulo, puede tener que utilizar un servidor de aplicaciones como JBoss (ww . jboss.org) o Tomeat (http: // jakarta. apache .org/ tomcat). En cada capitulo se indicaré la necesidad de descargar un servidor de aplicaciones y de otro tipo de descargas (como APIs). Convenciones Para ayudarle a sacar el mayor partido al texto y saber donde se encuentra en cada momento, a lo largo del libro utilizamos distintas convenciones: Introduccion Q Las combinaciones de teclas se muestran en negrita, como por ejemplo Control-A. Los botones de las distintas aplicaciones también se muestran en negrita. 1D Los nombres de archivo, URL y cédigo inch letra monoespacial. fo en texto se muestran en un tipo de G Los mend, submentis, opciones, cuadros de dislogo y demis elementos de la interfaz de las aplicaciones se muestran en un tipo de letra Atal. 1 El cédigo se representa de dos formas: 1 En los ejemplos de c6dligo, se resalta el eédigo nuevo e importante sobre un fondo gris. 1D El resale gris no se utiliza en e6digo de menor importancia en el contexto actual que se ha mostrado antes. Private Sub mnullelpAbout_click (ayval Byval © As System.fventArgs) Hand fender Ae Object, _ '5 mnulleipabout .C1Tcke Dim objabout As New About: ‘ebjabout. cnownialog(He) Cédigo fuente Para desarrollar los ejemplos, puede optar por introducir manualmente el c6digo o utilizar los archivos de e6digo fuente que acompafian al libro. También puede descargar el cédigo fuente utilizado en el sitio Web de Anaya (http://www AnayaMultimedia.es, seccién Atencién al cliente, opcién Complementos). 27 / Utilidades y bibliotecas Java clave Las dos versiones principales anteriores de JDK han visto algunos eambios importantes. JDK 5 introdujo nuevas utilidades a nivel de lenguaje, algo que no ocurria desde la primera publicacién de Java. Algunas de las utilidades més importantes aftadidas a lenguaje son los tipos genéricos (0 parametrizados), las enumeraciones y los metadatos. Con JDK 6, una de las mayores. ‘oportunidades es la inclusién de wna base de datos ligera conocida como Derby, del proyecto Apache Database. La primera mitad de este capitulo presenta Derby y revisalas nuevas uilidades de lenguaje de IDK 5. La segunda mitad detalla determinados paquetes de utilidades clave dela rama java.util de a biblioteca de clases tities para la programacién profesional en Java. | Presentacion de Derby ‘Una novedad de Java 6 es una base de datos ligera denominada Derby, un producto del proyecto 5 Apache Database. Derby ¢s una base de datos relacional y.transaccional y ocupa muy. poco | sspacio de disco. Con la versin del 13 de julio de 2006 de Java 6 JDK, Derby se instala (por Capitulo + defecto) en C:\Archivos de progxama\Java\jdk1 .6..0\db ¢ incluye las bibliotecas centrales, programas de demostracién y una base de datos de ejemplo. Derby comenz6 sus pasos como CloudScape, un producto que IBM adquiri6 de Informix. En 2004, IBM decidié convertira CloudScape en fuente abierta,transformandose en un proyecto embridn de la Fundacién Apache Software con el nombre de Derby. Las ventajas reales de utilizar Derby son sus mfnimas necesidades de administraci6n y el pequetio espacio que ocupa en disco. Las bases de datos son ‘pequefias, unas escasos 2 MB para una base de datos bisica. La minima necesidad de administracin le permite, como desarrollador, crear y utilizar facilmente bases de datos en cédigo. Esto acelera el desarrollo. Y este desarrollo se hace mucho mas fécil porque Derby sc celalmacenamiento de una base de datos archivada en un archivo JAR. lo.quele- permite distribuir simplementeelarchivo JAR. ‘Como Derby es un tema bastante complicado, esta seccién sélo pretende servir como una introduccidn a Derby y sus utilidades, utilizando la herramienta de linea de comandos inciuida y una breve exploracién del uso del controlador de JDBC. Derby volverd.a ser estudiado més adclante _ Uso de Derby ‘Como se ha dicho, Derby se instala automaticamente como parte del JDK. Derby ofrece una herramienta de linea de comandos llamada i, una abreviatura de "herramienta de scripting JDB interactiva", Esta herramienta ofrece un modo de conectarse y manipular bases de datos Derby. Tiene que tener los siguientes archivos JAR en su carpeta de clases antes de utilizar esta herramienta. El archive derby . jar contiene los controladores de JDBC y derbytools. jar contiene la herramienta 13 ens c:\archivos de programa\Java\jaki.6.0\db\11b\derby jar Ei\Archives de programa\Java\jake 6 -0\ab\1ib\derbytoole. jar Cuando haya configurado su ruta de clase, ejecute la herramienta y conéctela a la base de datos de «ejemplo (toursdb) incluida con Derby: c:\sjava_org.apache.derby.toots.i4 {j version 10-2 ijs" connect \jabe :derby :¢:\Progran Files \Java\3die1.6.0\db\deno\databasee\toursdb’; No olvide ineluir el punto y comaal final de un comando. Silo hace, ij parecerd que esta procesando un comando, pero no es asf. Esto permite introducir facilmente comandos multilineas como para la creacién de tablas o declaraciones de seleccién complejas. Estos puntos y comas son exclusivos de i y no pasan a la base de datos. La herramienta funciona como es de esperar, emitiendo una declaraci6n select para extraer un lisa parcial de datos de a abla de ptses (counties) (ana tabla que forma parte del ejemplo toursdb): 32 Utilidades y bibliotecas Java clave AJ> select + from countries ‘where country Like ‘At'; counray Ice}rEecrow Afghanistan [A®|Asia Albania |At| Europe Algeria [bz|woren ative: Anerican Samoa |AS|Pacific Telands ‘Angola, Jao|atrica Argentina | AR|South America Armenia |AM| Europe Australia |aUlAustralia and New Zealand austria [at|Burope Azerbaijan |Ag}Central Asta Para crear una nueva base de datos desde ij, incluya el parimetro create=true en el guidn de conexién. Como ya esté coneetado con toursdb, desconecte antes. La declaracién select le indicara que esta desconectado. Entonces emita la nueva declaracién connect: 15> selects from countries; 15 ERROR: Unable to establieh connection f3z connect’ '}dborderby :DerbyrestDD,createntrue’ El nombre de la base de datos (en este caso DerbyTestDB) se crea como un subdirectorio del directorio desde el que inici6 la herramienta { j. La base de datos aparece en el disco en el directorio C: \DerbyTest DB. Explorar este directorio es sélo cuestion de cusiosidad (nunca deberia tener que modificar ningsin archivo de este directorio, incluyendo el archivo service.properties con el que puede parecer tentador ponerse a juguetear). La creacién de tuna base de datos también erea un archivo derby . 10g en el mismo nivel que DerbyTestDB, asi que elarchivo, en este caso, ser C: \derby .10g, Este archivo de registro es un registro de errores y es itil examinarlo para obtener mis informacién sobre los problemas que inevitablemente surgirén durante el desarrollo real. Si crea varias bases de datos, todas compartirin este archivo de error. Ahora que tiene una nueva base de datos, cree una tabla, inserte algunos datos y haga un pedido de recuperacién de informacién: jp create ‘table zipcodes (eipeode varchar(s),° city varenar(20), state varenar(2)) > 0 rows ingerted/updated/deleted AJ> Insert into stpeodes: values (122030, ‘Fairfax’, ‘VA'); 1 Yow inserted/updated/deleted Aj> Insert into sipcodes values ('22003’, ‘Annandale’, VA‘): 1 Fow inserted/updated/deleted AJ> insert into zipcodes values '("90210", ‘Beverly Hille", CA’); 2 row inserted/updated/aa: Aj> select * from sipcodes; ziece|crry |stac oe 22030|Pairtax [VA 22003|annandale |VA 0220|Beverly Mille [cA 33 Capitulo 4 3 rove selected Age Por defecto, la ejecucién automética (autocommit) esté activada (on) desde la herramienta i, as{que no tiene que emitir el comando commit ; para guardar los cambios hechos en la base de datos. Puede controlar la ejecucién automética emitiendo el comando autocommit on; 0 autocommit off. Escriba exit ; para salir de la herramienta 1} Ahora que ha visto los principios bésicos del uso de la herramienta i, eche un vistazoa un «jemplo de peticién de recuperacién de informacién de su base de datos recién creada desde un programa Java uilizando el controlador de JDBC. Como se utiliza el mecanismo JDBC estindar, no habrs ninguna sorpresa con las declaraciones importantes: import java.sqi-connection; Amport Java.eqi/Drivermanagar; import java.eqi Reuleset; import java.eql -SQLExcept ion; import Java eqi statement; import java.util. Properties; public clase DerbyTestpaclient { public static void main(String! 1 axgs) DerbyPestDRClient teatClient = new DerbyTestDsciient (); restclient.ehowzipcodea () + Elmétodo showZipCodes abre la conexidn y realiza la consulta. El controlador utilizado es org. apache . derby. jdbc. Enbeddedbriver. Derby también incluye un Clientbriver para conectarse a Derby en modo de red, donde Derby ejecuta un servidor de red que garantiza un enfoque cliente/servidor para utilizar Derby: public veld showZipCodes () ty t String driver = "org.apache-derby.jabe.RmbeddedDriver"; Class. fortane (river) -newinstance() ; Connection conn = null; conn = DriverNanager .getConnect Lon (*jdbe:derby:DerbytestDB:); Statement ¢ = conn.createstatement (); Resultset rs = s.executeguery ("SELECT city, atate, zipcode FROM zipcodes"); white(rs-next (0) { System.cut -printin("ciey + " + ra.getstring(2)); Systen.out .printin("state + * + re-getstring(2)), System-out .printin(*zipcede: "+ ra.getSering(3)); system -out -printin(); , ¥s.close(); s.close(); conn. close (); } eaten (exception e) { Utilidades y bibliotecas Java clave system.out.printin(*Bxcoption: "+ a); eprintstacktrace (); } } Estas la salida del e6digo anterior: e:\sJava_ DerbytestpBclient city: Fairfax state : VA Bipeode; 22030 city + Annandate State : VA Zipcode: 22003 city + Beverly Hille State : CA Zipcode: s02i0 Derby es un prometedory ambicioso proyecto y sigue implementando mis utilidades. Puede ‘mantenersc al dia en su desarrollo en la direccién at tp: //db. apache .org/derby. Nuevas caracteristicas de lenguaje de Java 5 En Java 5 sc introdujeron varios elementos sintécticos muy tities, Todas estas utilidades se soportan con un compilador actualizado y se traducen en un cédigo de bytes Java ya definido, lo ‘que significa que las maquinas virtuales pueden ejecutar estas utilidades sin necesidad de ninguna actualizacién: Tipos genéricos: Un modo de hacer clases seguras respecto alos tipos, escritas para funcionar con cualquier tipo de objeto arbitrario, como por ejemplo reducir una instancia de una coleccién para que albergue un tipo de objeto especifico y eliminar la necesidad de moldear objetos al extraer un objeto de la coleccién. I Bucle for mejorado: Una version mas limpia y menos tendente a errores del buck para su uso con iteradores. _Argumentos variables: Soporte para el paso de un ntimero arbitrario de pardmetros a un método. @ Boxing/unboxing: Soporte de lenguaje directo para la conversién de primitivos entre pos primitivos y sus tipos de referencia (como int ¢ Integer). 'D_Enumeraciones seguras respecto a los tipos: Sintaxis impia para la definicién y uso de caumeraciones, soportada anivel de lenguaje. Importacién estética: Capacidad para acceder a miembros estéticos de una clase sin tener que calficarlos con un nombre de clase. 35 Capitulo 1 2 Metadatos: Acoplados con nuevas herramientas desarrolladas por terceros, ahorra alos desarrolladores el esfuerzo de escribir c6digo estereotipado generando automiticamente el cédigo. Estas utilidades actualizan el lenguaje Java para incluir muchas formas alas que estén acostumbrados los desarrolladores en otros lenguajes. Facilitan escribir c6digo Java y lo hacen mucho més limpio y répido. Aunque decidiera no valerse de estas utlidades, es esencial familiarizarse con ellas para leer y mantener el cédigo escrito por otros desarrolladores. Tipos genéricos Java introdujo los tipos genéricos o parametrizados. Los tipos genéricos le permiten escribir una clase que puede operar en cualquier tipo, pero ese tipo especifico no se especifica hasta la declaracién de una instancia dela clase. Como el tipo no se especifica como parte de la definicign de clase, la clase se converte en genérica, ganando la capacidad de trabajar en cualquier tipo cespecificado. El ejemplo més obvio, y un uso genial de los tipos genéricos, son las clases de coleccién. La clase ArrayList, por ejemplo, se escribi6 para albergar, simplemente, Object. Esto significa que los objetos pierden su tipo al ser afiadidos a ArrayList y se necesita un moldco al acceder a un elemento de ArrayList. Sin embargo, el c6digo que utiliza una versin genética de ArrayList puede decir "quiero que ArrayList sélo albergue Strings”. Esto afiade una seguridad respecto alos tipos adicional a Java porque, si se afiade otra cosa que no sea un Stringa la coleccién, el compilador lo aceptard. También significa que no se necesitan més moldeos al acceder a elementos: el compilador sabe que sélo alberga Strings y generard un error silos elementos se tratan de otra forma que como un String. Especificar String como el tipo parametzizado es tan facil como colocar el tipo entre corchetes: ArraybisteString> Matofstrings; // es nuevo en 1a sintaxie String stringdbject Listofstrings = new Arraybistestring>()) // eo mevo on 1a sintaxis Listofstrings.addinew string(*Test string"); // Solo puede pasar cbjetos string stringobject - Listofstringe-get (0); // mo se necesita moles Los tipos genéricos también son conoeidos como tipos parametrizados, donde un tipo es el pardmetro, Como puede ver en el ejemplo anterior, String es el pardmetro de tipo “formal”. Se debe usar este mismo tipo parametrizado al instantaneizar el tipo paramettizado. ‘Como uno de los objerivos de las nuevas utilidades de lenguaje de Java 5 era no cambiar el conjunto de instrucciones de Java, los tipos genéricos son, bésicamente, un caramelo sintéctico, Alacceder a elementos de ArrayList, el compilador inserta automaticamente los moldeos que no tiene que escribir. También se pueden utilizar los tipos de datos primitivos como un tipo paramettizado, pero debe saber que esto origina costes de boxing y unboxing porque se Convierten implicitamente en y desde Ob3 ect. No obstante. hay ventajas claras en términos de aumento de la seguridad respect a los tipos y de la legibilidad del programa. 36 Utilidades y bibliotecas Java clave Borrado de tipos Un tipo genérico en Java se compila en un solo archivo de clase, No hay versiones independientes del tipo genérico para cada tipo paramettizado formal. La implementacién de los tipos genéricos utiliza borrado de tipos, lo que quiere decir que el tipo parametrizado real se reduce a Object. Curiosamente, la decision de utilizar borrado, aunque no exige ningiin cambio en el digo de bytes, hace que el mecanismo de los tipos genéricos cojee en su determinaci6n de mantener una definicién de tipos fuerte. Lo veremos pronto. Sirvamonos de un ejemplo, este cédigo no compilaré: interface shape ( void draw(}7 class Square implenei public string name; Shape public square() ( name = "Square"; public void éraw() ( system.out printin(*Drawing square"); ) public class Rrasurezxample ( public static void drawchape(? shape) { shape.draw(); public static! void main(string argel 1) Square square = new sqvare(); ) Elcompilador emite el siguiente error: Rrasurezxample.java:22; cannot find symbol sysbol : method draw() location: class Jave.lang-object ‘Shape draw() Sireemplaza el método drawshape por el siguiente, el compilador estats encantado de compilar el programa! public static void drawsnape(T shape) 37 Capitulo 4. systen.out printin(*Hashcode: * + shape-hashcode()); ePor qué esta discrepancia? Es el resultado del borrado de tipos. El método hashCode pertenece a Object, sin embargo, el método draw sélo pertenece a los objetos de tipo Shape. Este pequefio experimento demuestra que el tipo parametrizado se reduce aun Object. Fl siguiente ejemplo muestra e6mo se relaciona esto con el uso de una clase genérica con distintos tipos parametrizados. Empiece con una nueva clase genérica encargada de albergar un elemento de datos de tipo arbitrario: public class Custosiiolder 1 B storearten; public E getitem() return(storedrtem) ; public void puctten( ten) systen.out.printin(*adding data of type * + ikem.getclass() «getName ()) Storediten = Sten; ) Por convencién, las letras sueltas se utilizan para parémetros de tipo formales, normalmente E para elemento yT para tipo. Agregue un método principal a esta clase: public static void main(String erge{ 1) custontfolder stringHolder = new CustonHolder() 7 Custoniclder objectHolder = new Customolder-object>(); String etr ~ new string(*test string"); string str2; etringlolder.putrtem(str) ; objectHolder -putteem(str) ; aer2_» atringhiolder-getttem(); T/stzd + objectHolder-getivem() 7 ) Mire las dos siltimas lineas. Extraer un elemento de stringHolder y asignarlo a una cadena esté bien. Sin embargo, si quita el comentario de la segunda linea (que intenta acceder ala misma cadena de object Holder), obtendré el siguiente error de compilador: e:\sjavac custontt Cast ontoider. Jav: incompatible types found: java-iang, object required: java.lang.string java 38 Utilidades y bibliotecas Java clave ete? = objectHolder.getitent!? Esto es logico porque el pardmetro de tipo real (en este caso String 0 Object) dicta el tipo. Si agrega un String a objectHolder se almacena como un Object. Si intenta asignar el object al String (enla llamada a objectHolder.get Item), necesitaré un moldeo explicito enel ipo String, Debido al borrado de tipos se puede asignar una referencia de clase genérica a una referencia de su versi6n no genérica (legada). De esta forma, este cédigo se compila sin errores: Vector olavectors Vector intVector; olavector = intvector; // valid Sin embargo, aunque no es un error, asignar una referencia a una clase no referencia para hacer referencia a una clase genérica dard origen a una advertencia de compilador no comprobada. Esto sucede si un borrado cambia los tipos de argumento de un método o de una asignacién de campo a un tipo raw siel borrado cambia el ripo de método 0 campo. Como ejemplo, el siguiente programa origina las advertencias que aparecen tras él. Debe pasar ~X1int :unchecked de la linea de comandos a j avac para ver las advertencias especificas: import java.util.+; public class uncheckedsxanmple { public void processintVector (Vector v) { J/ realizar aigin procesado en 61 vector public static void main(string ager 1) Vectorcinteger> intVector = new Vector(); Vector oldvector = new Vector(); Uncheckedixample ue = now UncheckedExample() J/ Beto esté pernitide - olavector = intvector; 77 eto origina una advertencla no comprobada inevector = oldvector; U/ Beto esta permitiaa Ue. processInt Vector (IntVector) + 77 Beto origina una advertencia no comprobada Ue .procegaine Vector (olavector) + ) Si se intenta compilar el cédigo anterior se generan estas advertencias de compilador: UncheckedBeanple.java:16: warning: unchecked ‘atmignment: Java.util.Vector to java.util. Vectorejava. lang. Integer> Capitulo 4 intvector = olavector; // eto origina una advertencia no comprobada Uncheckedgxample.java:16: warning: unchecked method invocation: processtntVector (java-util-Vector) in Uncheckedexample ta applied to (java.util Vector) ‘ue processiatVector (oldvector); // Esto origina una advertencia no conprobada 2 warnings Comodines y variables de tipo vinculado ‘Como no puede utilizar Customiiolder- como si fuera un supertipo de Custoniolder String>, no puede escribir un método que procese CustonHiolder y Customifolder. Sin embargo hay una forma especial de conseguitl. ‘Como parte de la sintaxis de tipos genéricos, se introdujo un comodin que, al ser utilizado, significa basicamente "cualquier parimeteo de tipo”. Vuelva a consultar el ejemplo anterior y vers ‘cémo se utiliza el comodin, un simple signo de interrogacién. Coja la clase Custoniolder y agregue unos nuevos métodos a un nuevo main, de esta forma: public static void processiiolderobject (Custoniiolder2 holder) opjece obj = nolder.getitem(); System.out.printin(+rtem ta: * + obj); public static void processolderstring (Custontlolder2 holder) "piece obj = notder.getrten Syptom.out.printin(*item ie: * + obj); public static void processHolderwildcard (custonsiolder2 atringlolder - new Customiolder2() ; Customiolder2 objectiolder = new Customioldera(); String str = new String(*test ating"); String stra; stringltolder.putreem (sez) 1 SbjectHolder putieem (str) / /{processHolderdbject (string¥older) ; processiiolderdb3ect (objectiiolder) ; 40 Utilidades y bibliotecas Java clave processHolderstring(stringHolder) ; //processHolderstring(objectitolder) ; processiolderWildcard (stringHolder) ; processHolderlildeard(objectolder) ; , Las dos lineas comentadas impedirén que se compile el programa. comentadas, el compilador emitiria estos errores: estas dos lineas no estuvieran e:\sJavac Custoniiolder2.java Custontolder2.java:4s processiiolderdbject (Custontolder2) in ¢ Ustouolderz cannot be applied to. (Customolderz) processHolderobject (stringitolder) ; custonHoider2.java:52 processifolderstring (Custonilolder2) in ¢ Uetoniolder2 cannot be applied to’ (CustomHolder2) processHolderstring (objectiolder) ; Esto le recuerda que el tipo de parsmetro utilizado debe coincidir con el parémetro de tipo formal. Sin embargo tenga en cuenta que tampoco la linea que llama a processHolder-Wildcard esté comentada. Esto es asf porque utilizar el comodin le permite pasara stringHolder oa objectHolder. Puede leer el tipo de parsmetro de método CustoneHolder2 como un "CustomHolder2 de cualquier tipo" frente a“de tipo Object" o "de tipo String’ ‘Un tipo de parmetro puede restringirse a determinados tipos a través de lo que se denomina un vinculo. Se puede aplicar un vinculo a un parémetro de tipo normal oa un comodin. Vuelva al ejemplo Shape de este mismo capitulo, que define una interfaz Shape: amport java.util ArrayList; Seport java-util.treracor; Antertace shape ( void araw()? clase Square implenents shape ( ‘public void araw() { system.out.printin("Draving square") ; ) class circle implenents shape ( public void draw() ¢ system.out printin ("Drawing circle") ; a“ Capitulo 4 Ahora defina una clase Paint Program para demostrar los vinculos. Si afiade un método Grawshape que defina un parémetro de tipo no funcionaré: public static <> void dravshape(s shape) shape draw); ‘ene que agregar un vinculo al parémetro de tipo para que Java trate el parsmetro de vipo formal shape como un Shape y no como un Object. Vinculando el parimetro de tipo a Shape, dictamina que el objeto pasado debe derivar directa o indirectamente de Shape. Asi Java sabe que el objeto es un Shape y puede llamar a métodos que pertenezcan a Shape en lugar de poder llamar tnicamente a métodos Ob ject: public static void drawshapeBounded(s shape) shape.draw(); ‘Como se dijo antes, esto puede hacer que se pregunte silos tipos genéricos realmente son tan tiles. Si tiene que declarar explicitamente los vinculos de un parametro de tipo, podria también utilizar la interfaz Shape para restringir un pardmetro de métodos normal. Uno de los puntos en los que los tipos genéricos realmente destacan es facilitando el uso de colecciones y es, seguramente, la raz6n principal para agregat tipos genéricos a Java, Mire la implementacién de un método dzawAL1Shapes que toma un ArzayList parametrizado, Como era de esperar, necesita un vinculo para que Java no trate los contenidos de ArrayList como Objects: public static

void drawallshapes (ArrayLicteT> ShapeList) 7 shape; Tterator shapetterator; shapetterator = ghapeList.iterator(); while (shapeTterator-hasNext ()) { shape = shapelterator next (); ahape.draw()? ) Restringiendo el parimetro de tipo T, se puede llamara draw porque Java sabe que es un Shape. Si quiere especificar varias interfaces 0 clases para utilizar como un vinculo, sepételas con el ampersand (8). Recuerde también que extends se utiliza para especificar vinculos aunque el parimetro de tipo esté vinculado por una interfaz 0 por una clase. Utilizar tipos genéricos Es muy sencillo crear objetos de un tipo genérico. Tados los parémetros deben coincidir con los vinculos especificados, Aunque tal vez espere crear un vector de un tipo genérico, sélo se puede 42 Utilidades y bibliotecas Java clave hacer con el parimetro de tipo comodin. También se puede erear un método que funcione con tipos genéricos. Esta secci6n describe estos escenarios de uso. Instancias de clase Crear un objeto de una clase genérica consiste en especificar tipos para cada parimetro y proporcionar todos los argumentos necesarios al constructor. Se deben cumplir las condiciones para todos los vinculos de las variables de tipo. Recuerde que sélo los tipos de referencia son validos como parémetros al crear una instancia de una clase genérica. ise intenta utilizar un tipo de datos primitivo, el compilador emitiré un error de tipo inesperado. Esta es una creacién sencilla de un HashMap que asigna Floats Strings: HashMap hm = new HashMapiestring, Ploat>(): Vectores No estin permitidos los vectores de tipos genéricos de variables de tipo. Siseintenta crear un vector de Vectors parametrizados, por ejemplo, s¢ origina un error de compilador: import java-util.+; public clase GenericArrayexample { public seatic vod main(sering argel J) C ) i Siintenta compilar ese e6digo, el compilador emite estos dos errores. Este cédigo es el modo més sencillo de intentar crear un vector de un tipo genérico y el compilador le indica explici-tamente que esti prohibido crear un vector de tipos genéricos: Vectorcinteger> vectorList! ] = new Vector(10]; GenericarrayExample.java:6: arrays of generic types are not allowed Veetor veororliet{ ] » new Vector(10) 7 Genericarrayexample.java:é: arrays of generic types are not allowed VectoreInteger> vectorList{ ]\= new Vector (10) Sin embargo puede crear un vector de cualquier tipo utilizando el comodin como el parémetro de tipo. Métodos genéricos Ademis de los mecanismos genéricos para clases, se introducen también métodos genéricos. Los corchetes para los parémetros aparecen después de todos los modificadores de mécodo, pero antes de pasar al tipo del método. Lo que sigue es un ejemplo de una declaracién de un método genérico: giatie { void execute() throws Ey public class Genericgxceptiontest ( Public static void main(string arge( 1) { tay Executor<1OExceptions @ = ‘new sxecutor<10xception>() { Public void execute() throws ToException U/ agai ‘c6aigo que puede Lanzar una (7, Tosxception 6 un subtips de 17 roBxception ) h e-execute(): } caten(roException ice) { ‘System-out-printin(*zogxeeption: * + ios); soe.printstackTrace()7 ) } El tipo conereto de excepcidn se especifica cuando se crea una instancia de a clase Executor dentro del principal. El método execute lanza una excepci6n arbitraria de cuya presencia no se fs consciente hasta que se crea una instancia concreta de la interfaz Executor. Utilidades y bibliotecas Java clave Bucle for mejorado El bucle £or ha sido modificado para ofrecer un modo més limpio de procesar un iterador. Utilizarun bucle for con un iterador puede causar errores debido al ligero cambio de la forma habitual del bucle for, porque la cléusula update se coloca en el cuerpo del bucle. Algunos lenguajes tienen una palabra clave, €oreach, que limpia la sintaxis para el procesado de iteradores. Java opt6 por no introducir ninguna palabra clave y decidié, en sw lugar, mantener la seneillez e introducir un nuevo uso de los dos puntos. Tradicionalmente un desarrollador escribiria el siguiente c6digo para utilizar un iterador: for(iterator iter = intArray.iterator(); iter.haewext(); ) ( Integer intOpject = (Integer) iter next (); V1 vv més declaracién para utilizar intobject ) El problema inherente a este c6digo se encuentra en la falta de cléusula update para el bucle for. El cédigo que precede al iterador ha pasado al cuerpo del bucle fox por pura necesidad: también devuelve el siguiente objeto. La nueva y mejorada sintaxis que hace lo mismo que el fragmento de cédigo anterior seria ast for(tnteger intobject + intarray) [ // ++ aqui laa aisnas decleraciones que arriba .. ) Este eédigo es mucho mas limpio y més fécil de leer. Elimina todo el potencial que tenfa el anterior de introducir errores en el programa. Esté acoplado a una coleccién genérica, el tipo de objeto se comprueba frente al tipo de la coleccién durante la compilaci El soporte de este nuevo bucle for sélo necesita un cambio en el compilador. El e6digo generado noes diferente del mismo eédigo escrito de forma tradicional. El compilador puede trasladar el cédigo anterior al siguiente, por ejemplo: for (Iterator fiter = intarray.iterator(); Siter-haeWext(); ) siter-next (); Eluso del signo del délar en el identificador de este ejemplo sélo significa que el compilador genera un identificador tinico para la expansién de la nueva sintaxis del bucle for en la forma més ‘tradicional antes de la compilacién. La misma sintaxis para utilizar un iterador en una coleccién funciona para los vectores. Utilizar la nueva sintaxis del bucle for en un vector es lo mismo que utilizarla en una coleccién: for(sering strobject s. ateinghrray) ( 7/ ss agai sae declaraciones que uctiizan scropject + Sin embargo, el compilador expande la versi6n del vector para codificarlo de forma algo mas extensa que la versi6n de coleccién:

También podría gustarte