我试图让这个独立的(没有服务器参与)JNDI InitialContext查找工作。我得到了这个例外:
无法实例化类:com.sun.enterprise.naming.SerialInitContextFactory
try {
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");
env.put("java:comp/env/jms/RNCQueueConnectionFactory",
"javax.jms.QueueConnectionFactory");
env.put("Big", "Data");
Context jndiContext = new InitialContext(env);
jndiContext.lookup("java:comp/env/jms/RNCQueueConnectionFactory");
testval = (String) jndiContext.lookup("Big");
} catch (NamingException ne) {
System.out.println(ne.getMessage());
}
对我而言,根据我的阅读,我可能没有正确设置我的背景。有没有人成功建立过独立的JNDI?
答案 0 :(得分:1)
我遇到了同样的问题。我正在使用Maven项目,我刚刚添加了以下依赖项:
<dependency>
<groupId>org.glassfish.main.common</groupId>
<artifactId>glassfish-naming</artifactId>
<version>4.1.1</version>
</dependency>
答案 1 :(得分:0)
JNDI是一种访问命名和目录服务的API。有The JNDI Tutorial可以让您熟悉API以及它的工作原理。
作为API,JNDI需要实现才能工作。在您的特定情况下,您需要找到类com.sun.enterprise.naming.SerialInitContextFactory
的jar。一旦你弄明白它应该是什么jar,你需要将它添加到CLASSPATH
并重新运行应用程序。
可能不是您需要访问JNDI服务,但至少会让您超过初始错误。请参阅文章和The JNDI Tutorial。