JNDI - Shinichi0713/security_specialist GitHub Wiki

概要

JDNIは「Java Naming and Directory Interface」の略で、後述する「ネーミング/ディレクトリサービス」にアクセスするためのインターフェイスを提供するJava言語のAPI
非常に良く使われる用途として、JavaEEアプリケーションにおいてデータベースの「コネクションプール」を作る際などで利用されます。コネクションプールはデータソース(DBへの接続生成工場のようなもの=java.sql.Datasourceクラス)を用いて複数のコネクションを用意します。
JNDIは一言で表すと、Javaの「アプリケーションと設定情報とを分離するための仕組み」
JNDIは、Javaアプリケーションがリソース(データベース接続、メッセージングサービス、オブジェクトなど)を名前で検索し、取得することを可能にします。
JNDIは、オブジェクトの名前付けとディレクトリサービスの両方をサポートしており、これにより開発者は、リソースを簡単に見つけて利用することができます。

JNDIのメリット

  • 汎用性が高い これらの一連の設定(DBへの接続設定など)はアプリケーションサーバ(TomcatやWebLogicなど)にて設定・管理されているため、ご自身のアプリケーションにはJNDIに関する設定情報は書かずに済むというメリットもあります(DB情報変更によるプログラム修正を防げる)。
  • 性能面 INSERTが少なくSELECTが多い場合はJNDIの方が高性能と言われています。またコネクションプールなど、多数のアクセスが集まるWebアプリ等においては、逐一DBコネクションを確立するのは負荷が高いため、コネクションプールの利用(つまりJNDIの利用)が必須となってきます。

「ネーミング/ディレクトリサービス」の種類

各サービスプロバイダが提供するJNDIの機能を「ネーミング/ディレクトリサービス」と呼んでおり、実態はJNDI APIのContextやDirContextインターフェイスを実装したものになります。
「ネーミング/ディレクトリサービス」にはいくつかの種類があり、JNDI APIを使用する事でこれらの「ネーミング/ディレクトリサービス」と通信が可能になります。
{B156634F-F7E5-45C6-9649-03F30CD442DE}

メモ

JSDIはJavaアプリケーションがネーミングサービスやディレクトリサービスを利用するためのインターフェースを提供するAPI。
データベース、ファイルシステム、メッセージングサービスなどのリソースを名前で検索して、取得できる仕組み。
用途として、エンタープライズ環境で、複雑なリソース管理を簡単にしてくれる仕組み。