Какова цель TransactionSynchronizationRegistry? - PullRequest
0 голосов
/ 14 июля 2011

Согласно спецификации JTA:

Этот интерфейс предназначен для использования компонентами сервера приложений системного уровня, такими как диспетчеры постоянства, адаптеры ресурсов, а также компоненты EJB и веб-приложений.Это дает возможность регистрировать объекты синхронизации со специальной семантикой упорядочения, связывать объекты ресурсов с текущей транзакцией, получать контекст транзакции текущей транзакции, получать текущее состояние транзакции и отмечать текущую транзакцию для отката.

Также:

Пользователь методов getResource () и putResource () является библиотечным компонентом, который управляет данными транзакции от имени вызывающей стороны.Специфичные для транзакции данные, предоставляемые вызывающей стороной, не сразу сбрасываются в ресурс, включенный в транзакцию, а вместо этого кэшируются.Кэшированные данные хранятся в структуре данных, связанных с транзакциями, которая находится в отношении ноль или один к одному с транзакционным контекстом вызывающей стороны.

Однако я все еще озадачен.

Во-первых, что означает «[...] возможность регистрировать объекты синхронизации со специальной семантикой упорядочения» и как можно настроить упорядочение?

Затем, для чего это нужно?случаи, когда необходимо «связать объекты ресурса с текущей транзакцией»?

1 Ответ

3 голосов
/ 14 июля 2011

Во-первых, что дает "[...] возможность регистрации синхронизация объектов со специальной семантикой упорядочения Можно ли настроить порядок?

«Особая семантика упорядочения» объясняется в javadoc registerInterposedSynchronization, которая пытается объяснить, как эти слушатели запускаются относительно Transaction.registerSynchronization.

Тогда, каковы некоторые случаи использования, в которых необходимо "связать Ресурсы объектов с текущей транзакцией "?

putResource / getResource позволяет вызывающей стороне хранить «локальные транзакции» объекты.

Например, контейнер JPA может зарегистрировать InterposedSynchronization при использовании. Сессионный компонент с состоянием может обновить сущность во время SessionSynchronization.beforeCompletion. EntityManager сохранит сущность в текущей транзакции, используя putResource, а затем сбросит данные в базу данных во время его Synchronization.beforeCompletion, который гарантированно будет выполняться после.

...