Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Ejb совместно c Spring

#java #spring #java_ee #ejb


Как в spinge использовать EJB классы.

Да EJB не очень, тем более в библиотеке использовать спринг или ejb - это жесть,
но что досталось то приходится пока использовать.
Есть вопросы


Как спринг дружит с EJB с аннотациями типа stateless, ejb, и даже ConcurrencyManagement.
Если сервер приложений поднимает эти бины при запуске, как спринг делает их своими
бинами и делает ли своими бинами или какая то прокся между бинами управляемые сервером
приложений и бинами спринга
Как отключить поднятие EJB бинов сервером приложений и чтобы такие бины управлялись
спрингом путем сканирования этих пакетов либо же просто через конфигурацию

    


Ответы

Ответ 1



Если коротко, только получать их от сервера приложений через JNDI. Контейнер Spring и контейнер EJB/CDI - это два разных, хоть и похожих, мира. У бинов Spring и EJB разный жизненный цикл, а у контейнеров разные механизмы обеспечения этого жизненного цикла. Отсюда ответы на ваши вопросы: Никак не дружит. Эти аннотации анализирует и действует в соответствии с ними CDI-контейнер. Когда Spring встречает поле, в которое нужно внедрить зависимость, он ищет эту зависимость в контексте. А появиться зависимость в контексте может разными способами - в результате вызова конструктора объявленного в конфигурации бина, в результате вызова фабричного метода какого-нибудь класса, в результате JNDI-запроса. Как раз последним способом контекст Spring и получает EJB от сервера приложений. Никак. Spring не сможет самостоятельно управлять EJB. Так что вам придётся запустить ваше Spring-приложение, включающее EJB-компоненты, на сервере приложений, добавить в конфигурацию контекста что-нибудь вроде и убедиться в наличии соответствующего сеттера в бине Spring public class SomeSpringBean { private SomeEJB someEjb; public void setSomeEjb(SomeEJB someEjb) { this.someEjb = someEjb; } } Почитать можно здесь.

Комментариев нет:

Отправить комментарий