Как я могу конфигурировать модуль и имя приложения для поиска JNDI
В EJB 3.1 JNDI Поиск может выполняться с помощью разных Lookup-Names:
java:global[/<app-name>]/<module-name>/<bean-name>!<fully-qualifiedbean interface-name>
java:global[/<app-name>]/<module-name>/<bean-name>
java:app/<module-name>/<bean-name>!<fully-qualified-bean-interface-name>
java:app/<module-name>/<bean-name>
java:module/<bean-name>!<fully-qualified-bean-interface-name>
java:module/<bean-name>
В моем проекте JavaEE 6 (с Maven 2, Netbeans 6 и Glassfish v3) имя приложения - X-Snapshot.ear, а EJB-модуль - Y-Snapshot.jar. Как я могу настроить этот проект maven для использования другого имени приложения и модуля? Я не хочу менять все JNDI Lookups, когда эти имена меняются! Так можно ли конфигурировать имена приложений и модулей для JNDI LookUps?
Ответы
Ответ 1
Наивный подход
Плагин Maven EAR позволяет Настроить имя файла модуля, и вы можете установить окончательное имя или EAR с помощью project.build.finalName
.
Гораздо лучший подход
Отмените <application-name>
и <module-name>
в application.xml
и ejb-jar.xml
соответственно. Цитирование Переносное глобальное имя JNDI в EJB 3.1:
В дополнение к указанному выше имени, если EJB предоставляет только один вид клиента (то есть он реализует только один интерфейс или интерфейс без интерфейса), контейнер также уполномочен отображать bean до
java:global/[<application-name>]/<module-name>/<bean-name>
Где
-
<aplication-name>
по умолчанию присваивается имя пакета (.ear
имя файла) без расширение связки. Это может быть переопределено в application.xml
. Также, <application-name>
применимо только если bean упакован внутри .ear
. -
<module-name>
по умолчанию присваивается имя (.war
или .jar
) без расширение связки. Опять же, это может быть переопределено в ejb-jar.xml
. -
<bean-name>
по умолчанию используется неквалифицированное имя класса bean. Однако, если @Stateful
или @Stateless
или @Singleton
использует name, тогда значение указанные здесь будут использоваться в качестве bean имя.
Ответ 2
Имя приложения и имена модулей можно просмотреть во время выполнения через JNDI:
@Resource(lookup = "java:app/AppName")
private String appName;
@Resource(lookup = "java:module/ModuleName")
private String moduleName;
Хотя вы можете настроить имя приложения и имя модуля в дескрипторе развертывания вашего приложения как описано ниже, эти имена могут быть переопределены во время развертывания (за спецификация Java EE, как указано ниже), поэтому лучше не перекодировать эти значения в коде приложения.
EE.8.5.2 Развертывание приложения Java EE и EE.8.5.1 Развертывание автономного модуля Java EE
Инструмент развертывания должен убедиться, что имя приложения уникально в экземпляре сервера приложений. Если имя не уникально, средство развертывания может автоматически выбрать уникальное имя или разрешить Deployer выбрать уникальное имя
EE.8.1.1 Создание компонентов
Если и только если имя не уникально (например, поскольку два имени идентичны после удаления разных расширений имени файла), инструмент развертывания может выбирать новые уникальные имена для любого из конфликтующих модулей; имена модулей, которые не конфликтуют, не должны быть изменены. Алгоритм выбора уникальных имен в этом случае специфичен для продукта.