Lectura pública del tema
1. La arquitectura Java EE/Jakarta EE
1. La arquitectura Java EE/Jakarta EE
🎯 Idea clave
- La arquitectura Java EE/Jakarta EE es un estándar de desarrollo empresarial para aplicaciones basadas en Java.
- Proporciona un modelo de programación multicapa que facilita la creación de aplicaciones escalables y seguras.
- Jakarta EE es la evolución de Java EE, mantenida por la Fundación Eclipse tras la transferencia de Oracle.
- Su diseño modular permite integrar componentes reutilizables en entornos empresariales complejos.
- En la Administración General del Estado, su estudio se orienta a comprender su encaje en sistemas interoperables y reutilizables.
- No implica que la AGE utilice obligatoriamente esta tecnología, sino que forma parte del conocimiento técnico exigido.
📚 Desarrollo
Definición y propósito. La arquitectura Java EE/Jakarta EE es un conjunto de especificaciones y APIs diseñadas para desarrollar aplicaciones empresariales en Java. Su objetivo es estandarizar componentes, servicios y patrones de diseño que permitan construir sistemas robustos, escalables y mantenibles. Esta arquitectura se estructura en capas, lo que facilita la separación de responsabilidades y la reutilización de código.
Evolución histórica. Originalmente conocida como Java EE (Java Enterprise Edition), la plataforma fue desarrollada por Sun Microsystems y posteriormente mantenida por Oracle. En 2017, Oracle transfirió la gestión del proyecto a la Fundación Eclipse, que lo rebautizó como Jakarta EE. Este cambio garantizó la continuidad del estándar bajo un modelo de gobernanza abierto y comunitario, preservando su compatibilidad con versiones anteriores.
Modelo multicapa. La arquitectura se organiza en capas lógicas: presentación, negocio y persistencia. La capa de presentación gestiona la interacción con el usuario, la capa de negocio implementa la lógica de la aplicación, y la capa de persistencia maneja el almacenamiento y recuperación de datos. Esta separación permite desarrollar, probar y mantener cada componente de forma independiente, mejorando la modularidad y la flexibilidad.
Componentes clave. Jakarta EE define un conjunto de APIs y servicios que los desarrolladores pueden utilizar para construir aplicaciones. Entre ellos destacan los servlets, las páginas JSP, los Enterprise JavaBeans (EJB), las APIs de persistencia (JPA), los servicios web (JAX-RS) y los mecanismos de seguridad. Estos componentes se ejecutan dentro de un contenedor Jakarta EE, que proporciona servicios como gestión de transacciones, inyección de dependencias y ciclo de vida de los objetos.
Encaje en la AGE. En el contexto de la Administración General del Estado, la arquitectura Jakarta EE se estudia como un marco de referencia para sistemas empresariales. Su conocimiento permite evaluar soluciones técnicas, analizar documentación, revisar configuraciones y coordinar el mantenimiento de aplicaciones. Sin embargo, su adopción no es obligatoria, ya que la AGE prioriza la reutilización de soluciones existentes y el cumplimiento de normativas como el Real Decreto 203/2021 y el Esquema Nacional de Seguridad.
Interoperabilidad y reutilización. Uno de los principios fundamentales en la AGE es la interoperabilidad entre sistemas. Jakarta EE facilita este objetivo al proporcionar estándares abiertos y APIs bien documentadas. Además, su enfoque modular permite reutilizar componentes en diferentes proyectos, reduciendo costes y tiempos de desarrollo. No obstante, antes de implementar una solución basada en Jakarta EE, debe verificarse si ya existe un servicio o componente común que cubra la necesidad.
Formación técnica. Para el Cuerpo de Gestión de Sistemas e Informática de la Administración del Estado, comprender esta arquitectura es esencial para desempeñar funciones como análisis de requisitos, revisión de incidencias, valoración de configuraciones y coordinación con equipos de desarrollo. No se trata de dominar su implementación práctica, sino de entender su funcionamiento, ventajas y limitaciones en entornos empresariales.
🧩 Elementos esenciales
- Jakarta EE: Plataforma de desarrollo empresarial en Java, sucesora de Java EE, mantenida por la Fundación Eclipse.
- Contenedor Jakarta EE: Entorno de ejecución que proporciona servicios como gestión de transacciones, seguridad y ciclo de vida a los componentes.
- Servlets: Componentes que procesan peticiones HTTP y generan respuestas dinámicas en aplicaciones web.
- Enterprise JavaBeans (EJB): Componentes que encapsulan la lógica de negocio y se ejecutan en el contenedor.
- Java Persistence API (JPA): Especificación para gestionar la persistencia de datos en bases de datos relacionales.
- JAX-RS: API para desarrollar servicios web RESTful en Java.
- JavaServer Pages (JSP): Tecnología para crear páginas web dinámicas mediante plantillas y código Java.
- Inyección de dependencias: Mecanismo que permite gestionar las dependencias entre componentes de forma automática.
- Transacciones: Mecanismo que garantiza la atomicidad, consistencia, aislamiento y durabilidad (ACID) en operaciones de negocio.
- Seguridad: Conjunto de APIs y servicios para implementar autenticación, autorización y protección de datos.
- Escalabilidad: Capacidad de la arquitectura para manejar un crecimiento en el número de usuarios o transacciones sin degradar el rendimiento.
- Modularidad: Diseño que permite desarrollar, probar y mantener componentes de forma independiente.
🧠 Recuerda
- Jakarta EE es un estándar, no una tecnología obligatoria en la AGE.
- Su estudio permite analizar soluciones técnicas y coordinar el mantenimiento de sistemas.
- La arquitectura se organiza en capas: presentación, negocio y persistencia.
- Los contenedores Jakarta EE proporcionan servicios esenciales como transacciones y seguridad.
- La reutilización y la interoperabilidad son principios clave en la AGE.
- No se debe asumir que un organismo concreto utiliza Jakarta EE sin fuente oficial.
- El conocimiento de esta arquitectura es formativo, no implica implementación directa.
- La evolución de Java EE a Jakarta EE garantiza su continuidad bajo un modelo abierto.
- Las APIs como JPA, JAX-RS y EJB son fundamentales para desarrollar aplicaciones empresariales.
- La modularidad facilita el desarrollo y mantenimiento de sistemas complejos.
2. Características de funcionamiento
2. Características de funcionamiento
🎯 Idea clave
- La arquitectura Java EE/Jakarta EE se basa en un modelo multicapa que separa la lógica de negocio, presentación y persistencia.
- Ofrece un entorno estandarizado para el desarrollo de aplicaciones empresariales escalables y seguras.
- Incluye servicios integrados como transacciones, seguridad, mensajería y acceso a datos.
- Facilita la portabilidad entre diferentes servidores de aplicaciones que implementen la especificación.
- Permite la reutilización de componentes mediante tecnologías como EJB, JPA y CDI.
- Garantiza la interoperabilidad con otros sistemas mediante estándares como SOAP y REST.
📚 Desarrollo
Modelo multicapa. Java EE/Jakarta EE se estructura en capas bien definidas: presentación (web), negocio (EJB) y persistencia (JPA). Esta separación permite desarrollar aplicaciones modulares, donde cada capa puede evolucionar de forma independiente sin afectar al resto. La capa de presentación gestiona la interacción con el usuario, la capa de negocio contiene la lógica empresarial, y la capa de persistencia se encarga del almacenamiento y recuperación de datos.
Servicios integrados. La plataforma proporciona servicios listos para usar, como gestión de transacciones distribuidas (JTA), autenticación y autorización (JAAS), mensajería asíncrona (JMS) y acceso a bases de datos (JDBC). Estos servicios reducen la complejidad del desarrollo, ya que los desarrolladores no necesitan implementarlos desde cero. Por ejemplo, JTA permite gestionar transacciones que abarcan múltiples recursos, como bases de datos y colas de mensajes.
Portabilidad. Una de las principales ventajas de Java EE/Jakarta EE es su capacidad para ejecutarse en cualquier servidor de aplicaciones que cumpla con la especificación. Esto evita la dependencia de un proveedor concreto y facilita la migración entre entornos. Servidores como WildFly, Payara o OpenLiberty implementan la especificación, garantizando que las aplicaciones desarrolladas sean portables entre ellos.
Reutilización de componentes. La arquitectura fomenta la reutilización mediante componentes como Enterprise JavaBeans (EJB), Contexts and Dependency Injection (CDI) y Java Persistence API (JPA). Los EJB permiten encapsular la lógica de negocio en componentes reutilizables, mientras que CDI facilita la inyección de dependencias, mejorando la modularidad. JPA, por su parte, estandariza el acceso a bases de datos relacionales, permitiendo mapear objetos Java a tablas de forma transparente.
Interoperabilidad. Java EE/Jakarta EE soporta estándares como SOAP (JAX-WS) y REST (JAX-RS) para la comunicación entre sistemas. Esto permite integrar aplicaciones desarrolladas en la plataforma con otros sistemas, ya sean internos o externos. Por ejemplo, JAX-RS facilita la creación de servicios web RESTful, que pueden ser consumidos por aplicaciones móviles, frontend web o sistemas de terceros.
Escalabilidad. La arquitectura está diseñada para soportar aplicaciones de gran escala, tanto en términos de usuarios como de volumen de datos. Los servidores de aplicaciones pueden distribuir la carga entre múltiples nodos, y tecnologías como JMS permiten manejar grandes volúmenes de mensajes de forma asíncrona. Además, la gestión de recursos como conexiones a bases de datos se optimiza mediante pools de conexiones.
Seguridad. Java EE/Jakarta EE incluye mecanismos de seguridad integrados, como autenticación basada en roles (JAAS), cifrado de comunicaciones (SSL/TLS) y protección contra ataques comunes (como inyección SQL). Estos mecanismos se configuran mediante anotaciones o descriptores de despliegue, lo que simplifica su implementación sin comprometer la robustez.
Despliegue simplificado. Las aplicaciones se empaquetan en archivos estándar como WAR (Web Application Archive) o EAR (Enterprise Archive), que incluyen todos los componentes necesarios. Esto facilita el despliegue en diferentes entornos, desde desarrollo hasta producción, sin necesidad de modificar el código. Además, los servidores de aplicaciones proporcionan herramientas para gestionar el ciclo de vida de las aplicaciones, como despliegues en caliente o rollbacks.
🧩 Elementos esenciales
- Modelo multicapa: Separación en capas de presentación, negocio y persistencia para mejorar la modularidad.
- Servicios integrados: Transacciones (JTA), seguridad (JAAS), mensajería (JMS) y acceso a datos (JDBC).
- Portabilidad: Ejecución en cualquier servidor de aplicaciones que cumpla con la especificación.
- Reutilización de componentes: Uso de EJB, CDI y JPA para encapsular lógica y datos.
- Interoperabilidad: Soporte para estándares como SOAP (JAX-WS) y REST (JAX-RS).
- Escalabilidad: Capacidad para distribuir la carga y manejar grandes volúmenes de datos.
- Seguridad: Mecanismos integrados como autenticación, autorización y cifrado.
- Despliegue estándar: Empaquetado en archivos WAR o EAR para facilitar la distribución.
- Gestión de recursos: Optimización mediante pools de conexiones y gestión de hilos.
- Estándares abiertos: Basado en especificaciones públicas y mantenidas por la comunidad.
🧠 Recuerda
- Java EE/Jakarta EE es una plataforma para aplicaciones empresariales escalables y seguras.
- Su modelo multicapa permite separar la lógica de negocio, presentación y persistencia.
- Incluye servicios integrados como transacciones, seguridad y mensajería.
- La portabilidad es una de sus principales ventajas, evitando la dependencia de un proveedor.
- Los componentes como EJB, CDI y JPA fomentan la reutilización y modularidad.
- Soporta estándares como SOAP y REST para la interoperabilidad con otros sistemas.
- La escalabilidad se logra mediante distribución de carga y gestión eficiente de recursos.
- La seguridad está integrada en la plataforma, con mecanismos como JAAS y SSL/TLS.
- El despliegue se simplifica mediante archivos estándar como WAR y EAR.
- La arquitectura está diseñada para entornos empresariales con altos requisitos de rendimiento y fiabilidad.
3. Elementos constitutivos
3. Elementos constitutivos
🎯 Idea clave
- La arquitectura Java EE/Jakarta EE se estructura en componentes modulares que interactúan entre sí para construir aplicaciones empresariales.
- Los contenedores actúan como intermediarios entre los componentes y los servicios del sistema, gestionando su ciclo de vida.
- Los componentes principales incluyen servlets, JSP, EJB, JPA, CDI y servicios web, cada uno con un propósito específico.
- La especificación define APIs estandarizadas que garantizan portabilidad entre diferentes implementaciones.
- La separación de responsabilidades facilita el desarrollo, despliegue y mantenimiento de aplicaciones complejas.
- La integración con servicios externos, como bases de datos o sistemas de autenticación, se realiza mediante APIs normalizadas.
📚 Desarrollo
Componentes básicos. La arquitectura Java EE/Jakarta EE se compone de elementos modulares que encapsulan funcionalidades específicas. Estos componentes se ejecutan dentro de contenedores, que proporcionan servicios como gestión de transacciones, seguridad o concurrencia. La modularidad permite desarrollar aplicaciones escalables y mantenibles, donde cada componente puede actualizarse o reemplazarse sin afectar al resto del sistema.
Contenedores. Los contenedores son el núcleo de la arquitectura, actuando como entornos de ejecución para los componentes. Existen dos tipos principales: el contenedor web, que gestiona servlets y páginas JSP, y el contenedor EJB, responsable de los Enterprise JavaBeans. Estos contenedores ofrecen servicios como inyección de dependencias, pooling de recursos o manejo de transacciones, liberando al desarrollador de implementar estas funcionalidades de forma manual.
Servlets y JSP. Los servlets son componentes Java que procesan peticiones HTTP y generan respuestas dinámicas. Las páginas JSP (JavaServer Pages) permiten incrustar código Java en documentos HTML, facilitando la creación de interfaces de usuario. Ambos se ejecutan en el contenedor web y son fundamentales para el desarrollo de aplicaciones web en la AGE, donde se utilizan para construir portales de servicios públicos o sistemas de tramitación electrónica.
Enterprise JavaBeans (EJB). Los EJB son componentes empresariales que encapsulan la lógica de negocio. Se clasifican en tres tipos: EJB de sesión (stateless, stateful y singleton), EJB de mensaje (para sistemas asíncronos) y EJB de entidad (aunque estos últimos han sido reemplazados por JPA). En la AGE, los EJB se emplean para implementar servicios transaccionales, como la gestión de expedientes administrativos o la validación de datos en sistemas como Cl@ve o Notific@.
Contexts and Dependency Injection (CDI). CDI es un mecanismo que permite la inyección de dependencias y la gestión del ciclo de vida de los componentes. Facilita la creación de aplicaciones desacopladas, donde los componentes no necesitan conocer los detalles de implementación de sus dependencias. En la AGE, CDI se utiliza para integrar módulos reutilizables, como servicios de autenticación o conectores con bases de datos, garantizando la coherencia y reduciendo la duplicidad de código.
Java Persistence API (JPA). JPA es la especificación estándar para la gestión de la persistencia de datos en bases de datos relacionales. Define un modelo de mapeo objeto-relacional (ORM) que permite interactuar con la base de datos mediante objetos Java, en lugar de sentencias SQL directas. En la AGE, JPA se emplea en sistemas como la Sede Electrónica de la Seguridad Social, donde se gestionan grandes volúmenes de datos estructurados con Oracle Database.
Servicios web. La arquitectura Java EE/Jakarta EE incluye soporte para servicios web basados en estándares como SOAP y REST. Estos permiten la comunicación entre aplicaciones distribuidas, facilitando la interoperabilidad entre sistemas de la AGE. Por ejemplo, los servicios web se utilizan en plataformas como Notific@ para integrar notificaciones electrónicas con otros sistemas administrativos, garantizando la coherencia y la reutilización de funcionalidades.
APIs de seguridad. La especificación incluye APIs para gestionar la autenticación, autorización y cifrado de datos. En la AGE, estas APIs se integran con sistemas como Cl@ve, que utiliza SAML 2.0 y OpenID Connect para proporcionar autenticación federada. La seguridad es un requisito crítico en aplicaciones administrativas, donde se manejan datos sensibles de ciudadanos y empleados públicos.
🧩 Elementos esenciales
- Contenedores: Entornos de ejecución que gestionan el ciclo de vida de los componentes y proporcionan servicios como transacciones o seguridad.
- Servlets: Componentes Java que procesan peticiones HTTP y generan respuestas dinámicas en aplicaciones web.
- JSP (JavaServer Pages): Tecnología que permite incrustar código Java en documentos HTML para crear interfaces dinámicas.
- EJB (Enterprise JavaBeans): Componentes empresariales que encapsulan la lógica de negocio, disponibles en versiones stateless, stateful y singleton.
- CDI (Contexts and Dependency Injection): Mecanismo para la inyección de dependencias y gestión del ciclo de vida de los componentes.
- JPA (Java Persistence API): Especificación para el mapeo objeto-relacional, que facilita la persistencia de datos en bases de datos relacionales.
- Servicios web: APIs basadas en estándares como SOAP y REST para la comunicación entre aplicaciones distribuidas.
- APIs de seguridad: Herramientas para gestionar autenticación, autorización y cifrado, integradas con sistemas como Cl@ve.
- Java Message Service (JMS): API para la comunicación asíncrona entre componentes mediante colas de mensajes.
- Java Transaction API (JTA): Especificación para la gestión de transacciones distribuidas en entornos empresariales.
- JavaMail: API para el envío y recepción de correos electrónicos, utilizada en sistemas como Notific@.
- Java Naming and Directory Interface (JNDI): Servicio de directorio para la localización de recursos como bases de datos o colas de mensajes.
🧠 Recuerda
- Los contenedores son el núcleo de la arquitectura, proporcionando servicios esenciales a los componentes.
- Los servlets y JSP son fundamentales para el desarrollo de aplicaciones web en la AGE.
- Los EJB encapsulan la lógica de negocio y se utilizan en sistemas transaccionales.
- CDI facilita la inyección de dependencias y el desacoplamiento de componentes.
- JPA simplifica la persistencia de datos en bases de datos relacionales.
- Los servicios web permiten la interoperabilidad entre sistemas distribuidos.
- Las APIs de seguridad son críticas para proteger datos sensibles en aplicaciones administrativas.
- La modularidad de la arquitectura facilita el mantenimiento y la escalabilidad de las aplicaciones.
- La especificación Java EE/Jakarta EE garantiza portabilidad entre diferentes implementaciones.
- La integración con servicios comunes de la AGE, como Cl@ve o Notific@, se realiza mediante APIs estandarizadas.
4. Productos y herramientas
4. Productos y herramientas
🎯 Idea clave
- Los servidores de aplicaciones son productos clave para desplegar aplicaciones Java EE/Jakarta EE en la Administración General del Estado.
- Las herramientas de desarrollo integradas facilitan la creación, depuración y despliegue de componentes en entornos Java EE/Jakarta EE.
- Los frameworks de persistencia simplifican el acceso a bases de datos relacionales desde aplicaciones empresariales.
- Las herramientas de seguridad permiten implementar autenticación, autorización y cifrado en aplicaciones Java EE/Jakarta EE.
- Los sistemas de gestión de dependencias automatizan la integración de bibliotecas y componentes en proyectos Java EE/Jakarta EE.
- Las plataformas de integración continua y despliegue continuo optimizan el ciclo de vida del desarrollo en la AGE.
📚 Desarrollo
Servidores de aplicaciones. En la Administración General del Estado, los servidores de aplicaciones certificados para Java EE/Jakarta EE son fundamentales para ejecutar aplicaciones empresariales. Entre los más utilizados se encuentran JBoss EAP, WildFly, Payara y TomEE, que proporcionan contenedores para componentes como EJB, servlets y JPA. Estos servidores garantizan escalabilidad, alta disponibilidad y cumplimiento de estándares, aspectos críticos en entornos administrativos con alta demanda de servicios.
Entornos de desarrollo integrados (IDE). Las herramientas como Eclipse IDE, IntelliJ IDEA y NetBeans son esenciales para desarrollar aplicaciones Java EE/Jakarta EE. Estos IDE ofrecen soporte nativo para tecnologías como JSF, CDI, EJB y JPA, facilitando la codificación, depuración y despliegue. Además, permiten la integración con servidores de aplicaciones y sistemas de control de versiones, optimizando el flujo de trabajo en proyectos de la AGE.
Frameworks de persistencia. Para gestionar la persistencia de datos, se emplean frameworks como Hibernate y EclipseLink, que implementan el estándar JPA (Java Persistence API). Estos frameworks permiten mapear objetos Java a tablas relacionales, simplificando el acceso a bases de datos como Oracle Database o PostgreSQL, ampliamente utilizadas en la Administración. La integración con JTA (Java Transaction API) asegura la consistencia en transacciones distribuidas.
Herramientas de seguridad. La seguridad en aplicaciones Java EE/Jakarta EE se implementa mediante frameworks como Java Authentication and Authorization Service (JAAS) y Spring Security. Estos permiten configurar autenticación basada en roles, cifrado de datos y protección contra vulnerabilidades como inyecciones SQL o cross-site scripting (XSS). En la AGE, la integración con sistemas como Cl@ve o Autenticación SAML es común para garantizar el acceso seguro a servicios electrónicos.
Gestión de dependencias. Herramientas como Maven y Gradle son fundamentales para gestionar las dependencias de proyectos Java EE/Jakarta EE. Estas plataformas automatizan la descarga de bibliotecas, la compilación y el empaquetado de aplicaciones, asegurando la coherencia entre entornos de desarrollo, pruebas y producción. En la AGE, se prioriza el uso de repositorios internos para cumplir con políticas de seguridad y reutilización de componentes.
Integración continua y despliegue continuo (CI/CD). En la Administración General del Estado, se emplean herramientas como Jenkins, GitLab CI/CD y Azure DevOps para automatizar pruebas, construcción y despliegue de aplicaciones Java EE/Jakarta EE. Estos sistemas permiten detectar errores tempranos, reducir tiempos de entrega y garantizar la calidad del software, alineándose con los principios de DevOps y las normativas de interoperabilidad y seguridad.
Herramientas de monitorización y logging. Para garantizar el correcto funcionamiento de las aplicaciones, se utilizan herramientas como Prometheus, Grafana y ELK Stack (Elasticsearch, Logstash, Kibana). Estas permiten monitorizar el rendimiento, registrar eventos y analizar logs en tiempo real, facilitando la detección y resolución de incidencias en entornos críticos de la AGE.
Documentación y generación de APIs. La documentación de aplicaciones Java EE/Jakarta EE se realiza mediante herramientas como Swagger/OpenAPI y Javadoc. Estas permiten generar documentación interactiva y estandarizada para APIs RESTful, mejorando la colaboración entre equipos y la integración con otros sistemas de la Administración.
🧩 Elementos esenciales
- JBoss EAP: Servidor de aplicaciones certificado para Java EE/Jakarta EE, ampliamente utilizado en la AGE por su escalabilidad y soporte empresarial.
- Hibernate: Framework de persistencia que implementa JPA, facilitando el mapeo objeto-relacional en bases de datos como Oracle o PostgreSQL.
- Maven: Herramienta de gestión de dependencias que automatiza la construcción y empaquetado de proyectos Java EE/Jakarta EE.
- Jenkins: Plataforma de CI/CD para automatizar pruebas, construcción y despliegue de aplicaciones en entornos administrativos.
- JAAS: Framework de seguridad para implementar autenticación y autorización en aplicaciones Java EE/Jakarta EE.
- Eclipse IDE: Entorno de desarrollo integrado con soporte nativo para tecnologías Java EE/Jakarta EE como JSF, CDI y EJB.
- Swagger/OpenAPI: Herramienta para documentar APIs RESTful, mejorando la interoperabilidad entre sistemas de la AGE.
- WildFly: Servidor de aplicaciones ligero y modular, compatible con Jakarta EE, utilizado en proyectos con requisitos de alto rendimiento.
- Spring Security: Framework de seguridad que complementa JAAS, proporcionando protección contra vulnerabilidades comunes.
- Gradle: Alternativa a Maven para gestión de dependencias, con mayor flexibilidad en la definición de builds.
- Prometheus: Herramienta de monitorización para supervisar el rendimiento de aplicaciones en tiempo real.
- GitLab CI/CD: Plataforma de integración y despliegue continuo integrada con repositorios Git, utilizada en la AGE para automatizar pipelines.
🧠 Recuerda
- Los servidores de aplicaciones como JBoss EAP y WildFly son fundamentales para desplegar componentes Java EE/Jakarta EE en la AGE.
- Herramientas como Maven y Gradle automatizan la gestión de dependencias, asegurando coherencia entre entornos.
- Frameworks como Hibernate y EclipseLink simplifican la persistencia de datos mediante JPA.
- La seguridad se implementa con JAAS, Spring Security y estándares como SAML para integración con sistemas como Cl@ve.
- Jenkins y GitLab CI/CD son clave para automatizar pruebas y despliegues en proyectos de la Administración.
- La documentación con Swagger/OpenAPI mejora la interoperabilidad y colaboración entre equipos.
- Herramientas de monitorización como Prometheus permiten detectar y resolver incidencias en tiempo real.
- Los IDE como Eclipse e IntelliJ facilitan el desarrollo, depuración y despliegue de aplicaciones Java EE/Jakarta EE.
- La reutilización de componentes y el cumplimiento de estándares son prioritarios en la AGE.
- La integración con bases de datos como Oracle o PostgreSQL es común en aplicaciones empresariales de la Administración.
5. Persistencia
5. Persistencia
🎯 Idea clave
- La persistencia en Jakarta EE permite almacenar y recuperar datos de forma estructurada en bases de datos relacionales.
- Se basa en estándares como JPA (Java Persistence API) para mapear objetos Java a tablas de bases de datos.
- Los contenedores Jakarta EE gestionan la conexión con la base de datos, liberando al desarrollador de tareas de bajo nivel.
- La persistencia facilita la integración con sistemas existentes en la AGE, garantizando interoperabilidad y reutilización.
- Las transacciones son clave para asegurar la consistencia de los datos en entornos empresariales.
- Jakarta EE soporta múltiples proveedores de persistencia, permitiendo adaptarse a las necesidades de la Administración.
📚 Desarrollo
Definición y propósito. La persistencia en Jakarta EE se refiere a la capacidad de almacenar y recuperar datos de manera permanente, típicamente en bases de datos relacionales. Su objetivo es abstraer la complejidad del acceso a datos, permitiendo a los desarrolladores trabajar con objetos Java en lugar de consultas SQL directas. Esto es especialmente relevante en la AGE, donde la gestión de datos debe ser segura, eficiente y compatible con infraestructuras existentes.
Java Persistence API (JPA). JPA es el estándar central para la persistencia en Jakarta EE. Define un conjunto de interfaces y anotaciones que permiten mapear clases Java a tablas de bases de datos, así como atributos a columnas. JPA facilita operaciones como la creación, lectura, actualización y eliminación de registros (CRUD), utilizando un lenguaje de consulta propio llamado JPQL (Java Persistence Query Language). Este enfoque reduce la dependencia de SQL nativo y mejora la portabilidad entre diferentes sistemas gestores de bases de datos.
Gestión de conexiones. En Jakarta EE, la gestión de conexiones a bases de datos se delega al contenedor, que proporciona un pool de conexiones para optimizar el rendimiento. Esto es crucial en entornos de la AGE, donde múltiples aplicaciones pueden acceder simultáneamente a los mismos datos. El contenedor también se encarga de la inyección de dependencias, permitiendo que los componentes accedan a los recursos de persistencia de manera transparente.
Transacciones. Las transacciones son esenciales para garantizar la integridad de los datos. Jakarta EE soporta transacciones declarativas mediante anotaciones como @Transactional, lo que permite definir el ámbito de una transacción sin escribir código adicional. Esto es especialmente útil en la AGE, donde las operaciones suelen involucrar múltiples pasos y sistemas, y cualquier fallo debe revertirse para evitar inconsistencias.
Integración con la AGE. En la Administración General del Estado, la persistencia debe alinearse con los principios de interoperabilidad y reutilización establecidos en el Esquema Nacional de Interoperabilidad (ENI). Jakarta EE facilita esta integración al soportar estándares abiertos y permitir la conexión con bases de datos como Oracle Database o PostgreSQL, utilizadas en sistemas como la Sede Electrónica de la Seguridad Social o Cl@ve.
Proveedores de persistencia. Jakarta EE no implementa JPA directamente, sino que delega esta tarea en proveedores como EclipseLink o Hibernate. Estos proveedores ofrecen funcionalidades adicionales, como caché de segundo nivel o soporte para bases de datos no relacionales, lo que permite adaptar la persistencia a las necesidades específicas de la AGE. La elección del proveedor depende de factores como el rendimiento, la escalabilidad y la compatibilidad con el entorno existente.
Seguridad en la persistencia. La gestión de datos en la AGE debe cumplir con el Esquema Nacional de Seguridad (ENS), que exige protección adecuada de la información. Jakarta EE facilita este cumplimiento mediante mecanismos como el cifrado de datos sensibles, la gestión segura de credenciales y la auditoría de accesos. Además, la persistencia debe integrarse con sistemas de autenticación y autorización para garantizar que solo usuarios autorizados accedan a los datos.
🧩 Elementos esenciales
- JPA (Java Persistence API): Estándar para mapear objetos Java a bases de datos relacionales y gestionar su persistencia.
- Entidades: Clases Java anotadas con
@Entityque representan tablas en una base de datos. - JPQL (Java Persistence Query Language): Lenguaje de consulta orientado a objetos para interactuar con entidades JPA.
- Pool de conexiones: Mecanismo gestionado por el contenedor para optimizar el acceso a la base de datos.
- Transacciones: Mecanismo para garantizar la consistencia de los datos, gestionado mediante anotaciones como
@Transactional. - Proveedores de persistencia: Implementaciones de JPA como EclipseLink o Hibernate, que ofrecen funcionalidades adicionales.
- Inyección de dependencias: Mecanismo para acceder a recursos de persistencia sin instanciarlos manualmente.
- Interoperabilidad: Capacidad de integrarse con sistemas existentes en la AGE, cumpliendo con el ENI.
- Seguridad: Protección de datos mediante cifrado, gestión de credenciales y auditoría, alineada con el ENS.
- Bases de datos soportadas: Oracle Database, PostgreSQL, MySQL y otras compatibles con JPA.
🧠 Recuerda
- La persistencia en Jakarta EE se basa en JPA para abstraer el acceso a bases de datos.
- Las entidades son clases Java que representan tablas en una base de datos.
- JPQL permite realizar consultas orientadas a objetos, evitando SQL nativo.
- El contenedor gestiona el pool de conexiones y las transacciones de forma transparente.
- Las transacciones son clave para garantizar la consistencia de los datos en entornos empresariales.
- Jakarta EE soporta múltiples proveedores de persistencia, como EclipseLink o Hibernate.
- La persistencia debe alinearse con los principios de interoperabilidad y reutilización de la AGE.
- La seguridad en la persistencia es fundamental para cumplir con el Esquema Nacional de Seguridad.
- La elección del proveedor de persistencia depende de requisitos como rendimiento y escalabilidad.
- La integración con bases de datos como Oracle o PostgreSQL es común en sistemas de la AGE.
6. Seguridad
6. Seguridad
🎯 Idea clave
- La seguridad en aplicaciones Jakarta EE debe alinearse con los requisitos del Esquema Nacional de Seguridad en la Administración General del Estado.
- La autenticación y autorización son pilares fundamentales para garantizar el acceso controlado a recursos y funcionalidades.
- La configuración segura del servidor de aplicaciones es esencial para mitigar riesgos y vulnerabilidades.
- La gestión de sesiones y el registro de eventos permiten detectar y responder a incidentes de seguridad de manera efectiva.
- La actualización periódica del servidor y la revisión de dependencias son prácticas obligatorias para mantener la integridad del sistema.
- La integración con soluciones comunes de la AGE, como plataformas de autenticación, refuerza la interoperabilidad y la reutilización.
📚 Desarrollo
Marco normativo aplicable. En la Administración General del Estado, la seguridad de las aplicaciones Jakarta EE debe cumplir con el Esquema Nacional de Seguridad (ENS), establecido en el Real Decreto 311/2022. Este marco exige una gestión de riesgos estructurada, que incluya prevención, detección, respuesta y conservación de la seguridad. Las aplicaciones deben implementar controles técnicos y organizativos para garantizar la confidencialidad, integridad y disponibilidad de la información.
Autenticación y autorización. Las aplicaciones Jakarta EE deben incorporar mecanismos robustos de autenticación para verificar la identidad de los usuarios. La autorización, por su parte, define los permisos y accesos específicos para cada rol o perfil de usuario. Estos controles se implementan mediante estándares como JAAS (Java Authentication and Authorization Service) o integraciones con sistemas externos de identidad, como Cl@ve o plataformas de autenticación centralizada de la AGE.
Configuración segura del servidor. La seguridad en Jakarta EE depende en gran medida de la configuración del servidor de aplicaciones. Esto incluye la desactivación de servicios innecesarios, la aplicación de parches de seguridad, la configuración de firewalls y la restricción de accesos a puertos y protocolos. Un servidor mal configurado puede convertirse en un punto crítico de vulnerabilidad, exponiendo la aplicación a ataques como inyecciones SQL, cross-site scripting (XSS) o denegación de servicio (DoS).
Gestión de sesiones y registro de eventos. La gestión segura de sesiones es fundamental para evitar accesos no autorizados. Jakarta EE permite configurar tiempos de expiración de sesiones, invalidación de sesiones activas y uso de tokens seguros. Además, el registro de eventos (logging) debe estar habilitado para registrar accesos, modificaciones y errores, facilitando la auditoría y la detección de incidentes. Estos registros deben almacenarse de manera segura y ser accesibles solo para personal autorizado.
Actualización y revisión de dependencias. Las aplicaciones Jakarta EE dependen de múltiples librerías y componentes externos. La revisión periódica de estas dependencias es crucial para identificar y corregir vulnerabilidades conocidas. Herramientas como OWASP Dependency-Check pueden utilizarse para analizar el código y detectar posibles riesgos. Asimismo, el servidor de aplicaciones debe mantenerse actualizado con las últimas versiones y parches de seguridad proporcionados por el fabricante.
Integración con soluciones comunes de la AGE. El Real Decreto 203/2021 establece la obligación de evaluar la reutilización de soluciones existentes antes de desarrollar nuevas aplicaciones. En el ámbito de la seguridad, esto implica integrar plataformas comunes de autenticación, validación de firmas electrónicas o gestión de identidades, como las proporcionadas por la Red SARA. Esta integración no solo refuerza la seguridad, sino que también garantiza la interoperabilidad entre sistemas de la Administración.
Protección de datos y cumplimiento legal. Las aplicaciones Jakarta EE deben cumplir con el Reglamento General de Protección de Datos (RGPD) y la Ley Orgánica 3/2018 de Protección de Datos Personales y garantía de los derechos digitales. Esto incluye la implementación de medidas técnicas para el cifrado de datos, la anonimización de información sensible y la gestión de consentimientos. Además, debe garantizarse el derecho de acceso, rectificación, supresión y portabilidad de los datos personales.
Pruebas de seguridad. Antes de desplegar una aplicación Jakarta EE, es necesario realizar pruebas de seguridad para identificar vulnerabilidades. Estas pruebas pueden incluir análisis estático de código, pruebas de penetración (pentesting) y evaluaciones de cumplimiento con estándares como OWASP Top 10. Los resultados de estas pruebas deben documentarse y utilizarse para implementar las correcciones necesarias antes de la puesta en producción.
🧩 Elementos esenciales
- Autenticación: Mecanismo para verificar la identidad de los usuarios mediante credenciales o sistemas externos como Cl@ve.
- Autorización: Definición de permisos y accesos específicos para cada rol o perfil de usuario en la aplicación.
- Configuración segura del servidor: Desactivación de servicios innecesarios, aplicación de parches y restricción de accesos a puertos y protocolos.
- Gestión de sesiones: Control de tiempos de expiración, invalidación de sesiones y uso de tokens seguros para evitar accesos no autorizados.
- Registro de eventos (logging): Registro de accesos, modificaciones y errores para facilitar la auditoría y la detección de incidentes.
- Actualización de dependencias: Revisión periódica de librerías y componentes externos para corregir vulnerabilidades conocidas.
- Integración con plataformas comunes: Uso de soluciones reutilizables de la AGE, como plataformas de autenticación o validación de firmas electrónicas.
- Cifrado de datos: Protección de información sensible mediante técnicas de cifrado para garantizar la confidencialidad.
- Pruebas de seguridad: Evaluaciones previas al despliegue para identificar vulnerabilidades, como análisis estático de código o pruebas de penetración.
- Cumplimiento normativo: Adhesión al Esquema Nacional de Seguridad, RGPD y Ley Orgánica 3/2018 en materia de protección de datos.
- Protección contra ataques comunes: Implementación de medidas para prevenir inyecciones SQL, cross-site scripting (XSS) y denegación de servicio (DoS).
- Auditoría y monitorización: Seguimiento continuo de la aplicación para detectar y responder a incidentes de seguridad de manera proactiva.
🧠 Recuerda
- La seguridad en Jakarta EE debe alinearse con el Esquema Nacional de Seguridad y otras normativas aplicables en la AGE.
- La autenticación y autorización son fundamentales para controlar el acceso a recursos y funcionalidades.
- Una configuración segura del servidor es clave para mitigar riesgos y vulnerabilidades.
- La gestión de sesiones y el registro de eventos permiten detectar y responder a incidentes de manera efectiva.
- La actualización periódica del servidor y la revisión de dependencias son prácticas obligatorias.
- La integración con soluciones comunes de la AGE refuerza la interoperabilidad y la reutilización.
- Las pruebas de seguridad deben realizarse antes del despliegue para identificar y corregir vulnerabilidades.
- El cumplimiento normativo en materia de protección de datos es esencial para evitar sanciones y garantizar la privacidad.
- La auditoría y monitorización continua son herramientas clave para mantener la seguridad a lo largo del tiempo.
- La seguridad no es un proceso estático, sino que requiere revisión y actualización constante.