javax.naming.NoInitialContextException: не удалось создать InitialContext с использованием фабрики, указанной в хеш-таблице - PullRequest
2 голосов
/ 14 ноября 2010

У меня есть небольшая программа, которая просто создает начальный контекст в неуправляемой среде, то есть вне контейнера. Я использую Websphere 7.0.Я написал следующую программу, чтобы установить соединение с приложением, работающим на WAS 7 с использованием URL-адреса corba,

package snippet;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;

public class test {
    public static void main(String[] args) {
        try {
            // create initial context
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY,
                    "com.ibm.websphere.naming.WsnInitialContextFactory");
            env
                    .put(Context.PROVIDER_URL,
                            "corbaloc:iiop:1.0@x1devapp63.dev.freightliner.com:2809/NameService");

            InitialContext ctx = new InitialContext(env);

            System.out.println(ctx);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
} 

Я создал исполняемый файл jar и выполняю его с помощью приведенного ниже сценария оболочки,

#!/bin/sh

WAS_ROOT_PATH=/application/WebSphere/AppServer
SCHEDULER_JAR=/application/apps/JobScheduler/testJNDI.jar
SCHEDULE_FILE=/application/apps/JobScheduler/schedule.xml
. "$WAS_ROOT_PATH"/bin/setupCmdLine.sh
CLASSPATH="$MQLIB":"$WAS_CLASSPATH"
"$JAVA_HOME"/bin/java -classpath "$CLASSPATH" -jar "$SCHEDULER_JAR"

После запуска я столкнулся со следующим исключением:

$ testJNDI.sh
javax.naming.NoInitialContextException: Failed to create InitialContext using factory specified in hashtable {java.naming.provider.url=corbaloc:iiop:1.0@x1devapp63.dev.freightliner.com:2809/NameService, java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory} [Root exception is java.lang.NullPointerException]
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:243)
        at javax.naming.InitialContext.initializeDefaultInitCtx(InitialContext.java:327)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:357)
        at javax.naming.InitialContext.internalInit(InitialContext.java:295)
        at javax.naming.InitialContext.<init>(InitialContext.java:212)
        at snippet.test.main(test.java:19)
Caused by: java.lang.NullPointerException
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:235)
        ... 5 more
$ 

Я застрял над этой проблемой, но не мог понять, почему это происходит.

Пожалуйста, сделайте все возможное, чтобы вытащить меняСверху проблема.

Ответы [ 3 ]

6 голосов
/ 13 апреля 2011

Не забудьте включить банки thinclient-jar в ваш путь сборки.Они понадобятся вам для поиска jndi из автономного клиента.

% WAS_HOME% / runtimes - это место, где их можно найти.

http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/ccli_standaloneclient.html

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

URL-адрес провайдера помогает вам идентифицировать сервер и корень @, который вы подключаете к пространству имен.

Например, если вы хотите подключиться к корню Cell Persisent, вы должны указать Provider_URL как:

env.put (Context.PROVIDER_URL, "Corbaloc: МИОП: myhost.mycompany.com: 2809 / NameServiceCellPersistentRoot");

Server Root NameServiceServerRoot Постоянный корень ячейки NameServiceCellPersistentRoot Cell Root NameServiceCellRoot Node Root NameServiceNodeRoot

Ключ объекта по умолчанию: « NameService », поэтому в URL не требуется указывать, если вы хотите подключиться к расположению по умолчанию.

Кроме того, есть ли что-то еще в трассировке стека, в которой указана какая-либо другая информация?

Также с клиентского компьютера DNS-имя: x1devapp63.dev.freightliner.com разрешаемо?

Это имя используется сервером WAS для идентификации себя? Когда WAS установлен, вы указываете имя хоста и соответствует ли это имя?

Можете ли вы запустить его с того же компьютера, на котором установлен сервер WAS, и использовать localhost и посмотреть, совпадают ли ошибки.

Я просто думаю о возможных сетевых ошибках, которые, вероятно, вызывают проблемы.

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

http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/rnam_example_prop5.html

НТН Manglu

0 голосов
/ 14 ноября 2010

Вы уверены, что URL провайдера правильный?Согласно различным примерам, таким как этот (WAS Express 6) или этот (WAS 8) (не удалось найти ссылку на WAS 7, но похоже, что ничего не изменилось) код для использования URL-адреса объекта CORBA с реализацией JASI WAS описывается следующим образом:

Использование URL-адреса объекта CORBA

В этом примере показан URL-адрес объекта CORBA.

...
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
...
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
     "com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, "corbaloc:iiop:myhost.mycompany.com:2809");
Context initialContext = new InitialContext(env);
...

Не знаю, поможет ли это, хотя.

...