この章の内容は次のとおりです。
UCP for JDBCには、次の設計時および実行時の要件があります。
JDBCドライバまたはjava.sql.Connectionオブジェクトおよびjavax.sql.XAConnectionオブジェクトを戻すことができるコネクション・ファクトリ・クラス
リリース10.1以上のOracleドライバがサポートされます。Oracle RACや高速接続フェイルオーバーなどのOracle Databaseの拡張機能には、Oracle Clientソフトウェアに同梱されているOracle Notification Serviceライブラリ(ons.jar)が必要です。
ucp.jarライブラリ(アプリケーションのクラスパスに指定)。
SQL対応のデータベース。Oracle RACや高速接続フェイルオーバーなどの拡張機能には、Oracle Databaseが必要です。
UCP for JDBCには、UCP JDBC接続プールから接続を流用するためにアプリケーションで使用されるプール対応のデータソースが用意されています。最も基本的な使用例では、接続プールは明示的に定義されません。かわりに、接続が流用される際に、デフォルトの接続プールが暗黙的に作成されます。
次の手順では、データベースにアクセスするために、UCP for JDBCプール対応のデータソースから接続を取得する方法について説明します。例の詳細は、例2-1「基本的な接続の例」を参照してください。
UCP for JDBCのデータソース・ファクトリ(oracle.ucp.jdbc.PoolDataSourceFactory)を使用し、getPoolDataSourceメソッドを使用してプール対応のデータソースのインスタンスを取得します。データソース・インスタンスの型はPoolDataSourceである必要があります。次に例を示します。
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
データベースへの物理的な接続の取得に必要な接続プロパティを設定します。これらのプロパティはデータソース・インスタンスに設定され、データベースに接続するためのURL、ユーザー名およびパスワード、物理的な接続の取得に使用されるコネクション・ファクトリなどがあります。これらは、JDBCドライバおよびデータベースに固有のプロパティです。次に例を示します。
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setURL("jdbc:oracle:thin:@//localhost:1521/XE");
pds.setUser("<user>");
pds.setPassword("<password>");
接続プールのデフォルトの動作を上書きするために、プール・プロパティを設定します。プール・プロパティはデータソース・インスタンスに設定されます。次に例を示します。
pds.setInitialPoolSize(5);
データソース・インスタンスを使用して接続を取得します。戻される接続は、データソースの接続プール内にある物理的な接続への論理的なハンドルです。次に例を示します。
Connection conn = pds.getConnection();
接続を使用して、データベースで処理を実行します。
Statement stmt = conn.createStatement ();
stmt.execute("SELECT * FROM foo");
接続をクローズし、プールに返します。
conn.close();
次の例では、データベースに接続して処理を実行し、終了するプログラムを示します。この例は単純で、場合によってはあまり実用的ではありません。しかし、データベースにアクセスするために、UCP for JDBCプール対応のデータソースから接続を取得するのに必要な基本的な手順を示しています。
例2-1 基本的な接続の例
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.ucp.jdbc.PoolDataSourceFactory;
import oracle.ucp.jdbc.PoolDataSource;
public class BasicConnectionExample {
public static void main(String args[]) throws SQLException {
try
{
//Create pool-enabled data source instance.
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
//set the connection properties on the data source.
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setURL("jdbc:oracle:thin:@//localhost:1521/XE");
pds.setUser("<user>");
pds.setPassword("<password>");
//Override any pool properties.
pds.setInitialPoolSize(5);
//Get a database connection from the datasource.
Connection conn = pds.getConnection();
System.out.println("\nConnection obtained from " +
"UniversalConnectionPool\n");
//do some work with the connection.
Statement stmt = conn.createStatement();
stmt.execute("select * from foo");
//Close the Connection.
conn.close();
conn=null;
System.out.println("Connection returned to the " +
"UniversalConnectionPool\n");
}
catch(SQLException e)
{
System.out.println("BasicConnectionExample - " +
"main()-SQLException occurred : "
+ e.getMessage());
}
}
}
次の各項では、最も一般的に使用されるUCP for JDBC APIのパッケージの概略を示します。APIの詳細は、『Oracle Universal Connection Pool Java API Reference』を参照してください。
oracle.ucp.jdbc
このパッケージには、JDBC接続および接続プールを使用して処理を実行するためにアプリケーションで使用される様々なインタフェースおよびクラスが含まれます。このパッケージに含まれるインタフェースの中でPoolDataSourceおよびPoolXADataSourceデータソース・インタフェースが、接続の取得と接続プールのプロパティの取得および設定のために使用されます。これら2つのインタフェースを実装するデータソース・インスタンスは、接続プールを自動的に作成します。
oracle.ucp.admin
このパッケージには、接続プール・マネージャを使用するためのインタフェースが含まれます。また、ユーザーがJMX操作を使用し、接続プールと接続プール・マネージャの操作および属性にアクセスできるようにするMBeanを使用するためのインタフェースも含まれます。インタフェースの中でも、UniversalConnectionPoolManagerインタフェースが、接続プール・インスタンスを作成およびメンテナンスするためのメソッドを提供します。
このパッケージには、接続プール機能の実装に使用される必須および任意のコールバック・インタフェースが含まれます。たとえば、ConnectionAffinityCallbackインタフェースは、接続アフィニティを有効または無効にするコールバックの作成に使用されますが、接続アフィニティの動作のカスタマイズにも使用できます。また、このパッケージには、統計クラス、UCP固有の例外クラス、およびデータソースを使用しないでUCPを直接使用するためのロジックも含まれます。