Index: appserver/web/weld-integration/src/main/java/org/glassfish/cdi/transaction/TransactionalInterceptorRequired.java =================================================================== --- appserver/web/weld-integration/src/main/java/org/glassfish/cdi/transaction/TransactionalInterceptorRequired.java (revision 62984) +++ appserver/web/weld-integration/src/main/java/org/glassfish/cdi/transaction/TransactionalInterceptorRequired.java (working copy) @@ -40,13 +40,15 @@ package org.glassfish.cdi.transaction; -import org.glassfish.logging.annotation.LoggerInfo; +import java.util.logging.Logger; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptor; import javax.interceptor.InvocationContext; + +import javax.transaction.Status; +import javax.transaction.TransactionManager; import javax.transaction.TransactionalException; -import java.util.logging.Logger; /** * Transactional annotation Interceptor class for Required transaction type, @@ -73,10 +75,11 @@ setTransactionalTransactionOperationsManger(false); try { boolean isTransactionStarted = false; - if (getTransactionManager().getTransaction() == null) { + final TransactionManager transactionManager = getTransactionManager(); + if (transactionManager.getTransaction() == null) { _logger.log(java.util.logging.Level.INFO, CDI_JTA_MBREQUIRED); try { - getTransactionManager().begin(); + transactionManager.begin(); } catch (Exception exception) { String messageString = "Managed bean with Transactional annotation and TxType of REQUIRED " + @@ -94,7 +97,11 @@ } finally { if (isTransactionStarted) try { - getTransactionManager().commit(); + if (transactionManager.getStatus() == Status.STATUS_MARKED_ROLLBACK) { + transactionManager.rollback(); + } else { + transactionManager.commit(); + } } catch (Exception exception) { String messageString = "Managed bean with Transactional annotation and TxType of REQUIRED " + Index: appserver/web/weld-integration/src/main/java/org/glassfish/cdi/transaction/TransactionalInterceptorRequiresNew.java =================================================================== --- appserver/web/weld-integration/src/main/java/org/glassfish/cdi/transaction/TransactionalInterceptorRequiresNew.java (revision 62984) +++ appserver/web/weld-integration/src/main/java/org/glassfish/cdi/transaction/TransactionalInterceptorRequiresNew.java (working copy) @@ -40,14 +40,16 @@ package org.glassfish.cdi.transaction; -import org.glassfish.logging.annotation.LoggerInfo; +import java.util.logging.Logger; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptor; import javax.interceptor.InvocationContext; + +import javax.transaction.Status; import javax.transaction.Transaction; +import javax.transaction.TransactionManager; import javax.transaction.TransactionalException; -import java.util.logging.Logger; /** * Transactional annotation Interceptor class for RequiresNew transaction type, @@ -76,13 +78,14 @@ setTransactionalTransactionOperationsManger(false); try { Transaction suspendedTransaction = null; - if (getTransactionManager().getTransaction() != null) { + final TransactionManager transactionManager = getTransactionManager(); + if (transactionManager.getTransaction() != null) { _logger.log(java.util.logging.Level.INFO, CDI_JTA_MBREQNEW); - suspendedTransaction = getTransactionManager().suspend(); + suspendedTransaction = transactionManager.suspend(); //todo catch, wrap in new transactional exception and throw } try { - getTransactionManager().begin(); + transactionManager.begin(); } catch (Exception exception) { String messageString = "Managed bean with Transactional annotation and TxType of REQUIRES_NEW " + @@ -96,7 +99,11 @@ proceed = proceed(ctx); } finally { try { - getTransactionManager().commit(); + if (transactionManager.getStatus() == Status.STATUS_MARKED_ROLLBACK) { + transactionManager.rollback(); + } else { + transactionManager.commit(); + } } catch (Exception exception) { String messageString = "Managed bean with Transactional annotation and TxType of REQUIRES_NEW " + @@ -107,7 +114,7 @@ } if (suspendedTransaction != null) { try { - getTransactionManager().resume(suspendedTransaction); + transactionManager.resume(suspendedTransaction); } catch (Exception exception) { String messageString = "Managed bean with Transactional annotation and TxType of REQUIRED " +