1 台のコンピュータ上で、または専用の並列配置セットアップの場合でも複数の仮想ホストを実行する場合は、要求数の急激な増加に備える必要があります。数十個、数百個、または数千個の要求が同時に 1 つのサイトで発生すると、設計が不適切なアプリケーションではすぐに対応できなくなります。
データベース接続を作成すると、特に厄介なボトルネックになる可能性があり、最も負荷の大きいデータベース操作の 1 つは初期接続の確立です。使用しているデータベースによっては、プロトコル ハンドシェークの実行、ユーザ情報の確認、ディスク ファイルのオープン、またはメモリ キャッシュの作成が接続に必要となる場合があります。標準的なサーブレットや JSP では、エンド ユーザがこの接続のためのパフォーマンス コストを負担することになります。
プールを使用しない場合は、サーバによって、新規ユーザごとに新しい接続が生成されます。
帯域幅を使用する上でピーク負荷を処理する方法の 1 つは、ある種のデータベース接続プールを実装することです。JRun はこのために簡単なメカニズムを提供しています。
接続にかかる時間を短縮することはできませんが、ユーザの使用に備えて事前に接続のコレクション (プール) を設定しておくことが可能です。別個のスレッドでこれらの接続を設定することによって、サーブレットのパフォーマンスの低下を最小限に抑えることができます。サーブレットはプールから接続を取得し、それを使用し、完了後に返します。
これまで、多くの開発者は、独自の接続プールを開発するか、または、市販の接続プールを利用してきました。JRun 製品には強力な接続プールがバンドルされているため、接続プールの開発という作業が不要になりました。接続プールは JMC で簡単に管理できます。
接続プールによってパフォーマンスが大幅に向上します。その他にも多数の利点があります。これらの利点については、次の表で説明します。
JRun 接続プール メカニズムを使用できるのは、JMC でセットアップされた JDBC データ ソースとともに使用する場合だけです。JDBC の作成方法の詳細は、『JRun によるアプリケーションの開発』を参照してください。[JDBC データ ソース] パネルの使用方法については、『JRun セットアップ ガイド』を参照してください。
使用しているデータベース ドライバに独自のネイティブ接続プール メカニズムが含まれている場合は、パフォーマンスを最適化するために、JMC 内の JRun 接続プールをオフにします。
このセクションでは、接続プール メカニズムをオンにする方法について説明します。
[JDBC データ ソース] パネルが表示されます。
JDBC データ ソースの編集ウィンドウが表示されます。
プールを使用するには、データ ソースについてプールを明示的に有効にする必要があります。既定では、プールは使用可能になっていません。実際の JDBC データベース接続のエイリアスを作成すると、プール機能のない JRun データ ソースでもサーブレットで使用できます。
java:comp/env/jdbc/{Data Source name}
データ ソースを介してプールから接続を要求する際に利用できる接続がない場合は、JRun によって新しい接続が作成されて返されます (プールの初期サイズ、つまりプール内の接続数はゼロであることに注意してください)。利用できる接続がある場合は、直ちにその接続が返されます。
接続を一度使用したら、それを閉じる必要があります。JRun では、接続を閉じる代わりにそれをプールに返す接続プロキシ オブジェクトが用意されています。プールは、指定されたデータ ソース名に対して、同時ユーザの数だけ大きくなります。接続がタイム アウトになるとプールは縮小します。
JSP を作成する場合は、JRun カスタム タグ ライブラリの使用を検討してください。このライブラリには、JRun データ ソースを使用する jrun:sql タグが含まれています。
このセクションでは、サーブレット、EJB、および JSP での接続プールの使用方法について説明します。
メモ JRun 接続プールを使用する前に、『JRun セットアップ ガイド』の説明に従って JRun で JDBC データ ソースをセットアップする必要があります。 |
JRun は、標準 API メカニズム、特に JNDI および JDBC 2.0 を介してプールを提供します。たとえば、次のサンプル コードでは、JRun JDBC データ ソースを使用したデータベース接続が確立されます。
import java.sql.*;
import javax.naming.*; import javax.sql.*; ... InitialContext context = null; Connection con = null; try { // JNDI コンテキストを取得します。 context = new InitialContext(); // データ ソースのルックアップを行います。 DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/" + dsn); // データ ソースから接続を入手します。 con = ds.getConnection(); ... } catch (Exception ex) { throw new ServletException(ex.getMessage(), ex); } finally { if (con != null) { // 必ず接続を閉じます。 try { con.close(); } catch (SQLException ex) { // 閉じる際のエラーは無視します。 } } if (context != null) { // 必ずコンテキストを閉じます。 try { context.close(); } catch (NamingException ex) { // 閉じる際のエラーは無視します。 } } }
JRun データ ソースを利用するには JDK 1.2 以降を使用する必要があります。これは、この機能が JNDI および JDBC 2.0 に依存しているためです。ただし、jndi.jar および jdbc.jar を JRun のクラスパスに追加することによって JDK 1.1.x も使用できるようになります。これらの jar ファイルは、JRun 3.0 とともに JRun のルート ディレクトリ/lib/ext ディレクトリにインストールされます。
JRun 3.0 は、現在、データ ソースを指定するために 2 つの異なる場所を提供しています。1 つはサーブレットおよび JSP 用、もう 1 つは EJB 用です。EJB 内からデータ ソースを使用する場合は、EJB の deploy.properties ファイル内でデータ ソースを定義する必要があります。この方法の例については、『JRun サンプル ガイド』を参照してください。
使用している JDBC ドライバがすでに JDBC 2.0 接続プールをサポートしている場合、そのドライバには JRun 接続プール メカニズムを使用しないことをお勧めします。ドライバのベンダは、一般の接続プールよりも効率的で強力なデータベース専用の機能を採用しています。
また、サーブレット コンテナ間のサーブレット相互運用性について不安がある場合は、接続プールを使用しないことをお勧めします。JDBC データ ソースを取得するための JNDI メカニズムは J2EE 仕様の一部であるため、この機能を使用するサーブレットは J2EE 互換のサーブレット コンテナに移植可能になります。あいにく、一部のサーブレット コンテナではこの機能がサポートされていない場合があります。したがって、サーブレットで接続プールを使用する前に、サーブレットが公開されるサーバが JDBC データ ソースをサポートしていることを確認する必要があります。