Ответ 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 не поддерживаются.