¿Debiera una transacción retrotraerse cuando se lanza una excepción y ésta no se captura? En EJB 2, sólo se retrotrae automáticamente la transacción en el caso de excepciones no chequeadas (subclases de RuntimeException). Para lograr el mismo resultado con excepciones chequeadas, era necesario capturar dichas excepciones, marcar manualmente la transacción como "fallida" y luego relanzar la excepción:
} catch (AccessDeniedException e) {
getSessionContext().setRollbackOnly();
throw e;
}
...
En EJB 3, esto ya no es necesario, ya que existe la posibilidad de definir esto en la misma excepción:
@ApplicationException(rollback=true)
public class ServiceException extends Exception {...
de esta manera, el contenedor EJB sabe que, de lanzarse este tipo de excepciones y no ser capturadas, la transacción activa debe retrotraerse.
Más información:
http://today.java.net/article/2006/04/04/exception-handling-antipatterns
wena pirilongi
ResponderEliminar