Какой лучший способ смешать Spring MVC и CDI / JEE6? - PullRequest
3 голосов
/ 26 октября 2010

Я не фанат JSF. Spring MVC имеет для меня большой смысл, и я использовал его в прошлом.

Можете ли вы отговорить меня от этого или дать советы по его интеграции в JEE6, а также поделиться и получить с CDI.

Я не против иметь контекст приложения только для вещей MVC, но если я использую @Inject или @EJB в своих контроллерах MVC, что будет неправильно?

Seam3 кажется интересным, хотя готов ли он к производству?

Ответы [ 3 ]

3 голосов
/ 08 ноября 2010

Другой вариант - использовать JAX-RS в качестве контроллера (с реализацией на Джерси вы можете перенаправить управление на JSP) и использовать JSP для своего просмотра.Таким образом, вам не придется беспокоиться об интеграции Spring с Java EE.

Например, вы можете иметь HomeController:

@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 используется для веб-сервисов RESTful, поэтому, чтобы понять, что происходит в приведенном ниже коде, вам необходимо иметь представление о REST.

2 голосов
/ 26 октября 2010

Можете ли вы отговорить меня от этого или дать советы, как красиво интегрировать его в JEE6 и поделиться и получить с CDI

Возможно, я ошибаюсь, но я думаю, что вам как-то придетсясделайте выбор между CDI и частью DI Spring, один из них должен отвечать за создание объектов для возникновения магии.Поэтому, если вы хотите использовать CDI с Spring MVC, вам придется создавать компоненты контроллеров CDI.От JavaOne 2010: Панель Java EE 6 «Что нам теперь делать?»примечания :

SpringMVC и CDI?=> Технически возможно: использовать компоненты CDI в качестве контроллеров (но Реза говорит, что они не видят достаточного спроса на SpringMVC для выполнения работы).

Я также настоятельно рекомендую взглянуть на Java EE 6 (CDI / EJB 3.1) XOR Spring Core Reloaded .

Не знаюне против иметь контекст приложения только для вещей MVC, но если я использую @Inject или @EJB в своих контроллерах MVC, что может пойти не так?

Spring обеспечивает встроенную поддержку «at inject» из JSR-330 , а также обеспечивает магию для @EJB.Если это все, что вы ищете, Spring будет работать.Но это не то, что дает CDI (JSR-299).

1 голос
/ 08 июня 2011

Использование CDI из Spring объясняет, как построить мост CDI-Spring с BeanFactoryPostProcessor, который импортирует все bean-компоненты из CDI BeanManager в контекст приложения Spring.

Pascal - это правильноговоря, что вы должны сделать выбор между Spring DI и CDI, но с этим подходом вы можете сделать выбор для модуля .

В типичной раскладке WAR есть один веб-модуль, использующийряд сервисных и персистентных модулей в WEB-INF / lib.С помощью моста CDI-Spring вы можете превратить модули WEB-INF / lib в архивы bean-компонентов CDI, тогда как веб-модуль является , а не архивом компонентов и использует только Spring DI.

Мост обращается к CDI BeanManager через JNDI и создает фабричный бин Spring для каждого бина CDI.

Я использую этот мост именно для вашего случая использования: интеграция веб-интерфейса Spring MVC с бэкэндом Java EE 6.

...