初学JNDI


JNDIのフルネームはjavaネーミングとディレクトリインタフェース(JAVA Naming and Directory Interface)であり、アプリケーション設計のAPIであり、開発者に様々なネーミングとディレクトリの検索とアクセスを提供している.
の汎用、統一されたインタフェース.
JNDIは、特に分散アプリケーションシステムでは、オブジェクトと名前をバインドする技術として簡単に理解できます.すなわち、リソース名を指定し、リソースまたはサービスに関連付けます.
他のコンポーネントやリソースにアクセスする必要がある場合は、JNDIサービスを使用して位置決めする必要があります.アプリケーションは名前でオブジェクトのオブジェクトやサービスを得ることができます.
DNS、ファイルサービス、データベースなど、JNDIを使用してアクセスできるディレクトリやサービスはたくさんあります.
JNDIの使用手順:
tomcatconfディレクトリのcontextを変更します.xml、Environment要素の追加
<Context>
 <Environment name="tjndi" value="hello world" type="java.lang.String" />
</Context>

Environment要素の一般的なプロパティは、java:comp/envの名前type:javaクラス名value:適用するパラメータ値に対して新しいtestjndiを返す名前です.jspページはJNDIをテストして、どのように内容を追加します:
//javax.naming.Context     JNDI    
Context ctx = new InitialContext();
//java:comp/env/   
String testjndi = (String) ctx.lookup("java:comp/env/tjndi");
out.println("JNDI: " + testjndi);

出力:JNDI:hello world
JNDIネーミングスペース内のリソース名の競合を回避し、移植性の問題を回避するには、javaEEアプリケーション内のすべての名前を文字列「java:comp/env」で開始する必要があります.
データソースとJNDIリソース:
DataSourceオブジェクトは、Webコンテナ(tomcat)によって提供されるため、プログラムでオブジェクトを作成することでDataSourceオブジェクトを生成することはできませんが、JNDIで実装できます.
javax.naming.ContextはJNDI Resourceを検索するインタフェースを提供し、以下の方法でjdbc/newsデータソースを得ることができます.
//初期化コンテキストContext ctx=new InitialContext();//論理名に関連付けるデータソースオブジェクトDataSource ds=(DataSource)ctxを取得する.lookup("java:comp/env/jdbc/news"); Connection conn = ds.getConnection();//接続オブジェクトを取得プログラムがデータベースアクセスを終了した後、conn.close()メソッドを呼び出して直ちに接続プールに接続を戻し、接続をアイドル状態に戻す必要があります.Contextの
loopup()メソッドは、指定した名前にバインドされたオブジェクトを返します.
Tomcatは、DataSourceを構成可能なJNDIリソースとして処理します.データソース名がjdbc/newsで、アプリケーションがjdbc/newsにアクセスするデータソースが構成されていると仮定します.
のDataSourceの手順は次のとおりです.
1.JDBCドライバをtomcatのlibの下に置く
2.contextを修正する.xml Resource要素の追加データソースの構成:
 <Context ...>
  <Resource name="jdbc/news" auth="Container"
            type="javax.sql.DataSource"
            factory="org.apache.commons.dbcp.BasicDataSourceFactory"
            username="sa" password="123456"
            driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://localhost:1433;DatabaseName=news"
            maxActive="8" maxIdle="4"/>
</Context>

関連プロパティの説明:
name:JDBCデータソースの名前.
auth:
type:現在構成されているリソースのカテゴリ.
factory:データソースファクトリ、デフォルトは「org.apache.commons.dbcp.BasicDataSourceFactory」です.
driverClassName-ドライバのフルパスクラス名.
maxActive-現在のデータ・ソースでサポートされている最大同時実行数.
maxIdle-接続プールに保持されている最大数のアイドル接続数.
maxWait-接続プールに接続がない場合の最大待機ミリ秒数、現在の設定時間が経過しても接続がない場合は例外が放出されます.
username-データベースにアクセスするユーザー名
password-データベースへのアクセスパスワード
url-JDBC駆動接続文字列
validationQuery-アプリケーションに戻る前に、現在の接続が有効かどうかを確認するために使用されるSQL文です.指定した場合、現在のクエリー文は少なくとも1つのレコードを返します.
3.プロジェクト下のwebを構成する.xml
<web-app>	
<Resource>
-->
<Resource>
-->new DataSource
jdbc/news
javax.sql.DataSource
Container
4.     

Context ctx = new InitialContext();//      
try {
	DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/ktv");
	Connection conn = ds.getConnection();
	if (conn == null) out.println("    ");
	else out.println("    ");
} catch (Exception e) {
	out.println(e.toString());
	e.printStackTrace();
}
JNDIを してデータ・ソース・オブジェクトを するには、 の4つのステップに けられます.
(1)contex.xmlファイルの
(2)web.xmlファイルの
(3)ドライバの
(4)コードを しloopup()メソッドを いてデータソースオブジェクトを る.