Skip to content

Instantly share code, notes, and snippets.

@ezhov-da
Last active March 10, 2019 12:23
Show Gist options
  • Save ezhov-da/7be49e55a579b72beaea96f0737799c8 to your computer and use it in GitHub Desktop.
Save ezhov-da/7be49e55a579b72beaea96f0737799c8 to your computer and use it in GitHub Desktop.
java ee jndi name
<pre>
java:<область видимости>[/<имя приложения>]/<имя модуля>/<имя EJB-компонента>[!<полностью уточненное имя интерфейса>]
<область видимости> - определяет последовательность пространств имен, которые отображаются в разные области видимости приложения Java EE;
global - префикс java:global позволяет компоненту, выполняющемуся вне приложения Java EE, получить доступ к глобальному пространству имен.
app — префикс java:app позволяет компоненту, выполняющемуся в рамках приложения Java EE, получить доступ к пространству имен, специфичному для приложения;
module — префикс java:module позволяет компоненту, выполняющемуся в рамках приложения Java EE, получить доступ к пространству имен, специфичному для модуля;
comp — префикс java:comp — это закрытое пространство имен, специфичное для компонента и недоступное для других компонентов;
<имя приложения> — требуется, только если сессионный EJB-компонент упакован в файл с расширением EAR или WAR.
Если дело обстоит именно так, то в <имя приложения> автоматически будет указано имя файла EAR или WAR (без указания расширения);
<имя модуля> — это имя модуля, в который упакован сессионный EJB-компонент.
Это может быть EJB-модуль в отдельном файле с расширением JAR или веб-модуль в файле с расширением WAR. В <имя модуля> по умолчанию указывается базовое имя архива без расширения файла;
<имя EJB-компонента> — имя сессионного EJB-компонента;
<полностью уточненное имя интерфейса> — это полностью уточненное имя каждого определенного бизнес-интерфейса. В случае с представлением без интерфейса именем может быть полностью уточненное имя класса EJB-компонента.
</pre>
[code:]LANG[:code]package org.agoncal.book.javaee7;
@Stateless
@Remote(ItemRemote.class)
@Local(ItemLocal.class)
@LocalBean
public class ItemEJB implements ItemLocal, ItemRemote {
// ...
}
[/code]
<pre>
После развертывания контейнер сгенерирует три JNDI-имени, чтобы внешний компонент смог получить доступ к ItemEJB, используя следующие глобальные JNDI-имена:
java:global/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemRemote
java:global/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemLocal
java:global/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemEJB
Следует отметить, что если бы ItemEJB был развернут в файле с расширением EAR (например, myapplication.ear), то вам пришлось бы указать в <имя приложения> следующее:
java:global/myapplication/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemRemote
java:global/myapplication/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemLocal
java:global/myapplication/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemEJB
Контейнер также требуется для того, чтобы сделать JNDI-имена доступными при использовании пространств имен java:app и java:module.
Таким образом, компонент, развернутый в том же приложении, что и ItemEJB, сможет осуществлять его поиск с использованием следующих JNDI-имен:
java:app/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemRemote
java:app/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemLocal
java:app/cdbookstore/ItemEJB!org.agoncal.book.javaee7.ItemEJB
java:module/ItemEJB!org.agoncal.book.javaee7.ItemRemote
java:module/ItemEJB!org.agoncal.book.javaee7.ItemLocal
java:module/ItemEJB!org.agoncal.book.javaee7.ItemEJB
Такое переносимое JNDI-имя применимо ко всем сессионным EJB-компонентам: без сохранения состояния, с сохранением состояния и одиночным.
</pre>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment