Что такое transaction inspection support
Что проверяют
Спрашивают не про заученный термин, а про то, умеете ли вы заглянуть внутрь транзакции в работающем Java-приложении. Устойчивого стандартного API ровно с таким названием нет, поэтому сильный ответ начинается с уточнения: речь о средствах, которые позволяют узнать, идёт ли сейчас транзакция, с какими параметрами она открыта и что в ней происходит. За вопросом стоит опыт разбора инцидентов: потерянные коммиты, зависшие блокировки, «почему-то не откатилось».
Как отвечать
Разложите на три уровня.
Код приложения. В Spring состояние текущей транзакции читает TransactionSynchronizationManager: isActualTransactionActive(), getCurrentTransactionName(), isCurrentTransactionReadOnly(), getCurrentTransactionIsolationLevel(). Туда же вешаются хуки registerSynchronization, когда действие должно произойти строго после фиксации. В JTA статус даёт UserTransaction.getStatus(), а возможности драйвера описывает DatabaseMetaData.
if (TransactionSynchronizationManager.isActualTransactionActive()) {
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronization() {
@Override public void afterCommit() { publisher.send(event); }
});
}Логи. Категория org.springframework.transaction на уровне DEBUG показывает каждое открытие, присоединение к существующей и откат, а org.hibernate.SQL показывает, что реально ушло в базу.
База. pg_stat_activity со статусом idle in transaction, pg_locks для ожиданий, txid_current() и текущий уровень изоляции соединения.
Где спотыкаются
Проверяют активность транзакции в методе с @Transactional и удивляются, что её нет: вызов соседнего метода того же бина идёт мимо прокси, и аннотация не срабатывает вовсе.
Считают, что достаточно логов приложения. Транзакцию может держать пул или ORM вне вашего кода, и только представления самой базы покажут соединение, висящее в idle in transaction и удерживающее снапшот.
Путают инспекцию с аудитом. Запись бизнес-событий в таблицу истории не отвечает на вопрос, в какой изоляции шла операция и на какой блокировке она стояла.