Pregunta de entrevista para Desarrollador Java

Alguien añade Transactional a un método y parece que no funciona. ¿Cuáles son los motivos habituales?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

La anotación se implementa con un proxy, así que solo se aplica cuando la llamada entra al bean desde fuera. Una llamada desde otro método de la misma clase se salta el proxy por completo, y esa es la causa más común. Otras razones: el método no es público, la excepción lanzada es checked y por defecto no dispara rollback, el bean se creó fuera del contenedor, o hacía falta una transacción nueva y la propagación se dejó en required.

Por qué lo preguntan los entrevistadores

Es una pregunta práctica de Spring con varias respuestas correctas, así que muestra profundidad y experiencia real depurando. El entrevistador quiere que nombres primero la autoinvocación del proxy, más la regla de rollback sobre excepciones checked, que sorprende a mucha gente. Las repreguntas suelen ir a la propagación, a qué pertenece dentro de una transacción, y a por qué las transacciones largas que retienen una conexión son peligrosas.

Cómo estructurar tu respuesta

  • Empieza por el modelo de proxy, ya que explica la mayoría de los fallos.
  • Cubre la autoinvocación y los requisitos de visibilidad.
  • Enuncia la regla de rollback por defecto y cómo cambiarla.
  • Añade qué no debería estar dentro de una transacción en absoluto.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Nueve de cada diez veces es autoinvocación. Spring envuelve el bean en un proxy, y la transacción empieza cuando quien llama pasa por ese proxy, así que si un método público de la misma clase llama directamente al método anotado, la llamada nunca sale del objeto y no empieza ninguna transacción. El arreglo es mover el método a otro bean o inyectar el bean en sí mismo, y el arreglo honesto suele ser que la frontera estaba mal puesta de todas formas. Después compruebo lo básico: el método debería ser público, el bean tiene que estar gestionado por Spring y no creado con new, y la regla de rollback pilla a la gente porque por defecto solo se hace rollback ante excepciones unchecked, así que una excepción checked confirma salvo que especifique rollbackFor. También miro la propagación, ya que el trabajo que debe sobrevivir al rollback de quien llama necesita requires new, y eso ocupa una segunda conexión, lo que importa si el pool es pequeño. Y mantengo las transacciones cortas: nada de llamadas HTTP, ni publicación de mensajes, ni esperas dentro de una, porque retener una conexión de base de datos mientras llamas a un tercero es como se agota un pool.

¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.

Mira cómo funciona

Preguntas de seguimiento que puedes esperar

  • ¿Qué le hace realmente la propagación requires new al pool de conexiones?
  • ¿Por qué capturar una excepción dentro de una transacción puede provocar igualmente un rollback?
  • ¿Cómo publicarías un evento solo después de que la transacción confirme?

Más preguntas para Desarrollador Java

Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.

Predecir mis preguntas

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot