[seam-commits] Seam SVN: r8624 - in trunk/src/main/org/jboss/seam: util and 1 other directory.
seam-commits at lists.jboss.org
seam-commits at lists.jboss.org
Thu Aug 7 09:31:33 EDT 2008
Author: pete.muir at jboss.org
Date: 2008-08-07 09:31:33 -0400 (Thu, 07 Aug 2008)
New Revision: 8624
Modified:
trunk/src/main/org/jboss/seam/transaction/RollbackInterceptor.java
trunk/src/main/org/jboss/seam/util/Work.java
Log:
JBSEAM-2986
Modified: trunk/src/main/org/jboss/seam/transaction/RollbackInterceptor.java
===================================================================
--- trunk/src/main/org/jboss/seam/transaction/RollbackInterceptor.java 2008-08-07 12:05:58 UTC (rev 8623)
+++ trunk/src/main/org/jboss/seam/transaction/RollbackInterceptor.java 2008-08-07 13:31:33 UTC (rev 8624)
@@ -2,15 +2,12 @@
package org.jboss.seam.transaction;
import static org.jboss.seam.ComponentType.JAVA_BEAN;
-import static org.jboss.seam.util.EJB.APPLICATION_EXCEPTION;
-import static org.jboss.seam.util.EJB.rollback;
+import static org.jboss.seam.util.Work.isRollbackRequired;
-import org.jboss.seam.annotations.ApplicationException;
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;
-import org.jboss.seam.util.JSF;
/**
* Automatically sets the current transaction to rollback
@@ -32,7 +29,7 @@
}
catch (Exception e)
{
- if ( isRollbackRequired(e) )
+ if ( isRollbackRequired(e, getComponent().getType() == JAVA_BEAN) )
{
try
{
@@ -44,24 +41,4 @@
}
}
- private boolean isRollbackRequired(Exception e)
- {
- boolean isJavaBean = getComponent().getType()==JAVA_BEAN;
- Class<? extends Exception> clazz = e.getClass();
- return ( isSystemException(e, isJavaBean, clazz) ) ||
- ( isJavaBean && clazz.isAnnotationPresent(APPLICATION_EXCEPTION) && rollback( clazz.getAnnotation(APPLICATION_EXCEPTION) ) ) ||
- ( clazz.isAnnotationPresent(ApplicationException.class) && clazz.getAnnotation(ApplicationException.class).rollback() );
- }
-
- private boolean isSystemException(Exception e, boolean isJavaBean, Class<? extends Exception> clazz)
- {
- return isJavaBean &&
- (e instanceof RuntimeException) &&
- !clazz.isAnnotationPresent(APPLICATION_EXCEPTION) &&
- !clazz.isAnnotationPresent(ApplicationException.class) &&
- //TODO: this is hackish, maybe just turn off RollackInterceptor for @Converter/@Validator components
- !JSF.VALIDATOR_EXCEPTION.isInstance(e) &&
- !JSF.CONVERTER_EXCEPTION.isInstance(e);
- }
-
}
Modified: trunk/src/main/org/jboss/seam/util/Work.java
===================================================================
--- trunk/src/main/org/jboss/seam/util/Work.java 2008-08-07 12:05:58 UTC (rev 8623)
+++ trunk/src/main/org/jboss/seam/util/Work.java 2008-08-07 13:31:33 UTC (rev 8624)
@@ -1,8 +1,14 @@
package org.jboss.seam.util;
+import static org.jboss.seam.ComponentType.JAVA_BEAN;
+import static org.jboss.seam.util.EJB.APPLICATION_EXCEPTION;
+import static org.jboss.seam.util.EJB.rollback;
+
import javax.transaction.Status;
import javax.transaction.UserTransaction;
+import org.jboss.seam.Component;
+import org.jboss.seam.annotations.ApplicationException;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
import org.jboss.seam.transaction.Transaction;
@@ -56,7 +62,7 @@
}
catch (Exception e)
{
- if (newTransactionRequired && userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION)
+ if (newTransactionRequired && userTransaction.getStatus() != Status.STATUS_NO_TRANSACTION && isRollbackRequired(e, true))
{
log.debug("rolling back transaction");
userTransaction.rollback();
@@ -65,4 +71,23 @@
}
}
+
+ public static boolean isRollbackRequired(Exception e, boolean isJavaBean)
+ {
+ Class<? extends Exception> clazz = e.getClass();
+ return ( isSystemException(e, isJavaBean, clazz) ) ||
+ ( isJavaBean && clazz.isAnnotationPresent(APPLICATION_EXCEPTION) && rollback( clazz.getAnnotation(APPLICATION_EXCEPTION) ) ) ||
+ ( clazz.isAnnotationPresent(ApplicationException.class) && clazz.getAnnotation(ApplicationException.class).rollback() );
+ }
+
+ private static boolean isSystemException(Exception e, boolean isJavaBean, Class<? extends Exception> clazz)
+ {
+ return isJavaBean &&
+ (e instanceof RuntimeException) &&
+ !clazz.isAnnotationPresent(APPLICATION_EXCEPTION) &&
+ !clazz.isAnnotationPresent(ApplicationException.class) &&
+ //TODO: this is hackish, maybe just turn off RollackInterceptor for @Converter/@Validator components
+ !JSF.VALIDATOR_EXCEPTION.isInstance(e) &&
+ !JSF.CONVERTER_EXCEPTION.isInstance(e);
+ }
}
More information about the seam-commits
mailing list