"javax.naming.NoInitialContextException"是什么意思?

jdb*_*ie. 18 java jndi jdbc

正如标题所暗示的那样,"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)
Run Code Online (Sandbox Code Playgroud)

pap*_*pap 30

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

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

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

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

  • 我喜欢电话簿的比喻.个人仍然对细节感到困惑,但你的回答给了我概念性的概述. (4认同)

And*_*yle 13

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

如果无法创建初始上下文实现,则抛出此异常.InitialContext类的文档中描述了如何选择初始上下文实现的策略.

如果你尽职地看看InitialContext的javadoc ,它们很好地描述了如何构造初始上下文,以及你提供地址/凭证等的选项.

如果您要创建上下文并陷入其他地方,请回复说明您到目前为止所做的事情以及您在哪里搁浅.


Sea*_*oyd 6

只需阅读文档:

如果无法创建初始上下文实现,则抛出此异常.InitialContext类的文档中描述了如何选择初始上下文实现的策略.

在与InitialContext的任何交互期间,不仅在构造InitialContext时,都会抛出此异常.例如,只有在对其调用实际方法时,初始上下文的实现才可能懒惰地检索上下文.应用程序不应该依赖于何时确定初始上下文的存在.

但是在文档中解释得更好 InitialContext

  • 同意.但你应该在甲骨文处理那些批评.你在这里拍摄信使 (2认同)