Primera SCBCD del día: UserTransaction.getStatus()

(Imagen: Paul Cézanne - Autorretrato)

Bean A is using bean-managed transaction demarcation and has invoked the foo method of bean B. When the foo method returns, bean A needs to determine if the transaction has been set to rollback Which must be true?

  • It is not possible for bean A to determine if the transaction has been set to rollback
  • Bean A must invoke getStatus method on the UserTransaction that it began
  • For this to be possible, bean B must also use bean-manged transaction demarcation.
  • Bean A must invoke the setRollbackOnly method on the UserTransaction that it began
  • Bean A must invoker the getRollbackOnly method on the UserTransaction that it began.

Los EJB's que usen BMT (Bean Managed Transaction, como en la pregunta) pueden acceder a UserTransaction desde EJBContext, mientras que los EJB's CMT (Container Managed Transaction) no pueden hacerlo. Los beans CMT utilizan los métodos setRollbackOnly y getRollbakOnly de EJBContext (y no de UserTransaction, con lo que la cuarta y quinta quedan muy decartadas) para interactuar con la transacción actual.


Para el caso de los beans BMT, UserTransaction nos provee del método getStatus, que retorna un entero comparable con las constantes de la interfaz javax.transaction.Status (para el caso de nuestro interés , el valor sería STATUS_ROLLEDBACK). Se puede utilizar este método para determinar el estado de la transacción asociado al objeto UserTransaction.

Por lo que, evidentemente, la respuesta sería la segunda.

Pregunta tomada de ExamWorx

Publicar un comentario