Spring - привыкни TransactionManager - PullRequest
2 голосов
/ 04 мая 2011

У меня есть два менеджера транзакций, и мне было любопытно, есть ли какая-нибудь возможность получить тот, который был использован.

Чтобы быть более конкретным, как underlyingMethod(..) выяснить, какой транзакции использовался (без отправкиэто дополнительный параметр "actionManagerName / Ref "):

@Transactional("transactionManager1")
public void transactionFromFirstTM() {
    someClass.underlyingMethod()
}


@Transactional("transactionManager2")
public void transactionFromSecondTM() {
    someClass.underlyingMethod()
}

?


ok Я использовал это, чтобы получить сеанс гибернации от фактического менеджера транзакций:

protected Session getSession() {
    Map<Object, Object> resourceMap = TransactionSynchronizationManager.getResourceMap();

    Session session = null;
    for (Object value : resourceMap.values()) {
        if (value instanceof SessionHolder) {
            session = ((SessionHolder) value).getSession();
            break;
        }
    }

    return session;
}

1 Ответ

2 голосов
/ 04 мая 2011

Не думаю, что вы можете, но вы не должны ничего делать с менеджером транзакций. Некоторые действия для текущей транзакции доступны в TransactionSynchronizationManager

Другим полезным классом является TransactionAspectUtils. Но не то чтобы оба предназначались для внутреннего использования, и вам не следует полагаться на них во многих местах вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...