[jboss-cvs] jboss-seam/src/main/org/jboss/seam/interceptors ...

Gavin King gavin.king at jboss.com
Mon Jun 18 00:54:11 EDT 2007


  User: gavin   
  Date: 07/06/18 00:54:11

  Modified:    src/main/org/jboss/seam/interceptors   
                        ConversationInterceptor.java
                        RollbackInterceptor.java
                        TransactionInterceptor.java
  Log:
  deprecated ifOutcome() stuffs
  removed @Rollback
  implemented JBSEAM-1031
  
  Revision  Changes    Path
  1.62      +37 -18    jboss-seam/src/main/org/jboss/seam/interceptors/ConversationInterceptor.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ConversationInterceptor.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/interceptors/ConversationInterceptor.java,v
  retrieving revision 1.61
  retrieving revision 1.62
  diff -u -b -r1.61 -r1.62
  --- ConversationInterceptor.java	26 Feb 2007 23:56:05 -0000	1.61
  +++ ConversationInterceptor.java	18 Jun 2007 04:54:11 -0000	1.62
  @@ -1,9 +1,10 @@
  -//$Id: ConversationInterceptor.java,v 1.61 2007/02/26 23:56:05 gavin Exp $
  +//$Id: ConversationInterceptor.java,v 1.62 2007/06/18 04:54:11 gavin Exp $
   package org.jboss.seam.interceptors;
   
   import java.lang.reflect.Method;
   import java.util.Arrays;
   
  +import org.jboss.seam.annotations.ApplicationException;
   import org.jboss.seam.annotations.AroundInvoke;
   import org.jboss.seam.annotations.Begin;
   import org.jboss.seam.annotations.BeginTask;
  @@ -36,6 +37,8 @@
      @AroundInvoke
      public Object aroundInvoke(InvocationContext invocation) throws Exception
      {
  +      try
  +      {
         Method method = invocation.getMethod();
         if ( getComponent().isConversationManagementMethod(method) ) //performance optimization 
         {
  @@ -63,6 +66,22 @@
            return invocation.proceed();
         }
      }
  +      catch (Exception e)
  +      {
  +         if ( isEndConversationRequired(e) )
  +         {
  +            endConversation(false);
  +         }
  +         throw e;
  +      }
  +   }
  +
  +   private boolean isEndConversationRequired(Exception e)
  +   {
  +      Class<? extends Exception> clazz = e.getClass();
  +      return clazz.isAnnotationPresent(ApplicationException.class)
  +            && clazz.getAnnotation(ApplicationException.class).end();
  +   }
      
      public boolean redirectToExistingConversation(Method method)
      {
  
  
  
  1.21      +13 -34    jboss-seam/src/main/org/jboss/seam/interceptors/RollbackInterceptor.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: RollbackInterceptor.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/interceptors/RollbackInterceptor.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -b -r1.20 -r1.21
  --- RollbackInterceptor.java	30 May 2007 20:15:59 -0000	1.20
  +++ RollbackInterceptor.java	18 Jun 2007 04:54:11 -0000	1.21
  @@ -1,23 +1,19 @@
  -//$Id: RollbackInterceptor.java,v 1.20 2007/05/30 20:15:59 gavin Exp $
  +//$Id: RollbackInterceptor.java,v 1.21 2007/06/18 04:54:11 gavin Exp $
   package org.jboss.seam.interceptors;
   
   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 java.lang.reflect.Method;
  -import java.util.Arrays;
  -import java.util.List;
  -
  +import org.jboss.seam.annotations.ApplicationException;
   import org.jboss.seam.annotations.AroundInvoke;
   import org.jboss.seam.annotations.Interceptor;
  -import org.jboss.seam.annotations.Outcome;
  -import org.jboss.seam.annotations.Rollback;
   import org.jboss.seam.intercept.InvocationContext;
   import org.jboss.seam.transaction.Transaction;
   
   /**
  - * Automatically sets transactions to rollback only.
  + * Automatically sets the current transaction to rollback 
  + * only when an exception is thrown.
    * 
    * @author Gavin King
    */
  @@ -31,18 +27,10 @@
      {
         try
         {
  -         final Object result = invocation.proceed();
  -         if ( isRollbackRequired( invocation.getMethod(), result ) )
  -         {
  -            Transaction.instance().setRollbackOnly();
  -         }
  -         return result;
  +         return invocation.proceed();
         }
         catch (Exception e)
         {
  -         //Reproduce the EJB3 rollback rules for JavaBean components
  -         if ( getComponent().getType()==JAVA_BEAN )
  -         {
               if ( isRollbackRequired(e) )
               {
                  try
  @@ -51,26 +39,17 @@
                  }
                  catch (Exception te) {} //swallow
               }
  -         }
            throw e;
         }
      }
      
  -   private boolean isRollbackRequired(Method method, final Object result)
  -   {
  -      if ( !method.isAnnotationPresent(Rollback.class) ) return false;
  -      String[] outcomes = method.getAnnotation(Rollback.class).ifOutcome();
  -      List<String> outcomeList = Arrays.asList(outcomes);
  -      return outcomes.length==0 || 
  -            ( result==null && outcomeList.contains(Outcome.REDISPLAY) ) || 
  -            outcomeList.contains(result);
  -   }
  -   
      private boolean isRollbackRequired(Exception e)
      {
  +      boolean isJavaBean = getComponent().getType()==JAVA_BEAN;
         Class<? extends Exception> clazz = e.getClass();
  -      return ( (e instanceof RuntimeException) && !clazz.isAnnotationPresent(APPLICATION_EXCEPTION) ) || 
  -            ( clazz.isAnnotationPresent(APPLICATION_EXCEPTION) && rollback( clazz.getAnnotation(APPLICATION_EXCEPTION) ) );
  +      return ( isJavaBean && (e instanceof RuntimeException) && !clazz.isAnnotationPresent(APPLICATION_EXCEPTION) && !clazz.isAnnotationPresent(ApplicationException.class) ) || 
  +            ( isJavaBean && clazz.isAnnotationPresent(APPLICATION_EXCEPTION) && rollback( clazz.getAnnotation(APPLICATION_EXCEPTION) ) ) ||
  +            ( clazz.isAnnotationPresent(ApplicationException.class) && clazz.getAnnotation(ApplicationException.class).rollback() );
      }
      
   }
  
  
  
  1.15      +6 -0      jboss-seam/src/main/org/jboss/seam/interceptors/TransactionInterceptor.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: TransactionInterceptor.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/interceptors/TransactionInterceptor.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -b -r1.14 -r1.15
  --- TransactionInterceptor.java	31 May 2007 22:41:08 -0000	1.14
  +++ TransactionInterceptor.java	18 Jun 2007 04:54:11 -0000	1.15
  @@ -27,26 +27,31 @@
      {
         return new Work()
         {
  +         
            @Override
            protected Object work() throws Exception
            {
               return invocation.proceed();
            }
  +         
            @Override
            protected boolean isNewTransactionRequired(boolean transactionActive)
            {
               return isNewTransactionRequired( invocation.getMethod(), getComponent().getBeanClass(), transactionActive );
            }
  +         
            private boolean isNewTransactionRequired(Method method, Class beanClass, boolean transactionActive)
            {
               return isTransactionAnnotationPresent(method) ? 
                     isNewTransactionRequired(method, transactionActive) :
                     isTransactionAnnotationPresent(beanClass) && isNewTransactionRequired(beanClass, transactionActive);
            }
  +         
            private boolean isTransactionAnnotationPresent(AnnotatedElement element)
            {
               return element.isAnnotationPresent(Transactional.class);
            }
  +         
            private boolean isNewTransactionRequired(AnnotatedElement element, boolean transactionActive)
            {
               return element.getAnnotation(Transactional.class).value().isNewTransactionRequired(transactionActive);
  @@ -54,4 +59,5 @@
            
         }.workInTransaction();      
      }
  +   
   }
  
  
  



More information about the jboss-cvs-commits mailing list