Поиск EJB JNDI на разных серверах WebSphere - PullRequest
3 голосов
/ 12 августа 2009

У меня есть две отдельные установки WebSphere. (На самом деле один из них - WebSphere Application Server V6.1 с пакетами функций EJB 3.0 и веб-служб, а другой сервер - WebSphere ESB Server V6.2). Однако я знаю, что ESB действительно построен поверх WAS, поэтому он имеет все параметры конфигурации, которые есть у обычного WAS-сервера.

На моем сервере ESB я пытаюсь предоставить службу, написанную как EJB 3.0, которая будет развернута на сервере WAS 6.1. Мой вопрос не в том, как получить вызовы EJB 2.1 для вызова EJB 3.0. Мы уже сделали это. Мой вопрос, как позвонить через физические виртуальные машины. Сервер приложений WebSphere работает в своей собственной ячейке / узле / сервере с сервера ESB. Из того, что я прочитал в документации IBM, можно настроить привязку пространства имен в WAS, чтобы указывать на удаленный EJB-компонент в другом экземпляре WAS. Таким образом, вы можете использовать JNDI для поиска компонента в одном экземпляре WAS, который действительно находится в другом экземпляре WAS. Прелесть этого метода в том, что расположение EJB-объекта, которое вы хотите, абстрагируется до уровня контейнера, и вам не нужно перетаскивать файлы свойств IP-адресов и портов, которые необходимы для доступа к бину, если он меняет серверы и т. Д. Вы просто делаете стандартный поиск JNDI для удаленного EJB и получаете его.

Похоже, это можно сделать. (Смотрите следующие ссылки: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/tnam_view_bindings.html) Особенно следуйте ссылкам на EJB и Косвенные привязки пространства имен.

Но я некоторое время бился об это. Это имеет смысл. Похоже, это можно сделать. И косвенное связывание пространства имен выглядит наиболее перспективным. Но я не могу заставить его работать правильно. Мой сервер ESB постоянно жалуется на то, что не нашел comp / env / ejb в контексте, в котором я его запрашиваю. Очень озадачен этим.

Просто интересно, делал ли кто-нибудь подобные вещи раньше. Можете ли вы дать мне конкретный пример того, как вы это настроили в WAS? Любая помощь приветствуется

Ответы [ 3 ]

4 голосов
/ 18 ноября 2009

Ну, с тех пор я говорил с IBM о том, как это сделать, и был удивлен их ответом. Они ответили, что если вы говорите EJB с EJB на одном и том же сервере или кластере серверов, используйте EJB RMI через IIOP. С JNDI это абстракция, где фактически работает компонент (в кластерной среде).

Если вы переходите с одного сервера (или кластера серверов) на другой сервер (или кластер серверов) независимо от того, находятся ли цель и источник в одной и той же ячейке, IBM рекомендует вам использовать службы обмена сообщениями или веб-службы. Они чувствовали, что это лучший способ абстрагирования между приложениями, чтобы они не были «привязаны» друг к другу. Они сказали, что вы можете заставить EJB общаться с RMI через CORBA, но сказали, что это нужно делать ТОЛЬКО в случае крайней необходимости. И, конечно, вам нужно знать IP-адрес и номер порта для входа через CORBA (и это время каждого члена кластера, если в кластерной среде).

Опять же, это удивило меня, но это имеет смысл. Просто подумал, что поделюсь этими мыслями с миром, особенно если вы работаете с WebSphere.

0 голосов
/ 05 октября 2011

Я застрял с той же проблемой. После попытки включить все банки webbsphere и ibm orb нашел эту статью на ibm Как искать EJB и другие ресурсы в WebSphere Application Server с помощью клиента Oracle JDK - http://www -01.ibm.com / support / docview.wss? Uid = swg21382740

в основном использовал CNCtxFactory вместо WsnInitialContextFactory

//props.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
Hashtable env = new Hashtable();
            env.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory");
            env.put("java.naming.provider.url", iioppath);
0 голосов
/ 17 мая 2010

как искать с кота

  1. использовать IBM JDK в качестве среды выполнения для tomcat
  2. найти порт начальной загрузки, используйте iiop в PROVIDER_URL
...