Разница между javax.ejb.SessionSynchronization и javax.transaction.Synchronization - PullRequest
2 голосов
/ 02 августа 2011

Я работаю над приложением EJB3, в основном сессионными компонентами без сохранения состояния. Они используют транзакции, управляемые контейнером.

Я хочу, чтобы компоненты были осведомлены о транзакциях (для регистрации и т. Д.). Я могу реализовать javax.ejb.SessionSynchronization, чтобы сделать это. Я обнаружил, что могу зарегистрировать javax.transaction.Synchronization в перехватчике по умолчанию, чтобы получить аналогичные обратные вызовы.

Есть ли какие-либо недостатки / преимущества использования одного над другим? Спасибо

Ответы [ 2 ]

3 голосов
/ 03 августа 2011

Несколько SLSB одного типа могут быть вовлечены в одну транзакцию. Как только метод завершается, SLSB возвращается в пул для использования при следующем вызове, поэтому для экземпляра SLSB небезопасно «знать» о транзакции: к моменту уведомления бин может быть используется в другой транзакции.

Что касается SFSB, я бы сказал, что нет никакого преимущества между этими двумя подходами в теории. Однако контейнер EJB может использовать синхронизацию для различных внутренних задач, поэтому использование SessionSynchronization позволит контейнеру EJB лучше контролировать синхронизацию обратных вызовов относительно его собственных операций.

2 голосов
/ 15 мая 2014

Я просто попытался использовать интерфейс javax.ejb.SessionSynchronization с сессионным компонентом без сохранения состояния и был сбит с толку, чтобы не получать никаких вызовов трех реализованных методов.Затем я увидел этот комментарий в javax.ejb.SessionSynchronization JavaDoc :

Только бин сеанса с состоянием с разграничением транзакций, управляемый контейнером, может получать уведомления о синхронизации сеанса.Другие типы компонентов не должны реализовывать интерфейс SessionSynchronization или использовать аннотации синхронизации сеанса.

См. Также этот поток для получения дополнительной информации.Таким образом, я пришел к выводу, что с помощью javax.ejb.SessionSynchronization нельзя добиться того, чтобы сессионные компоненты EJB без учета состояния транзакций не могли быть достигнуты.

...