现在的位置: 首页 > 综合 > 正文

javax.naming.NoInitialContextException错误的解决方案

2013年10月02日 ⁄ 综合 ⁄ 共 1224字 ⁄ 字号 评论关闭
         我用的J2EE服务器是Sun的免费服务器Application Server PE,在运行一个简单的例子时总是报如下的错误:javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial。我的客户端代码也很简单,如下所示:

Context ctx=new InitialContext();
Object o
=ctx.lookup("test");
            
AdviceHome home
=(AdviceHome)PortableRemoteObject.narrow(o, AdviceHome.class);
Advice advisor
=home.create();
System.out.println(advisor.getAdvice());

         在网上搜索了一下相关的网页,有人说是没有指定jndi环境变量,于是又试着修改了下代码:

Properties properties = new Properties();
//properties.put(Context.INITIAL_CONTEXT_FACTORY, "javax.naming.spi.InitialContextFactory");
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory");
properties.put(Context.PROVIDER_URL, 
"iiop://127.0.0.1:3700");
Context ctx
=new InitialContext(properties );
Object o
=ctx.lookup("test");
            
AdviceHome home
=(AdviceHome)PortableRemoteObject.narrow(o, AdviceHome.class);
Advice advisor
=home.create();
System.out.println(advisor.getAdvice());

        无论我用哪个上下文工厂,都得不到预期的效果,很郁闷。于是看了下我之前看的那本Beginning J2EE1.4 From Novice to Professional,因为那本书上的范例都运行的好好的。按照书上的步骤,我将j2ee安装目录下的lib目录中的appserv-rt.jar文件加到classpath中,并且把代码还原为上面的第一段代码,于是一切都正常了。

抱歉!评论已关闭.