1

I working on an Spring 3.2 application running in OC4j. I have a number of methods annotated with Spring's @Transactional annotation as follows:

// in MyServiceImpl
@Transactional()
public void insertPaymentData(PaymentParams paymentParams) { 
    // call to MyDaoImpl which in turn calls a 
    // Spring JDBC Stored Procedure implementation
}


// in the Stored Procedure implementation
@Transactional(propagation = Propagation.MANDATORY)
public void insertPaymentData(PaymentParams paymentParams) {
    // execute procedure here
}

In the logs for my local OC4J instance I see entries such as the following which make me think that Transactions are configured correctly:

[1.2.3.4-user123] 2019-03-20 17:36:14,805 DEBUG AbstractFallbackTransactionAttributeSource::getTransactionAttribute - Adding transactional method 'MyServiceImpl.insertPaymentData' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,timeout_1800; ''
[1.2.3.4-user123] 2019-03-20 17:36:14,809 DEBUG AbstractBeanFactory::doGetBean - Returning cached instance of singleton bean 'transactionManager'
[1.2.3.4-user123] 2019-03-20 17:36:14,812 DEBUG AbstractPlatformTransactionManager::getTransaction - Creating new transaction with name [my.app.service.payments.MyServiceImpl.insertPaymentData]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,timeout_1800; ''
[1.2.3.4-user123] 2019-03-20 17:36:14,821 DEBUG AbstractBeanFactory::doGetBean - Returning cached instance of singleton bean 'transactionManager'
[1.2.3.4-user123] 2019-03-20 17:36:14,822 DEBUG AbstractPlatformTransactionManager::handleExistingTransaction - Participating in existing transaction
[1.2.3.4-user123] 2019-03-20 17:36:14,822 DEBUG DataSourceUtils::doGetConnection - Fetching JDBC Connection from DataSource
[1.2.3.4-user123] 2019-03-20 17:36:14,823 DEBUG DataSourceUtils::doGetConnection - Registering transaction synchronization for JDBC Connection
[1.2.3.4-user123] 2019-03-20 17:38:42,550 DEBUG DataSourceUtils::doReleaseConnection - Returning JDBC Connection to DataSource
[1.2.3.4-user123] 2019-03-20 17:38:42,551 DEBUG AbstractPlatformTransactionManager::processCommit - Initiating transaction commit

Sometimes I see timeout and rollback messages there too.

However when I deploy to the development server provided by the ops department I do not see any messages like this in the logs, although the DEBUG level messages are displayed there too. I added in the following logging lines which I found somewhere on stack overflow:

    logger.debug("Transaction name=" + TransactionSynchronizationManager.getCurrentTransactionName());
    logger.debug("isActualTransactionActive=" + TransactionSynchronizationManager.isActualTransactionActive());
    logger.debug("isSynchronizationActive=" + TransactionSynchronizationManager.isSynchronizationActive());

In the logs I now see things like this:

Transaction name=my.app.service.payments.MyServiceImpl.insertPaymentData
isActualTransactionActive=true
isSynchronizationActive=true

Are these values from TransactionSynchronizationManager telling me anything useful? Is it telling me that transactions are working fine and to stop worrying?

I have the following in a Spring configuration file:

@Configuration
@EnableTransactionManagement
public class TransactionConfig {

    @Bean
    public JtaTransactionManager transactionManager() {
        return new JtaTransactionManager();
    }
}

And I have the following in a spring xml config file:

<tx:annotation-driven transaction-manager="transactionManager" />

Thanks!

Shane
  • 305
  • 6
  • 16

0 Answers0