2 スタート・ガイド

この章の内容は次のとおりです。

2.1 UCPを使用するための要件

UCPには、次の設計時および実行時の要件があります。

  • JRE 1.5以上

  • JDBCドライバまたはjava.sql.Connectionオブジェクトおよびjavax.sql.XAConnectionオブジェクトを戻すことができるコネクション・ファクトリ・クラス

    注意:

    リリース10.1以上のOracleドライバがサポートされます。Oracle RACや高速接続フェイルオーバーなどのOracle Databaseの拡張機能には、Oracle Clientソフトウェアに同梱されているOracle Notification Serviceライブラリ(ons.jar)が必要です。

  • ucp.jarライブラリ(アプリケーションのクラスパスに指定)

  • ojdbc8.jarライブラリ(アプリケーションのクラスパスに指定)

    注意:

    サード・パーティのデータベースおよびドライバとともにUCPを使用する場合でも、Oracle ojdbc8.jarライブラリを使用する必要があります(UCPがこのライブラリに依存しているため)。

  • SQL対応のデータベース。Oracle RACや高速接続フェイルオーバーなどの拡張機能には、Oracle Databaseが必要です。

2.2 UCPでの基本的な接続の手順

UCPには、UCP JDBC接続プールから接続を流用するためにアプリケーションで使用されるプール対応のデータソースが用意されています。最も基本的な使用例では、接続プールは明示的に定義されません。かわりに、接続が流用される際に、デフォルトの接続プールが暗黙的に作成されます。

次の手順では、データベースにアクセスするために、UCPプール対応のデータソースから接続を取得する方法について説明します。完全な例を例2-1に示します。

  1. UCPのデータソース・ファクトリ(oracle.ucp.jdbc.PoolDataSourceFactory)を使用し、getPoolDataSourceメソッドを使用してプール対応のデータソースのインスタンスを取得します。データソース・インスタンスの型はPoolDataSourceである必要があります。次に例を示します。
    PoolDataSource  pds = PoolDataSourceFactory.getPoolDataSource();
    
  2. データベースへの物理的な接続の取得に必要な接続プロパティを設定します。これらのプロパティはデータソース・インスタンスに設定され、データベースに接続するためのURL、ユーザー名およびパスワード、物理的な接続の取得に使用されるコネクション・ファクトリなどがあります。これらは、JDBCドライバおよびデータベースに固有のプロパティです。次に例を示します。
    pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
    pds.setURL("jdbc:oracle:thin:@//localhost:1521/XE");
    pds.setUser("<user>");
    pds.setPassword("<password>");
    
  3. 接続プールのデフォルトの動作を上書きするために、プール・プロパティを設定します。プール・プロパティはデータソース・インスタンスに設定されます。次に例を示します。
    pds.setInitialPoolSize(5);
    
  4. データソース・インスタンスを使用して接続を取得します。戻される接続は、データソースの接続プール内にある物理的な接続への論理的なハンドルです。次に例を示します。
    Connection conn = pds.getConnection();
    
  5. 接続を使用して、データベースで処理を実行します。
    Statement stmt = conn.createStatement ();
    stmt.execute("SELECT * FROM foo");
    
  6. 接続をクローズし、プールに返します。
    conn.close();
    

2.2.1 UCPでの認証

UCPは、透過的に認証します。つまり、接続の認証時に、PoolDataSourceOracleDataSourceと同じように動作します。UCPは、JDBC ThinドライバまたはJDBC ICYドライバが提示する次のすべての認証方式をサポートしており、基礎となるドライバに認証アクションを委譲します。

  • Oracleウォレットに格納されているパスワードによる認証

  • Kerberosを使用した認証

  • SSL証明書による認証

  • Lightweight Directory Access Protocol (LDAP)を使用した認証

2.3 UCP APIの概要

次の項では、UCP APIの最も一般的に使用されるパッケージの簡単な概要について説明します。

関連項目:

APIの詳細は、『Oracle Universal Connection Pool Java API Reference』を参照してください。

oracle.ucp.jdbc

このパッケージには、JDBC接続および接続プールを使用して処理を実行するためにアプリケーションで使用される様々なインタフェースおよびクラスが含まれます。このパッケージに含まれるインタフェースの中でPoolDataSourceおよびPoolXADataSourceデータソース・インタフェースが、接続の取得と接続プールのプロパティの取得および設定のために使用されます。これら2つのインタフェースを実装するデータソース・インスタンスは、接続プールを自動的に作成します。

oracle.ucp.admin

このパッケージには、接続プール・マネージャを使用するためのインタフェースが含まれます。また、ユーザーがJMX操作を使用し、接続プールと接続プール・マネージャの操作および属性にアクセスできるようにするMBeanを使用するためのインタフェースも含まれます。インタフェースの中でも、UniversalConnectionPoolManagerインタフェースが、接続プール・インスタンスを作成およびメンテナンスするためのメソッドを提供します。

oracle.ucp

このパッケージには、接続プール機能の実装に使用される必須および任意のコールバック・インタフェースが含まれます。たとえば、ConnectionAffinityCallbackインタフェースは、接続アフィニティを有効または無効にするコールバックの作成に使用されますが、接続アフィニティの動作のカスタマイズにも使用できます。また、このパッケージには、統計クラス、UCP固有の例外クラス、およびデータソースを使用しないでUCPを直接使用するためのロジックも含まれます。

2.4 UCPを使用した基本的な接続の例

次の例では、データベースに接続して処理を実行し、終了するプログラムを示します。この例は単純で、場合によってはあまり実用的ではありません。しかし、データベースにアクセスするために、UCPプール対応のデータソースから接続を取得するのに必要な基本的な手順を示しています。

例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());
      }
   }
}