我有一个小程序,它只是在非托管环境中创建初始上下文,即在容器外部。我一直在使用Websphere 7.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
$
我遇到了上述问题,但我无法理解为什么会发生这种情况。
请尽量让我从上面解决问题。
答案 0 :(得分:6)
不要忘记将thinclient-jar包含在buildpath中。 您将需要它们从独立客户端进行jndi查找。
%WAS_HOME%/ runtimes是他们可以找到的地方。
答案 1 :(得分:1)
提供程序URL可帮助您识别连接到名称空间的服务器和根@。
例如,如果要连接到Cell Persisent根目录,则应将Provider_URL指定为:
env.put(Context.PROVIDER_URL, “corbaloc:IIOP:myhost.mycompany.com:2809 / NameServiceCellPersistentRoot”);
服务器根NameServiceServerRoot Cell Persistent Root NameServiceCellPersistentRoot Cell Root NameServiceCellRoot 节点根NameServiceNodeRoot
默认对象键为:“ NameService ”,因此如果要连接到默认位置,则不需要在URL中。
此外,堆栈跟踪中是否还有其他任何其他信息?
同样来自客户端计算机的是DNS名称: x1devapp63.dev.freightliner.com 可解析?
这是WAS服务器用来标识自己的名称吗?安装WAS时,您是否指定了主机名,并且该名称是否与此名称匹配?
您是否可以在与WAS服务器相同的计算机上运行相同的计算机并使用 localhost ,并查看错误是否相同。
我正在考虑可能导致问题的潜在网络相关错误。
请查看有关帮助您连接到根上下文的各种值的信息。
HTH Manglu
答案 2 :(得分:0)
您确定提供商网址是否正确?根据{{3}}(WAS Express 6)或this one(WAS 8)等各种示例(找不到WAS 7的参考但看起来事情没有改变),使用的代码具有WAS JNDI实现的CORBA对象URL描述如下:
使用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); ...
不知道这是否会有所帮助。