package com.softwaremill.common.faces.transaction; import javax.annotation.Resource; import javax.enterprise.event.Observes; import javax.faces.event.ExceptionQueuedEvent; import javax.transaction.Status; import javax.transaction.SystemException; import javax.transaction.UserTransaction; /** * @author Adam Warski (adam at warski dot org) */ public class TransactionExceptionObserver { @Resource private UserTransaction utx; /** * When an exception is thrown, the transaction is rolled back. * @param e The event. */ public void onExceptionQueued(@Observes ExceptionQueuedEvent e) { try { if (utx.getStatus() == Status.STATUS_ACTIVE) { utx.rollback(); } } catch (SystemException e1) { throw new RuntimeException(e1); } } }