EJB3 Локальный и Удаленный интерфейсы - PullRequest
21 голосов
/ 16 декабря 2011

Я понял, что локальный интерфейс предназначен для клиентов в экземпляре JVM того же контейнера, а удаленный интерфейс - для клиентов, находящихся вне JVM контейнера EJB. Как насчет клиента веб-приложения, который не находится (или не упакован) в том же .ear, но находится на том же сервере Java EE?

Ответы [ 4 ]

26 голосов
/ 16 декабря 2011

Официально @Local аннотированные бины доступны только в том случае, если они находятся в одном приложении. .War, развернутый отдельно от .ear (или другого .war или другого .jar EJB), - это другое приложение, даже если оно развернуто на том же экземпляре сервера приложений.

Таким образом, нет гарантии , что код в вашем .war может вызывать @Local EJB-компоненты, определенные в .ear.

Однако на практике почти на всех серверах приложений это работает.

Требуется спецификация EJB 3.2 для официальной поддержки локальных вызовов между приложениями: http://java.net/jira/browse/EJB_SPEC-22

5 голосов
/ 16 декабря 2011

Локальные интерфейсы должны использоваться для связи в одном и том же приложении .Это не обязательно означает JVM .

Дело в том, что даже в одном и том же экземпляре JVM на одном и том же сервере два разных приложения не могут взаимодействовать через локальные интерфейсы(что означает локальные и неинтерфейсные представления).

Если у вас есть веб-компонент (WAR), а также бизнес-компонент (EJB-JAR), который находится в одном приложении, наиболее интуитивное и простое решениезаключается в том, чтобы упаковать их в один EAR или в один WAR (начиная с Java EE 6).

0 голосов
/ 16 декабря 2011

Удаленные интерфейсы могут вызываться между приложениями из любого места на сервере приложений, а также извне, даже с других узлов.

Итак, предположим, что вам нужен удаленный (@Remote) интерфейс.В EJB 3.1 вы можете использовать внедрение зависимостей.

0 голосов
/ 16 декабря 2011

Вы используете удаленные интерфейсы, но вы выполняете поиск с использованием JNDI (вот как я это сделал), таким образом вы находите экземпляр EJB на сервере и можете использовать его в своем веб-приложении.

Хотя в проекте веб-приложения по-прежнему требуется баночка с интерфейсами EJB.

РЕДАКТИРОВАТЬ и я согласен с JB Nizet, зачем вам ВОЙНА вне EAR?

...