Нет, это невозможно. Я работал над той же проблемой, в контексте развертывания приложения EJB 3.0 в WebLogic 10.3.x.
Приложение работает на сервере приложений Oracle 10.1.3 и GlassFish 3.x.
- Oracle AS (OC4J) имеет собственный механизм поиска локального интерфейса EJB с использованием JNDI.
- GlassFish 3.x реализует EJB 3.1 с переносимым синтаксисом имени JNDI.
Наше приложение использует механизм поиска для текущего сервера приложений, который определяется во время выполнения.
В WebLogic Server 10.3, локальный интерфейс EJB:
- может быть внедрен в управляемые классы в контейнере сервлетов (сервлеты, фильтры и т. Д.) И другие EJB-компоненты с использованием
@EJB
аннотаций
- доступен только для поиска из JNDI, когда он был объявлен в элементе
ejb-local-ref
в web.xml
или ejb-jar.xml
Для нас не практично объявлять все EJB, которые ищутся. У нас есть 192 EJB без сохранения состояния, в основном инъецированные, но многие смотрят на них из JNDI, потому что они нужны нам неуправляемым классам.
Мой источник этой информации, кроме проб и ошибок, Пример локального поиска WebLogic 10.3 EJB3 . Почти все остальное, что я нашел, включая документацию по Oracle, описывает синтаксис поиска JNDI с mappedName#fullInterface
, но не дает понять, что в дереве JNDI находится только имя удаленного интерфейса.
Обновление: Мы пошли с объявлениями в web.xml
и ejb-jar.xml
(да, есть EJB, которые используют служебные классы, которые ищут другие EJB в JNDI). Начал со скрипта для генерации их из источников, затем вручную редактировал их, пока они не были правильными. Не красиво, но необходимо.