Страницы

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

четверг, 11 октября 2018 г.

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

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


Ответ

Если коротко, только получать их от сервера приложений через 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; } }
Почитать можно здесь

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

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