Search in sources :

Example 1 with UOWException

use of com.ibm.wsspi.uow.UOWException in project spring-framework by spring-projects.

the class WebSphereUowTransactionManager method execute.

@Override
public <T> T execute(TransactionDefinition definition, TransactionCallback<T> callback) throws TransactionException {
    if (definition == null) {
        // Use defaults if no transaction definition given.
        definition = new DefaultTransactionDefinition();
    }
    if (definition.getTimeout() < TransactionDefinition.TIMEOUT_DEFAULT) {
        throw new InvalidTimeoutException("Invalid transaction timeout", definition.getTimeout());
    }
    int pb = definition.getPropagationBehavior();
    boolean existingTx = (this.uowManager.getUOWStatus() != UOWSynchronizationRegistry.UOW_STATUS_NONE && this.uowManager.getUOWType() != UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION);
    int uowType = UOWSynchronizationRegistry.UOW_TYPE_GLOBAL_TRANSACTION;
    boolean joinTx = false;
    boolean newSynch = false;
    if (existingTx) {
        if (pb == TransactionDefinition.PROPAGATION_NEVER) {
            throw new IllegalTransactionStateException("Transaction propagation 'never' but existing transaction found");
        }
        if (pb == TransactionDefinition.PROPAGATION_NESTED) {
            throw new NestedTransactionNotSupportedException("Transaction propagation 'nested' not supported for WebSphere UOW transactions");
        }
        if (pb == TransactionDefinition.PROPAGATION_SUPPORTS || pb == TransactionDefinition.PROPAGATION_REQUIRED || pb == TransactionDefinition.PROPAGATION_MANDATORY) {
            joinTx = true;
            newSynch = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER);
        } else if (pb == TransactionDefinition.PROPAGATION_NOT_SUPPORTED) {
            uowType = UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION;
            newSynch = (getTransactionSynchronization() == SYNCHRONIZATION_ALWAYS);
        } else {
            newSynch = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER);
        }
    } else {
        if (pb == TransactionDefinition.PROPAGATION_MANDATORY) {
            throw new IllegalTransactionStateException("Transaction propagation 'mandatory' but no existing transaction found");
        }
        if (pb == TransactionDefinition.PROPAGATION_SUPPORTS || pb == TransactionDefinition.PROPAGATION_NOT_SUPPORTED || pb == TransactionDefinition.PROPAGATION_NEVER) {
            uowType = UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION;
            newSynch = (getTransactionSynchronization() == SYNCHRONIZATION_ALWAYS);
        } else {
            newSynch = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER);
        }
    }
    boolean debug = logger.isDebugEnabled();
    if (debug) {
        logger.debug("Creating new transaction with name [" + definition.getName() + "]: " + definition);
    }
    SuspendedResourcesHolder suspendedResources = (!joinTx ? suspend(null) : null);
    try {
        if (definition.getTimeout() > TransactionDefinition.TIMEOUT_DEFAULT) {
            this.uowManager.setUOWTimeout(uowType, definition.getTimeout());
        }
        if (debug) {
            logger.debug("Invoking WebSphere UOW action: type=" + uowType + ", join=" + joinTx);
        }
        UOWActionAdapter<T> action = new UOWActionAdapter<>(definition, callback, (uowType == UOWManager.UOW_TYPE_GLOBAL_TRANSACTION), !joinTx, newSynch, debug);
        this.uowManager.runUnderUOW(uowType, joinTx, action);
        if (debug) {
            logger.debug("Returned from WebSphere UOW action: type=" + uowType + ", join=" + joinTx);
        }
        return action.getResult();
    } catch (UOWException ex) {
        throw new TransactionSystemException("UOWManager transaction processing failed", ex);
    } catch (UOWActionException ex) {
        throw new TransactionSystemException("UOWManager threw unexpected UOWActionException", ex);
    } finally {
        if (suspendedResources != null) {
            resume(null, suspendedResources);
        }
    }
}
Also used : UOWActionException(com.ibm.wsspi.uow.UOWActionException) DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) IllegalTransactionStateException(org.springframework.transaction.IllegalTransactionStateException) TransactionSystemException(org.springframework.transaction.TransactionSystemException) InvalidTimeoutException(org.springframework.transaction.InvalidTimeoutException) UOWException(com.ibm.wsspi.uow.UOWException) NestedTransactionNotSupportedException(org.springframework.transaction.NestedTransactionNotSupportedException)

Example 2 with UOWException

use of com.ibm.wsspi.uow.UOWException in project spring-framework by spring-projects.

the class MockUOWManager method runUnderUOW.

@Override
public void runUnderUOW(int type, boolean join, UOWAction action) throws UOWActionException, UOWException {
    this.type = type;
    this.joined = join;
    try {
        this.status = UOW_STATUS_ACTIVE;
        action.run();
        this.status = (this.rollbackOnly ? UOW_STATUS_ROLLEDBACK : UOW_STATUS_COMMITTED);
    } catch (Error err) {
        this.status = UOW_STATUS_ROLLEDBACK;
        throw err;
    } catch (RuntimeException ex) {
        this.status = UOW_STATUS_ROLLEDBACK;
        throw ex;
    } catch (Exception ex) {
        this.status = UOW_STATUS_ROLLEDBACK;
        throw new UOWActionException(ex);
    }
}
Also used : UOWActionException(com.ibm.wsspi.uow.UOWActionException) UOWActionException(com.ibm.wsspi.uow.UOWActionException) UOWException(com.ibm.wsspi.uow.UOWException)

Example 3 with UOWException

use of com.ibm.wsspi.uow.UOWException in project spring-framework by spring-projects.

the class WebSphereUowTransactionManagerTests method newTransactionWithCommitException.

@Test
public void newTransactionWithCommitException() {
    final RollbackException rex = new RollbackException();
    MockUOWManager manager = new MockUOWManager() {

        @Override
        public void runUnderUOW(int type, boolean join, UOWAction action) throws UOWException {
            throw new UOWException(rex);
        }
    };
    WebSphereUowTransactionManager ptm = new WebSphereUowTransactionManager(manager);
    DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
    assertFalse(TransactionSynchronizationManager.isSynchronizationActive());
    assertFalse(TransactionSynchronizationManager.isActualTransactionActive());
    assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly());
    try {
        ptm.execute(definition, new TransactionCallback<String>() {

            @Override
            public String doInTransaction(TransactionStatus status) {
                assertTrue(TransactionSynchronizationManager.isSynchronizationActive());
                assertTrue(TransactionSynchronizationManager.isActualTransactionActive());
                assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly());
                return "result";
            }
        });
        fail("Should have thrown TransactionSystemException");
    } catch (TransactionSystemException ex) {
        // expected
        assertTrue(ex.getCause() instanceof UOWException);
        assertSame(rex, ex.getRootCause());
        assertSame(rex, ex.getMostSpecificCause());
    }
    assertFalse(TransactionSynchronizationManager.isSynchronizationActive());
    assertFalse(TransactionSynchronizationManager.isActualTransactionActive());
    assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly());
    assertEquals(0, manager.getUOWTimeout());
}
Also used : DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) UOWException(com.ibm.wsspi.uow.UOWException) TransactionStatus(org.springframework.transaction.TransactionStatus) UOWAction(com.ibm.wsspi.uow.UOWAction) TransactionSystemException(org.springframework.transaction.TransactionSystemException) RollbackException(javax.transaction.RollbackException) Test(org.junit.Test)

Aggregations

UOWException (com.ibm.wsspi.uow.UOWException)3 UOWActionException (com.ibm.wsspi.uow.UOWActionException)2 TransactionSystemException (org.springframework.transaction.TransactionSystemException)2 DefaultTransactionDefinition (org.springframework.transaction.support.DefaultTransactionDefinition)2 UOWAction (com.ibm.wsspi.uow.UOWAction)1 RollbackException (javax.transaction.RollbackException)1 Test (org.junit.Test)1 IllegalTransactionStateException (org.springframework.transaction.IllegalTransactionStateException)1 InvalidTimeoutException (org.springframework.transaction.InvalidTimeoutException)1 NestedTransactionNotSupportedException (org.springframework.transaction.NestedTransactionNotSupportedException)1 TransactionStatus (org.springframework.transaction.TransactionStatus)1