//$Id: RollbackInterceptor.java 8626 2008-08-07 19:50:09Z pete.muir@jboss.org $ package org.jboss.seam.transaction; import static org.jboss.seam.ComponentType.JAVA_BEAN; import static org.jboss.seam.util.Work.isRollbackRequired; import org.jboss.seam.annotations.intercept.AroundInvoke; import org.jboss.seam.annotations.intercept.Interceptor; import org.jboss.seam.intercept.AbstractInterceptor; import org.jboss.seam.intercept.InvocationContext; /** * Automatically sets the current transaction to rollback * only when an exception is thrown. * * @author Gavin King */ @Interceptor(stateless=true) public class RollbackInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 5551801508325093417L; @AroundInvoke public Object aroundInvoke(InvocationContext invocation) throws Exception { try { return invocation.proceed(); } catch (Exception e) { if ( isRollbackRequired(e, getComponent().getType() == JAVA_BEAN) ) { try { Transaction.instance().setRollbackOnly(); } catch (Exception te) {} //swallow } throw e; } } public boolean isInterceptorEnabled() { // Just here for consistency return true; } }