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: J2EE → Java EE → Jakarta EE. El salto es de 2019, cuando Oracle donó la plataforma a la Eclipse Foundation, y arrastró el espacio de nombres de
javax.*ajakarta.*. - .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.
¿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?
- El Garbage Collector.
- El bytecode.
- El JIT (Just-In-Time Compiler).
- El SDK (Software Development Kit).
Ver solución
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:
- Se implementan como archivos que tienen «.jpx» o «.dtl» como extensión.
- 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).
- Proporcionan a Internet Information Services la información necesaria para conocer las versiones de los archivos.
- Solo se cargan en memoria si son necesarios. Si no se usan, no se cargan.
Ver solución
.dll o .exe, y la caché es la GAC (Global Assembly Cache, de ensamblados), no «GAP» ni «de aplicaciones».La persistencia en Jakarta EE se gestiona principalmente a través de la especificación Jakarta Persistence API (JPA). Indique la respuesta correcta:
- Una de sus ventajas es que no necesita utilizar un proveedor de JPA.
- El lenguaje de consulta similar a SQL pero orientado a objetos de JPA es JPSQL.
- 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.
- JPA no permite definir relaciones entre entidades del tipo uno a muchos.
Ver solución
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).