Безопасно ли вводить @Resource UserTransaction в компонент EJB Singleton?

Q1: я пишу компонент EJB Singleton, использующий BMT, поэтому мне нужно использовать UserTransaction в моем компоненте. Мне было интересно, БЕЗОПАСНО ли вводить @Resource UserTransaction в мой одноэлементный компонент EJB. Я не знаю, будет ли контейнер внедрять прокси-сервер UserTransaction или НЕТ. Может кто-нибудь дать мне несколько идей? Спасибо!

Вопрос 2:

В чем разница между @Resource UserTransaction и sessionContext.getUserTransaction(). Они эквивалентны?


person Community    schedule 28.01.2014    source источник


Ответы (1)


Мне было интересно, БЕЗОПАСНО ли вводить @Resource UserTransaction в мой одноэлементный компонент EJB.

Сеансовый компонент Singleton — это один из трех компонентов, определенных в спецификации ejb3.1. : без гражданства, с сохранением состояния и синглтон. Следовательно, с Singleton контейнер должен следовать тому же контракту, что и другие сеансовые компоненты.

В договоре сказано:

4.3.3 Интерфейс SessionContext. Если компонент указывает зависимость от интерфейса SessionContext..., контейнер должен предоставить экземпляр сеансового компонента с SessionContext. Это дает экземпляру сеансового компонента доступ к контексту экземпляра, поддерживаемому контейнером.

.

В чем разница между @Resource UserTransaction и sessionContext.getUserTransaction(). Они эквивалентны?

Да, они. Вот что говорит спецификация:

4.3.2 Внедрение зависимостей. В EJB 3.1 API класс компонента может получить интерфейс SessionContext посредством внедрения зависимостей без необходимости реализации интерфейса SessionBean. В этом случае аннотация Resource (или элемент дескриптора развертывания resource-env-ref) используется для обозначения зависимости bean-компонента от SessionContext.

Возможно, ваши сомнения вызваны тем фактом, что один и тот же экземпляр Singleton может совместно использоваться несколькими одновременными потоками, которые будут совместно использовать один и тот же экземпляр SessionContext. Однако. это не должно быть проблемой. Я использую условную форму, потому что не пробовал ее, но помимо темы, связанной с потокобезопасностью, которая может возникнуть, взгляните на таблицу на странице 117, где явно указано, что использование метода UserTransaction должно поддерживаться.

Таблица 3

Операции, разрешенные в методах Singleton Session Bean:

Разграничение транзакций, управляемых компонентом:

Методы SessionContext: методы UserTransaction

person Gabriel Aramburu    schedule 28.01.2014