Оглавление
César Francisco Castillo. Desarrollo de aplicaciones web con Jakarta EE
Índice
Acerca del autor
Acerca del revisor técnico
Agradecimientos
Lista de siglas y acrónimos
Prólogo
1. Introducción a Jakarta EE
1.1 Historia y evolución
1.2 Jakarta EE APIs
1.3 Especificaciones
1.4 Desarrollo de aplicaciones en capas
1.4.1 Capa de datos
1.4.2 Capa de acceso a datos
1.4.3 Capa de negocio
1.4.4 Capa de presentación
1.5 Resumen
2. Persistencia de datos con JPA
2.1 ¿Qué es JPA?
2.2 Arquitectura
2.2.1 Archivo de configuración
2.2.2 Gestor de entidades
2.2.3 Contexto de persistencia
2.3 Mapeo objeto-relacional (ORM)
2.3.1 Anotaciones
2.3.2 Mapeando tablas y columnas
2.4 Relaciones entre entidades
2.4.1 Uno a muchos
2.4.2 Muchos a uno
2.5 Jerarquías
2.6 El lenguaje de consultas JPQL
2.6.1 Estructura y definición de una consulta
2.6.2 Consultas parametrizadas
2.6.3 Consultas basadas en nombres
2.6.4 Consultas dinámicas y sus problemas
2.7 Operaciones del administrador de entidades
2.7.1 Inserción
2.7.2 Búsqueda
2.7.3 Actualización
2.7.4 Eliminación
2.7.5 Inserción en cascada
2.8 Oyentes
2.8.1 Creación y vinculación a entidades
2.9 Criteria API
2.9.1 CriteriaBuilder
2.9.2 CriteriaQuery
2.9.3 Root y cláusula from
2.9.4 Sentencias joins
2.9.5 Ejemplos de consultas
2.10 Resumen
3. Modularización con Jakarta Enterprise Beans
3.1 Tipos de session beans
3.2 Interfaces Local y Remote
3.3 Eventos
3.4 Tareas programadas
3.4.1 Planificador
3.5 Módulo EJB con acceso a base de datos
3.5.1 Desarrollo de aplicación enterprise
3.5.2 Desarrollo de la aplicación cliente
3.6 Resumen
4. Contextos e inyección de dependencias (CDI)
4.1 Concepto de CDI bean
4.2 Nombres de beans
4.3 Inyección de dependencias
4.4 Alcances
4.5 Resumen
5. Jakarta Server Faces (JSF)
5.1 Introducción a JSF y sus implementaciones
5.2 Librería de componentes
5.3 Ciclo de vida
5.3.1 Restaurar vista
5.3.2 Aplicar valores de la solicitud
5.3.3 Procesar validaciones
5.3.4 Actualizar valores del modelo
5.3.5 Invocar la lógica de aplicación
5.3.6 Renderizar respuesta
5.4 Primer proyecto
5.5 Descriptor de despliegue: web.xml
5.5.1 Especificación del entorno
5.5.2 Página de inicio
5.5.3 Estado
5.5.4 Páginas para el tratamiento de errores
5.5.5 Servlet
5.6 Controladores con CDI
5.6.1 Alcances
5.6.2 Creación de un controlador
5.7 Lenguaje de expresiones
5.7.1 Operadores
5.7.2 Acceso a propiedades y métodos
5.7.3 Expresiones
5.8 Componentes
5.8.1 Formularios
5.8.2 Paneles
5.8.3 Imágenes
5.8.4 Botones de acción
5.8.5 Salidas de texto
5.8.6 Entrada de textos
5.8.7 Tablas
5.8.8 Listas desplegables
5.9 Creación de un proyecto JSF con BootsFaces
5.9.1 Crear la base de datos
5.9.2 Añadir dependencia
5.9.3 Creación de plantilla (Facelets Template)
5.9.4 Crear estructura de paquetes
5.9.5 Localización e internacionalización
5.9.6 Creación de un cliente para plantilla
5.9.7 Listado de películas
5.9.8 Añadir películas
5.9.9 Editar películas
5.9.10 Eliminar películas
5.10 Resumen
6. Primefaces
6.1 Añadir Primefaces a un proyecto JSF
6.2 Componentes
6.2.1 Autocomplete
6.2.2 Autocomplete para insertar nuevos registros
6.2.3 DataTable básico
6.2.4 DataTable con carga diferida, paginación, filtrado, ordenamiento y selección de registros
6.2.5 DataTable con coloreado condicional
6.2.6 SelectOneMenu simple
6.2.7 SelectOneMenu dependiente o relacionado
6.3 Gráficos estadísticos
6.3.1 Creación de gráficos de barra
6.3.2 Creación de gráficos circulares
6.4 Resumen
7. Archivos de log
7.1 Introducción a librería Apache Log4j2
7.2 Loggers, appenders, y layouts
7.3 Niveles
7.4 Crear log diario
7.4.1 Añadir dependencias
7.4.2 Crear archivo de configuración
7.4.3 Capturar eventos en aplicación
7.4.4 Clase log
7.4.5 Clases utilitarias ULogFile y FileUtils
7.4.6 Crear controlador
7.4.7 Desarrollar interfaz gráfica
7.5 Resumen
8. Control de versiones en bases de datos
8.1 ¿Qué es Flyway?
8.2 ¿Qué son las migraciones y cómo funcionan?
8.3 Nomenclatura
8.4 Comandos
8.5 Integración de Flyway con proyectos Maven
8.5.1 Crear proyecto
8.5.2 Crear archivo flyway.properties
8.5.3 Añadir plugins
8.5.4 Crear migraciones
8.6 Resumen
9. Proyecto integrador
9.1 Planteamiento del problema
9.2 Requisitos funcionales
9.3 Casos de uso
9.4 Diseño de interfaces
9.5 Modelado de datos
9.6 Creación de un proyecto JSF con Primefaces
9.6.1 Crear plantilla
9.6.2 Crear la estructura de paquetes
9.6.3 Creación de migraciones
9.7 Registrar nuevos usuarios
9.7.1 Inserción en cascada
9.7.2 Controlador
9.7.3 Página registrar.xhtml
9.8 Inicio y cierre de sesión
9.8.1 Clase Credencial
9.8.2 EJB UsuarioFacade
9.8.3 Controlador para el manejo de login
9.8.4 Página login.xhtml
9.9 Verificación de sesiones
9.9.1 Controlador para plantilla
9.9.2 Incluir verificación en plantilla
9.10 Simular y otorgar préstamo
9.10.1 Clase Frances
9.10.2 Controlador
9.10.3 Página simulacion.xhtml
9.11 Resumen
10. Manejo de imágenes en JSF
10.1 Estrategias para almacenar imágenes
10.2 Preparar el entorno
10.3 Registro de persona y carga de imágenes
10.3.1 Controlador
10.3.2 Formulario para el registro de personas y carga de imagen
10.4 Listado de personas y visualización de imágenes
10.4.1 Controlador
10.4.2 Implementación de listado con imágenes
10.5 Resumen
11. Envío de correos con Jakarta Mail
11.1 Introducción a los protocolos
11.1.1 SMTP (Protocolo para transferencia simple de correo)
11.1.2 POP3 e IMAP
11.2 Clases y objetos que intervienen en el envío de mensajes
11.2.1 Session
11.2.2 MimeMessage
11.2.3 Transport
11.3 Ejemplos. 11.3.1 Ejemplo 1: envíos con formato de texto plano
11.3.2 Ejemplo 2: envíos con copias públicas (CC) y privadas (BCC)
11.3.3 Ejemplo 3: envíos con archivos adjuntos
11.3.4 Ejemplo 4: envíos con plantillas HTML
11.4 Resumen
12. Diseño de reportes
12.1 Jaspersoft Studio
12.2 Estructura de un reporte
12.2.1 Título
12.2.2 Encabezado de página
12.2.3 Encabezado de columna
12.2.4 Detalle
12.2.5 Pie de columna
12.2.6 Pie de página
12.2.7 Resumen
12.2.8 Fondo
12.3 Crear nuestro primer reporte
12.4 Personalizar la banda “título”
12.5 Uso de parámetros
12.6 Personalizar la banda “encabezado de página”
12.7 Uso de variables
12.8 Consultas parametrizadas
12.9 Uso de procedimientos almacenados
12.10 Condicionales
12.11 Subreportes
12.12 Gráficos
12.12.1 Gráfico circular
12.12.2 Gráfico de barras
12.13 Generar reportes desde aplicaciones Java
12.13.1 Plugin para compilar archivos jrxml
12.13.2 Archivo config.properties
12.13.3 Clase para generar reportes
12.13.4 Invocar reporte desde controlador
12.13.5 Invocar desde interfaz gráfica
12.14 Resumen
13. Servicios web
13.1 Introducción a REST
13.2 Recursos
13.3 Servicio Web RESTful y API
13.4 Acceso a los recursos mediante verbos
13.5 Códigos de estado HTTP
13.6 JSON (objeto con notación JavaScript)
13.7 Procesando JSON en el servidor
13.8 Introducción a JAX-RS
13.8.1 Anotaciones
13.9 Creación de proyecto API RESTful con JAX-RS
13.10 Estructura del proyecto
13.11 Configuración
13.12 Personalizar el manejo de errores
13.12.1 Error en solicitud (BadRequestException)
13.12.2 Recurso no encontrado (NotFoundException)
13.12.3 Creación de recurso existente (ConflictException)
13.12.4 Clase ErrorMessage
13.13 Creación de servicios
13.13.1 PersonaFacade.java
13.14 Creación de utilidades
13.15 Creación de modelos
13.16 Creación de recursos
13.16.1 Recurso PersonasResource
13.17 Resultados en Postman
13.18 Resumen
14. Documentación de API REST con Swagger
14.1 Añadir dependencias Swagger a proyecto JAX-RS
14.2 Anotaciones
14.2.1 Declaración de recursos
14.2.2 Declaración de operaciones
14.2.3 Declaración de modelos y propiedades
14.3 Integrar Swagger
14.4 Configuración e inicialización
14.5 Declaración de modelos, recursos y operaciones
14.6 Swagger UI
14.6.1 Agregar Swagger UI a un proyecto
14.6.2 Prueba de recursos desde interfaz
14.7 Resumen
15. DevOps con Jenkins
15.1 Integración continua
15.2 Despliegue continuo
15.3 Instalar y configurar Jenkins
15.4 Instalar plugin GitHub
15.5 Configurar Java, Maven y Git
15.6 Conexión a GitHub mediante SSH
15.7 Compilar código Java con Maven
15.8 Desplegar aplicaciones en Payara Server
15.9 WebHook entre Jenkins y GitHub
15.10 Enviar notificaciones por correo electrónico
15.11 Integración de SonarQube
15.11.1 Descarga, instalación y configuración
15.11.2 Crear cuentas de usuarios
15.11.3 Instalación del plugin SonarQube Scanner
15.11.4 Añadir servidor SonarQube en Jenkins
15.11.5 Auditoría de código fuente
15.12 Resumen
Apéndice A
A.1 AdoptOpenJDK
A.1.1 Linux
A.1.2 Windows
A.2 Instalar MariaDB
A.2.1 Linux
A.2.2 Windows
A.2.3 Descargar conector J
A.3 Instalar Maven
A.3.1 Linux
A.3.2 Windows
A.4 Instalar Git
A.4.1 Linux
A.4.2 Windows
A.5 Payara Server
A.5.1 Contraseña de administrador
A.5.2 Administración desde línea de comandos
A.5.3 Conector J
A.5.4 Administración desde interfaz gráfica
A.5.5 Pool de conexiones y recursos JDBC
A.5.6 JavaMail Sessions
A.6 Jaspersoft Studio
A.6.1 Linux
A.6.2 Windows
A.7 Instalar NetBeans IDE
A.7.1 Linux
A.7.2 Windows
A.7.3 Añadir plugins
A.7.4 Agregar nuevo driver JDBC para MariaDB
A.7.5 Crear conexión con base de datos
A.7.6 Integrar servidor Payara
A.7.7 Crear proyecto Java Web con Maven
Apéndice B
B.1 Archivo de propiedades
B.2 Dependencias
B.3 Leer documento con formato .xls
B.4 Crear documento Excel a partir de consulta a base de datos
B.5 Crear documento Word simple
B.6 Crear documento Word a partir de consulta a base de datos
B.7 Leer archivos con formato CSV
B.8 Leer archivos con formato JSON
Bibliografía