Saltar al contenido

Java EE, Jakarta EE y la plataforma .NET: resumen y esquema

Guía de oposiciones · Bloque III · Tema 19 · Actualizada a agosto de 2026

Este tema es una comparación permanente: dos plataformas que hacen lo mismo con nombres distintos. El tribunal casi nunca pregunta «qué es Java»; pregunta qué pieza de una plataforma equivale a cuál de la otra, y cambia una letra de una sigla a ver si te das cuenta. Ha caído en 2023, 2024 y 2026. Aquí tienes el mapa de equivalencias, tres preguntas reales resueltas y el esquema de memorización.

Jakarta EE y .NET: el mapa de equivalencias

Antes de nada, las dos genealogías, porque los nombres han cambiado y el examen usa los nuevos:

  • Java empresarial: J2EEJava EEJakarta EE. El salto es de 2019, cuando Oracle donó la plataforma a la Eclipse Foundation, y arrastró el espacio de nombres de javax.* a jakarta.*.
  • .NET: .NET Framework (solo Windows) → .NET Core.NET unificado, desde la versión 5. Hoy es multiplataforma, gratuito y de código abierto, bajo la .NET Foundation.

Si te aprendes esta tabla, tienes medio tema resuelto. Es la que el tribunal recorre de izquierda a derecha buscando el cruce:

Concepto Java / Jakarta EE .NET
Entorno de ejecución JVM (máquina virtual) CLR (Common Language Runtime)
Código intermedio Bytecode CIL / MSIL
Lenguaje principal Java C#
Framework web Jakarta Faces (JSF), servlets y JSP ASP.NET Core
ORM (persistencia) JPA / Hibernate Entity Framework
Objeto simple sin dependencias POJO (Plain Old Java Object) POCO (Plain Old CLR Object)
Gestor de paquetes Maven / Gradle NuGet

La trampa clásica de .NET es de autoría: en 2023 la opción falsa decía que era «un marco multiplataforma gratuito de Google». Es de Microsoft. Y otra decía que admite muchos lenguajes «a excepción de C#», cuando C# es precisamente su lenguaje principal.

JVM y CLR: quién ejecuta qué

Las dos plataformas funcionan igual de fondo: el código fuente no se compila a código máquina, sino a un código intermedio que un entorno de ejecución traduce sobre la marcha.

En Java, javac convierte el .java en bytecode (.class), y la JVM lo ejecuta donde sea — de ahí el write once, run anywhere. Dentro de la JVM viven las dos piezas que más caen:

  • JIT (Just-In-Time Compiler): compila el bytecode a código máquina en tiempo de ejecución, acelerando las partes más usadas. Esta definición literal fue la pregunta 47 de 2026.
  • Garbage Collector: libera automáticamente la memoria de los objetos que ya nadie referencia. No compila nada — es el distractor habitual del JIT.

Y la pareja que se confunde: el JDK (Java Development Kit) son las herramientas de desarrollo —compilador, depurador— e incluye al JRE; el JRE (Java Runtime Environment) es solo lo necesario para ejecutar: la JVM más las bibliotecas. Desarrollar necesita JDK; ejecutar, JRE.

Dónde se despliega una aplicación Java

Las aplicaciones Jakarta EE completas van a un servidor de aplicaciones (WildFly, GlassFish, WebLogic, WebSphere). Si la aplicación solo usa servlets y JSP, basta un contenedor web como Apache Tomcat, cuyo motor se llama Catalina. Las ediciones de Java tampoco fallan nunca: Java SE (estándar), Jakarta EE (empresarial, montado sobre SE) y Java ME (dispositivos).

El CLR y los ensamblados de .NET

El equivalente exacto es el CLR: recibe el CIL/MSIL que producen C#, F# o Visual Basic, lo compila con su propio JIT y se encarga de la gestión de memoria, el manejo de excepciones y la seguridad de tipos. Esas dos últimas responsabilidades juntas —excepciones y recolección de basura— fueron la pregunta 48 de 2026, con MSBuild, Kestrel y NuGet de distractores.

El ensamblado (assembly) es la unidad fundamental de despliegue de .NET, y aquí el tribunal se pone quisquilloso con los detalles:

  • Son archivos .dll (bibliotecas) o .exe (ejecutables). En 2026 la opción falsa se inventó las extensiones «.jpx» y «.dtl».
  • Contienen el CIL más los metadatos, en un manifiesto con versión y dependencias.
  • Solo se cargan en memoria si son necesarios. Esa fue la respuesta correcta.
  • La caché que permite compartirlos entre aplicaciones en .NET Framework es la GAC (Global Assembly Cache). La opción falsa la llamaba «GAP».

Sobre él descansan el CTS (sistema de tipos común) y el CLS (especificación común de lenguajes), y del ecosistema conviene reconocer NuGet (paquetes), MSBuild (compilación) y Kestrel (el servidor web de ASP.NET Core).

Persistencia: JPA, Hibernate y Entity Framework

Guardar objetos en tablas es trabajo de un ORM (Object-Relational Mapping), y el reparto por plataforma es pregunta segura: Entity Framework en .NET e Hibernate en Java. Así, cruzado, cayó en el supuesto práctico de 2024.

La distinción fina de Java es entre especificación e implementación: JPA (Jakarta Persistence API) es la especificación, y necesita un proveedor que la implemente — normalmente Hibernate, a veces EclipseLink. Decir que JPA «no necesita proveedor» es falso, y es una de las trampas de 2024.

Sobre JPA Lo que hay que saber
Entidad Clase anotada con @Entity: representa una tabla
Instancia Corresponde a una fila de esa tabla
Lenguaje de consulta JPQL — orientado a objetos. No «JPSQL»
Relaciones Sí admite uno-a-muchos, muchos-a-muchos…

Para la teoría del modelo relacional que hay debajo, la guía es la de bases de datos y modelo relacional; para las consultas, la de SQL.

Componentes de Jakarta EE que hay que reconocer

No hace falta dominarlos: basta con saber qué hace cada sigla, porque las preguntas son de emparejar.

Componente Función
Servlets Componentes de servidor que responden a peticiones HTTP
JSP / Jakarta Faces (JSF) Vistas web: páginas dinámicas y componentes de interfaz
EJB (Enterprise Beans) Componentes de lógica de negocio: transacciones y seguridad
CDI Inyección de dependencias y gestión de contextos
JPA Persistencia objeto-relacional
JAX-RS / JAX-WS Servicios web REST / SOAP
JMS Mensajería asíncrona entre componentes
JDBC Conexión a bases de datos
JNDI Servicio de nombres y directorio
JAXB Mapea XML a clases Java, y viceversa

El JAXB merece atención aparte: en el supuesto de 2024 preguntaron qué usarías «para mapear elementos XML a clases», con JPA, JAXR y JAX-RS de distractores. Las cuatro siglas empiezan igual y hacen cosas distintas: persistencia, registros de servicios y REST, respectivamente.

Interfaces: Razor, Blazor y MAUI

La capa de presentación es donde .NET tiene los nombres más reconocibles, y por eso caen:

  • Razor es la sintaxis de plantillas de ASP.NET Core para generar vistas HTML dinámicas en el servidor. No es un lenguaje de programación y no se ejecuta en el navegador.
  • Blazor sí lleva C# al navegador, mediante WebAssembly.
  • .NET MAUI (Multi-platform App UI) es el marco multiplataforma para apps móviles y de escritorio nativas con C# y XAML, sucesor de Xamarin.Forms. No es solo de Android, ni es de Java, ni es de pruebas: las tres opciones falsas de 2024.

En el lado Java: JSF, JSP y Thymeleaf para web de servidor, Vaadin para SPA, y JavaFX o Swing para escritorio. La seguridad se resuelve con Jakarta Security en un lado y ASP.NET Core Identity en el otro.

Todo esto se construye sobre orientación a objetos: si los pilares, la herencia o los patrones te bailan, están en la guía de orientación a objetos, patrones de diseño y UML.

Esquema de memorización

Los datos que se repiten convocatoria tras convocatoria, en una tabla para el repaso de última hora.

Dato Valor
Jakarta EE Java empresarial · Eclipse Foundation · espacio jakarta.*
.NET Multiplataforma y de código abierto · Microsoft, NO Google
JVM / CLR Entorno de ejecución de Java / de .NET
Bytecode / CIL-MSIL Código intermedio de Java / de .NET
JIT Compila el código intermedio a máquina en ejecución
Garbage Collector Libera memoria de objetos no referenciados
JDK / JRE Kit de desarrollo (compila) / entorno de ejecución (JVM + bibliotecas)
Servidor de apps / contenedor WildFly, GlassFish / Tomcat (motor Catalina)
CLR Excepciones + recolección de basura + seguridad de tipos
Ensamblado .dll o .exe · carga bajo demanda · caché GAC
POJO / POCO Objeto simple sin dependencias (Java / .NET)
JAXB Mapear XML ↔ clases Java
ORM Hibernate en Java · Entity Framework en .NET
JPA Entidad = tabla · instancia = fila · lenguaje JPQL · necesita proveedor
Razor Plantillas de ASP.NET Core · en el servidor · símbolo @
Blazor C# en el navegador vía WebAssembly
.NET MAUI Móvil y escritorio nativos · C# y XAML

Tres preguntas reales de examen

De los exámenes oficiales, con la respuesta de la plantilla del INAP. En los apuntes completos hay diez de este tema, resueltas y razonadas.

1TAI 2026 · modelo A · pregunta 47

¿Cuál es el componente encargado de compilar el código intermedio a código máquina en tiempo de ejecución en la arquitectura Java EE/Jakarta EE?

  1. El Garbage Collector.
  2. El bytecode.
  3. El JIT (Just-In-Time Compiler).
  4. El SDK (Software Development Kit).
Ver solución
Correcta: c. El JIT es quien compila en tiempo de ejecución. Las otras tres existen, pero hacen otra cosa: el Garbage Collector libera memoria, el bytecode es el código intermedio que se compila —no quien compila— y el SDK es el kit de desarrollo.
2TAI 2026 · modelo A · pregunta 49

Los ensamblados son, entre otras cosas, las unidades fundamentales de implementación para aplicaciones basadas en la plataforma .NET. Señale cuál es una de sus características:

  1. Se implementan como archivos que tienen «.jpx» o «.dtl» como extensión.
  2. En el caso de las bibliotecas que tienen como destino .NET Framework, pueden compartir ensamblados entre aplicaciones si los coloca en la caché global de aplicaciones (GAP).
  3. Proporcionan a Internet Information Services la información necesaria para conocer las versiones de los archivos.
  4. Solo se cargan en memoria si son necesarios. Si no se usan, no se cargan.
Ver solución
Correcta: d. Carga bajo demanda. Las otras tres se apoyan en cambiar una letra o una palabra: la extensión real es .dll o .exe, y la caché es la GAC (Global Assembly Cache, de ensamblados), no «GAP» ni «de aplicaciones».
3TAI 2024 · modelo A · pregunta 45

La persistencia en Jakarta EE se gestiona principalmente a través de la especificación Jakarta Persistence API (JPA). Indique la respuesta correcta:

  1. Una de sus ventajas es que no necesita utilizar un proveedor de JPA.
  2. El lenguaje de consulta similar a SQL pero orientado a objetos de JPA es JPSQL.
  3. Normalmente, una entidad representa una tabla en una base de datos relacional y cada instancia de la entidad corresponde a una fila de esa tabla.
  4. JPA no permite definir relaciones entre entidades del tipo uno a muchos.
Ver solución
Correcta: c. Entidad = tabla, instancia = fila. Las otras tres son negaciones falsas o una sigla retocada: JPA necesita proveedor (Hibernate), su lenguaje es JPQL —no «JPSQL»— y admite relaciones uno-a-muchos.

Preguntas frecuentes

¿Qué diferencia hay entre la JVM y el CLR?

Son la misma idea en cada plataforma: el entorno de ejecución que interpreta el código intermedio. La JVM ejecuta bytecode de Java; el CLR (Common Language Runtime) ejecuta CIL/MSIL de C#, F# o Visual Basic. Los dos incorporan un compilador JIT y un recolector de basura, y los dos hacen que el mismo binario corra en varios sistemas operativos.

¿Qué diferencia hay entre JPA e Hibernate?

JPA es la especificación —el contrato— y Hibernate es una implementación concreta de ese contrato, la más extendida. Por eso JPA por sí sola no funciona: necesita un proveedor detrás, que puede ser Hibernate o EclipseLink. Es el error que el tribunal intenta colar diciendo que «no necesita proveedor».

¿Qué diferencia hay entre el JDK y el JRE?

El JDK (Java Development Kit) sirve para desarrollar: trae el compilador, el depurador y las demás herramientas, e incluye dentro al JRE. El JRE (Java Runtime Environment) sirve solo para ejecutar: es la JVM más las bibliotecas estándar. Si solo vas a correr una aplicación, con el JRE basta; si vas a compilarla, necesitas el JDK.

¿Qué es un ensamblado en .NET?

Es la unidad fundamental de despliegue de una aplicación .NET: un archivo .dll o .exe que contiene el código intermedio (CIL) y sus metadatos, incluido el manifiesto con la versión y las dependencias. Se carga en memoria solo cuando hace falta, y en .NET Framework puede compartirse entre aplicaciones colocándolo en la GAC (Global Assembly Cache).

Scroll al inicio