En primer lugar, la gestión de transacciones debe realizarse en la capa de servicio, no en la capa DAO, ya que eso generaría una gran sobrecarga de rendimiento (para tratar el nivel de aislamiento de transacción y la propagación adecuados en cada método diferente). Además, el alcance de una unidad de trabajo proviene de la capa de servicio en lugar de la capa de acceso a datos: imagine realizar un proceso de negocio que necesita tratar con 2 o más DAO.
Hay mucha discusión en Internet que apunta en esa dirección como aquí , aquí y aquí .
De todos modos, dado que es una entrevista, aceptemos la pregunta tal como está. Desde mi punto de vista, estaría utilizando la @Transactional
anotación (o la configuración XML) en ambos métodos y con una propagación de transacciones con REQUIRED
valor. De esa manera, cuando se invoque cualquiera de esos métodos y si no existe una transacción previa, se creará una nueva transacción:
@Transactional
class MyDAO {
@Transactional(propagation = REQUIRED)
public void foo() {
}
@Transactional(propagation = REQUIRED)
public void bar() {
}
}
foo()
ybar()
comparte la misma transacción y si 1 falla, otro 1 también retrocederá? ¿Me puede dar alguna aclaración?