web-dev-qa-db-ja.com

「javax.naming.NoInitialContextException」とはどういう意味ですか?

タイトルが示唆するように、「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)
18
jdbcnewbie.

これは基本的に、アプリケーションが「ネーミング操作」(JNDIまたはLDAPルックアップなど)を実行することを望んでおり、ディレクトリサーバーへの接続を作成するのに十分な情報がないことを意味します。例外状態のドキュメントとして、

この例外は、初期コンテキスト実装を作成できない場合にスローされます。初期コンテキスト実装の選択方法のポリシーは、InitialContextクラスのドキュメントで説明されています。

InitialContext のjavadocを忠実に見ると、初期コンテキストがどのように構築されているか、およびアドレス/資格情報などを提供するためのオプションが何であるかが十分に説明されています。

コンテキストの作成に取り組み、他の場所で行き詰まった場合は、これまでに行ったことと座礁した場所を説明してください。

13
Andrzej Doyle

初期コンテキストがないことを意味します:)

しかし、真剣に、JNDI(javax.naming)は、すべてのディレクトリまたはプロバイダーからオブジェクトまたはリソースを検索することに関するものです。何かを調べるには、どこかを調べる必要があります(これがInitialContextです)。 NoInitialContextExceptionは、「John Smithの電話番号を見つけたいが、調べる電話帳がない」ことを意味します。

InitialContextは、さまざまな方法で作成できます。たとえば、LDAPサーバーへの接続を作成するなど、手動で行うことができます。また、アプリケーションを実行するアプリケーションサーバーによってセットアップすることもできます。この場合、コンテナ(アプリケーションサーバー)は既に「電話帳」を提供します。これを使用して、アプリケーションサーバーが利用可能にするものを検索できます。これは多くの場合、構成可能であり、このタイプの構成をアプリケーション実装からコンテナに移動する一般的な方法です。コンテナでは、サーバー内のすべてのアプリケーションで共有できます。

更新:投稿したコードスニペットから、アプリケーションサーバーで実行されるコードをスタンドアロンで実行しようとしているようです。この場合、コードは「電話帳」からデータベースへの接続を取得しようとします。これは、アプリケーションサーバーコンテナでよく構成されるリソースの1つです。したがって、コードでデータベースへの構成と接続を管理する必要はなく、アプリケーションサーバーで構成し、コードで接続を(JNDIを使用して)簡単に要求できます。

30
pap

ドキュメント を読むだけです:

この例外は、初期コンテキスト実装を作成できない場合にスローされます。初期コンテキスト実装の選択方法のポリシーは、InitialContextクラスのドキュメントで説明されています。

この例外は、InitialContextが構築されたときだけでなく、InitialContextとの対話中にスローされる可能性があります。たとえば、初期コンテキストの実装は、実際のメソッドが呼び出されたときにのみ、コンテキストを遅延的に取得する場合があります。アプリケーションは、初期コンテキストの存在がいつ決定されるかに依存してはなりません。

しかし、これは InitialContext のドキュメントでよりよく説明されています

6