Jakarta EE Flashcards

(265 cards)

1
Q

¿Qué es Jakarta EE en esencia?

A

Un conjunto de especificaciones para el desarrollo de software empresarial en Java.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Quién gestiona actualmente Jakarta EE?

A

La Eclipse Foundation.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Cuál fue el cambio más crítico en Jakarta EE 9?

A

El cambio del espacio de nombres de javax.* a jakarta.*.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Qué es un “Servidor de Aplicaciones”?

A

Un software que implementa las especificaciones de Jakarta EE para ejecutar aplicaciones (ej. Payara, WildFly).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

¿Cuál es la antecesora directa de Jakarta EE?

A

Java EE (y antes de eso, J2EE).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

¿Qué problema resuelve Jakarta EE que Java SE no puede solo?

A

La complejidad de la infraestructura (transacciones, seguridad, concurrencia masiva).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Qué es el “Desajuste de Impedancia” en el contexto de la persistencia?

A

La dificultad de conectar objetos Java con tablas de bases de datos (resuelto por JPA).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

¿Qué ventaja ofrece la “Portabilidad” en Jakarta EE?

A

Permite cambiar de servidor de aplicaciones (ej. de GlassFish a JBoss) sin reescribir la app.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

¿Para qué sirve un “Contenedor” en Jakarta EE?

A

Para gestionar el ciclo de vida de los componentes y ofrecer servicios automáticos como seguridad y transacciones.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿Por qué se dice que Jakarta EE permite centrarse en el “Negocio”?

A

Porque el programador no pierde tiempo programando la red o la base de datos desde cero, solo la lógica de la aplicación.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

¿Qué es una especificación en Jakarta EE?

A

Un documento técnico que describe las reglas y comportamientos que debe cumplir una tecnología.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

¿Qué significa que una aplicación sea “portable”?

A

Que puede ejecutarse en diferentes servidores de aplicaciones sin necesidad de modificar el código fuente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

¿Qué es una “Implementación” en este contexto?

A

El software real (ej. WildFly, Payara) que ejecuta las reglas escritas en la especificación.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

¿Cuál es la diferencia entre la API y la Implementación?

A

La API son las instrucciones/firmas (lo que ves al programar) y la implementación es el código que hace el trabajo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

¿Qué es el TCK?

A

Technology Compatibility Kit: un conjunto de pruebas que un servidor debe pasar para ser certificado como estándar.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

¿Qué perfil de Jakarta EE es el más ligero y orientado a microservicios nativos?

A

Core Profile.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

¿Cuál es la diferencia entre el Web Profile y el Full Platform?

A

El Web Profile tiene lo esencial para web; el Full Platform incluye todas las especificaciones (mensajería, batch, etc.).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

¿Cuál es la versión de Java SE mínima requerida para Jakarta EE 11?

A

Java SE 21.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

¿Por qué Jakarta EE 11 se beneficia tanto de Java 21?

A

Principalmente por el soporte de Virtual Threads, que mejora drásticamente la escalabilidad.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

¿Qué perfil elegirías para una aplicación web estándar con base de datos pero sin mensajería compleja?

A

Web Profile.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

¿En qué fundaciones se alojan tanto Jakarta EE como MicroProfile?

A

En la Eclipse Foundation.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

¿Qué 4 especificaciones de Jakarta EE usa MicroProfile como base?

A

CDI, Jakarta REST, JSON-P y JSON-B.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

¿Qué utilidad tiene la especificación de “Tolerancia a fallos” en MicroProfile?

A

Implementar patrones como Circuit Breakers o Retries para que un microservicio no tumbe a los demás.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

¿Cuál es la versión actual de MicroProfile en 2026?

A

MicroProfile 7.x.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
¿Cuál es el principal beneficio de MicroProfile frente al Full Platform de Jakarta?
Su ligereza y optimización para entornos de contenedores y nube.
26
¿Qué grupo de APIs define la lógica de negocio del usuario?
Las APIs de Componentes (ej. JPA, JAX-RS).
27
¿Qué API se encarga de gestionar la integridad de los datos en caso de error?
Jakarta Transactions (JTA).
28
¿Por qué no se deben crear hilos (Thread) a mano en Jakarta EE?
Porque el servidor tiene un Servicio de Concurrencia que gestiona los recursos de forma eficiente para evitar colapsos.
29
¿Qué API actúa como "pegamento" entre componentes y servicios?
Jakarta CDI.
30
¿Cuál es la función de las APIs de Infraestructura?
Ofrecer servicios transversales (seguridad, transacciones, mensajes) de forma automática a los componentes.
31
¿Quién controla el ciclo de vida de un componente?
El contenedor dentro del App Server.
32
¿Qué diferencia a un servicio de un componente?
El componente contiene lógica de negocio (tu código); el servicio ofrece infraestructura (transacciones, seguridad).
33
¿Qué es un Contenedor dentro del App Server?
La parte del servidor encargada de gestionar un tipo específico de componentes (ej. Contenedor Web).
34
¿Puede un componente funcionar sin un App Server?
No, porque necesita los servicios y el contenedor que el servidor le proporciona para ejecutarse.
35
Pon un ejemplo de un servicio que se invoca mediante una anotación (Transacciones).
El servicio de transacciones mediante la anotación @Transactional.
36
¿Qué contenedor se encarga de manejar el protocolo HTTP y las sesiones web?
El Contenedor Web.
37
¿Qué es un componente que vive típicamente en el Contenedor de Negocio?
Los EJB (Enterprise JavaBeans) o los Message-Driven Beans.
38
¿Por qué se separan en dos contenedores?
Para separar la comunicación (web) de la lógica crítica y transaccional (negocio).
39
¿Qué contenedor usarías para exponer una API REST?
El Contenedor Web (usando Jakarta REST).
40
¿Qué servicio permite que un componente web hable con uno de negocio fácilmente?
Jakarta CDI (Contexts and Dependency Injection).
41
¿Qué servidor es la "Implementación de Referencia" de Jakarta EE 11?
GlassFish 8.
42
¿Cuál es la diferencia principal entre Tomcat y WildFly?
Tomcat es solo un Contenedor Web; WildFly es un App Server completo (Full Platform).
43
¿Qué servidor destaca por cargar solo las APIs necesarias bajo demanda?
Open Liberty.
44
¿Qué perfil es el más común en servidores orientados a microservicios como Quarkus?
El Core Profile.
45
¿Es Apache TomEE lo mismo que Apache Tomcat?
No, TomEE es una versión de Tomcat que añade las especificaciones necesarias para ser un App Server certificado (Web Profile).
46
¿Qué diferencia hay entre WildFly y JBoss EAP?
WildFly es la versión comunitaria (gratis/novedades); JBoss EAP es la versión comercial de Red Hat.
47
¿Cuál es el servidor de IBM diseñado para ser modular y ligero?
WebSphere Liberty (u Open Liberty).
48
¿Qué servidor elegirías para probar primero las novedades de Jakarta EE 11?
Eclipse GlassFish (por ser la RI).
49
¿Es ManageFish un servidor de aplicaciones compatible con Jakarta EE?
No, es una herramienta de administración para servidores basados en GlassFish.
50
¿Qué empresa está detrás de WebLogic?
Oracle.
51
¿Qué API de Jakarta EE se utiliza para crear servicios web de tipo REST?
Jakarta REST (anteriormente JAX-RS).
52
¿En qué lenguaje se definen las vistas de Jakarta Faces?
En archivos XHTML (Facelets).
53
¿Cuál es la función de JSON-B?
Transformar objetos Java en formato JSON de forma automática.
54
¿Cuál es la unidad básica de procesamiento web en la que se basan todas las demás?
El Servlet.
55
¿Qué API permite que el servidor envíe datos al cliente sin que este los pida primero?
Jakarta WebSocket.
56
¿En qué se convierte internamente un archivo JSP antes de ejecutarse?
En un Servlet.
57
¿Qué diferencia hay entre una Expresión (<%= %>) y un Scriptlet (<% %>)?
La expresión pinta un valor en el HTML; el scriptlet ejecuta lógica sin devolver texto necesariamente.
58
¿Por qué se considera mala práctica usar Scriptlets hoy en día?
Porque mezcla demasiado la lógica de negocio con la interfaz, dificultando el mantenimiento.
59
¿Cómo se llaman los objetos que JSP ofrece por defecto (como request o session)?
Objetos implícitos.
60
¿Qué tecnología se prefiere actualmente sobre JSP para aplicaciones de servidor en Jakarta EE?
Jakarta Faces (JSF) o el uso de Jakarta REST con un frontend externo.
61
¿Cuál es el objetivo principal de JSTL?
Eliminar el uso de código Java (Scriptlets) dentro de los archivos JSP.
62
¿Qué prefijo se utiliza convencionalmente para las etiquetas del núcleo (Core) de JSTL?
El prefijo c:.
63
¿Cómo se llama el lenguaje que usa JSTL para acceder a los datos (ej. ${user.name})?
EL (Expression Language).
64
¿Qué etiqueta de JSTL usarías para mostrar una lista de pedidos?
.
65
¿Qué ventaja tiene frente a la expresión clásica <%= %>?
Proporciona seguridad automática contra la inyección de scripts (XSS).
66
¿Cuál es la principal diferencia entre JSP y Jakarta Faces?
JSP está orientado a páginas/plantillas; Jakarta Faces está orientado a componentes de UI.
67
¿Cómo se llaman los archivos que definen la vista en Faces?
Facelets (archivos con extensión .xhtml).
68
¿Qué significa que Faces gestione el "Estado de la Vista"?
Que el servidor recuerda los valores y componentes de la pantalla entre una petición y otra automáticamente.
69
¿Qué es un "Backing Bean"?
Una clase Java que contiene la lógica y los datos que se muestran o procesan en la vista.
70
¿Qué tecnología se suele añadir a Faces para tener componentes visuales avanzados?
PrimeFaces u OmniFaces.
71
¿Qué objeto de la API de Servlets se usa para leer los parámetros que envía un usuario?
HttpServletRequest.
72
¿Cómo se llama el componente que puede interceptar peticiones antes de que lleguen al Servlet?
Filter (Filtro).
73
¿Cuál es el ciclo de vida de un Servlet (sus 3 métodos principales)?
init(), service() (que llama a doGet/doPost) y destroy().
74
¿Qué anotación se usa para registrar un Servlet sin usar el archivo web.xml?
@WebServlet.
75
¿En qué objeto se guardan los datos que deben persistir durante toda la visita del usuario?
En la HttpSession.
76
¿Qué método de un Filter permite que la petición continúe hacia el siguiente filtro o servlet?
chain.doFilter(request, response).
77
¿Qué anotación se usa para registrar un filtro en una ruta específica?
@WebFilter.
78
Si quiero contar cuántos usuarios hay conectados en tiempo real, ¿qué uso?
Un HttpSessionListener.
79
¿Qué componente usarías para codificar todos los caracteres de la web en UTF-8?
Un Filter.
80
¿Dónde se ejecutan los Listeners de contexto?
En el momento en que la aplicación se despliega (arranca) en el servidor.
81
¿Qué API es el estándar actual para la inyección de dependencias?
Jakarta CDI.
82
¿Qué significa que un EJB sea "Stateless"?
Que el servidor no mantiene el estado entre llamadas; el bean se usa y se devuelve al pool.
83
¿Cuál es la función principal de JTA?
Gestionar transacciones para asegurar la consistencia de los datos.
84
¿Qué anotación usarías para que un método sea transaccional en un bean CDI?
@Transactional.
85
¿Qué API usarías para procesar un archivo con un millón de ventas cada fin de mes?
Jakarta Batch.
86
¿Cuál es la diferencia entre un EJB @Stateless y uno @Stateful?
El Stateless no guarda datos entre llamadas (es más rápido); el Stateful sí recuerda el estado del cliente.
87
¿Qué sucede si ocurre una excepción dentro de un método de un EJB?
System Exception: Rollback + destrucción de EJB + excepción para el cliente. Application Exception: No rollback + propaga al cliente
88
¿Qué es un EJB @Singleton?
Un componente del que solo existe una única instancia compartida por todos los usuarios.
89
¿Por qué no se usa new para crear un EJB?
Porque si lo creas tú, pierdes todos los servicios del contenedor (transacciones, seguridad, etc.).
90
¿Qué anotación se usa para inyectar un EJB en otra clase?
Se puede usar @Inject (estándar CDI) o @EJB.
91
¿Cuál es la principal diferencia entre un MDB y un EJB Stateless?
El Stateless se invoca directamente (síncrono); el MDB se activa por un mensaje (asíncrono).
92
¿Qué interfaz debe implementar obligatoriamente un MDB?
MessageListener.
93
¿Cómo se llama el método donde escribes la lógica de procesamiento del mensaje?
onMessage(Message message).
94
¿Qué sucede si el MDB lanza una excepción durante onMessage?
Dependiendo de la configuración, el mensaje puede volver a la cola para un reintento.
95
¿Puede un cliente (como un Servlet) inyectar un MDB con @Inject?
No, los MDB no tienen interfaz de negocio; solo se comunican a través de colas de mensajes.
96
¿Cuál es la principal diferencia entre Jakarta REST y Jakarta XML Web Services?
REST usa HTTP/JSON (ligero); XML WS usa SOAP/XML (contrato formal WSDL).
97
¿Qué anotación marca una clase como el punto de entrada de un servicio REST?
@Path("/ruta").
98
¿A qué contenedor pertenecen estos componentes de Web Services?
Al Contenedor Web (Web Container).
99
¿Qué archivo es fundamental en SOAP para describir el servicio?
El WSDL (Web Services Description Language).
100
¿Es obligatorio que un componente REST sea un EJB?
No, puede ser un simple CDI Bean o incluso un POJO gestionado por el contenedor web.
101
¿Qué servicio permite inyectar una dependencia en una clase?
Jakarta CDI.
102
¿Qué servicio asegura que una operación bancaria sea "todo o nada"?
Jakarta Transactions (JTA).
103
¿Por qué JPA se considera un servicio del App Server?
Porque el servidor gestiona las conexiones y el ciclo de vida del acceso a datos.
104
¿Qué servicio usarías para programar una tarea que se ejecute en paralelo?
Jakarta Concurrency.
105
¿Cuál es la diferencia entre autenticación y autorización en el servicio de Security?
Autenticación es quién eres; autorización es qué permisos tienes.
106
¿Cuál es la principal diferencia entre Commit y Rollback?
Commit guarda los cambios permanentemente; Rollback los descarta y vuelve al estado inicial.
107
¿Qué anotación permite que un método sea transaccional de forma automática?
@Transactional.
108
¿Cómo se llama el protocolo que permite a JTA coordinar varias bases de datos a la vez?
Two-Phase Commit (2PC).
109
¿Qué componente del App Server se encarga de ejecutar JTA?
El Transaction Manager.
110
¿Por qué se usa el scope provided al importar la API de JTA en Maven?
Porque la implementación real ya está incluida en el Servidor de Aplicaciones.
111
¿Qué significan las siglas JNDI?
Jakarta Naming and Directory Interface.
112
¿Cuál es la principal ventaja de usar JNDI para las bases de datos?
Permite cambiar la configuración de la BD sin modificar ni recompilar el código.
113
¿Qué anotación se usa para pedirle al servidor un recurso JNDI de forma automática?
La anotación @Resource.
114
¿Cómo se llama la acción de buscar un objeto por su nombre en JNDI?
Lookup.
115
¿Por qué se dice que JNDI es un "listín telefónico"?
Porque asocia nombres lógicos (texto) con objetos físicos (recursos).
116
¿Qué significa ORM?
Object-Relational Mapping (Mapeo Objeto-Relacional).
117
¿Cuál es la diferencia entre JPA e Hibernate?
JPA es la interfaz/estándar; Hibernate es la implementación/motor real.
118
¿Qué anotación se usa para inyectar un EntityManager?
@PersistenceContext.
119
¿Qué lenguaje se usa en JPA para hacer consultas orientadas a objetos?
JPQL (Jakarta Persistence Query Language).
120
¿Dónde se define la configuración de la unidad de persistencia?
En el archivo persistence.xml.
121
¿Qué objeto se usa en JDBC para evitar ataques de Inyección SQL?
El PreparedStatement.
122
¿Qué objeto representa los datos devueltos por una consulta SELECT?
El ResultSet.
123
¿Cuál es la función del Driver JDBC?
Actuar como traductor entre la API de Java y el protocolo de la base de datos.
124
¿Por qué es importante cerrar siempre las conexiones JDBC?
Para evitar fugas de recursos (Resource Leaks) que pueden colapsar el servidor.
125
¿Qué es un DataSource?
Un recurso (habitualmente en JNDI) que gestiona un pool de conexiones listas para usar.
126
¿Cuál es la diferencia entre una Queue y un Topic?
La Queue entrega el mensaje a un solo receptor; el Topic lo entrega a todos los suscriptores.
127
¿Qué objeto de la API moderna se inyecta para enviar mensajes fácilmente?
El JMSContext.
128
¿Qué significa que la mensajería sea "asíncrona"?
Que el emisor no espera a que el receptor procese el mensaje para continuar.
129
¿Cómo se llama el componente EJB especializado en recibir mensajes JMS?
Message-Driven Bean (MDB).
130
¿Dónde se suelen configurar las colas (destinos) para que la app las encuentre?
En el servicio JNDI del App Server.
131
¿Qué API de JSON usarías para convertir automáticamente un POJO en un String JSON?
Jakarta JSON-B.
132
¿Qué significa la "P" en JSON-P?
Processing.
133
¿Qué anotación de JSON-B usarías para que un campo de Java se llame distinto en el JSON?
@JsonbProperty("nuevo_nombre").
134
¿Qué API es más eficiente para procesar archivos JSON gigantescos sin agotar la RAM?
JSON-P (usando su modo Streaming con JsonParser).
135
¿Cuál es la clase principal para iniciar operaciones en JSON-B?
Jsonb (creada a través de JsonbBuilder).
136
¿Qué protocolo de mensajería utiliza principalmente JAX-WS?
SOAP (basado en XML).
137
¿Qué archivo describe de forma técnica y formal un servicio JAX-WS?
El WSDL (Web Services Description Language).
138
¿Para qué sirve la anotación @WebParam?
Para asignar un nombre específico a los parámetros del método en el contrato XML/WSDL.
139
¿Cuál es la diferencia de enfoque entre JAX-WS y Jakarta REST?
JAX-WS está orientado a operaciones/contratos; REST está orientado a recursos/URIs.
140
¿Qué anotación es obligatoria para que una clase sea considerada un Web Service?
@WebService.
141
¿Cuál es la diferencia entre @PathParam y @QueryParam?
@PathParam es parte de la ruta fija (/user/5); @QueryParam va después del interrogante (/user?id=5).
142
¿Qué anotación se usa para indicar que un método devuelve un JSON?
@Produces(MediaType.APPLICATION_JSON).
143
¿Qué verbo HTTP se utiliza por estándar para actualizar un recurso existente?
El verbo PUT (o PATCH para actualizaciones parciales).
144
¿Qué clase se debe extender para configurar y activar JAX-RS en la aplicación?
La clase jakarta.ws.rs.core.Application.
145
¿Es JAX-RS síncrono o asíncrono?
Por defecto es síncrono, pero soporta procesamiento asíncrono mediante la anotación @Suspended.
146
¿Qué anotación se usa para realizar la inyección de dependencias en CDI?
@Inject.
147
¿Cuál es la diferencia entre @ApplicationScoped y @RequestScoped?
El primero dura toda la vida de la app; el segundo solo una petición HTTP.
148
¿Qué sucede si intentas inyectar una interfaz, con CDI, que tiene dos clases que la implementan?
Ocurre un error de ambigüedad, a menos que uses un @Qualifier.
149
¿Qué archivo se usa (opcionalmente) para configurar el descubrimiento de beans?
El archivo beans.xml.
150
¿Puede CDI inyectar objetos en un Servlet o en un EJB?
Sí, CDI es el pegamento que permite inyectar dependencias en casi cualquier componente de Jakarta EE.
151
¿En qué otra API de Jakarta EE se basa Jakarta MVC para funcionar?
En Jakarta REST (JAX-RS).
152
¿Qué anotación transforma un método REST en un método MVC?
La anotación @Controller.
153
¿Qué objeto se inyecta para pasar datos del Controlador a la Vista?
El objeto Models.
154
¿Cuál es la principal diferencia con JSF?
MVC es orientado a acciones/peticiones, mientras que JSF es orientado a componentes.
155
¿Qué tipo de archivos se suelen usar como "Vistas" en la API MVC?
Principalmente JSP o Facelets (.xhtml).
156
¿Qué tipos de bases de datos soporta Jakarta NoSQL?
Documento, Clave-Valor, Columnas y Grafos.
157
¿En qué API de Jakarta se inspira para el manejo de dependencias la API de Jakarta NoSQL?
En Jakarta CDI.
158
¿Cuál es la diferencia entre la capa de Communication y la de Mapping?
Communication es de bajo nivel (drivers); Mapping es de alto nivel (objetos/entidades).
159
¿Cómo se llama el objeto que permite realizar operaciones sin usar repositorios?
El Template (ej. DocumentTemplate o GraphTemplate).
160
¿Es necesario escribir el código SQL/NoSQL en los Repositories?
No, se generan automáticamente basándose en el nombre del método (como findByNombre).
161
¿Quién se encarga de gestionar la red y los puertos en una app Java Web?
El Web Container.
162
¿Cuál es la principal ventaja de un Servlet frente a procesos externos como CGI?
La eficiencia: el Servlet usa hilos dentro de un mismo proceso en lugar de crear procesos nuevos.
163
¿Qué significa que el Web Container gestione el "Ciclo de Vida"?
Que él decide cuándo instanciar, inicializar y destruir los objetos Servlet.
164
En la analogía del restaurante, ¿qué papel juega el Servlet?
El del Chef (el que ejecuta la lógica de negocio).
165
¿Cómo sabe el Contenedor qué Servlet debe atender una petición específica?
Mediante el Mapeo de URLs (configurado en el código o descriptores).
166
¿Pueden dos apps web en el mismo contenedor compartir sus objetos internos directamente?
No, el contenedor garantiza el aislamiento mediante diferentes Classloaders.
167
¿Cuántas veces se ejecuta el método init() de un Servlet?
Solo una vez, justo después de ser instanciado por el contenedor.
168
¿Qué sucede si 100 usuarios acceden al mismo Servlet a la vez?
El contenedor utiliza 100 hilos (threads) diferentes, pero todos ejecutan el mismo objeto Servlet.
169
¿Qué es el "Context Path"?
Es el nombre o ruta (ej: /mi-app) que identifica a una aplicación web dentro del contenedor.
170
¿Quién es el responsable de llamar al método destroy()?
El Web Container, generalmente cuando se apaga la aplicación o el servidor.
171
¿Qué sucede si el método init() de un Servlet lanza una excepción?
El Servlet no se pone en servicio y el contenedor lo descarta inmediatamente.
172
¿Qué diferencia hay entre el método service() y los métodos doGet()/doPost()?
service() es el método general que recibe todas las peticiones y las deriva a doGet() o doPost() según el tipo de HTTP.
173
¿Es seguro usar variables de clase (globales) dentro del método service()?
Generalmente no, porque múltiples hilos acceden al mismo objeto a la vez y podrían sobrescribir los datos de otros usuarios (problemas de concurrencia).
174
¿Quién garantiza que el método destroy() se ejecute antes de apagar la aplicación?
El Web Container.
175
¿En qué método de un Servlet se deben cerrar las conexiones a la base de datos para evitar fugas de memoria?
En el método destroy().
176
¿De qué clase base suelen heredar todos los servlets modernos en Java Web?
De la clase HttpServlet.
177
¿Qué método de HttpServlet se encarga de decidir si llamar a doGet o a doPost?
El método service().
178
¿Cuál es la principal diferencia de uso entre doGet y doPost?
doGet es para consultar/obtener datos; doPost es para enviar/procesar datos (habitualmente cambios).
179
¿Cómo se llaman los dos objetos principales que recibe cualquier método doXXX?
HttpServletRequest (la petición) y HttpServletResponse (la respuesta).
180
¿Es obligatorio sobrescribir todos los métodos doXXX en un Servlet?
No, solo debes sobrescribir aquellos que tu aplicación necesite soportar.
181
¿Qué componente es el encargado de proporcionar la implementación real de HttpServletRequest?
El Web Container (como Tomcat o WildFly).
182
¿Cuál es la diferencia principal entre el tipo de datos de un Parameter y un Attribute?
Los Parameters siempre son String; los Attributes pueden ser cualquier Object.
183
¿Qué método usarías para recuperar el valor de un campo llamado "email" enviado desde un formulario?
request.getParameter("email").
184
¿Cómo se puede obtener la dirección IP del cliente que hace la petición?
Usando el método request.getRemoteAddr().
185
¿Qué método de HttpServletRequest permite acceder a la sesión del usuario?
El método request.getSession().
186
¿Qué sucede si intentas llamar a getWriter() y a getOutputStream() en el mismo Servlet?
El servidor lanza una IllegalStateException.
187
¿Cuál es la diferencia técnica entre setStatus y sendError?
setStatus solo cambia el código; sendError suele enviar además una página de error HTML por defecto.
188
¿Qué método usarías para enviar un archivo PDF al navegador?
El método getOutputStream().
189
¿Quién implementa la interfaz HttpServletResponse?
El Web Container (como Tomcat o Jetty).
190
¿Cómo le indicas al navegador que la respuesta es un objeto JSON?
Usando resp.setContentType("application/json").
191
¿Qué sucede si dos Servlets diferentes intentan mapear el mismo urlPattern?
El servidor dará un error al arrancar, ya que una URL solo puede pertenecer a un "dueño".
192
¿Para qué sirve el atributo loadOnStartup con un valor positivo?
Para obligar al contenedor a instanciar e inicializar el Servlet al arrancar el servidor, sin esperar a la primera petición.
193
¿Cuál es la diferencia entre usar value y urlPatterns en la anotación?
Ninguna. value es un alias de urlPatterns para cuando solo quieres definir la ruta de forma abreviada.
194
¿Dónde se pueden leer los initParams configurados en la anotación?
Dentro del método init() del Servlet, usando getServletConfig().getInitParameter("nombre").
195
¿Se pueden usar comodines como * en los urlPatterns?
Sí, puedes usar patrones como *.do (por extensión) o /api/* (por prefijo).
196
¿Cómo sabe el servidor qué sesión corresponde a qué navegador?
Mediante una cookie técnica (habitualmente llamada JSESSIONID).
197
¿Qué diferencia hay entre request.getSession() y request.getSession(false)?
El primero crea una sesión si no existe; el segundo devuelve null si no hay una sesión previa.
198
¿Dónde se guardan físicamente los datos de una HttpSession por defecto?
En la memoria RAM del Web Container (servidor).
199
¿Qué sucede con la sesión si el usuario cierra el navegador sin cerrar sesión?
La sesión sigue viva en el servidor hasta que se cumpla el tiempo de inactividad (timeout).
200
¿Qué tipo de datos se pueden guardar en una sesión?
Cualquier Object de Java (aunque es recomendable que sean serializables).
201
¿Es Tomcat un servidor de aplicaciones Jakarta EE completo?
No, es un Web Container (solo soporta una parte pequeña del estándar).
202
¿Qué software es imprescindible instalar antes de intentar arrancar Tomcat?
El JDK (o JRE) de Java.
203
¿Cómo se llama el archivo empaquetado que contiene una aplicación web lista para ser ejecutada?
Archivo .WAR (Web Application Archive).
204
¿Qué ventaja tiene usar WildFly frente a Tomcat para aprender Jakarta EE?
Que WildFly ya incluye todas las APIs instaladas y configuradas de fábrica.
205
¿Qué es el "Context Path" en un servidor?
Es el nombre de la sub-ruta en la URL que identifica a tu aplicación (ej: /mi-app).
206
¿Qué componente traduce una consulta de objetos Java a lenguaje SQL?
JPA (normalmente usando Hibernate como motor).
207
¿Qué librería se encarga de convertir un objeto Java en un String JSON para el navegador?
Jakarta JSON-B.
208
¿Para qué sirve el Driver JDBC en este flujo?
Es el traductor final que conecta el código Java con el motor específico de la base de datos (MySQL, Postgres, etc.).
209
¿Cuál es la función de CDI en el flujo de una petición?
Gestionar la creación e inyección de los objetos (Servicios, Repositorios) para que el programador no use new.
210
¿Quién recibe físicamente la petición HTTP antes que cualquier clase de Java?
El Web Container (o el Servidor de Aplicaciones).
211
¿Qué significa la extensión WAR en el desarrollo Java?
Web Application Archive, y se usa para empaquetar componentes web.
212
¿Puede un archivo EAR contener múltiples archivos WAR?
Sí, el EAR está diseñado para agrupar múltiples módulos (webs y EJBs).
213
¿En qué carpeta de un archivo WAR se guardan las librerías externas (.jar)?
En la carpeta /WEB-INF/lib.
214
¿Qué herramienta se encarga normalmente de generar los archivos .war o .ear automáticamente?
Herramientas de construcción como Maven o Gradle.
215
¿Es posible desplegar un archivo EAR en un contenedor ligero como Apache Tomcat?
No, Tomcat solo soporta archivos WAR. Para un EAR necesitas un Application Server completo (WildFly, GlassFish, etc.).
216
¿En qué carpeta específica del EAR debe residir el archivo application.xml?
En la carpeta META-INF.
217
¿Qué etiqueta se usa para definir la URL de acceso a un módulo web dentro de un EAR?
La etiqueta .
218
¿Qué sucede si no defines una en el XML?
El servidor buscará las librerías compartidas en la carpeta lib por defecto.
219
¿Puede un application.xml contener referencias a múltiples archivos WAR?
Sí, puedes definir tantos módulos web como necesites.
220
¿Cuál es la función principal del display-name?
Identificar la aplicación con un nombre amigable en la consola de administración del servidor.
221
¿Qué etiqueta se usa para definir el tiempo de vida de una sesión en el servidor?
La etiqueta dentro de .
222
¿Para qué sirve la sección ?
Para mapear códigos de error HTTP o excepciones Java a páginas de respuesta personalizadas.
223
¿Qué diferencia hay entre un init-param y un context-param?
El init-param es solo para un Servlet específico; el context-param es para toda la aplicación.
224
¿Dónde debe estar ubicado físicamente el archivo web.xml dentro de un WAR?
En la carpeta /WEB-INF/web.xml.
225
¿Qué es un welcome-file?
El archivo que el servidor sirve por defecto cuando el usuario accede a un directorio en lugar de a un archivo concreto.
226
¿Es obligatorio el archivo ejb-jar.xml si usamos anotaciones como @Stateless?
No, es opcional a menos que necesitemos sobrescribir configuraciones o realizar mapeos globales.
227
¿Qué etiqueta se utiliza para definir el comportamiento transaccional de un método?
La etiqueta .
228
¿En qué carpeta debe estar ubicado el archivo ejb-jar.xml?
En la carpeta META-INF del módulo EJB.
229
¿Qué ventaja tiene definir un Interceptor en el XML en lugar de usar @Interceptors?
Permite aplicar el interceptor a múltiples beans a la vez de forma centralizada.
230
¿Qué sucede si hay una contradicción entre una anotación y el ejb-jar.xml?
El XML siempre tiene prioridad sobre las anotaciones.
231
¿Qué diferencia hay entre Autenticación y Autorización?
Autenticación es identificar quién eres; Autorización es decidir qué puedes hacer.
232
¿Qué componente de Jakarta Security se encarga de buscar al usuario en la base de datos?
El IdentityStore.
233
¿Para qué sirve la anotación @RolesAllowed?
Para restringir el acceso a un método o clase solo a usuarios con ciertos Roles.
234
¿Qué objeto inyectarías para saber el nombre del usuario logueado en tiempo de ejecución?
El SecurityContext.
235
¿Es obligatorio programar un formulario de login a mano en Jakarta EE?
No, se pueden usar mecanismos estándar como Form-Based Authentication o anotaciones como @FormAuthenticationMechanismDefinition.
236
¿Cuál es la diferencia entre JPA e Hibernate?
JPA es la especificación (la interfaz/reglas) e Hibernate es la implementación (el código que hace el trabajo).
237
¿Qué significa que una entidad esté en estado "Detached"?
Que el objeto ya no está vinculado al Persistence Context; los cambios que le hagas no se guardarán automáticamente en la BD.
238
¿Qué anotación se usa para indicar que un campo es la clave primaria?
La anotación @Id.
239
¿Qué ventaja ofrece la "Caché de Primer Nivel" en Hibernate?
Evita consultas innecesarias a la base de datos recuperando objetos que ya han sido cargados en la misma sesión/transacción.
240
¿Cómo se llama el lenguaje de consultas de JPA que es similar a SQL pero orientado a objetos?
JPQL (Jakarta Persistence Query Language).
241
¿Qué anotación es obligatoria para que una clase sea considerada una Entidad?
La anotación @Entity.
242
¿Para qué sirve la anotación @Transient?
Para indicar que un atributo de la clase no debe ser persistido en la base de datos.
243
¿Cuál es la diferencia entre @Entity y @Table?
@Entity define la clase como entidad para JPA; @Table define el nombre y detalles de la tabla física en el SQL.
244
¿Qué hace la estrategia GenerationType.IDENTITY?
Delega en la base de datos la creación del ID único (como un AUTO_INCREMENT en MySQL).
245
¿Por qué es necesario un constructor vacío en una Entidad?
Porque JPA utiliza Reflexión para crear instancias de la clase antes de rellenar sus datos.
246
¿Qué es el "Dirty Checking" en Hibernate?
Es la capacidad de detectar cambios en objetos Managed y generar el UPDATE SQL automáticamente al sincronizar.
247
¿Qué sucede si pido el mismo ID dos veces en el mismo Persistence Context?
Hibernate devuelve la misma instancia de memoria (caché de primer nivel) sin ir dos veces a la BD.
248
¿En qué momento se ejecutan físicamente las sentencias SQL en la base de datos?
Normalmente durante el Flush, que ocurre justo antes del commit de la transacción.
249
¿Cómo pasa un objeto de estado "Transient" a "Managed"?
Mediante el método persist() del EntityManager (o al ser recuperado con find()).
250
¿Se guardan automáticamente los cambios realizados en un objeto "Detached"?
No, un objeto desconectado ya no es vigilado por el Contexto de Persistencia.
251
¿Qué método se usa para pasar un objeto de estado "Transient" a "Managed"?
El método persist().
252
¿Cuál es la diferencia entre find() y getReference()?
find() trae los datos reales de la BD; getReference() devuelve un "proxy" (un objeto vacío que solo carga datos si los tocas).
253
¿Qué sucede si llamas a remove() sobre un objeto que no está en estado "Managed"?
Lanzará una excepción, ya que el EntityManager solo puede borrar lo que está gestionando.
254
¿Es el EntityManager "Thread-Safe"?
No, cada hilo o petición debe tener su propia instancia de EntityManager.
255
¿Cómo se llama la unidad de configuración que el EntityManagerFactory lee al inicio?
La Persistence Unit (definida en el persistence.xml).
256
En una relación @OneToMany y @ManyToOne, ¿cuál es normalmente el lado "dueño" de la relación?
El lado @ManyToOne, porque es el que contiene la clave ajena (Foreign Key) en la tabla.
257
¿Qué sucede si accedes a una colección marcada como FetchType.LAZY después de que el EntityManager se haya cerrado?
Se produce una LazyInitializationException, ya que no hay conexión abierta para ir a buscar esos datos.
258
¿Para qué sirve el atributo mappedBy?
Para indicar que esa relación es bidireccional y señalar quién es el dueño de la misma en la otra entidad.
259
¿Qué hace CascadeType.REMOVE?
Si se elimina la entidad padre, JPA eliminará automáticamente todas las entidades hijas relacionadas.
260
¿Cuál es el riesgo de usar siempre FetchType.EAGER?
Que el sistema cargue demasiada información innecesaria de la base de datos, ralentizando la aplicación (problema de N+1 consultas).
261
¿A qué hace referencia JPQL cuando escribes una consulta: a las tablas o a las clases?
A las clases de entidad (objetos) y sus atributos.
262
¿Cómo se define un parámetro en una consulta JPQL para evitar SQL Injection?
Usando la sintaxis de dos puntos seguida del nombre del parámetro (ej: :miParametro).
263
¿Qué diferencia hay entre getResultList() y getSingleResult()?
getResultList() devuelve una lista (vacía o con datos); getSingleResult() devuelve un solo objeto o lanza una excepción si no encuentra nada.
264
¿Qué es una @NamedQuery?
Una consulta estática predefinida y nombrada en la propia clase de entidad para facilitar su reutilización y rendimiento.
265
¿Es posible usar JOIN en JPQL?
Sí, se pueden usar JOIN, LEFT JOIN y FETCH JOIN para optimizar la carga de relaciones.