EAR против отдельного EJB + WAR - PullRequest
21 голосов
/ 06 августа 2011

Какая разница в развертывании приложения как EAR (с 1 EJB и 1 WAR модулем) по сравнению с отдельными модулями?Я хочу использовать веб-профиль GlassFish 3, но он не поддерживает архив EAR.Могу ли я просто использовать EJB и WAR как отдельные модули?Любые другие варианты?

Ответы [ 2 ]

32 голосов
/ 07 августа 2011

Кажется, что существует некоторая путаница между 3 вариантами развертывания:

  1. EAR, который включает в себя EJB и WEB-модуль
  2. Развертывание отдельного модуля EJB и отдельного модуля WEB
  3. Развертывание WEB-модуля, который включает в себя EJB-классы или EJB-файл.

В первой ситуации у вас логически одно приложение, но разделенное на два уровня. Модуль WEB изолирован от модуля EJB в том смысле, что он может использовать классы из модуля EJB, но модуль EJB не может использовать классы из модуля WEB. Поскольку это одно приложение, можно использовать локальный доступ к EJB-компонентам, и внедрение EJB-компонентов работает, как и ожидалось.

Во второй ситуации (на которую вы, похоже, ссылаетесь в своем вопросе) нет логического единого приложения, а на самом деле два отдельных модуля. Они работают в одной и той же JVM, но официально Java EE не позволяет использовать локальный доступ, и удаленный доступ должен использоваться (хотя практически локальный доступ часто работает в любом случае). Кроме того, внедрение EJB-компонентов в bean-компоненты в веб-модуле не работает напрямую с простой аннотацией @EJB, но вместо этого должен использоваться атрибут lookup, который задает глобальное имя JNDI.

Наконец, третья ситуация (о которой вы, кажется, не упоминаете, но упоминаете «домашний»), немного похожа на первую, но в этом случае нет уровней и изоляции. EJB-компоненты могут напрямую обращаться ко всем классам из остального веб-модуля.

Веб-профиль поддерживает только эту последнюю ситуацию развертывания. И EAR, и автономные развертывания EJB не поддерживаются.

3 голосов
/ 06 августа 2011

Какая разница в развертывании приложения как ear (с 1 модулем ejb и 1 war) по сравнению с отдельными модулями?

Не полный список: в EAR вы можете определить Утилиты JAR также находятся, например, в EAR / lib и могут использоваться повторно WARs и EJB JAR .Часто файлы EAR предоставляют возможности предварительного развертывания, например, в WebSphere вы можете указать детали DataSource, чтобы вам не приходилось определять DataSource (и драйвер JDBC) с помощью утилит управления.

Поскольку я хочу использовать Glassfish3 веб-профиля, но он не поддерживает ушной архив.Могу ли я просто использовать ejb и war как отдельные модули?Любые другие варианты?

Да, спецификация веб-профиля явно позволяет вам развертывать облегченную версию EJB как часть WAR .Просто поместите EJB JAR внутри WARS WEB-INF/lib.Эта ссылка обеспечивает сравнение функций (веб-профиль и полноценный): http://glassfish.java.net/downloads/v3-final.html

...