Внедрение EJB в среду Spring Boot - PullRequest
0 голосов
/ 30 мая 2018

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

Пока чтотак хорошо, но я был обязан добавить функциональные возможности, реализованные в чистой Java EE.Я сразу подумал о том, чтобы каким-то образом «вставить» пару простых старых корпоративных Java-бинов в текущее приложение 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» и эти аннотациипринадлежат Spring.

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

1 Ответ

0 голосов
/ 30 мая 2018

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

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

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

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

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

...