2015-07-30 1 views
0

я испытал мой первый sessoin боб с помощью Wildfly 8. Я использую следующий код для получения прокси для компонентаЧто означает этот адрес поиска в Wildfly 8?

InitialContext ctx = new InitialContext(); 
Object obj = ctx.lookup("java:global/EJBDemo/FirstDemoEJB"); 

При печати объекта из я получаю следующие выходные данные

Proxy для удаленного EJB StatelessEJBLocator {APPNAME = '', ModuleName = 'EJBDemo', distinctName = '', beanName = 'FirstDemoEJB', вид = 'интерфейс com.demo.ejb.FirstDemoEJBRemote'}

можно продолжить RMI с выше поиска и получить желаемый результат.

Однако я заметил, что существуют другие пути поиска, перечисленные Wildfly во время развертывания.

java:global/EJBDemo/FirstDemoEJB!com.demo.ejb.FirstDemoEJBRemote 
java:app/EJBDemo/FirstDemoEJB!com.demo.ejb.FirstDemoEJBRemote 
java:module/FirstDemoEJB!com.demo.ejb.FirstDemoEJBRemote 
java:jboss/exported/EJBDemo/FirstDemoEJB!com.demo.ejb.FirstDemoEJBRemote 

Когда я использую другие имена имена Lookup (! Часть до знака), я получаю следующие выходные данные

EJBDemo/FirstDemoEJB - сервис jboss.naming.context.java.app. TestEJB.EJBDemo.FirstDemoEJB

Но я не могу RMI и получить желаемый результат, как в java: global lookup.

Мой вопрос в том, что означают эти другие пути поиска, перечисленные Wildfly? и могут ли они использоваться для поиска JNDI? Если да, то как это сделать?

ответ

0

Перед Java EE 6 каждый сервер приложений (Weblogic, JBoss, Glassfish и т. Д.) Имел свое собственное соглашение об именах для JNDI, тогда приложения не были переносимыми для серверов.

В Java EE 6 спецификация стандартизировала адрес JNDI.

От https://docs.oracle.com/cd/E19798-01/821-1841/girgn/index.html:

Три JNDI пространства имен используются для портативных JNDI поисков: Java: глобальные, Java: модуль и Java: приложение.

Java: глобальное пространство имен JNDI является переносным способом поиска удаленных компонентов предприятия с использованием JNDI-запросов. JNDI адреса имеют следующий вид:

Java: глобальный [/ имя приложения]/модуль/имя предприятия боб имя [/ имя интерфейса] имя приложения и имя модуля по умолчанию на имя приложения и модуля минус расширение файла. Имена приложений требуются только в том случае, если приложение упаковано в EAR. Имя интерфейса требуется только в том случае, если фасоль предприятия реализует несколько бизнес-интерфейсов.

Пространство имен java: module используется для поиска местных корпоративных компонентов в том же модуле.JNDI адреса с помощью Java: пространство имен модуля имеют следующий вид:

Java: модуль/предприятия боб имя/[имя интерфейса] Имя интерфейса требуется только, если предприятие компонент реализует более одного бизнес-интерфейс.

Пространство имен java: app используется для поиска местных корпоративных компонентов , упакованных в одном приложении. То есть, корпоративный компонент , упакованный в файл EAR, содержащий несколько модулей Java EE. JNDI адрес с помощью Java: приложение пространство имен имеют следующий вид:

Java: приложение [/ имя модуля]/имя боб предприятия [/ имя интерфейса] Имя модуля является необязательным. Имя интерфейса требуется только в том случае, если корпоративный компонент реализует несколько бизнес-интерфейсов.

Например, если корпоративный компонент MyBean упакован в веб-архив myApp.war, имя модуля myApp. Портативное имя JNDI - это java: module/MyBean. Обозначенное JNDI-имя с использованием java: global namespace является java: global/myApp/MyBean.