Внедрение EJB в среду загрузки Spring

В настоящее время я работаю над проектом Spring Boot, состоящим из полнофункционального веб-приложения, использующего Spring JPA для сохранения, сервисов для уровня деловой активности и Spring MVC для конечных точек REST.

Пока все хорошо, но мне потребовалось добавить функции, реализованные на чистом Java EE. Я сразу же подумал о том, чтобы каким-то образом «вставить» пару простых старых Enterprise Java Beans в текущее приложение Spring Boot.

До сих пор я пробовал разные варианты, но ничего не работало. EJb - это что-то вроде

    @Stateless(name = "TeacherService")
    public class TeacherServiceImpl implements TeacherService {
        ....
    }

Я хотел бы ввести его в Spring RestController следующим образом:

    @RestController
    public class ExampleController {

       @EJB / @Inject / @Autowire
       private TeacherService teacherService;   

       @GetMapping(value = "user")   
       public String getSomeData() {
         return teacherService.someMethod();
       }
    }

Я пробовал несколько комбинаций, но пока ничего не помогло. Я нашел некоторую информацию, но похоже, что единственный способ объединить EJB со Spring - использовать полную Spring Framework вместо Spring Boot. Прежде чем кто-либо укажет на это, я знаю, что это глупая задача, и я мог бы просто объявить класс как Spring Bean с чем-то вроде @Service или @Component, но в назначении указано «предоставить некоторые функции с использованием простого Java EE» и эти аннотации принадлежат весне.

Есть ли обходной путь (или что-то еще, что я не пробовал) для такого рода задач? В качестве альтернативы, какой компонент Java EE может быть легко совместим со Spring Boot? Спасибо за ваше время.

взгляните на эту статью baeldung.com/spring-ejb

want2learn 30.05.2018 16:23

Попробуйте посмотреть по этой ссылке: spring.io/blog/2014/11/23/….

NiVeR 30.05.2018 16:39
3
2
7 541
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Spring поддерживает JSR-330 (@Inject и @Named).

К сожалению, @Stateless не поддерживается.

Но способ, которым Spring может решить вашу проблему, - это просто объявить TeacherServiceImpl как bean-компонент в классе Configuration.

@Configuration
public class MyConfig {
    @Bean
    public TeacherService teacherService() {
      return new TeacherServiceImpl();
    }
}

После этого вы сможете @ Autowire / @ Inject bean.

Другие вопросы по теме