“javax.naming.NoInitialContextException”是什么意思?

时间:2011-06-17 14:20:51

标签: java jdbc jndi

正如标题所暗示的那样,“javax.naming.NoInitialContextException”在非技术术语中意味着什么?有什么一般性建议来解决它?

编辑(从控制台):

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
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at cepars.app.ConnectionHelper.getConnection(ConnectionHelper.java:25)
    at cepars.app.ConnectionHelper.getConnection(ConnectionHelper.java:10)
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.java:30)
    at cepars.review.Test.main(Test.java:43)
java.lang.NullPointerException
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.java:31)
    at cepars.review.Test.main(Test.java:43)
cepars.app.DAOException
    at cepars.review.ReviewDAO.getJobList(ReviewDAO.java:39)
    at cepars.review.Test.main(Test.java:43)

4 个答案:

答案 0 :(得分:30)

这意味着没有初始上下文:)

但严肃地说,JNDI(javax.naming)就是从某个目录或提供者那里查找对象或资源。要查找某些内容,您需要在某处查看(这是InitialContext)。 NoInitialContextException的意思是“我想找到John Smith的电话号码,但我没有电话簿可以查看”。

可以通过多种方式创建InitialContext。它可以手动完成,例如创建与LDAP服务器的连接。它也可以由运行应用程序的应用程序服务器设置。在这种情况下,容器(应用程序服务器)已经为您提供了“电话簿”,您可以通过该电话簿查找应用程序服务器可用的任何内容。这通常是可配置的,是将此类配置从应用程序实现移动到容器的常用方法,可以在服务器中的所有应用程序之间共享。

更新:从你发布的代码片段看起来你正试图运行代码独立,这意味着要在应用服务器中运行。在这种情况下,代码试图从“电话簿”获得与数据库的连接。这是通常在应用程序服务器容器中配置的资源之一。因此,您可以在应用程序服务器中配置它并简单地在代码中请求连接(使用JNDI),而不必在代码中管理数据库的配置和连接。

答案 1 :(得分:13)

它基本上意味着应用程序想要执行一些“命名操作”(例如JNDI或LDAP查找),并且它没有足够的信息可用于创建与目录服务器的连接。作为异常状态的文档,

  

当没有时抛出此异常   初始上下文实现可以   创建。如何初步的政策   选择上下文实现是   在文档中描述   InitialContext类。

如果你尽职地查看InitialContext的javadoc,他们会很好地描述如何构建初始上下文,以及你提供地址/凭证等的选项。

如果您要创建上下文并被其他地方卡住,请回复说明您到目前为止所做的以及您在哪里搁浅。

答案 2 :(得分:6)

请阅读the docs

  

当没有时抛出此异常   初始上下文实现可以   创建。如何初步的政策   选择上下文实现是   在文档中描述   InitialContext类。

     

在此过程中可能抛出此异常   任何与...的互动   InitialContext,不仅仅是当   构造InitialContext。对于   例如,执行   初始上下文可能会懒惰地检索   只有在实际方法时才有上下文   被调用就可以了。应用程序   不应该对什么时候有任何依赖   初始背景的存在是   确定。

但在InitialContext

的文档中对此有更好的解释

答案 3 :(得分:-2)

在极其非技术性的术语中,这可能意味着您忘记在您尝试连接的URI的最开头放置“ejb:”或“jdbc:”或其他内容。