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

Локальные и удаленные интерфейсы EJB3

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

РЕДАКТИРОВАТЬ, и я согласен с JB Nizet, почему вам нужна WAR вне EAR?

Ответ 4

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

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