Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

JNDIとは?JDBCとの違いやメリット・デメリットについてもご紹介

投稿日:2021年4月28日 更新日:

<目次>

(1) JNDIとは?JDBCとの違いやメリット・デメリットについてもご紹介
 (1-1) JDBCとは?
 (1-2) JNDIとは?
  (1-2-1) 概要
  (1-2-2) JNDIのメリット
  (1-2-3) 「ネーミング/ディレクトリサービス」の種類
  (1-2-4) JNDIのアーキテクチャ
 (1-3) JDBCとJNDIの違い

(1) JNDIとは?JDBCとの違いやメリット・デメリットについてもご紹介

(1-1) JDBCとは?

JDBCは「Java Database Connectivity」の略で、データベースへの接続を扱うためのAPIです。具体的には、DBへの接続、DBへのクエリ発行、クエリ結果の取得といったデータベースに対する各種操作を行う事ができます。

JDBCでは接続文字列やドライバーを直接指定し、1つの接続を確立します。そして他のリクエストは、接続中のコネクションが終了するまで「待つ」必要があるため、性能の問題を回避するため、一般的には「コネクションプール」の設定を行います。
 
JDBCやコネクションプールについては下記の記事もご参考ください。
 
 

(1-2) JNDIとは?

(1-2-1) 概要

JDNIは「Java Naming and Directory Interface」の略で、後述する「ネーミング/ディレクトリサービス」にアクセスするためのインターフェイスを提供するJava言語のAPIです。

非常に良く使われる用途として、JavaEEアプリケーションにおいてデータベースの「コネクションプール」を作る際などで利用されます。コネクションプールはデータソース(DBへの接続生成工場のようなもの=java.sql.Datasourceクラス)を用いて複数のコネクションを用意します。

具体的にはJNDIディレクトリの中に「JDBC」のデータソースを保持しているため、JNDIのルックアップでの接続は、内部的にはJDBC接続を利用しています。

ってこの説明だけでは意味不明ですよね・・

JNDIは一言で表すと、Javaの「アプリケーションと設定情報とを分離するための仕組み」です(※分離する事で、お互いが影響を受けにくくなる)。

目次にもどる

(1-2-2) JNDIのメリット

●汎用性が高い

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

(1-2-3) 「ネーミング/ディレクトリサービス」の種類

各サービスプロバイダが提供するJNDIの機能を「ネーミング/ディレクトリサービス」と呼んでおり、実態はJNDI APIのContextやDirContextインターフェイスを実装したものになります。
 
「ネーミング/ディレクトリサービス」にはいくつかの種類があり、JNDI APIを使用する事でこれらの「ネーミング/ディレクトリサービス」と通信が可能になります。
 
(例)
・LDAP=Light Weight Directory Access Protocol(OSS)
・DNS=Domain Name Service
・ADS=Active Directory Server from Microsoft
・NDS=Novel Directory Server from Novel
 
これらの「ネーミング/ディレクトリサービス」機能は、商用のアプリケーションサーバの機能の一部として組み込まれている事が多く、例えば以下のような製品が挙げられます。
 
・WebLogic(Oracle)
・WebSphere(IBM)
・JBoss(Red Hat)
 

(1-2-4) JNDIのアーキテクチャ

JNDIのアーキテクチャは次のような構造になっています。
 
(図121)

●JNDI API
 
Javaの開発者が「ネーミング/ディレクトリサービス」を利用する際に使用するAPIで、コネクションプールによるDBアクセスもこのAPIを使っています。JDNIの主な構成パッケージは次の2つです。
 
①javax.naming
 
名前とオブジェクト(やアドレス)の関係づけを行い、階層に整理します。分かりやすい例ではDNS(Domain Name Service)において、IPアドレスとドメイン名の対応付けを行うなどです。中核となるインターフェイスやクラスは以下の4つです。
 
(表)
Context 一意名の「Binding」の集合体。
Binding 名前とオブジェクトの対応。
Name、NameParser 名前の操作に使用。
②javax.naming.directory
 
ディレクトリオブジェクトへのアクセス機能を提供します。オブジェクトへのアクセスに際しては「Attribute」と呼ばれる識別子や値を使って、検索を行います。中核となるインターフェイスは次の通りです。
 
(表)
DirContext 0個以上のAttributeを保持したContext。
Attribute オブジェクトと紐づく識別子と0個以上の値を持った属性です。
Attributes DirContextオブジェクトと関連したAttributeの集合体。

●JNDI SPI

JNDI SPI(Service Provider Interface)はJavaアプリの開発者は殆ど触れる機会がなく、どちらかというとNDSといった「ネーミング/ディレクトリサービス」のプロバイダが、ネーミングの仕組みを実装する際に使用するインターフェイスです。
 

(1-3) JDBCとJNDIの違い

両者を一言で簡単に表現するなら・・

●JDBC
Javaでデータベース接続するためのAPIで、SQLの発行等を行います。
 
●JNDI
Javaのアプリケーションと設定情報とを分離するための仕組みです。
 
例えばコネクションプール等でDB接続する場合も、アプリケーション側ではJNDIによって定義された名前を指定してDBに接続する事が出来るため、アプリケーション内にDBの認証情報(ID、パスワード)等を記述する必要がなくなります。コネクションプールも内部的にはJDBCドライバを指定しているため、JNDIを用いたDB接続においてはJDBCを利用していると言えます。
 

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Javaのアノテーションを自作する方法をご紹介(サンプルプログラム付き)

(1) 自作アノテーションの作成~使用の手順  (1-1) アノテーションの宣言  (1-2) メタアノテーションの追加(任意)  (1-3) アノテーションを実際に使う(注釈の付与)  (1-4) …

JavaのArrrayListとLinkedListの違いについて

<目次> (1) JavaのArrrayListとLinkedListの違いについて  (1-1) 比較表(ArrayList vs LinkedList)  (1-2) まとめ  (1-3) 参考 …

JSPでcssが適用されない(Resouce interpreted as Stylesheet but transferred with MIME type)事象のトラブルシューティング記録

<目次> (1) JSPでcssが適用されない(Resouce interpreted as Stylesheet but transferred with MIME type)事象のトラブルシューテ …

Android StudioでHello Worldする手順(新規プロジェクト作成~疎通)

  <目次> (1) Android StudioでHello Worldする手順(新規プロジェクト作成~疎通)  (1-1) STEP1:Android Studioで新規プロジェクトを作 …

Linuxでアプリケーションサーバを構築する手順の例

<目次> (1) Linuxでアプリケーションサーバを構築する手順の例  (1-1) APサーバの全体像  (1-2) APサーバの構築手順  (1-3) 各手順のURL (1) Linuxでアプリケ …

  • English (United States)
  • 日本語
Top