[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