Использование InitialContext для поиска в Liberty - PullRequest
0 голосов
/ 17 марта 2020

Я работаю над переносом ушного приложения из WebSphere 8.5 в WebSphere Liberty.

В разных системах развернуто 2 приложения EJB A и B.

В коде всякий раз, когда B должен поговорите с A, шаги были

a) Создайте InitialContext и передайте EJB-URL A

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, url);
InitialContext ic = new InitialContext(env)

b) Используйте этот InitialContext, чтобы затем выполнить поиск JNDI

Для Перенесите этот код в Liberty, мне нужно заменить все поиски JNDI для интерфейсов EJB на пространство имен java.

Инструмент миграции также предлагает использовать DefaultContext по умолчанию и не передавать INITIAL_CONTEXT_FACTORY и PROVIDER_URL в Liberty

InitialContext  context = new InitialContext();

Мой вопрос: как это будет работать в случае свободы для вышеупомянутого сценария, где A и B находятся в удаленных системах? Разве мы не требуем предоставления URL-адреса EJB?

Еще один связанный с этим вопрос заключается в том, является ли это изменение обратно совместимым с Websphere 8.5

1 Ответ

0 голосов
/ 17 марта 2020

В Liberty поиск в пространстве имен java: доступен только при поиске bean-компонентов внутри одного и того же серверного процесса. Для поиска bean-компонентов между серверными процессами необходимо использовать поиск corbaname, где corbaname будет включать хост и IP-адрес целевого сервера. Подробности об этом можно найти здесь:

https://www.ibm.com/support/knowledgecenter/SSD28V_liberty/com.ibm.websphere.wlp.core.doc/ae/twlp_ejb_remote.html

Кроме того, пример этого можно найти в тестовом проекте с открытым исходным кодом, который явно тестирует разные способы поиска удаленных EJB-компонентов между процессами:

https://github.com/OpenLiberty/open-liberty/blob/integration/dev/com.ibm.ws.ejbcontainer.remote_fat/fat/src/com/ibm/ws/ejbcontainer/remote/fat/tests/Server2ServerTests.java

И фактический сервлет для этого теста (запущенный на одном из двух серверов) находится здесь:

https://github.com/OpenLiberty/open-liberty/blob/integration/dev/com.ibm.ws.ejbcontainer.remote_fat/test-applications/RemoteClientWeb.war/src/com/ibm/ws/ejbcontainer/remote/client/web/RemoteTxAttrServlet.java

В тесте используется localhost, поскольку оба сервера находятся в одной системе, поэтому их необходимо заменить, если они находятся в разных системах .

Что касается переносимости с WebSphere Traditional 8.5, ответ - нет. WebSphere Traditional и Liberty будут поддерживать поиск удаленных интерфейсов в пространствах имен java: для bean-компонентов, которые размещены в одном и том же серверном процессе, однако поведение для поиска EJB-компонентов между процессами несовместимо.

...