何がJNDIは?
その基本的な用途は何ですか?
いつ使用されますか?
何がJNDIは?
その基本的な用途は何ですか?
いつ使用されますか?
回答:
JNDIとは
これは、Java Naming and Directory Interfaceの略です。
その基本的な用途は何ですか?
JNDIにより、分散アプリケーションは、リソースに依存しない抽象的な方法でサービスを検索できます。
いつ使うの?
最も一般的な使用例は、Java EEアプリケーションサーバーにデータベース接続プールを設定することです。そのサーバーにデプロイされているすべてのアプリケーションjava:comp/env/FooBarPool
は、接続に関する詳細を知らなくても、JNDI名を使用して必要な接続にアクセスできます。
これにはいくつかの利点があります。
devl->int->test->prod
環境から移動するデプロイシーケンスがある場合、各環境で同じJNDI名を使用して、使用されている実際のデータベースを非表示にすることができます。環境間で移行するため、アプリケーションを変更する必要はありません。JNDIとは
JavaネーミングおよびディレクトリインターフェースTM(JNDI)は、Java TMプログラミング言語を使用して記述されたアプリケーションにネーミングおよびディレクトリ機能を提供するアプリケーションプログラミングインターフェース(API)です。特定のディレクトリサービスの実装から独立していると定義されています。したがって、さまざまなディレクトリ(新規、新規、およびすでに配備済み)に共通の方法でアクセスできます。
その基本的な用途は何ですか?
そのほとんどは上記の回答でカバーされていますが、上記がより意味を持つようにここにアーキテクチャを提供したいと思います。
JNDIを使用するには、JNDIクラスと1つ以上のサービスプロバイダーが必要です。Java 2 SDK、v1.3には、次のネーミング/ディレクトリサービス用の3つのサービスプロバイダが含まれています。
したがって、基本的にはオブジェクトを作成し、それらを後で検索して操作を実行できるディレクトリサービスに登録します。
一般的なJNDIは、基本的には次のような内部/外部リソースのインスタンスを取得できるようにするためのインターフェースです
javax.sql.DataSource,
javax.jms.Connection-Factory,
javax.jms.QueueConnectionFactory,
javax.jms.TopicConnectionFactory,
javax.mail.Session, java.net.URL,
javax.resource.cci.ConnectionFactory,
または、JCAリソースアダプタによって定義されたその他のタイプ。内部または外部のアクセスを作成できる構文を提供します。つまり、(このインスタンスのcomp / envは、コンポーネント/環境、他の多くの構文があることを意味します):
jndiContext.lookup("java:comp/env/persistence/customerDB");
java.lang.String
、構成情報については単純なものでさえあります。
JNDIの概要
JNDIは、Javaテクノロジで指定されたAPIであり、Javaプログラミング言語で記述されたアプリケーションに命名およびディレクトリ機能を提供します。特にJavaのオブジェクトモデルを使用するJavaプラットフォーム用に設計されています。JNDIを使用すると、Javaテクノロジに基づくアプリケーションは、任意のタイプの名前付きJavaオブジェクトを格納および取得できます。さらに、JNDIは、属性をオブジェクトに関連付けたり、属性を使用してオブジェクトを検索したりするなど、標準のディレクトリ操作を実行するためのメソッドを提供します。
また、JNDIは、特定のネーミングサービスやディレクトリサービスの実装とは無関係に定義されます。これにより、アプリケーションは、共通のAPIを使用して、異なる、場合によっては複数のネーミングおよびディレクトリサービスにアクセスできます。この共通APIの背後で、さまざまなネーミングおよびディレクトリサービスプロバイダーをシームレスにプラグインできます。これにより、Javaテクノロジーベースのアプリケーションは、LDAP、NDS、DNS、NIS(YP)などのさまざまな既存のネームサービスおよびディレクトリサービスの情報を利用できるほか、アプリケーションをレガシーソフトウェアおよびシステムと共存させることができます。
JNDIをツールとして使用すると、Javaのオブジェクトモデルを利用するだけでなく、それらがデプロイされている環境と十分に統合された新しい強力でポータブルなアプリケーションを構築できます。
JNDIとは
JNDIは、Java Naming and Directory Interfaceの略です。J2EEに標準で付属しています。
その基本的な用途は何ですか?
このAPIを使用すると、オブジェクト、デバイス、ネーミングファイル、ディレクトリサービスなど、さまざまなタイプのデータにアクセスできます。EJBがリモートオブジェクトを検索するために使用します。JNDIは、DNS、NDS、LDAP、CORBA、RMIなどの既存のサービスにアクセスするための共通インターフェースを提供するように設計されています。
いつ使うの?
JNDIを使用して、名前空間の更新操作や読み取り操作などの名前付け操作を実行できます。ここでは、以下の操作について説明します。
公式ドキュメントが無視されている理由に興味があります。詳細についてはすでに詳細に説明しています。
ただし、ケースを理解したい場合は、duffymoの回答を参照してください。
JavaネーミングおよびディレクトリインターフェースTM(JNDI)は、Java TMプログラミング言語を使用して記述されたアプリケーションにネーミングおよびディレクトリ機能を提供するアプリケーションプログラミングインターフェース(API)です。特定のディレクトリサービスの実装から独立していると定義されています。したがって、さまざまなディレクトリ(新規、新規、およびすでに配備済み)に共通の方法でアクセスできます。
そしてそのアーキテクチャ
そして、通常、それをどのように使用するか。
I am just curious why the official docs are so ignored which elaborate the details meticulously already
たぶん、普通の人が理解できるほど十分に説明していないからでしょうか?
1つの例を使用して、アプリケーション開発者がデータベースのユーザー名とパスワードを知らなくても、JNDIを使用してデータベースを構成する方法を説明します。
1)データソースをJBossサーバーのstandalone-full.xmlに設定しました。さらに、プールの詳細も構成できます。
<datasource jta="false" jndi-name="java:/DEV.DS" pool-name="DEV" enabled="true" use-ccm="false">
<connection-url>jdbc:oracle:thin:@<IP>:1521:DEV</connection-url>
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<driver>oracle</driver>
<security>
<user-name>usname</user-name>
<password>pass</password>
</security>
<security>
<security-domain>encryptedSecurityDomain</security-domain>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
<background-validation-millis>1</background-validation-millis>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
</pool>
</statement>
</datasource>
これで、このjndi-nameとそれに関連付けられたデータソースオブジェクトがapplication.applicationで使用できるようになります。
2)JndiDataSourceLookupクラスを使用して、このデータソースオブジェクトを取得できます。
Springは、jndi-nameを指定した後で、データソースBeanをインスタンス化します。
これで、環境または要件に従ってプールサイズ、ユーザー名、またはパスワードを変更できますが、アプリケーションには影響しません。
注:encryptedSecurityDomain、JBossサーバーで個別に構成する必要があります
<security-domain name="encryptedSecurityDomain" cache-type="default">
<authentication>
<login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
<module-option name="username" value="<usernamefordb>"/>
<module-option name="password" value="894c8a6aegc8d028ce169c596d67afd0"/>
</login-module>
</authentication>
</security-domain>
これは使用例の1つです。それが明確になることを願っています。
私に最も良い説明はここにあります
JNDIとは
これは、ディレクトリサービスへのアクセスを提供するためのAPI です。つまり、オブジェクトとのサービスマッピング名(文字列)、リモートオブジェクトまたは単純なデータへの参照です。これはバインディングと呼ばれます。バインディングのセットはコンテキストと呼ばれます。アプリケーションはJNDIインターフェースを使用してリソースにアクセスします。
簡単に言うと、これはWeb上のリソースを表す文字列キーとオブジェクト値を持つハッシュマップのようなものです。
JNDIが解決する問題
JNDIがない場合、リモートリソースの場所またはアクセス情報は、アプリケーションにハードコーディングするか、構成で使用できるようにする必要があります。この情報を維持することは非常に退屈で、間違いを起こしやすいものです。
たとえば、リソースが別のIPアドレスを使用して別のサーバーに再配置された場合、このリソースを使用するすべてのアプリケーションをこの新しい情報で更新する必要があります。JNDIでは、これは必要ありません。対応するリソースバインディングのみを更新する必要があります。アプリケーションは引き続きその名前でアクセスでき、再配置は透過的です。