JSP での Tomcat の SQL Server2000 データベース接続プールの構成環境:
1. データベース: Microsoft SQL Server 2000
2. データベースドライバー: net.sourceforge.jtds.jdbc.Driver
JNDI (Java Naming and Directory Interface) の概要:
Tomcat4(5) は、Java Enterprise Edition アプリケーション サービスと互換性のある JNDI--InitialContext 実装例を提供します。その初期データは $CATALINA_HOME/conf/server.xml ファイルに設定されており、Web アプリケーション環境記述 (/WEB-INF/web.xml) 内の次の要素によって参照される場合があります。
1) <env-entry> -- 環境エントリ。アプリケーションの動作方法を設定します。
2) <resource-ref> -- リソース パラメータ。通常はデータベース ドライバ、JavaMail セッション、カスタム クラス ファクトリなど。
3) <resource-env-ref> -- Servlet 2.4 では、環境パラメータや resource-ref 変数など、認証情報を必要としないリソースの設定を簡素化するために使用されます。
InitialContext は、Web アプリケーション コンポーネントをサポートするために Web アプリケーションが初期化されるときに設定されます。すべてのエントリとリソースは、JNDI 名前空間の java:comp/env セクションに配置されます。詳細については、次の URL をクリックしてください。
1) Java 命名とディレクトリ インターフェイス
2) J2EE プラットフォーム仕様
JNDI リソースのセットアップ JNDI リソースをセットアップするには、$CATALINA_HOME/conf/server.xml ファイルで次の識別子を使用します。
1) <Environment> -- ドメイン内の変数 JNDI InitialContext エントリの名前と値を設定します (上記の <env-entry> に相当)。
2) <Resource> -- アプリケーションで使用できるリソースの名前とタイプを設定します (上記の <resource-ref> と同等)。
3) <ResourceParams> -- 使用する Java リソース クラス ファクトリまたは JavaBean 属性の名前を設定します。
4) <ResourceLink> -- グローバル JNDI 環境 (JNDI コンテキスト) へのリンクを追加します。
上記の識別子は、<Context> と </Context> (特殊な Web アプリケーションの場合) または <DefaultContext> と </DefaultContext> の間に配置する必要があります。
また、Web アプリケーション記述子 (/WEB-INF/web.xml) に設定された名前と値は、<Environemt> 要素の値が初期値にリセットされると、初期コンテキストにも設定されます。
グローバル変数は、<Server> 子要素の <GlobalNamingResources> で設定できます。
データベース接続プールの概要:
データベース接続は、特にマルチユーザー Web アプリケーションにおいて、重要かつ制限があり、高価なリソースです。データベース接続の管理は、アプリケーション全体のスケーラビリティと堅牢性に大きな影響を与え、プログラムのパフォーマンス指標に影響を与える可能性があります。この問題に対処するために、データベース接続プールが提案されました。
データベース接続プールは、データベース接続の割り当て、管理、解放を担当します。これにより、アプリケーションは、アイドル時間が最大アイドル時間を超えるデータベース接続を再確立する代わりに、既存のデータベース接続を再利用して、解放の失敗によるエラーを回避できます。データベース接続の欠落が原因です。このテクノロジーにより、データベース操作のパフォーマンスが大幅に向上します。
データベース接続プールは、初期化中に特定の数のデータベース接続を作成し、それらを接続プールに入れます。これらのデータベース接続の数は、データベース接続の最小数によって設定されます。これらのデータベース接続が使用されるかどうかに関係なく、接続プールには少なくともこの数の接続が常に保証されます。接続プール内のデータベース接続の最大数は、接続プールが占有できる最大接続数を制限します。アプリケーションによって接続プールから要求された接続数が最大接続数を超えると、これらの要求は接続プールに追加されます。待機列。データベース接続プール内の接続の最小数と最大接続数の設定では、次の要素を考慮する必要があります。
1) 最小接続数は、接続プールによって維持されるデータベース接続の数であるため、アプリケーションが大量のデータベース接続を使用しない場合、大量のデータベース接続リソースが無駄になります。
2) 最大接続数は、接続プールが適用できる最大接続数です。データベース接続要求がこの数を超えると、後続のデータベース接続要求が待機キューに追加され、後続のデータベース操作に影響します。
3) 最小接続数と最大接続数の差が大きすぎる場合、最初の接続リクエストは有益であり、最小接続数を超える後続の接続リクエストは、新しいデータベース接続を確立することと同じになります。ただし、最小接続数を超えるこれらのデータベース接続は、使用後すぐに解放されず、接続プールに配置されて再利用されるか、アイドル タイムアウト後に解放されます。
Tomcat データベース接続プールを構成するための前提条件:
1. Java ランタイム環境がインストールされている必要があります。
2. SQL Server2000 データベース サーバーが必要です (ローカルである必要はありません)。
3. jtds.jar を用意し、それを $CATALINA_HOME/common/lib ディレクトリ (ここのみ) に配置する必要があります。これが使用されるのは、Microsoft の Java SQL Server ドライバーがオンラインで見つかる二次クエリをサポートしていないためです。現在 jtds-0.6.jar を使用しています。
$CATALINA_HOME/conf/server.xml でデータベース接続プールを設定します。
以下は、<Host> と </Host> の間に配置する必要がある構成コードです。
<Context path="/quality" docBase="quality" debug="0" reloadable="true"crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/>
<リソース名="jdbc/connectDB" auth="コンテナ" タイプ="javax.sql.DataSource"/>
<ResourceParams name="jdbc/connectDB">
<パラメータ>
<name>maxActive</name>
<!-- プール内の DB 接続の最大数。制限しない場合は 0 に設定します -->
<値>100</値>
</パラメータ>
<パラメータ>
<name>maxIdle</name>
<!-- プールに保持するアイドル状態の DB 接続の最大数。制限なしの場合は 0 に設定します -->
<値>30</値>
</パラメータ>
<パラメータ>
<name>maxWait</name>
<!-- DB 接続が使用可能になるまでの最大待機時間 (ミリ秒)。このタイムアウトを超えると例外がスローされます。無期限に待機するには、-1 に設定します。 -->
<値>10000</値>
</パラメータ>
<パラメータ>
<name>削除放棄</name>
<!-- 放棄された DB 接続は削除され、リサイクルされます -->
<値>true</value>
</パラメータ>
<パラメータ>
<name>removeAbandonedTimeout</name>
<!-- deleteAbandonedTimeout パラメータを使用して、DB 接続が放棄されたとみなされるまでのアイドル状態の秒数を設定します -->
<値>60</値>
</パラメータ>
<パラメータ>
<name>ログ放棄</name>
<!-- 放棄されたコードのスタック トレースをログに記録します -->
<値>false</値>
</パラメータ>
<パラメータ>
<名前>工場</名前>
<!-DBCP 基本データソース ファクトリ -->
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</パラメータ>
<パラメータ>
<名前>ユーザー名</名前>
<!-- データベース ユーザー名 -->
<value>イオリシニア</value>
</パラメータ>
<パラメータ>
<名前>パスワード</名前>
<!-- ユーザーパスワード -->
<value>mypasswd</value>
</パラメータ>
<パラメータ>
<name>ドライバークラス名</name>
<!-- データベース ドライバー クラス名 -->
<value>net.sourceforge.jtds.jdbc.Driver</value>
</パラメータ>
<パラメータ>
<名前>URL</名前>
<!-- データベース アドレス -->
<value>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</value>
</パラメータ>
</ResourceParams>
</コンテキスト>
以下にいくつかのパラメータについて説明します。
<Context path="/quality" docBase="quality" debug="0" reloadable="true"crossContext="true">
で:
1) path はパスを指定します。ここで設定される品質ディレクトリは $CATALINA_HOME/webapps です。
2) docBase ファイルのルート ディレクトリ。
3) reloader Web ページが更新されたときに再コンパイルするかどうか。
4) maxActive 接続プール内のデータベース接続の最大数。制限なしの場合は 0 に設定します。
5) maxIdle データベース接続の最大アイドル時間。このアイドル時間を超えると、データベース接続は使用不可としてマークされ、その後解放されます。制限なしの場合は 0 に設定します。
6) maxWait は、接続を確立するための最大待ち時間です。この時間を超えると、例外が返されます。制限がないことを示すには、-1 に設定します。
7)removeAbandoned は、放棄された (通常は解放し忘れられた) データベース接続を接続プールにリサイクルします。
8)removeAbandonedTimeout データベース接続が長期間使用されなかった場合、その接続は放棄されたとみなされ、接続プールに戻されます。
9) logAbandoned は、放棄されたデータベース接続のリサイクルをログに記録します。
10) driverClassName JDBC ドライバー。
11) URL データベース接続文字列は、参照されるリソースを $CATALINA_HOME/webapps/quality/WEB-INF/web.xml に設定します。
以下は構成コードであり、<web-app> と </web-app> に配置する必要があります。
<!-- データベース構成の開始 -->
<リソース参照>
<description>connectDB テスト</description>
<res-ref-name>jdbc/connectDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>コンテナ</res-auth>
</リソース参照>
<!-- データベース構成の終了 -->
パラメータの必要な説明は次のとおりです。
1) description 参照されるリソースの説明。
2) res-ref-name リソース名。上記の <ResourceParams name="jdbc/connectDB"> を参照してください。
3) res-type リソースタイプ。上記の <Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/> を参照してください。
JSP でのリソースの使用:
これは、$CATALINA_HOME/webapps/quality の下の特定のサブディレクトリにある JSP Web ページ ファイルのコードの一部です。
<%@ page contentType="text/html;charset=GBK"%>
<%@ ページ errorPage="error.jsp"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>
<html>
<頭>
</head>
<本文>
<%
……………
……………
// データベース操作
コンテキスト ctx=null;
接続 cnn=null;
ステートメント stmt=null;
結果セット rs=null;
試す
{
ctx=新しいInitialContext();
if(ctx==null)
throw new Exception("一致する環境がありません");
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
if(ds==null)
throw new Exception("一致するデータベースがありません");
cnn=ds.getConnection();
stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
table1
");
………………
}
ついに
{
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(cnn!=null)
cnn.close();
if(ctx!=null)
ctx.close();
}
%>
</body>
</html>
コードの説明:
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
上の文は、設定したばかりのリソースを適用します。
使用後にリソース、特にコンテキスト リソースを解放することは良い習慣です。try-catch-finally セクションのfinally コード セグメントを参照してください。リソース解放中に上位リソースが解放された場合、下位リソースが先に解放されます。例: ctx が解放された場合、リソースの解放順序は rs、stmt、cnn、ctx になります。つまり、ctxがリリースされると、rs、stmt、cnnが利用できなくなります。
ここでのリソースの解放は、データベース接続を接続プールに戻すだけであり、実際にはリソースを解放しません。データベース接続プールの概要を参照してください。