Какой лучший способ смешивать весна MVC и CDI / Jee6?
-
26-09-2019 - |
Вопрос
Я не фанат JSF. Весна MVC имеет много смысла для меня, и я использовал его в прошлом.
Можете ли вы разговаривать из этого или предоставлять советы по хорошему интеграции в Jee6 и поделиться и GOTCHAS с CDI.
Я не против иметь контекст приложения только для вещей MVC, но если я использую @inject или @ejb в моем контроллерах MVC, что будет неправильно?
SWE3 кажется интересным, хотя он готов к производству?
Решение
Можете ли вы рассказать меня из этого или предоставлять советы для интеграции его красиво в Jee6 и поделиться и GOTCHAS с CDI
Может быть, я ошибаюсь, но я думаю, что вы как-то должны сделать выбор между CDI и ди-части весной, один из них должен отвечать за создание объектов для возникновения магии. Поэтому, если вы хотите использовать CDI с Spring MVC, вам нужно сделать ваши контроллеры CDI Beans. От Javaone 2010: Java EE 6 Панель "Что мы делаем сейчас?" Примечания:
SpringMVC и CDI? => Технически возможен: используйте CDI Beans в качестве контроллеров (но Reza говорит, что они не видят достаточно спроса на SpringMVC, чтобы сделать работу).
Я также тепло предполагаю посмотреть на Java EE 6 (CDI / EJB 3.1) XOR Spring Core Reloaded.
Я не против иметь контекст приложения только для вещей MVC, но если я использую @inject или @ejb в моем контроллерах MVC, что будет неправильно?
Весна обеспечивает встроенный Поддержка «в INJECT» от JSR-330 А также дает немного магии для @ejb. Если это все, что вы ищете, весна будет работать. Но это не то, что дает вам CDI (JSR-299).
Другие советы
Другой вариант будет использовать JAX-RS в качестве контроллера (с реализацией Джерси, вы сможете пересылать контроль на JSP) и использовать JSP для вашего представления. Таким образом, вам не нужно беспокоиться о интеграции весны с Java EE.
Например, у вас может быть домородок:
@Path("/")
@Stateless
public class HomeController {
@Context
HttpRequest request; // Injects request object so you set attributes.
@EJB // Inject your EJB
EmployeeServiceLocal employeeService;
@GET
public Viewable getHomePage() {
Employee employee = employeeService.getEmployee();
request.setAttribute("employee", employee);
return new Viewable("/home.jsp", null);
}
}
Это направило бы вас в JSP, называемое home.jsp, и вы сможете получить ваши данные на JSP через объект запроса. Обратите внимание, что JAX-RS используется для спокойных веб-сервисов, поэтому чтобы понять, что происходит в коде ниже, вам придется иметь понимание отдыха.
Использование CDI от весны Объясняет, как построить мост CDI-To-Spring с BeanFactoryPostProcessor, который импортирует все бобы из CDI BeanManager в контекст пружины приложения.
Паскаль прав в том, чтобы вы могли сделать выбор между Spring DI и CDI, но с таким подходом вы можете сделать выбор за модуль.
В типичной прокладке войны есть один веб-модуль, использующий несколько модулей услуг и настойчивых модулей в Web-Inf / lib. С мостом CDI-To-Spring вы можете превратить модули Web-Inf / Lib в архивы CDI Bean, в то время как веб-модуль нет Архив бобов и использует только пружину ди.
Мост обращается к CDI BeanManager через JNDI и создает фасоль Spring Factory для каждой фасоли CDI.
Я использую этот мост именно для вашего применения: интеграция весной MVC Web Frestend с бэкэнда Java EE 6.