AA.VV
Introducción
¿Para quién es este libro?
¿Qué cubre este libro?
¿Cómo está organizado este libro?
Pensar como un desarrollador de Java
Capítulo 1. Las características clave del lenguaje y las librerías
Capítulo 2. Herramientas y técnicas para desarrollar soluciones Java
Capítulo 3. Sacar provecho de los modelos de Java
Un amplio conocimiento de las API, herramientas y técnicas de Java
Capítulo 4. Desarrollo de interfaces de usuario efectivas con JFC
Capítulo 5. Mantener una aplicación utilizando archivos
Capítulo 6. Mantener una aplicación utilizando bases de datos
Capítulo 7. Desarrollo de aplicaciones Web con arquitectura de modelo 1
Capítulo 8. Desarrollo de aplicaciones Web con arquitectura de modelo 2
Capítulo 9. Interactuar con C/C++ utilizando la interfaz nativa de Java
Capítulo 10. Comunicación entre componentes Java con RMI y EJB
Capítulo 11. Comunicación entre componentes Java y otras plataformas
Capítulo 12. Procesos distribuidos con JMS y JMX
Capítulo 13. Seguridad Java
Capítulo 14. Empaquetar e instalar aplicaciones Java
¿Qué necesita para utilizar este libro?
Convenciones
Código fuente
1. Las características clave del lenguaje y las librerías
Nuevas características del lenguaje
Tipos genéricos
Tipos genéricos y definición de clases genéricas
Utilizar tipos genéricos
Bucles for mejorados
Incorporaciones a la librería de clases de Java
Argumentos variables
Conversión automática de tipos
Conversiones unboxing
Contextos válidos para conversiones automáticas de tipos
Importaciones estáticas
Enumeraciones
Metadatos
AnnotationDesc
AnnotationDesc.ElementValuePair
AnnotationTypeDoc
AnnotationTypeElementDoc
AnnotationValue
Librerías importantes de utilidades Java
Registros de Java
LogManager
La clase Logger
La clase LogRecord
La clase Level
La clase Handler
La clase Formatter
Inventario de formateadores
La interfaz Filter
Gestión de errores (ErrorManager)
Ejemplos de registro
Expresiones regulares
La clase Pattern
La clase Matcher
La interfaz MatchResult
Ejemplo de expresión regular
Preferencias de Java
La clase Preference
Exportar a XML
Utilizar las preferencias
Resumen
2. Herramientas y técnicas para desarrollar soluciones Java
Principios de la calidad en el desarrollo de software
Hábitos para un desarrollo efectivo de software
Comunicación
Modelado
Ser ágil
Ser disciplinado
Realizar un seguimiento de las acciones necesarias
No tenga miedo de escribir código
Pensar en el código como en un diseño, no como en un producto
Lea mucho
Construya sus procesos desde los cimientos
Gestionar su configuración
Compruebe sus unidades de código
Integración continua
Mantenimiento de las labores de rediseño
Medir los objetivos cumplidos (indirectamente)
Llevar un seguimiento de los logros
Metodología de desarrollo
Metodología en cascada
Proceso unificado
Programación extrema
Observaciones sobre metodología
Escenarios prácticos de desarrollo
Ant
Escenario 1
Escenario 2
Escenario 3
Maven
JUnit
XDoclet
JMeter
Resumen
3. Sacar provecho de los patrones de Java
Por qué son importantes los patrones
Claves para comprender el lenguaje de programación Java
Claves para comprender las herramientas utilizadas en el desarrollo Java
ANT
JUnit
XDoclet
Claves para desarrollar soluciones Java efectivas
Desarrollo de un vocabulario de diseño común
Comprender los fundamentos del diseño
Construir patrones con principios de diseño
Diseñar una clase sencilla
Crear una asociación entre clases
Crear una interfaz
Crear un bucle de herencia
Patrones importantes de Java
Adapter
El patrón Adapter es una combinación de cuatro clases
El código Client
La interfaz Adaptee
La clase Adapter
Model-View-Controller
Escenario 1: Cambiar el modelo
Escenario 2: Actualizar cuando cambia el modelo
Escenario 3: Inicializar la aplicación
El componente Model
El componente View
El componente Controller
Command
La clase Command
La clase CommandManager
La clase Invoker
El patrón Strategy
Strategy
Contexto
El patrón Composite
La interfaz Component
La clase Leaf
El objeto Composite
Resumen
4. Desarrollo de interfaces de usuario efectivas con JFC
Gestores de diseño
BorderLayout
BoxLayout
FlowLayout
GridLayout
GridBagLayout
SpringLayout
CardLayout
Los componentes JFrame y JDialog
Trabajar con flujos de navegación en aplicaciones Swing
Resumen
5. Mantener una aplicación utilizando archivos
Datos de aplicación
Guardar los datos de una aplicación
Configuración de un modelo de datos para la aplicación Imager
Java Serialization: mantenimiento de grafos de objetos
Clases clave
Serializar objetos
Ejemplo de configuración: guardar en disco la configuración de una aplicación
Dar a una aplicación una licencia temporal utilizando la serialización
Implementar la licencia
Implementar el servidor
Unir los componentes de serialización en la aplicación
Ampliar y personalizar la serialización
La palabra clave Transient
Personalizar el formato de serialización
Versiones
Cuándo utilizar Java Serialization
Serialización Java Bean a largo plazo: XMLEncoder/Decoder
Diferencias de diseño
XML: El formato de serialización
Clases clave
Serializar Java Bean
Firmeza demostrada: cambiar los datos internos de la clase Configuration
Posibles personalizaciones
La clase PersistenceDelegate
Cuándo utilizar XMLEncoder/Decoder
Serialización basada en un esquema XML: JAXB (Java API for XML Binding)
Documento XML de ejemplo para el objeto Configuration
Definir el formato XML con un esquema XML
Definir los datos: Configuration.xsd
Generar clases JAXB a partir de del esquema
Grafos de objetos JAXB generados
Clases clave de la API JAXB
Codificar y decodificar datos XML
Crear un nuevo contenido XML con clases generadas por JAXB
Utilizar clases generadas por JAXB en una aplicación
Implementar la acción de almacenamiento
Implementar la acción de carga
Cuándo utilizar JAXB
Futuro de JAXB 2.0
Resumen
6. Mantener una aplicación utilizando bases de datos
Las API de JDBC
Configurar el entorno
Empleo de la API JDBC en el mundo real
El modelo de dos capas
El modelo de tres capas
Comprender los conceptos de la API JDBC
Gestión de conexiones
La clase DriverManager
La interfaz DataSource
Sentencias
La interfaz Statement
La interfaz PreparedStatement
La interfaz CallableStatement
Actualizaciones por lotes
Conjuntos de resultados
Tipos de conjuntos de resultados
Definir el modo de cooperación de un conjunto de resultados
Establecer la perdurabilidad de un conjunto de resultados
Utilizar conjuntos de resultados
Conceptos avanzados de JDBC
Gestión de metadatos de una base de datos
Limitaciones de un origen de datos
Determinar las características que admite un origen de datos
Recuperar información general sobre un origen de datos
Objetos RowSet
Los eventos de RowSet
Implementaciones estándar de RowSet
La nueva implementación JdbcRowSetImpl
Pool de conexión
Gestionar transacciones
¿Qué es una transacción?
Transacciones estándar
Transacciones distribuidas
Traducción entre objetos y bases de datos con Hibernate
La arquitectura de Hibernate
Plataformas de bases de datos soportadas
Conectar con Hibernate
Desarrollar con Hibernate
Mapeados
Establecer las propiedades de Hibernate
Las API de persistencia de Hibernate
Unirlo todo. El ejemplo Forum
Resumen
7. Desarrollo de aplicaciones Web con arquitectura de modelo 1
¿Qué es el modelo 1 y por qué utilizarlo?
Visión general de JSP 2.0
Soporte Servlet 2.4
Soporte EL (Expression Language)
Reutilización de código con archivos *.tag y *.tagx
Extensiones de página JSP (*.jspx)
El protocolo Simple Invocation Protocol
Lenguaje de expresiones integrado (EL)
Visión general de JSTL 1.1
La librería de etiquetas de funciones
Acciones SQL
Desarrollar visualizaciones para aplicaciones Web con JSTL
Desarrollar visualizaciones para aplicaciones Web con JSP 2.0
Resumen
8. Desarrollar aplicaciones Web con arquitectura de modelo 2
El problema
¿Qué es el modelo 2?
¿Por qué utilizar el modelo 2?
Desarrollar una aplicación con WebWork
¿Qué es la inversión de control y por qué resulta útil?
Arquitectura
Interceptores
ValueStack
OGNL
Componentes
Extender el marco de trabajo para soportar Hibernate
Evitar la interrupción de la sesión
Definir nuestro modelo de dominio
Implementar los casos de uso con acciones
Desarrollar las vistas
Añadir contactos al sistema
Buscar contactos
Configurar la aplicación
Adaptándose a los cambios
Resumen
9. Interactuar con C/C++ utilizando la interfaz nativa de Java
Visión preliminar de JNI
Crear el código Java
Crear el código y la librería nativas
Ejecutar el código
La interfaz nativa de Java
Tipos de datos
Cadenas en JNI
Ejemplo de cadenas
Arrays en JNI
Funciones de array
Ejemplos de array
Trabajar con objetos Java en C/C++
Acceder a campos en JNI
Llamar a métodos Java utilizando JNI
Manejar excepciones en código nativo
Trabajar con referencias de objetos en código nativo
Referencias locales
Referencias globales y referencias globales parciales
Comparar referencias
Programación avanzada con JNI
Hilos de Java
Compatibilidad NIO nativa
Registro manual de métodos nativos
Reflexión
Desarrollar un cliente de e-mail
El diseño del sistema
La interfaz de usuario
Resumen
10. Comunicación entre componentes Java con RMI y EJB
RMI (Remote Method Invocation)
Explorar la arquitectura RMI
Desarrollar aplicaciones RMI
Utilizar hilos en RMI
Utilizar cargas de clases dinámicas
Liberación distribuida de memoria
Activaciones de objetos remotos
La interfaz TestRemoteInterface
La clase TestActivationImpl
La clase TestClient
La clase Register
Iniciar las herramientas de activación
RMIChat
La interfaz RMIChat
La clase RMIChatImpl
La clase ChatUser
La clase ChatApplet
Compilar la aplicación RMIChat
EJB (Enterprise JavaBeans)
Fundamentos básicos de EJB
Tipos de EJB
Beans Session
Entity
Message-Driven
Contenedores EJB
Ejemplo de calculadora de préstamos EJB
La interfaz LoanObject
La interfaz LoanHome
La clase LoanBean
La clase LoanClient
El archivo EJB-JAR.XML
Resumen
11. Comunicación entre componentes de Java y de otras plataformas
Escenarios de comunicación de componentes
Lector de noticias: navegación Web automatizada
Una aplicación bancaria: cliente EJB/J2EE
Un portal: integración heterogénea de orígenes de datos y servicios
Procesos de comunicación y arquitectura básica de redes
Socket
La API Socket de Java
Las clases clave
Programación cliente
Programación de servidor
Unirlo todo: un servidor Echo
Implementar un protocolo
Especificación del protocolo
Protocolos propietarios e ingeniería inversa
Utilizar protocolos e implementaciones existentes
RMI (Remote Method Invocation)
Principios básicos de RPC/RMI
Codificar y decodificar
Protocolos
El registro RMI
Objetos distribuidos
Middleware y J2EE
CORBA (Common Object Request Broker Architecture)
Fundamentos de CORBA
IDL (Interface Definition Language)
ORB (Object Request Broker)
Servicio de nombres COS (Common Object Service)
IIOP (Internet InterORB Protocol)
RMI-IIOP: hacer RMI compatible con CORBA
Cómo convertir un objeto RMI en un objeto RMI-IIOP
Cuándo utilizar CORBA
Notificaciones de sistemas de archivos distribuidos: ejemplo de sistema CORBA
La implementación
Ejecutar el ejemplo
Servicios Web
Evolución de la World Wide Web
Independencia de plataforma RPC
WSDL (Web Services Description Language)
SOAP (Simple Object Access Protocol)
Ejemplo de sitio Web de predicciones meteorológicas
El futuro
Resumen
12. Procesos distribuidos con JMS y JMX
Conceptos básicos
Fundamentos de JMS
Enviar y recibir un mensaje JMS
Fundamentos de JMX
Empleo de MBean estándar
Expandir un MBean para su gestión
Empleo de adaptadores y conectores
Construir una aplicación distribuida
Decidir el tipo de mensaje
Comprender la arquitectura de tres componentes
Crear un componente para procesar mensajes JMS
MessageListener
MessageProcessorMBean
JndiHelper
MessageProcessor
Processable
OrderProcessor
JMXAgent
Crear un componente que dirija los mensajes a través del proceso de negocio
Routeable
MessageRouter
Crear un componente para dividir tareas largas para procesar en paralelo
Splitable
MessageSplitter
Aggregateable
MessageAggregator
OrderAggregator
Desarrollar la aplicación
Desarrollo básico
Desarrollo avanzado
Desarrollar el servicio M-Let
Configurar el descriptor de desarrollo
Añadir el archivo de configuración M-Let al servicio M-Let
Resumen
13. Seguridad Java
JCA (Java Cryptography Architecture) y JCE (Java Cryptography Extension)
Diseño y arquitectura JCA
Clases generadoras
Calcular y verificar algoritmos de resumen de mensajes
Firma digital y verificación de datos
Gestión y creación de claves digitales
Almacenar y gestionar claves
Gestión de algoritmos
Generación de números aleatorios
Gestión de certificados
JCE (Java Cryptography Extension)
La clase generada Cipher
Encriptación y desencriptación de datos
KeyGenerator
SecretKeyFactory
Proteger objetos mediante Sealing
Cálculo de códigos de autentificación de mensajes
Seguridad de programas con JAAS
Identificación de usuarios
Ejecutar código con comprobaciones de seguridad
Principales
Credenciales
Autentificar un sujeto
Configuración
LoginContext
Autorización
Resumen
14. Empaquetar e instalar aplicaciones Java
Rutas de clases Java, CLASSPATH
La carpeta de respaldo
Explorar los archivos de Java
Manipular archivos JAR
El archivo de declaración predeterminado
Applet y JAR
Firmar archivos JAR
La opción index de JAR
Crear un archivo JAR ejecutable
Análisis de los applet
Anatomía básica de un applet
Empaquetar un applet para su ejecución
Seguridad de applet
Aplicaciones Web
La estructura de carpetas de WAR
El descriptor de desarrollo WAR
Empaquetado de EJB (Enterprise Java Bean)
Examinar archivos EJB
El archivo de descripción EAR
Desarrollo del escenario
Saltar a Java Web Start
El ejemplo TicTacToe
El archivo TicTacToe.JNLP
TTTMain.java
TTTLogic.java
TTGui.java
Resumen de Java Web Start
Utilizar ANT con archivos Web
Instalación de ANT
Construir proyectos con ANT
Resumen
Licencias
Índice alfabético
Java continúa siendo el lenguaje dominante para la construcción de aplicaciones de servidor, la última actualización de la plataforma (JDK 5) puede presumir de numerosas características nuevas, incluyendo una herramienta de metadatos, tipos genéricos, autoboxing (conversión automática de tipos enteros) y una interfaz de usuario mejorada.
Esta obra profundiza en las sofisticadas características de JDK 5 y muestra cómo dominar los aspectos más avanzados de este evolucionado y completo lenguaje. Empezando por una visión general de las mejores herramientas y técnicas para el desarrollo de aplicaciones Java, el equipo de expertos autores de este libro profundizan en cómo utilizar Java para desarrollar soluciones de software. Le proporcionará la información de fondo necesaria para manejar la tecnología, numerosos ejemplos prácticos le ayudarán a adquirir una excelente base para desenvolverse en el panorama del desarrollo Java, enseñándole tanto a dominar los fundamentos del núcleo de Java como los aspectos más complejos de JDK 5.
Este libro está pensado para desarrolladores que están buscando una fuente de recursos para todas sus necesidades, que están preparados para afrontar las soluciones y características más avanzadas de Java y necesitan un poco de ayuda cuando se enfrentan con nuevos problemas de Java que quedan fuera del alcance de su experiencia tecnológica.