Parte I. Pensando como un desarrollador de Java
1. Utilidades y bibliotecas Java clave
Presentación de Derby
Uso de Derby
Nuevas características de lenguaje de Java 5
Tipos genéricos
Borrado de tipos
Comodines y variables de tipo vinculado
Utilizar tipos genéricos
Bucle for mejorado
Adiciones a la biblioteca de clases Java
Argumentos variables
Conversiones boxing y unboxing
Conversiones boxing
Conversiones unboxing
Contextos válidos para las conversiones boxing y unboxing
Importaciones estáticas
Enumeraciones
Metadatos
AnnotationDesc
AnnotationDesc.ElementValuePair
FALTA AnnotationTypeDoc
AnnotationTypeElementDoc
AnnotationValue
Bibliotecas importantes de utilidades Java
Registro Java
El gestor de registro
La clase LogRecord
Métodos LogRecord
La clase Level
La clase Handler
La clase Formatter
Formateadores habituales
Crear su propio formateador
La interfaz de filtro
Crear su propio filtro
ErrorManager
Ejemplos de registro
Expresiones regulares
La clase Pattern
La clase Matcher
La interfaz MatchResult
Ejemplo de expresión regular
Preferencias Java
La clase Preferences
Exportar a XML
Uso de las preferencias
Resumen
2. Herramientas y técnicas para desarrollar soluciones Java
Principios del desarrollo de software de calidad
Hábitos del desarrollo eficaz de software
Comunicación
Modelo
Sea ágil
Sea disciplinado
Rastree las acciones necesarias
No tenga miedo de escribir código
Piense en el código como un diseño, no como un producto
Lea mucho
Construya su proceso desde los cimientos
Gestione la configuración
Haga una prueba de unidad de su código
Integración continua
Mantener iteraciones breves
Mida lo que ha conseguido (indirectamente)
Siga el rastro a sus problemas
Metodología de desarrollo
Metodología en cascada
Proceso unificado
Programación extrema
Observaciones sobre la metodología
Escenarios de desarrollo prácticos
Ant
Escenario 1
Escenario 2
Escenario 3
Maven 2
Arquetipos
Dependencias transitivas
TestNG
XDoclet
JMeter
Resumen
3. Sacar el máximo provecho de los patrones en 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
TestNG
XDoclet
Claves para desarrollar soluciones Java eficaces
Desarrolle un vocabulario de diseño común
Comprenda los principios fundamentales del diseño
Construir patrones con principios de diseño
Diseñar una sola clase
Crear una asociación entre clases
Crear una interfaz
Crear un bucle de herencia
Patrones Java importantes
Adaptador
Target
Client
Adaptee
Adapter
Modelo Vista Controlador
Escenario 1: Cambiar el modelo
Escenario 2: Actualización cuando cambia el modelo
Escenario 3: Inicializar la aplicación
Modelo
Vista
Controlador
Comando
Command
CommandManager
Invoker
Estrategia
Estrategia
Contexto
Composición
Component
Leaf
Composite
Resumen
Parte II. Una comprensión amplia de APIs, herramientasy técnicas Java
4. Desarrollar interfaces de usuario eficaces con JFC
Gestores de presentación
BorderLayout
BoxLayout
FlowLayout
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
Datos de aplicación
Guardar datos de aplicación
Modelo de datos de configuración de ejemplo para una aplicación
Java Serialization: dar persistencia a gráficos de objeto
Clases clave
Serializar sus objetos
Ejemplo de configuración: guardar la configuración de su aplicación en disco
Dar a su aplicación una licencia temporal utilizando serialización
Vincular sus componentes de serialización a la aplicación
Ampliar y personalizar la serialización
La palabra clave Transient
Personalizar el formato de serialización
Versionado
Cuándo utilizar el API Java Serialization
Serialización a largo plazo JavaBean; XMLEncoder/Decoder
Diferencias de diseño
XML: el formato de serialización
Clases clave
Serializar sus JavaBeans
Robustez probada: cambiar los datos internos de una configuración
Posible personalización
Delegados de persistencia
Cuándo 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
Gráficos de objeto JAXB generados
Clases clave del API JAXB
Montar y desmontar datos XML
Crear nuevo contenido XML con clases generadas JAXB
Utilizar clases generadas JAXB en su aplicación
Implementar la acción guardar
Implementar la acción cargar
Anotar clases Java existentes para su uso con JAXB
Un caso sencillo
Anotaciones clave del API JAXB
Anotar el modelo de datos
Generar un XML Schema desde clases anotadas JAXB
Peligros de JAXB
Cuándo utilizar JAXB
Lugar de JAXB en JDK
Resumen
6. Dar persistencia a su aplicación con bases de datos
Resumen del API JDBC
Configurar su entorno
Uso del API JDBC en el mundo real
Comprender el modelo de dos niveles
Comprender el modelo de tres niveles
Utilizar de forma eficaz JDBC 4.0
Resumen
Gestionar conexiones
DriverManager
DataSource
Comprender las declaraciones
Investigar la interfaz Statement
Explorar la interfaz PreparedStatement
Explorar la interfaz CallableStatement
Utilizar actualizaciones en lote
Utilizar los conjuntos de resultados
Investigar los tipos de conjuntos de resultados
Ajustar la concurrencia de conjuntos de resultados
Establecer la mantenibilidad de los conjuntos de resultados
Utilizar conjuntos de resultados
Conceptos avanzados
Anotaciones
Gestionar transacciones
Hibernate
Componentes Hibernate
Objeto Java Persistente
Archivo de mapeo Hibernate
Archivo de configuración Hibernate
API Hibernate
Ejemplo Hibernate
Configuración
HibernateUtil
Book Manager
Ejemplo Hibernate
Interfaz Criteria
Interfaz Query
Resumen
7. Desarrollar aplicaciones Web utilizando la Arquitectura Modelo 1
¿Qué es Modelo 1? ¿Por qué usarlo?
JSP 2.0, un resumen
Soporte de Servlet 2.4
Soporte de EL (Expression Language)
Reutilización de código con archivos .tag y .tagx
Extensiones de páginas 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.1
Desarrollar sus visualizaciones de aplicación Web con JSP 2.0
AJAX
¿Qué es AJAXTags? ¿Por qué usarlo?
¿Qué es DWR? ¿Por qué usarlo?
Resumen
8. Desarrollar aplicaciones Web utilizando la Arquitectura Modelo 2
El problema
¿Qué es Modelo 2?
¿Por qué utilizar Modelo 2?
Desarrollar una aplicación con WebWork
¿Qué es la inversión de control y por qué es útil?
Arquitectura
Interceptores
ValueStack
OGNL
Componentes
Ampliar el marco de trabajo para soportar Hibernate
Prevenir la presencia de sesiones colgantes
Definir su modelo de dominio
Implementar sus casos de uso con acciones
Desarrollar sus vistas
Agregar contactos al sistema
Explorar contactos
Configurar su aplicación
Adaptarse a los cambios
Resumen
9. Interactuar con C/C++ utilizando la interfaz nativa de Java
Una primera mirada a la interfaz nativa de Java
Crear el código Java
Crear la biblioteca y el código nativo
Ejecutar el código
Interfaz nativa Java
Tipos de datos
Cadenas en JNI
Vectores en JNI
Cómo usar los vectores
Funciones de vector
Trabajar con objetos Java en C/C++
Acceder a campos en JNI
Invocar métodos Java utilizando JNI
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 JNI
Hilos Java
Soporte NIO nativo
Registrar manualmente métodos nativos
Reflexión
Desarrollar un cliente de correo electrónico
Diseño de sistema
Interfaz de usuario
Resumen
10. EJB 3 y el API Java Persistence
Nuevas prestaciones
JPA (API Java Persistence)
Entidades
Lenguaje de consulta
EntityManager
¿Qué son los beans de sesión? ¿La muerte de los beans de entidad?
Interceptores
Ejemplos de componentes Web EJB 3 y API Java Persistence
Escenario 1
Escenario 2
Escenario 3
Resumen
11. Comunicación entre componentes Java y componentesde otras plataformas
Escenarios 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 básica de redes
Zócalos
El API Java Socket
Clases clave
Programación de cliente
Programación de servidor
Reunirlo todo: un servidor Echo
Implementar un protocolo
Especificación de protocolos
Protocolos propietarios e ingeniería inversa
Utilizar protocolos e implementaciones existentes
Invocación Remota de Métodos
Principios centrales RPC/RMI
Montar y desmontar
Protocolos
Registro RMI
Objetos distribuidos
Midleware y Java EE
Arquitectura común de intermediarios en peticiones a objetos (CORBA)
Principios básicos de CORBA
IDL: Lenguaje de definición de interfaces
ORB: intermediario en peticiones a objetos
Servicio de nombres COS
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 sistema de archivos distribuido: un ejemplo de sistema CORBA
La implementación
Ejecutar el ejemplo
Web Services
Random-Weather.org
RPC independiente de plataforma
WS-I Basic Profile
WSDL (Web Services Language Description)
SOAP (Simple Object Access Protocol)
Protocolos de transporte subyacentes
Ejemplo de sitio Web metereológico
Crear un Web Services desde un método Java
Escribir un cliente Web Service
Reunirlo todo: aplicación de bandeja de sistema
Proyecto WSIT (Web Services Interoperability Technologies)
Resumen
12. Integración orientada al servicio
Arquitectura orientada al servicio
Tecnología facilitadora
Extensiones de Gestión de Java
¿Por qué es importante JMX?
La arquitectura JMX
Crear y gestionar un MBean estándar
Gestión JMX
Agente remoto
Cliente remoto
Monitor de trabajo
Servicio de Mensajería Java
¿Por qué es importante JMS?
Puntos extremos: colas y temas
Enviar y recibir mensajes
Configuración del servidor JMS
MessageClient
JMSWorkerMBean
JMSWorker
JMSAgent
Patrones de integración de sistemas
Cadena de procesamiento
Petición-Respuesta
División-Agregado
Resumen
13. Seguridad Java
Arquitectura de Criptografía Java y Extensión de Criptografía Java (JCA/JCE)
JCA diseño y arquitectura
Clases de motor
Calcular y verificar resúmenes de mensaje
Firma digital y verificación de datos
Creación y gestión de claves digitales
Almacenar y gestionar claves
Gestión de algoritmos
Generación de números aleatorios
Firmas digitales XML
Gestión de certificados
Extensión de Criptografía Java
La clase motor Cipher
KeyGenerator
SecretKeyFactory
Proteger objetos mediante sellado
Cálculo de Códigos de Autenticación de Mensajes
Seguridad de programa utilizando JAAS
Identificación de usuario
Ejecutar el código con comprobaciones de seguridad
Principales
Credenciales
Autenticación de un sujeto
Configuración
LoginContext
Autorización
Resumen
14. Empaquetado e implementación de Aplicaciones Java
Examen de rutas de clase Java
Investigación del directorio aprobado
Exploración de archivos Java
Manipulación de archivos JAR
Examinar el archivo manifiesto básico
Investigación de applets y JAR
Firma de archivos JAR
Examen de la opción JAR Index
Creación de un JAR ejecutable
Análisis de applets
Anatomía básica de un applet
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
Comprensión del Descriptor de Implementación WAR
Empaquetado de Enterprise JavaBeans
Examen de archivos Enterprise
El archivo descriptor EAR
Escenario de implementación
Lanzarse a Java Web Start
Examen del ejemplo Tic Tac Toe
TicTacToe.JNLP
TTTMain.java
TTTLogic.java
TTTGui.java
Resumen de Java Web Start
Utilizar Ant con archivos Web
Instalación de Ant
Construcción de proyectos con Ant
Resumen alfabético