正如标题所暗示的那样,“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)
答案 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。对于 例如,执行 初始上下文可能会懒惰地检索 只有在实际方法时才有上下文 被调用就可以了。应用程序 不应该对什么时候有任何依赖 初始背景的存在是 确定。
答案 3 :(得分:-2)
在极其非技术性的术语中,这可能意味着您忘记在您尝试连接的URI的最开头放置“ejb:”或“jdbc:”或其他内容。