javax.naming.NoInitialContextException:无法使用哈希表中指定的工厂创建InitialContext

javax.naming.NoInitialContextException:无法使用哈希表中指定的工厂创建InitialContext,java,jakarta-ee,websphere,jndi,Java,Jakarta Ee,Websphere,Jndi,我有一个小程序,它只是在非托管环境(即容器外部)中创建初始上下文。我一直在使用WebSphere7.0。 我编写了以下程序,使用corba url与WAS 7上运行的应用程序进行连接 package snippet; import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; public class test { public static void ma

我有一个小程序,它只是在非托管环境(即容器外部)中创建初始上下文。我一直在使用WebSphere7.0。 我编写了以下程序,使用corba url与WAS 7上运行的应用程序进行连接

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();
        }

    }
} 
我已经创建了runnable jar,并使用下面给出的shell脚本执行

#!/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
$ 
$testJNDI.sh
javax.naming.NoInitialContextException:无法使用哈希表{java.naming.provider.url=corbaloc:iiop:1中指定的工厂创建InitialContext。0@x1devapp63.dev.freightliner.com:2809/NameService,java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory}[根异常为java.lang.NullPointerException]
位于javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:243)
在javax.naming.InitialContext.initializeDefaultInitCtx(InitialContext.java:327)
位于javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:357)
位于javax.naming.InitialContext.internalInit(InitialContext.java:295)
位于javax.naming.InitialContext。(InitialContext.java:212)
位于snippet.test.main(test.java:19)
原因:java.lang.NullPointerException
位于javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:235)
... 还有5个
$ 
我被困在上面的问题,但我不明白为什么会发生这种情况


请做必要的事情让我摆脱上述问题。

您确定提供商URL正确吗?根据各种示例,如(WAS Express 6)或(WAS 8)(找不到WAS 7的引用,但情况似乎没有改变),将CORBA对象URL用于WAS JNDI实现的代码描述如下:

使用CORBA对象URL 此示例显示了一个CORBA对象URL

...
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);
...

但不知道这是否有帮助。

提供商URL可帮助您识别连接到名称空间的服务器和根@

例如,如果您想连接到根目录下的单元格,您可以将提供者的URL指定为:

环境放置(Context.PROVIDER\u URL, “corbaloc:iiop:myhost.mycompany.com:2809/NameServiceCellPersistentRoot”)

服务器根名称服务服务器根 单元格持久根名称ServiceCellPersistentRoot 单元根名称ServiceCellRoot 节点根名称服务根

默认的对象键是:“NameService”,因此,如果要连接到默认位置,则不需要在URL中声明

此外,堆栈跟踪中是否还有任何其他信息

客户端计算机上还有DNS名称:x1devapp63.dev.freightliner.com可解析

这是WAS服务器用来标识自身的名称吗?安装WAS时,您确实指定了主机名,并且该主机名是否与此名称匹配

您还可以在WAS服务器所在的同一台机器上运行相同的程序,并使用localhost查看错误是否相同

我只是在想可能会引起麻烦的潜在网络相关错误

请看一看这些值,它们有助于您连接根上下文


Manglu

不要忘记将thinclient JAR包含到构建路径中。 您将需要它们从独立客户端执行jndi查找

%WAS_HOME%/运行时是可以找到它们的地方


嗨,帕斯卡,我也试过上面的瘦,但我也遇到了同样的错误。