Нужно ли мне использовать @Remote, если я хочу предоставить EJB другому приложению на том же сервере приложений?

У меня есть @Stateless @Local Bean, успешно развернутый в ухе. Я вижу новое стандартное глобальное имя JNDI EJB 3.1 при просмотре дерева JNDI. (Java: глобальный / продукт / продукт-ejb / ProductManagement)

Я хочу использовать этот EJB в другом приложении на том же сервере приложений. Нужно ли мне добавлять удаленный интерфейс для этого EJB?


person Kyle Renfro    schedule 19.10.2010    source источник
comment
Из учебника JEE: [Локальные клиенты] должны работать в том же приложении, что и корпоративный компонент, к которому он обращается. Из этого следует, что ответ - ДА. Но все же хотелось бы получить другое мнение.   -  person Kyle Renfro    schedule 19.10.2010
comment
Хм ... У меня небольшой вопрос, как вызвать EJB из другого приложения? Какие классы вы должны поместить в путь к классам вызывающего приложения? Будет ли достаточно класса удаленного интерфейса?   -  person devmiles.com    schedule 29.10.2010
comment
@Vladimir Короткий ответ - да. У меня был хороший опыт создания Maven артефакта ejb-client, который я включаю во второе приложение. Это, вероятно, хороший кандидат для отдельного вопроса, хотя кто-то может дать полный ответ, и сообщество может выиграть.   -  person Kyle Renfro    schedule 09.11.2010


Ответы (1)


Доступ между приложениями к локальному клиентскому представлению не требуется спецификацией, но может дополнительно поддерживаться вашим контейнером. Если вы хотите, чтобы ваше приложение было переносимым, вам не следует полагаться на него и использовать удаленный интерфейс (в любом случае достойный контейнер должен оптимизировать вызовы внутри той же JVM). Из спецификации EJB 3.1:

3.2.2 Местные клиенты

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

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

Доступ к корпоративному компоненту через представление локального клиента требуется только для поддержки локальных клиентов, упакованных в том же приложении, что и корпоративный компонент, обеспечивающий представление локального клиента. Совместимые реализации этой спецификации могут дополнительно поддерживать доступ к локальному клиентскому представлению корпоративного компонента из локального клиента, упакованного в другом приложении. Требования к конфигурации для доступа между приложениями к локальному клиентскому представлению зависят от поставщика и выходят за рамки данной спецификации. Приложения, полагающиеся на доступ между приложениями к локальному клиентскому представлению, непереносимы.

...

использованная литература

  • EJB 3.1 Specification
    • Section 3.2.2 "Local Clients"
person Pascal Thivent    schedule 19.10.2010
comment
+1 Пятно на. Большинство поставщиков, с которыми я сравнивал, имеют автоматическую оптимизацию удаленных вызовов, происходящих в одной и той же виртуальной машине. Однако будьте осторожны, неоптимизаторы часто не передают информацию о транзакциях и безопасности при удаленных вызовах в одной и той же виртуальной машине. Подлый способ проверить, есть ли у вас один и тот же поток с обеих сторон удаленного вызова intra-vm. Если вы этого не сделаете, то вам не повезло, вы попали на полный уровень удаленного взаимодействия и выбрали новый поток из пула потоков на обратном пути в виртуальную машину. - person David Blevins; 28.10.2010
comment
@ Дэвид Спасибо, Дэвид. Мне очень приятно читать ваши комментарии и ответы со всеми этими бесценными подробностями. Большое спасибо за то, что поделились всем этим. - person Pascal Thivent; 28.10.2010
comment
Документ не очень точен, говоря, что он размещен в одной JVM. Они должны сказать, что «Local EJB» работает только при вызове из того же EAR. Это довольно ограничено. - person Aerosteak; 21.11.2010