[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