Tomcatのデータソース使用(1)


一、
データソースの概要:
Java言語では、DataSourceオブジェクトはデータソースエンティティを表すオブジェクトです.1つのデータ・ソースは、データを格納するためのツールです.複雑な大規模なエンタープライズ・データベースでも、行と列だけが簡単なファイルでも構いません.データ・ソースは、サーバ側にあってもよいし、カスタマー・サービス側にあってもよい.
アプリケーションが接続することによってデータ・ソースにアクセスする場合、DataSourceオブジェクトはデータ・ソースに接続するためのツールです.DataSourceインタフェースは、データ・ソースとの接続を確立するための2つの方法を提供します.
DataSourceオブジェクトを使用した接続とデータベースの接続は、DriverManagerインタフェースを使用するよりも効率的です.両方の使用範囲は似ていますが、データベースとの接続を確立し、接続の最大タイムアウト時間を設定し、ストリームを取得し、ログインする方法が提供されています.しかし、両者の違いはもっと明らかだ.DriverManagerとは異なり、1つのDataSourceオブジェクトが表すデータソースの属性を識別して記述することができ、DataSourceオブジェクトの作業はJNDI(Javatm Naming and Directory Interfaceti)と密接な関係があり、DataSourceの構築、配布、アプリケーションとは独立した管理はJNDI技術に依存している.JDBC 2にあります.0またはJDBC 3.0では、すべてのデータベース・ドライバ・プロバイダがDataSourceインタフェースを実装するクラスを提供する必要があります.データ・ソースを使用するには、まずJNDIにデータ・ソース・オブジェクトを登録する必要があります.
JNDIにデータソースオブジェクトが登録されている場合、DriverManagerを使用するよりも2つのメリットがあります.
まず、プログラムはDriverManagerのようにロードされたデータベースドライバ情報をハードコーディングする必要はありません.プログラマは、まずJNDIにこのデータソースオブジェクトを登録し、プログラムで論理名を使用して参照することができます.JNDIは、あなたが与えた名前に基づいて、この名前にバインドされたDataSourceオブジェクトを自動的に見つけることができます.このデータソースオブジェクトを使用して、特定のデータベースとの接続を確立できます.
次に、DataSourceインタフェースを実装したクラスを使用すると、接続プールと分散トランザクションで2番目のメリットが得られます.接続プールは、新しい物理接続ではなく接続を多重化することによって、プログラムの効率を著しく向上させる.これにより、タスクが忙しく、負担が重いエンタープライズクラスの分散トランザクションに適しています.
二、JNDI紹介:
JNDIは、Javaプログラムにディレクトリとネーミング機能を提供するためのAPIである.特定のディレクトリサービスとは独立して設計されているため、さまざまなディレクトリに同じ方法でアクセスできます.
JNDIは、オブジェクトと名前をバインドする技術として簡単に理解することができ、オブジェクトファクトリはオブジェクトを生産し、これらのオブジェクトはすべて唯一の名前とバインドされています.外部プログラムは、オブジェクトへの参照を名前で取得できます.
Intranets(エンタープライズイントラネット)とInternates(インターネット)ではディレクトリサービス(Directory service)が重要な役割を果たし、多くのユーザー、マシン、ネットワーク、サービス、アプリケーションで様々な情報にアクセスできます.ディレクトリサービスは、人間が理解できるネーミング方式で様々なエンティティ間の関係を描く一連のネーミング措置を提供しています.
1つのエンタープライズコンピューティング環境(computing environment)は、通常、異なる部分を表すいくつかのネーミングによって複合される.たとえば、DNS(Domain Name System)は、エンタープライズ環境では、通常、トップレベルのネーミングスキーム(top-level namein facility)として異なる部門または組織を区別します.これらの部門または組織自身は、LADPまたはNDSなどのディレクトリサービスを使用することもできる.
ユーザの観点から,これらはいずれも異なるネーミングスキームからなる複合名である.URLは典型的な例であり、複数のネーミングスキームから構成されている.ディレクトリ・サービスを使用するアプリケーションは、このような複合構成をサポートする必要があります.
ディレクトリ・サービス・APIを使用するJava開発者のメリットは、APIが特定のディレクトリまたはネーミング・サービスとは独立しているだけでなく、多層ネーミング・スキームによってディレクトリ・オブジェクトにシームレスにアクセスできることです.実際には、どのアプリケーションでも独自のオブジェクトと特定の名前をバインドできます.この機能により、Javaプログラムに任意のタイプのオブジェクトを検索して取得できます.
エンドユーザは、論理名を容易に使用することができ、ネットワーク上で様々な異なるオブジェクトを容易に検索および識別することができ、ディレクトリサービスの開発者は、APIを使用して、変更を必要とせずに異なるカスタマーサービス端末間で容易に切り替えることができる.
三、データソースと接続プールの関係:
  JDBC2.0はjavaxを提供する.sql.データベースへの接続を確立するDataSourceインタフェースです.アプリケーションがデータベースにアクセスする際に、データベースに接続するコードを記述する必要がなく、データ・ソースから直接データベース接続を取得できます.接続プール(Connect Pool)に保存されている複数のデータベース接続は、DataSourceで事前に確立されています.Javaプログラムがデータベースにアクセスする場合、接続プールから空き状態のデータベース接続を取り出すだけです.プログラムがデータベースにアクセスして終了したら、データベース接続を接続プールに戻します.
四、データソースとJNDIの関係:
DataSourceオブジェクトはTomcatによって提供されるため、プログラムでインスタンスを作成してDataSourceオブジェクトを生産することはできません.Javaの別の技術JNDIを使用してDataSourceオブジェクトの参照を得る必要があります.
TomcatはDataSourceを構成可能なJNDIリソースとして処理する.DataSourceオブジェクトを生成するファクトリはorg.apache.commons.dbcp.BasicDataSourceFactory.
javaxでnamengパッケージには、オブジェクトと名前をバインドし、名前でオブジェクトを取得する方法を提供するContextインタフェースがあります.Contextの主な方法は次のとおりです.
bind(String name,Object object):オブジェクトを名前にバインドlookup(String name):指定した名前にバインドされたオブジェクトを返します.
五、Tomcatにおけるデータソースの構成:
データソースの構成はserverの変更に関する.xmlとweb.xml、server.xmlには、データソースを定義する要素、web.xmlは、Webアプリケーションが参照するデータを宣言する要素を追加します.
A.server.xmlに要素を追加:要素はJNDI Resourceを定義するために使用されます.属性記述nameリソースを指定するJNDI名authリソースを管理するManagerを指定します.Container、Application typeリソースが属するJavaクラス名を指定する2つのオプション値があります.
 

  
  
<!----> < Resource name = " jdbc/BookDb "   auth = " Container "      type = " javax.sql.DataSource " />

B.要素に要素を加える:要素は、factoryが生成したDataResourceを指定するfactoryクラス名maxActiveを指定するために使用されます.0は、制限なしmaxIdleは、データベース接続プール内のアイドル状態にある最大接続数を指定し、0は制限なしmaxWaitは、接続プール内の接続がアイドル状態にある最長時間を指定し、異常が放出される場合を超えています.-1無限username接続データベースを指定するユーザ名password接続データベースを指定するパスワードdriverClassName接続データベースを指定するJDBCドライバurl接続データベースのURLを指定

  
  
<!----> < ResourceParams name = " jdbc/BookDb " > < parameter > < name > factory name> < value > org.apache.commons.dbcp.BasicDataSourceFactory value> parameter> < parameter > < name > maxActive name> < value > 100 value> parameter> < parameter > < name > maxIdle name> < value > 30 value> parameter> < parameter > < name > maxWait name> < value > 10000 value> parameter> < parameter > < name > username name> < value > user value> parameter> < parameter > < name > password name> < value > 1234 value> parameter> < parameter > < name > driverClassName name> < value > com.mysql.jdbc.Driver value> parameter> < parameter > < name > url name> < value > jdbc:mysql // localhost:3306/BookDb?autoReconnect=true parameter> ResourceParams>

 
C.web.xmlに要素を追加:要素は、WebアプリケーションでJNDIリソース属性記述descriptionが参照するリソースの説明res-ref-nameが参照するリソースのJNDI名を指定することを表します.要素のname属性に対応するres-type参照リソースのクラス名を指定し、要素のtype属性に対応するres-auth参照リソースを指定するManager、要素のauth属性に対応
六、Webアプリケーションでデータソースを使用する:
  javax.naming.ContextはJNDI Resourceを検索するインタフェースを提供し、3つのステップでデータソースオブジェクトを使用できます.
A.データソースへの参照を取得する:
 

  
  
<!---->     Context ctx = new InitalContext(); DataSource ds = (DataSource)ctx.lookup( " java:comp/env/jdbc/BookDb " );

B.データベース接続オブジェクトを取得する:

  
  
<!----> Connection con = ds.getConnection();

C.データベースに戻って接続プールに接続する:

  
  
<!----> con.close();

 
接続プールでclose()メソッドを使用する方法と、非接続プールでclose()メソッドを使用する方法の違いは、前者はデータベース接続オブジェクトをデータベース接続プールに戻すだけで、接続オブジェクトはデータベース接続を閉じるのではなく、空き状態に復元され、後者は直接データベースとの接続を閉じることです.
七、データソースを使用するWebアプリケーションを発表する:
JDBCと直接データベースにアクセスする場合は、JDBCドライバをWebアプリケーションのWEB-INF/libディレクトリまたはTomcatインストールディレクトリの下のcommon/libディレクトリにコピーできます.データソースからデータベースにアクセスする場合、データソースはサーブレットコンテナによって作成され、メンテナンスされるため、JDBCドライバをTomcatインストールディレクトリのcommon/libディレクトリにコピーし、サーブレットコンテナがドライバにアクセスできることを確認する必要があります.
------------
八.WEBにJNDIを適用してデータソースにアクセスする
--java:comp/envはTOMCATで固定されており、Tomcatが提供するJNDIバインドにはこの接頭辞が必要です.
--jdbc/dstestは、データソースを定義するときのデータ名です
 final String JNDINAME ="java:comp/env/jdbc/dstest";
 Context  ctx = new InitalContext();
 DataSource ds = (DataSource)ctx.lookup(JNDINAME);
 Connection conn = ds.getConnection();
 Statement stmt=conn.createrStatement();
 ResultSet rs = stmt.executeQuery(「sql文」);
 while(rs.next)
 {}
---------
serverを変更できます.xmlファイルは、グローバルデータソースを構成するためのものであり、ローカルデータソースと同様の構成であるが、変更されたファイルは異なる.
ローカルデータソースはウェブアプリケーションのプロファイルを変更するだけで、グローバルデータソースはTomcatのシステムファイルを変更する必要がある.
一般にグローバルデータソースは極力使用する.