Как я могу подтвердить, что Spring Transactions работает правильно? - PullRequest
0 голосов
/ 20 марта 2019

Я работаю над приложением Spring 3.2, работающим в OC4j. У меня есть несколько методов, аннотированных с помощью аннотации Spring @Transactional следующим образом:

// 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
}

В журналах для моего локального экземпляра OC4J я вижу такие записи, которые заставляют меня думать, что транзакции настроены правильно:

[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

Иногда я тоже вижу там сообщения о тайм-ауте и откате.

Однако при развертывании на сервере разработки, предоставленном отделом операций, я не вижу подобных сообщений в журналах, хотя там также отображаются сообщения уровня DEBUG. Я добавил следующие строки журнала, которые я нашел где-то при переполнении стека:

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

В журналах я вижу такие вещи:

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

Эти значения из TransactionSynchronizationManager говорят мне что-нибудь полезное? Это говорит мне, что транзакции работают нормально и перестать беспокоиться?

У меня есть следующее в конфигурационном файле Spring:

@Configuration
@EnableTransactionManagement
public class TransactionConfig {

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

И у меня есть следующее в весеннем конфигурационном файле xml:

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

Спасибо!

...