Как мне узнать, какой SerialContextProvider я должен использовать при выполнении поиска jndi? - PullRequest
4 голосов
/ 19 августа 2010

Сегодня мне представили это исключение

Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext  [Root exception is java.lang.NullPointerException]
        at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276)
        at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
        ... 23 more

Я пытался получить удаленный доступ к ejb, код ошибки был

Context c = new InitialContext();

Я уже видел это исключение и исправил его, ноне мог вспомнить точно, как я это сделал.Я знал, что мне нужно было установить некоторые переменные среды для исходного, контекстного URL-адреса и поставщика услуг или чего-то подобного.

Фактически мне удалось найти код, который я использовал для исправления этой проблемы в прошлый раз, когда он у меня был,это выглядит следующим образом.

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1099");
Context c = new InitialContext(env);

Мой вопрос заключается в следующем: как узнать, какую исходную фабрику контекста использовать?Я написал модуль ejb для нашей базы данных, который работает на glassfish v3, и ни разу не получил никаких намеков на то, что, конечно, мне следует использовать com.sun.enterprise.naming.SerialInitContextFactory, я имею в виду, что он настолько очевиден.Кто делает эти фабрики контекста?Кто решает, какой я должен использовать и почему?Почему нет списка, показывающего, какой из них необходим для разных целей?Кажется, что кто-то старался изо всех сил сделать самый непробиваемый и загадочный способ доступа к ресурсу, который по-человечески возможен.Или я что-то здесь совершенно неправильно понял, или мне не хватает огромного объема знаний.

Я был бы очень признателен за некоторое понимание этого предмета.

Спасибо всем.

Ответы [ 3 ]

3 голосов
/ 25 сентября 2014

настройки Glassfish для jndi.properties для справки:

java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
java.naming.factory.url.pkgs=com.sun.enterprise.naming
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
Context.SECURITY_PRINCIPAL=user1
Context.SECURITY_CREDENTIALS=pass123
org.omg.CORBA.ORBInitialHost=localhost
org.omg.CORBA.ORBInitialPort=3700

1.) Файл jndi.properties загружается, когда вызывается конструктор InitialContext по умолчанию. На мой взгляд, это предпочтительнее жесткого кодирования этих значений, создания объекта Properties и т. Д.

2.) Эти параметры соединения работают для меня, когда Glassfish работает локально. Я собрал это вместе из разных источников.

3.) Я согласен с духом вопрос: где в прекрасном руководстве они указаны? Я видел некоторые упоминания о них в руководстве, но они не все в одном месте - по крайней мере, для стеклянной рыбы. Не помогает то, что руководство 4.x glassfish доступно только через PDF.

1 голос
/ 19 августа 2010

Обычно JNDI ищет свою конфигурацию в файле jndi.properties в пути к классам.

Мейб, существует неадекватный файл jndi.properties, который вводит вас в заблуждение.

Подробнее см. https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB

0 голосов
/ 07 января 2011

Чк, если jndiContext.lookup (???) указан правильно.

...