Java Naming and Directory Interface
Java RMIやJakarta EEは、ネットワーク上のオブジェクトを参照するためにJNDI APIを使用している。Jiniは独自のルックアップサービスを持っており、JNDIは使用していない。
JNDI APIには以下のものが含まれる。
名前とオブジェクトを結びつける機構
多様な照会方法に対応する階層構造の参照インターフェース
要素がいつ更新されたかをクライアントに通知するイベントインターフェース
LDAPの追加要件に対応するLDAP拡張
SPIにより、以下のようなあらゆるネーミング・サービスやディレクトリ・サービスに対応している。
LDAP
DNS
NIS
RMI
CORBAネーム・サービス
ファイルシステム
JNDIの仕様は、サン・マイクロシステムズが1997年3月10日に公開した。現在の最新バージョンは1.2で、J2SE 1.3以降のJava SEに統合されている。
JNDIは名前を階層構造で管理している。名前はどのような文字列でもよい(例:"com.mydomain.ejb.MyBean")。Nameインターフェースを実装したオブジェクトを名前にすることも可能だが、文字列を使用する方が一般的である。ある名前に対応するオブジェクト、あるいはオブジェクトへの参照を、名前と一緒にディレクトリ・サービスに格納 (bind) することで、名前とオブジェクトが関連付けられる。
JNDI APIはオブジェクトを探す場所(これをコンテクストという)の指定方法も規定している。
典型的なルックアップ処理では、まず最初に初期コンテクストを取得する。もっとも単純なケースで言うと、特定の実装と、その実装が要求するパラメータを指定して、初期コンテクストを生成する。初期コンテクストはディレクトリツリーやファイルシステムにおけるルートディレクトリのようなもので、初期コンテクストに対して名前のルックアップを行う。以下は、初期コンテクスト生成の例である。
いったん初期コンテクストが取得できると、それに対して名前と結び付けられたオブジェクトをルックアップできる。