ヘッダーをスキップ
Oracle Database JDBC開発者ガイド
11gリリース2(11.2)
B56281-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

21 暗黙的接続キャッシュ

一般に中間層で実装される接続キャッシュは、物理データベース接続のキャッシュを維持し、使用するための手段です。


注意:

Oracle Database 11gリリース2 (11.2)から、この機能は非推奨となり、Universal Connection Pool (UCP) for JDBCがこれに置き換わりました。新しいアーキテクチャは、以前より強力でパフォーマンスも向上しているため、こちらを使用することをお薦めします。詳細は、次のリンクを参照してください。
http://www.oracle.com/technology/tech/java/sqlj_jdbc/index.html

暗黙的接続キャッシュは、Java Database Connectivity(JDBC)3.0に準拠した、DataSource用の接続キャッシュの実装です。キャッシュへの透過的アクセス、複数ユーザーのサポート、およびユーザー定義のプロファイルに基づいて接続を要求できる機能は、JavaおよびJava2 Platform, Enterprise Edition(J2EE)アプリケーションに対して役立ちます。

アプリケーションは、OracleDataSourcesetConnectionCachingEnabled(true)をコールすることにより、暗黙的接続キャッシュを有効にします。暗黙的キャッシュを有効にすると、OracleDataSourceへの最初の接続要求により、透過的に接続キャッシュが作成されます。アプリケーション開発者がキャッシュ実装を作成する必要はありません。

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

暗黙的接続キャッシュ

キャッシュがデータソースのアーキテクチャに透過的に統合されるよう、接続キャッシュ・アーキテクチャは再設計されました。

接続キャッシュは、物理接続と論理接続の概念を使用します。物理接続は、データベースによって戻される実際の接続で、論理接続は、物理接続を操作するためにキャッシュが使用するコンテナです。論理接続は、ハンドルとみなすこともできます。キャッシュは、物理接続と同じインタフェースを実装する論理接続を常に戻します。

暗黙的接続キャッシュは、次のものを提供します。

接続キャッシュの使用

この項では、アプリケーションが暗黙的接続キャッシュを使用する方法を説明します。内容は次のとおりです。

キャッシュの有効化

アプリケーションは、OracleDataSource.setConnectionCachingEnabled(true)をコールすることにより、暗黙的接続キャッシュを有効にします。暗黙的キャッシュを有効にすると、OracleDataSourceクラスへの最初の接続要求により、透過的に接続キャッシュが作成されます。

例21-1に、暗黙的接続キャッシュを使用したサンプル・コードを示します。

例21-1 暗黙的接続キャッシュの使用

// Example to show binding of OracleDataSource to JNDI,
// then using implicit connection cache 
 
import oracle.jdbc.pool.*; // import the pool package
 
Context ctx = new InitialContext(ht);
OracleDataSource ods = new OracleDataSource();
 
// Set DataSource properties
ods.setUser("Scott");
ods.setConnectionCachingEnabled(true);    // Turns on caching
ctx.bind("MyDS", ods);
// ...
// Retrieve DataSource from the InitialContext
ods =(OracleDataSource) ctx. lookup("MyDS");  
 
// Transparently create cache and retrieve connection 
conn = ods.getConnection();
// ...
conn.close();  // return connection to the cache
// ...
ods.close() // close datasource and clean up the cache

接続のオープン

接続キャッシュを有効にすると、OracleDataSource.getConnectionメソッドを通じて接続を取り出すたびに、キャッシュ内に接続が存在するかどうかがJDBCドライバによって確認されます。

getConnectionメソッドは、キャッシュ内に、指定された条件に一致する未使用の物理接続が存在するかどうかをチェックします。一致するものが見つかった場合、物理接続をラップした状態で論理接続が戻されます。一致する物理接続が見つからなかった場合は、新しい物理接続が作成され、論理接続にラップされて戻されます。

getConnectionには、接続キャッシュを参照しないもの2つと、キャッシュが戻す接続の種類を指定するもの2つの、4つの種類があります。キャッシュ固有でないgetConnectionメソッドは、標準的に動作します。


注意:

暗黙的接続キャッシュを有効にすると、OracleDataSource.getConnectionから戻される接続の状態がリセットされない場合があります。したがって、接続をキャッシュに戻す前に、すべての接続の状態(自動コミット、バッチ・サイズ、プリフェッチ・サイズ、トランザクション・ステータス、トランザクション分離など)をリセットする必要があります。

接続キャッシュ名の設定

OracleDataSourceConnectionCacheNameプロパティは、Connection Cache Managerが接続キャッシュを管理するために使用するオプションのプロパティです。このプロパティを設定するには、次のメソッドをコールします。

public void synchronized setConnectionCacheName(String cacheName) throws SQLException

このプロパティを設定した場合は、その名前を使用して、キャッシュを有効にするOracleDataSourceがアクセスするキャッシュが一意に識別されます。このプロパティを設定しない場合は、DataSourceName#HexRepresentationOfNumberOfCachesという命名規則を使用して、デフォルトのキャッシュ名が作成されます。


注意:

getConnectionCacheName()メソッドは、setConnectionCachingEnabledメソッドがコールされた後にsetConnectionCacheNameメソッドがコールされた場合にのみ、接続キャッシュの名前を戻します。

接続キャッシュ・プロパティの設定

暗黙的接続キャッシュの動作を詳細に設定するには、setConnectionCachePropertiesメソッドを使用して様々な接続プロパティを設定します。


注意:

  • キャッシュ固有のプロパティを設定する前に、データソース上でキャッシュを有効にしておく必要があります。そうしない場合、setConnectionCachePropertiesメソッドが機能しません。

  • これらのプロパティは接続キャッシュの動作を管理しますが、接続またはキャッシュそのものではなく、データソースで設定されます。


接続のクローズ

アプリケーションは、closeメソッドをコールすることにより、キャッシュに接続を戻します。closeメソッドには、引数のないものと、Connectionオブジェクトを引数にとるものの、2つの変種があります。


注意:

  • 接続を確実にキャッシュに戻すために、アプリケーションは接続をクローズする必要があります。

  • 暗黙的接続キャッシュを有効にした場合は、接続をキャッシュに戻す前に、すべての接続の状態(自動コミット、バッチ・サイズ、プリフェッチ・サイズ、トランザクション・ステータス、トランザクション分離など)をリセットする必要があります。これによって、キャッシュから取り出した後続の接続の状態が確実にリセットされています。


暗黙的接続キャッシュの例

例21-2に、データソースの作成、キャッシュおよびデータソース・プロパティの設定、接続の取出し、およびキャッシュに戻すための接続のクローズを示します。

例21-2 接続キャッシュの例

import java.sql.*;
import javax.sql.*;
import java.util.*;
import javax.naming.*;
import javax.naming.spi.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.*;
 
...
  
    // create a DataSource    
    OracleDataSource ods = new OracleDataSource();
    
    // set cache properties 
    java.util.Properties prop = new java.util.Properties();
    prop.setProperty("MinLimit", "2");    
    prop.setProperty("MaxLimit", "10");    
 
    // set DataSource properties    
    String url = "jdbc:oracle:oci8:@";    
    ods.setURL(url);    
    ods.setUser("hr");    
    ods.setPassword("hr");    
    ods.setConnectionCachingEnabled(true); // be sure set to true    
    ods.setConnectionCacheProperties (prop);    
    ods.setConnectionCacheName("ImplicitCache01"); // this cache's name    
 
    // We need to create a connection to create the cache 
    Connection conn = ds.getConnection(user, pass);
    Statement  stmt  = conn.createStatement();
    ResultSet  rset  = stmt.executeQuery("select user from dual");
    conn.close(); 
     
    ods.close();

接続属性

データソースから取得した各接続には、ユーザー定義属性を指定できます。属性は、アプリケーション開発者によって指定される、java.lang.Propertiesの名前と値のペアです。

開発者は、接続属性を使用して、接続を識別するためのセマンティクスを指定できます。たとえば、アプリケーションでconnection_typeという名前の属性を作成し、これに値payrollまたはinventoryを割り当てることができます。


注意:

接続属性のセマンティクスはすべてアプリケーションで定義します。接続キャッシュ自体は、接続属性のキーまたは値に制約を規定しません。

接続属性を取得および設定するメソッドは、OracleConnectionインタフェースに存在します。この項の内容は次のとおりです。

接続の取得

初めて取り出す接続には属性がありません。そのため、属性を設定する必要があります。接続の属性を設定した後、getConnectionメソッドの特殊な形式を使用することにより、その接続を属性の指定によって要求できます。

  • getConnection(java.util.Properties cachedConnectionAttributes

    指定されたcachedConnectionAttributesに一致するデータベース接続を要求します。


    関連項目:

    接続属性の詳細は、「その他のプロパティ」を参照してください。

  • getConnection(java.lang.String user, java.lang.String password, java.util.Properties cachedConnectionAttributes)

    指定されたuserpasswordおよびcachedConnectionAttributesに一致するデータベース接続を暗黙的接続キャッシュから要求します。userおよびpasswordについてNULL値が渡された場合、DataSourceのデフォルト値が使用されます。

属性一致規則

connectionAttributesの一致規則には、次の2種類があります。

  • 基本

    この種類では、キャッシュが検索され、属性に一致する接続が取り出されます。接続検索メカニズムの内容は、次のとおりです。

    1. 完全に一致するものが見つかった場合、接続がコール元に戻されます。

    2. 完全一致が見つからず、ClosestConnectionMatchデータソース・プロパティが設定されている場合、最も近似のものが戻されます。最も近似の一致の接続は、元の属性の一致が最も多かったものです。最も近似の一致の接続は、元の属性のサブセットに一致しても、元のリストの一部ではない属性を持っていない可能性があります。たとえば、元の属性リストがA、BおよびCの場合、近似の一致はAおよびBを持っていても、Dを持っていない可能性があります。

    3. 既存の接続のいずれとも一致しない場合、新しい接続が戻されます。新しい接続は、DataSourceで設定されているユーザー名およびパスワードを使用して作成されます。getConnection(String, String, java.util.Properties)がコールされると、引数として渡されたユーザー名とパスワードを使用して新しい接続がオープンされます。

  • 拡張

    この種類では、属性が重みに関連付けられます。接続検索メカニズムは基本のconnectionAttributesに基づいた検索と同様ですが、接続がconnectionAttributesにのみ基づいて検索されるのではなく、connectionAttributesのキーに関連付けられた重みも使用して検索されます。これらの重みは、1回のみの操作としてキーに関連付けられ、接続キャッシュ・プロパティAttributeWeightsとしてサポートされます。

接続属性の設定

アプリケーションは、次のメソッドを使用して接続属性を設定します。

applyConnectionAttributes(java.util.Properties connAttr)

connAttrは検証されません。接続属性の適用は累積されます。applyConnectionAttributesをコールするたびに、ユーザーが提供するconnAttr属性は、既存のものに追加されます。

戻された接続の属性の確認

指定された属性の接続がアプリケーションによって要求された際、接続キャッシュ内に一致するものがない可能性があります。このような場合、接続キャッシュは属性を持たない接続を作成し、これを戻します。Connection Cache Managerは属性のセマンティクスを識別できないため、接続キャッシュは要求された属性の接続を作成できません。


注意:

closestConnectionMatchプロパティが設定されている場合、キャッシュ・マネージャは完全一致ではなく近似の一致を検索します。

このため、アプリケーションは戻された接続の属性を必ず確認する必要があります。そのためには、getUnMatchedConnectionAttributesメソッドを使用します。このメソッドは、接続を取得する際に一致しなかったすべての属性のリストを戻します。このメソッドの戻り値がnullの場合、すべての接続属性を設定する必要があることがわかります。

接続属性の例

例21-3に、接続属性の使用方法を示します。

例21-3 接続属性の使用

    java.util.Properties connAttr = new java.util.Properties();
    connAttr.setProperty("connection_type", "payroll");
 
    // retrieve connection that matches attributes
    Connection conn = ds.getConnection(connAttr); 
    // Check to see which attributes weren't matched
   unmatchedProp = ((OracleConnection)conn).getUnMatchedConnectionAttributes();
   if ( unmatchedProp != null )
    {
    // apply attributes to the connection
    ((OracleConnection)conn).applyConnectionAttributes(connAttr);  
    }
    // verify whether conn contains property after apply attributes
    connProp = ((OracleConnection)conn).getConnectionAttributes(); 
    listProperties (connProp);

接続キャッシュ・プロパティ

接続キャッシュ・プロパティは、接続キャッシュの特性を管理します。この項では、サポートされている接続キャッシュ・プロパティについて説明します。内容は次のとおりです。

アプリケーションは、次のいずれかの方法でキャッシュ・プロパティを設定します。

制限プロパティ

これらのプロパティは、キャッシュのサイズを制御します。

InitialLimit

キャッシュの作成時または再初期化時にキャッシュ内に作成される接続数を設定します。このプロパティに0より大きい整数値を設定すると、キャッシュを作成または再初期化した際、指定された数の接続が自動的に作成され、前もってキャッシュを満たします。

デフォルト: 0

MaxLimit

キャッシュが保持できる接続インスタンス数の最大値を設定します。デフォルト値はInteger.MAX_VALUEで、これは、接続キャッシュにより強制される制限がなく、接続の数は、データベースに対して構成されるデータベース・セッションの数によってのみ制限されることを意味します。

デフォルト: Integer.MAX_VALUE(制限なし)


注意:

同時接続数がデータベース・サーバーで構成した最大セッション数を超えると、ORA-00018エラーが発生します。このエラーを回避するには、MaxLimitプロパティの値を設定する必要があります。この値は、データベース・サーバー用に構成したSESSIONSパラメータより小さい値にします。

MaxStatementsLimit

接続がオープン状態にできる文の最大数を設定します。キャッシュでこのプロパティが設定されていると、キャッシュを再初期化するかデータソースをクローズした場合、MaxStatementsLimitを超えた数のすべてのカーソルが自動的にクローズされます。

デフォルト: 0

MinLimit

キャッシュが保持する接続の最小数を設定します。

デフォルト: 0


注意:

  • MinLimitプロパティを設定しても、キャッシュが最小数の接続を保持するよう、キャッシュは初期化されません。これを行うには、InitialLimitプロパティを使用してください。

  • InitialLimitMinLimitの値よりも大きい場合は、InitialLimitで指定された接続数をMaxLimitで指定されている値まで大きくすることができます。したがって、InitialLimitMinLimitに依存していません。

  • 接続は、JDBC高速フェイルオーバーのDOWNイベントが処理されているときには、接続プールで設定された最低限の数を下回ることがあります。処理では、プールの影響を受けた接続は削除されます。MinLimitは、接続プールへの要求が増え、接続数がMinLimitの値を超えると適用されます。


タイムアウト・プロパティ

これらのプロパティは、キャッシュ内の要素の存続期間を制御します。

InactivityTimeout

物理接続が接続キャッシュ内にアイドル状態で存続できる最大期間を設定します。アイドルな接続とは、アクティブでなく、論理ハンドルが関連付けられていない接続です。InactivityTimeoutが期限切れになると、基礎となる物理接続がクローズされます。ただし、minLimitが設定されている場合、キャッシュのサイズはそれを下回りません。

デフォルト: 0(タイムアウトなし)

TimeToLiveTimeout

論理接続がオープン状態でいられる最大期間を秒単位で設定します。TimeToLiveTimeoutが期限切れになると、論理接続は無条件にクローズされ、関連付けられた文ハンドルは取り消され、基礎となる物理接続は再利用のためにキャッシュに戻されます。

デフォルト: 0(タイムアウトなし)

AbandonedConnectionTimeout

接続がクローズされてキャッシュに戻されるまでに、接続が使用されずに維持される最大期間を設定します。SQLデータベース・アクティビティがない場合、接続は使用されていないとみなされます。

AbandonedConnectionTimeoutが設定されると、JDBCによって各論理接続のSQLデータベース・アクティビティが監視されます。たとえば、stmt.executeが接続に対してコールされると、この接続がアクティブであることを伝えるハートビートが登録されます。ハートビートは、データベースの実行ごとに設定されます。指定された期間、接続が非アクティブであると、基礎となる接続は再生され、再利用のためにキャッシュに戻されます。

デフォルト: 0(タイムアウトなし)

PropertyCheckInterval

Connection Cache Managerがすべての指定されたキャッシュ・プロパティを確認および強制する時間隔を設定します。PropertyCheckIntervalは秒単位で設定されます。

デフォルト: 900秒


関連項目:

『Oracle Database Net Services管理者ガイド』

その他のプロパティ

これらのプロパティは、様々なキャッシュの動作を制御します。

AttributeWeights

AttributeWeightsは、接続に設定された各属性の重みを設定します。


関連項目:

「AttributeWeights」

ClosestConnectionMatch

ClosestConnectionMatchは、指定された接続属性と最も近似した接続を接続キャッシュによって取り出します。

ConnectionWaitTimeout

接続が要求されたが、アクティブな接続がすでにMaxLimit本ある場合のキャッシュ動作を指定します。ConnectionWaitTimeoutがゼロの場合、各接続要求は0秒待機します。つまり、null接続が即座に戻されます。ConnectionWaitTimeoutがゼロより大きい場合、各接続要求は、指定された秒数、または接続がキャッシュに戻されるまでの間、待機します。接続がキャッシュに戻されないままタイムアウトした場合、接続要求はnullを戻します。

デフォルト: ゼロ

LowerThresholdLimit

キャッシュの最低のしきい値を設定します。デフォルトは、接続キャッシュのMaxLimitの20%です。このプロパティは、releaseConnection()キャッシュのコールバック・メソッドが使用されている場合は必ず使用されます。

ValidateConnection

ValidateConnectiontrueを設定すると、接続キャッシュが取り出した接続は、すべて、基礎となるデータベースに対して検証されます。有効な接続が取り出せない場合は、例外が発生します。

デフォルト: false


注意:

Oracle Database 11gリリース1(11.1)以上では、接続キャッシュの動作が変更されています。ValidateConnectionプロパティとデータベースのCONNECT_TIMEリソース制限の両方が有効である場合、接続キャッシュは、例外を発行せずに、CONNECT_TIME制限に設定されている値を超える接続を戻します。次回この接続で文が実行されると、かわりに例外が発行されます。

ValidateConnectionプロパティを有効にしているときは、CONNECT_TIME制限を設定しないことをお薦めします。


接続プロパティの例

例21-4に、アプリケーションが接続プロパティを使用する方法を示します。

例21-4 接続プロパティの使用

import java.sql.*;
import javax.sql.*;
import java.util.*;
import javax.naming.*;
import javax.naming.spi.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.*;
...
  OracleDataSource ds =  (OracleDataSource) ctx.lookup("...");
  java.util.Properties prop = new java.util.Properties ();
  prop.setProperty("MinLimit", "5");     // the cache size is 5 at least 
  prop.setProperty("MaxLimit", "25");
  prop.setProperty("InitialLimit", "3"); // create 3 connections at startup
  prop.setProperty("InactivityTimeout", "1800");    //  seconds
  prop.setProperty("AbandonedConnectionTimeout", "900");  //  seconds
  prop.setProperty("MaxStatementsLimit", "10");
  prop.setProperty("PropertyCheckInterval", "60"); // seconds

  ds.setConnectionCacheProperties (prop);  // set properties
  Connection conn = ds.getConnection();
  conn.dosomework();
  java.util.Properties propList=ds.getConnectionCacheProperties();  // retrieve

Connection Cache Manager API

OracleConnectionCacheManagerでは、使用可能な接続キャッシュを中間層によって管理するための管理APIを提供しています。この項では、Connection Cache Managerの使用例を示します。

ConnectionCacheManagerの使用例

例21-5に、OracleConnectionCacheManagerインタフェースを示します。

例21-5 Connection Cache Managerの例

import java.sql.*;
import javax.sql.*;
import java.util.*;
import javax.naming.*;
import javax.naming.spi.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.*;
...
// Get singleton ConnectionCacheManager instance
  OracleConnectionCacheManager occm =
  OracleConnectionCacheManager.getConnectionCacheManagerInstance();
  String cacheName = "foo";  // Look for a specific cache
  // Use Cache Manager to check # of available connections 
  // and active connections
  System.out.println(occm.getNumberOfAvailableConnections(cacheName)
      " connections are available in cache " + cacheName);
 
  System.out.println(occm.getNumberOfActiveConnections(cacheName)
      + " connections are active");
  // Refresh all connections in cache 
  occm.refreshCache(cacheName,
    OracleConnectionCacheManager.REFRESH_ALL_CONNECTIONS);
  // Reinitialize cache, closing all connections
  java.util.Properties newProp = new java.util.Properties();
  newProp.setProperty("MaxLimit", "50");
  occm.reinitializeCache(cacheName, newProp);

高度なトピック

この項では、暗黙的接続キャッシュの理解や使用にとって必須ではないが、上級者には役立つキャッシュ機能について説明します。この項の内容は次のとおりです。

属性の重みと接続の一致

getConnection要求に対し、接続キャッシュ内の適切な接続を指定するために開発者が使用できる接続キャッシュ・プロパティは2つあります。ClosestConnectionMatchプロパティにtrueを設定すると、Connection Cache Managerは、指定された属性の一部のみ一致する接続を戻します。

attributeWeightsを指定しない場合、一致する属性が最も多い接続がConnection Cache Managerによって戻されます。attributeWeightsを指定すると、属性を一致する際にマネージャによって使用される優先順位を制御できます。

ClosestConnectionMatch

ClosestConnectionMatchtrueを設定すると、指定された接続属性と最も近似した接続が接続キャッシュによって取り出されます。これとAttributeWeightsを組み合せることにより、最も近似した一致を指定できます。

デフォルト: false

AttributeWeights

connectionAttributeの重みを設定します。このプロパティは、一致を検索する際、どの属性の優先順位が最も高いかを決定するために、ClosestConnectionMatchtrueが設定されている場合に使用されます。重みが高い属性は、重みが低い属性よりも、一致を決定する際に重要視されます。

AttributeWeightsには、キー/値ペアを表すStringのセットが含まれています。各キー/値ペアのセットには、ユーザーが接続を要求する各connectionAttributeの重みを設定します。各Stringは、java.util.Properties.Store(OutputStream, String)メソッドで記述される形式であるため、java.util.Properties.load(InputStream)メソッドで読み取ることができます。KeyconnectionAttributeValueは重みです。重みは0より大きい整数値の必要があります。デフォルトの重みは1です。

たとえば、TRANSACTION_ISOLATIONに10の重み、ROLEに5の重みを割り当てます。ClosestConnectionMatchtrueに設定し、connectionAttributeに基づいてキャッシュに接続が要求されると、一致するTRANSACTION_ISOLATIONを持つ接続は、一致するROLEを持つ接続よりも優先されます。

デフォルト: AttributeWeightsなし

接続キャッシュのコールバック

暗黙的接続キャッシュを使用することにより、接続キャッシュがコールするコールバックをアプリケーションによって指定できます。コールバック・メソッドは、OracleConnectionCacheCallbackインタフェースによってサポートされます。このコールバック・メカニズムは、特定の接続に対するアプリケーションの認識を利用し、放棄された接続の処理や、キャッシュが空の場合のデフォルトの動作を補完する際に役立ちます。

OracleConnectionCacheCallbackは、ユーザーが実装し、OracleConnectionに登録する必要のあるインタフェースです。登録APIは次のとおりです。

public void
registerConnectionCacheCallback(
OracleConnectionCacheCallback cbk, Object usrObj,  int cbkflag);

このインタフェースで、cbkOracleConnectionCacheCallbackインタフェースのユーザーによる実装です。usrObjパラメータには、ユーザーが提供する任意のパラメータが含まれます。コールバック・メソッドがコールされると、このユーザー・オブジェクトは変更されずに戻されます。cbkflagパラメータは、コールするコールバック・メソッドを指定します。次の値のうち1つを設定する必要があります。

  • OracleConnection.ABANDONED_CONNECTION_CALLBACK

  • OracleConnection.RELEASE_CONNECTION_CALLBACK

  • OracleConnection.ALL_CALLBACKS

ALL_CALLBACKSが設定されると、すべての接続キャッシュのコールバック・メソッドがコールされます。たとえば、次のようになります。

// register callback, to invoke all callback methods
((OracleConnection)conn).registerConnectionCacheCallback( new UserConnectionCacheCallback(), 
  new SomeUserObject(), 
OracleConnection.ALL_CALLBACKS);

アプリケーションは、OracleConnectionConnectionCacheCallbackを登録できます。コールバックが登録されると、接続キャッシュは接続を再生する前に、コールバックのhandleAbandonedConnectionメソッドをコールします。コールバックがtrueを戻すと、接続は再生されます。コールバックがfalseを戻すと、接続はアクティブ状態のままになります。

UserConnectionCacheCallbackインタフェースは、releaseConnectionおよびhandleAbandonedConnectionという、ユーザーが実装する2つのコールバック・メソッドをサポートしています。

TimeToLiveTimeoutおよびAbandonedConnectionTimeoutのユースケース

次に、暗黙的接続キャッシュで使用される、TimeToLiveTimeoutAbandonedConnectionTimeoutのタイムアウト・メカニズムのユースケースについて説明します。これらのタイムアウト・メカニズムは、接続キャッシュから取り出された論理接続に適用できます。

  • 接続が完全にステートレスであるとアプリケーションでみなされる場合

    接続がステートレスである場合は、どちらかのタイムアウト・メカニズムを使用できます。タイムアウトが期限切れとなった接続は、再利用のために接続キャッシュに戻されます。これらの接続には、関連付けられたセッション状態がないため、再利用の対象として有効です。

  • 各接続の状態がアプリケーションで維持されるが、接続キャッシュに戻された接続をステートレスにできるクリーン・アップ・ルーチンがアプリケーションにある場合

    この場合、TimeToLiveTimeoutは使用できません。接続キャッシュの側で、接続が必ず再使用可能な状態でキャッシュに戻されるように保証する手段はありません。ただし、このシナリオでは、その接続上でOracleConnectionCacheCallbackが登録されている場合のみ、AbandonedConnectionTimeoutを使用できます。handleAbandonedConnectionコールバック・メソッドはアプリケーションにより実装され、必要なクリーン・アップが完了していることを保証します。タイムアウト処理がこのコールバック・メソッドを起動すると、接続はクローズされます。この接続をコールバック・メソッドによってクローズすると、接続は再使用できる状態で接続キャッシュに戻されます。


    注意:

    handleAbandonedConnectionメソッドをコールした後に接続をクローズしないでください。接続が無効な状態になる可能性があります。JDBCは、接続が無効な状態にある場合でも、接続を回収する方法を内部的に認識しています。

  • 各接続の状態がアプリケーションで維持されるが、接続は管理されず、他のアプリケーションやユーザーによる再利用のために状態をクリーン・アップできない場合

    どちらのタイムアウト・メカニズムも、使用はお薦めしません