Когда выполняется диспозитор? - PullRequest
0 голосов
/ 10 августа 2011

У меня есть производитель pojo, который создает MyResourceManager.

@ TraderResouceManager @RequestScoped public MyResourceManager () {... ... *

MyResourceManger внедряется вSLSB

@ inject @TraderDB private MyResourceManager rm;

Распределитель представляет собой следующее

публичное закрытие void (@Disposes @TraderResouceManager MyResourceManagerrm) {rm.close ();}

Вопрос

Когда выполняется close ()?

Это перед закрытием транзакции или после закрытия транзакции?

РЕДАКТИРОВАТЬ: Вопрос, возможно, нуждается в дополнительном объяснении.Давайте возьмем аналогию с подключением к базе данных.

Я создаю @producer с @RequestScoped, используя pojo, который создает новое соединение для каждого запроса.

Мне нужно удалить соединениев конце запроса.Это соединение используется другими компонентами (на данный момент SLSB).В данном запросе может быть задействовано много bean-компонентов внутри транзакции.Следовательно, дополнительно мне нужно закрыть соединение только после того, как все транзакции будут логически закрыты.

Вопрос Смогу ли я добиться такого поведения с помощью приведенного выше кода, когда я использую транзакции, управляемые контейнером?

1 Ответ

0 голосов
/ 10 августа 2011

Close () выполняется, когда текущий запрос завершается, так как ваш метод источника находится в области запроса. Если вы вызываете свой SLSB из запроса JSF или из сервлета, то жизненный цикл этих запросов определяет, когда MyResourceManager будет удален. Если ваша SLSB удаленная, она будет прервана, как только вызов вернется.

...