Подтвердить что ты не робот

EAR против отдельного EJB + WAR

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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