Как в 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;
}
}
Почитать можно здесь
Комментариев нет:
Отправить комментарий