Как я могу настроить модуль и имя приложения для JNDI Lookups - PullRequest
16 голосов
/ 07 августа 2010

В EJB 3.1 JNDI-поиск может быть выполнен с разными Именами поиска:

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.ухо и EJB-модуль - это Y-Snapshot.jar.Как я могу настроить этот проект Maven для использования другого приложения и имени модуля?Я не хочу менять все поиски JNDI, когда меняются эти имена !!Так можно ли настроить имена приложений и модулей для JNDI LookUps?

Ответы [ 2 ]

17 голосов
/ 08 августа 2010

Наивный подход

Плагин 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>

, где

  1. <aplication-name> по умолчанию соответствует имени пакета (.ear имя файла) безрасширение пакета.Это может быть отменено в application.xml.Кроме того, <application-name> применимо, только если bean-компонент упакован в файл .ear.
  2. <module-name> по умолчанию имеет имя пакета (.war или .jar) без расширения пакета.Опять же, это может быть переопределено в ejb-jar.xml.
  3. <bean-name> по умолчанию для неквалифицированного имени класса компонента.Однако если @Stateful или @Stateless или @Singleton использует атрибут имени, то указанное здесь значение будет использоваться в качестве имени компонента.
6 голосов
/ 15 августа 2011

Имя приложения и имена модулей можно найти во время выполнения через 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 Создание компонента

Если и только если имя не уникально (например, потому что два имени идентичны после удаления разных расширений имени файла), инструмент развертывания может выбрать новые уникальные имена для любого из конфликтующих модулей;Имена модулей, которые не конфликтуют, не должны быть изменены.Алгоритм выбора уникальных имен в таком случае зависит от продукта.

...