Доступ к JNDI из пакета Eclipse OSGI, размещенного на сервере приложений WebSphere. - PullRequest
0 голосов
/ 12 октября 2010

У меня проблема с доступом к ресурсам JNDI из пакета OSGI, размещенного в

Сервер приложений WebSphere (WAS) с использованием моста сервлета.

Не удается создать начальный контекст JNDI. Мой код:

Hashtable env = new Hashtable ();

env.put (Context.INITIAL_CONTEXT_FACTORY, "Com.ibm.websphere.naming.WsnInitialContextFactory");

InitialContext ctx = новый InitialContext (env);

Это не с:

javax.naming.NoInitialContextException: Не удалось создать InitialContext с использованием фабрики, указанной в hashtable {java.naming.provider.url = corbaloc: rir: / NameServiceServerRoot, java.naming.factory.initial = com.ibm.websphere.naming.WsnInitialContextFactory, java.naming.factory.ll. .pkgs = com.ibm.ws.naming: com.ibm.ws.runtime: com.ibm.iscportal.jndi} [Исключением корня является java.lang.NullPointerException]

Когда я запускаю тот же код непосредственно в модуле WAR (не используя OSGI), он успешен. Поэтому я предполагаю, что проблема заключается в доступе к JNDI из OSGI.

Я видел некоторые ссылки на проблемы Class Loader при доступе к JNDI из OSGI ... не уверен, что это моя проблема, поскольку вышеприведенное исключение явно не относится к загрузке классов, но, возможно, так оно и есть. Во всяком случае, если это проблема, я не уверен, как это исправить!

Действительно ли возможно получить доступ к записям JNDI и JDBC, настроенным в WAS, из моего модуля OSGI?

Мое приложение представляет собой Eclipse RAP (плагин Rich Ajax), упакованный в файл WAR с помощью инструментария продукта Eclipse WAR, описанного по адресу:

http://eclipsesource.com/blogs/2010/08/17/equinoxrap-war-deployment-an-end-to-the-pain/

Пока это работает успешно, кроме доступа к JNDI.

Большое спасибо

David

1 Ответ

1 голос
/ 08 ноября 2010

По умолчанию загрузчик классов контекста потока будет использоваться для загрузки InitialContextFactory. Это, вероятно, (но не гарантия) загрузчик классов вашего пакета. У вас есть несколько вариантов:

  1. Настройте свойство org.osgi.framework.bootdelegation. Это, вероятно, неявно установлено на солнце. , com.sun. , поэтому вы хотите изменить его на солнце. , com.sun. , com.ibm.websphere.naming. * Я считаю, что это может быть установлено в войнах моста сервлетов. WEB-INF / launch.ini
  2. Вы также можете импортировать comibm.websphere.naming, который потребует добавления в файл launch.ini org.osgi.framework.system.packages.extra = com.ibm.websphere.naming

Либо должно работать. Удачи.

...