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

什么是;javax.naming.NoInitialContextException“;什么意思?,java,jdbc,jndi,Java,Jdbc,Jndi,正如标题所示,“javax.naming.NoInitialContextException”在非技术术语中是什么意思?有什么一般性的建议来解决这个问题 编辑(从控制台): 读一下: 如果没有,则会引发此异常 初始上下文实现可以是 创建。该政策如何启动 选择了上下文实现 在的文档中描述 InitialContext类 此异常可以在运行期间引发 与客户的任何互动 InitialContext,而不仅仅是 构造了InitialContext。对于 例如,实现 初始上下文可能会延迟检索 仅当实际方法

正如标题所示,“javax.naming.NoInitialContextException”在非技术术语中是什么意思?有什么一般性的建议来解决这个问题

编辑(从控制台):

读一下:

如果没有,则会引发此异常 初始上下文实现可以是 创建。该政策如何启动 选择了上下文实现 在的文档中描述 InitialContext类

此异常可以在运行期间引发 与客户的任何互动 InitialContext,而不仅仅是 构造了InitialContext。对于 例如,实现 初始上下文可能会延迟检索 仅当实际方法 在它上面被调用。应用程序 不应该依赖于什么时候 初始上下文的存在是不确定的 下定决心


但是这在文档中解释得更好,因为它基本上意味着应用程序想要执行一些“命名操作”(例如JNDI或LDAP查找),并且它没有足够的可用信息来创建到目录服务器的连接。作为异常状态的单据

如果没有,则会引发此异常 初始上下文实现可以是 创建。该政策如何启动 选择了上下文实现 在的文档中描述 InitialContext类

如果您尽职尽责地看一看javadocs for,它们很好地描述了初始上下文是如何构造的,以及您提供地址/凭证等的选项


如果你想创建上下文,却被困在其他地方,请回帖解释你到目前为止所做的事情以及你在哪里搁浅。

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

但严肃地说,JNDI(javax.naming)就是从某个目录或提供者中查找对象或资源。要查找某些内容,您需要查找某个位置(这是初始上下文)。NoInitialContextException的意思是“我想找到约翰·史密斯的电话号码,但我没有电话簿可查”

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


更新:从您发布的代码片段来看,您似乎正在尝试独立运行代码,该代码将在应用程序服务器中运行。在本例中,代码试图从“电话簿”获取到数据库的连接。这是应用服务器容器中经常配置的资源之一。因此,不必在代码中管理数据库的配置和连接,您可以在应用程序服务器中配置数据库,并在代码中简单地请求连接(使用JNDI)。

用非常非技术性的术语来说,这可能意味着您忘了放“ejb:”或“jdbc:”或者您正试图连接的URI的最开始部分。

这只意味着存在一种特殊情况,即无法创建初始上下文,因此代码无法继续执行任何命令。消息和stacktrace包含更重要的信息。也可以共享它们,以便能够解决问题的根本原因。副本没有可接受的答案。当问题没有被接受的答案时,请不要说它们有答案。我在JavaEE中使用CDI时有过类似的情况,即@Injection,并且尝试在没有RunWith(Arquillian.class)的情况下运行Junit集成测试!我喜欢电话簿的类比。我个人仍然对细节感到困惑,但你的回答给了我概念性的概述。@Oracle:
InitialContext
是一个非常愚蠢、毫无意义的名字。它是一种无言词首字母和上下文的组合,可以用于任何事情,任何地方。此外,上面的段落使用单词context 8(八)次来解释单词InitialContext。更好的名称应该是
JavaNamingAndDirectoryInitialContext
,或者至少是
NamingAndDirectoryInitialContext
。或者最好重新考虑整个命名,并给出有意义的名称。当然,JNDI有点抽象,但我认为InitialContext确实是一个糟糕的选择。但你可能应该在甲骨文公司解决这一批评。你在这里射击信使
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)