ナビゲーションをスキップ

WebLogic リソース アダプタ プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

接続管理

以下の節では、WebLogic Server リソース アダプタの接続管理について説明します。接続管理の詳細については、J2CA 1.5 仕様の第 6 章「Connection Management」を参照してください。

 


接続管理規約

J2CA 1.5 仕様の要件の 1 つに接続管理規約があります。WebLogic Server とリソース アダプタの間の接続管理規約は以下のとおりです。

リソース アダプタ側の接続管理規約は、リソース アダプタの ConnectionConnectionFactoryManagedConnection、および ManagedConnectionFactory クラスで具体化されます。

接続ファクトリと接続

J2EE アプリケーション コンポーネントは、接続ファクトリと呼ばれるパブリック インタフェースを使用して接続インスタンスにアクセスし、そのインスタンスを使用して基底の EIS に接続します。接続の例には、データベース接続や JMS (Java Message Service) 接続があります。

リソース アダプタは接続と接続ファクトリを提供して、EIS 接続の接続ファクトリとして機能します。たとえば、javax.sql.DataSource および java.sql.Connection インタフェースは、リレーショナル データベースに接続するための JDBC ベースのインタフェースです。

アプリケーションは、Java Naming and Directory Interface (JNDI) ネームスペースで接続ファクトリ インスタンスをルックアップし、そのインスタンスを使用して EIS 接続を取得します。「ConnectionFactory の取得 (クライアントと JNDI 間の対話)」を参照してください。

JNDI ツリーにバインドされたリソース アダプタ

バージョン 1.5 のリソース アダプタは、独立したオブジェクトとして JNDI ツリーにバインドされるので、独立したシステム リソースとして、またはメッセージ駆動型 Bean (MDB) のメッセージ ソースとして使用できます。一方、バージョン 1.0 のリソース アダプタは、JNDI ツリーにバインドされた ConnectionFactory オブジェクトによって識別されます。

バージョン 1.5 のリソース アダプタでは、デプロイメント時に、ResourceAdapter Bean がある場合は、weblogic-ra.xml ファイルの jndi-name 要素の値を使用して JNDI ツリーにバインドされます。その結果、管理者はリソース アダプタを 1 つのデプロイ可能エンティティとして参照し、リソース アダプタ プロバイダによって公開されたリソース アダプタの機能とやり取りすることができます。詳細については、「weblogic-ra.xml スキーマ」の「jndi-name」を参照してください。

ConnectionFactory の取得 (クライアントと JNDI 間の対話)

アプリケーション アセンブラまたはコンポーネント プロバイダは、アプリケーションのデプロイメント記述子で、そのアプリケーション コンポーネントの接続ファクトリの要件をコンフィグレーションします。以下に例を示します。

res-ref-name: eis/myEIS
res-type: javax.resource.cci.ConnectionFactory
res-auth: Application または Container

リソース アダプタ デプロイヤは、リソース アダプタのコンフィグレーション情報を提供します。

アプリケーションは、Java Naming and Directory Interface (JNDI) ネームスペースで ConnectionFactory インスタンスをルックアップし、そのインスタンスを使用して EIS 接続を取得します。管理対象の環境にあるアプリケーションが、res-type 変数で指定された接続ファクトリから EIS インスタンスとの接続を取得すると、以下のようなイベントが発生します。

注意 : 管理対象のアプリケーションの環境によって、EIS にアクセスする J2EE ベースの Web 対応多層アプリケーションの操作環境が定義されます。

  1. アプリケーション サーバは、コンフィグレーション済みのリソース アダプタを使用して、基底の EIS との物理接続を作成します。
  2. アプリケーション コンポーネントは、JNDI インタフェースを使用して、コンポーネントの環境で ConnectionFactory インスタンスをルックアップします (コード リスト 5-1 を参照)。

コード リスト 5-1 JNDI ルックアップ

//初期 JNDI ネーミング コンテキストを取得する
Context initctx = new InitialContext();
// JNDI ルックアップを実行して、接続ファクトリを取得する
javax.resource.cci.ConnectionFactory cxf = 
	(javax.resource.cci.ConnectionFactory)
		initctx.lookup("java:comp/env/eis/MyEIS");

メソッド NamingContext.lookup で渡される JNDI 名は、デプロイメント記述子の res-ref-name 要素で指定されているものと同じです。JNDI ルックアップによって、res-type 要素で指定された java.resource.cci.ConnectionFactory 型のインスタンスが取得されます。

  1. アプリケーション コンポーネントは、ConnectionFactory の getConnection メソッドを呼び出して EIS 接続を取得します。返された接続インスタンスは、基底の物理接続へのアプリケーション レベルのハンドルを表します。アプリケーション コンポーネントは、接続ファクトリの getConnection メソッドを複数回呼び出して、複数の接続を取得します。
	javax.resource.cci.Connection cx = cxf.getConnection();
  1. アプリケーション コンポーネントは、返された接続を使用して基底の EIS にアクセスします。
  2. 接続を使い終わると、コンポーネントは Connection インタフェースの close メソッドを使用して接続を閉じます。
	cx.close();

アプリケーション コンポーネントが割り当てられた接続を使用後に閉じなかった場合、その接続は未使用の接続と見なされます。未使用の接続のクリーンアップはアプリケーション サーバによって管理されます。

 


発信接続のコンフィグレーション

J2CA 1.5 仕様に基づいた発信リソース アダプタでは、1 つまたは複数の発信接続を用意し、各接続で WebLogic Server 固有の認証やトランザクションをサポートするようにコンフィグレーションできます。ra.xml および weblogic-ra.xml デプロイメント記述子ファイルで発信接続のプロパティをコンフィグレーションします。

接続プールのコンフィグレーション レベル

weblogic-ra.xml デプロイメント記述子の outbound-resource-adapter 要素とその下位要素を使用して、リソース アダプタの発信コンポーネントについて記述します。

発信接続プールは以下の 3 つのレベルで定義できます。

複数の発信接続の例

複数の発信接続をコンフィグレーションした weblogic-ra.xml デプロイメント記述子の例を以下に示します。

コード リスト 5-2 weblogic-ra.xml デプロイメント記述子 : 複数の発信接続

<?xml version="1.0" ?>
<weblogic-connector xmlns="http://www.bea.com/ns/weblogic/90">
<jndi-name>900eisaNameOfBlackBoxXATx</jndi-name>
   <outbound-resource-adapter> 
      <connection-definition-group>
         <connection-factory-interface>javax.sql.DataSource
         </connection-factory-interface> 
            <connection-instance>
               <jndi-name>eis/900eisaBlackBoxXATxConnectorJNDINAME1
               </jndi-name>
               <connection-properties>
                  <pool-params> 
                     <initial-capacity>2</initial-capacity> 
                     <max-capacity>10</max-capacity> 
                     <capacity-increment>1</capacity-increment>
                     <shrinking-enabled>true</shrinking-enabled>
                     <shrink-frequency-seconds>60</shrink-frequency-seconds>
                  </pool-params>
                  <properties> 
                     <property> 
                        <name>ConnectionURL</name>
                        <value>jdbc:oracle:thin:@bcpdb:1531:bay920;create=true;autocommit=false
</value> 
                     </property> 
                     <property> 
                        <name>XADataSourceName</name> 
                        <value>OracleXAPool</value> 
                     </property> 
                     <property> 
                        <name>TestClassPath</name> 
                        <value>HelloFromsetTestClassPathGoodDay</value> 
                     </property> 
                     <property> 
                        <name>unique_ra_id</name> 
                        <value>eisablackbox-xa.oracle.900</value> 
                     </property> 
                  </properties> 
               </connection-properties> 
            </connection-instance> 
            <connection-instance>
                  <jndi-name>eis/900eisaBlackBoxXATxConnectorJNDINAME2
                  </jndi-name>
                  <connection-properties> 
                     <pool-params> 
                        <initial-capacity>2</initial-capacity> 
                        <max-capacity>10</max-capacity> 
                        <capacity-increment>1</capacity-increment>
                        <shrinking-enabled>true</shrinking-enabled>
                        <shrink-frequency-seconds>60
                        </shrink-frequency-seconds>
                     </pool-params>
                  <properties>
                     <property>
                        <name>ConnectionURL</name>
                        <value>jdbc:oracle:thin:@bcpdb:1531:bay920;create=true;autocommit=false
</value>
                     </property>
                     <property> 
                        <name>XADataSourceName</name> 
                        <value>OracleXAPool</value> 
                     </property> 
                     <property> 
                        <name>TestClassPath</name> 
                        <value>HelloFromsetTestClassPathGoodDay</value> 
                     </property> 
                     <property> 
                        <name>unique_ra_id</name> 
                        <value>eisablackbox-xa.oracle.900</value> 
                     </property> 
                  </properties> 
               </connection-properties> 
            </connection-instance> 
      </connection-definition-group> 
     <connection-definition-group>
         <connection-factory-interface>javax.sql.DataSourceCopy
         </connection-factory-interface> 
         <connection-instance>
            <jndi-name>eis/900eisaBlackBoxXATxConnectorJNDINAME3</jndi-name>
            <connection-properties> 
                  <pool-params>
                        <initial-capacity>2</initial-capacity>
                        <max-capacity>10</max-capacity>
                        <capacity-increment>1</capacity-increment>
                        <shrinking-enabled>true</shrinking-enabled>
                        <shrink-frequency-seconds>60</shrink-frequency-seconds>
                  </pool-params> 
                  <properties>
                     <property>
                        <name>ConnectionURL</name>
                        <value>jdbc:oracle:thin:@bcpdb:1531:bay920;create=true;autocommit=false
</value>
                     </property> 
                     <property>
                        <name>XADataSourceName</name> 
                        <value>OracleXAPoolB</value>
                     </property> 
                     <property>
                        <name>TestClassPath</name> 
                        <value>HelloFromsetTestClassPathGoodDay</value> 
                     </property> 
                     <property>
                        <name>unique_ra_id</name> 
                        <value>eisablackbox-xa-two.oracle.900</value>
                     </property> 
                  </properties> 
               </connection-properties> 
         </connection-instance> 
     </connection-definition-group> 
   </outbound-resource-adapter>
</weblogic-connector>

 


着信接続のコンフィグレーション

J2CA 1.5 仕様では、着信メッセージ接続をサポートするようにリソース アダプタをコンフィグレーションできます。着信接続をコンフィグレーションする主な手順は以下のとおりです。

  1. weblogic-ra.xml デプロイメント記述子でリソース アダプタの JNDI 名を指定します。「jndi-name」を参照してください。
  2. ra.xml デプロイメント記述子で、サポートされる着信メッセージ タイプごとに、メッセージ リスナと ActivationSpec をコンフィグレーションします。ActivationSpec クラスの要件の詳細については、J2CA 1.5 仕様の第 12 章「Message Inflow」を参照してください。
  3. パッケージ化されるエンタープライズ アプリケーションの中に、コンフィグレーション済みの EJB メッセージ駆動型 Bean (MDB) を含めます。weblogic-ejb-jar.xml デプロイメント記述子の resource-adapter-jndi-name 要素で、上記の手順でリソース アダプタに割り当てた同じ JNDI 名を指定します。この値を設定すると、MDB とリソース アダプタが互いに通信できるようになります。
  4. リソース アダプタが着信接続で使用するセキュリティ ID をコンフィグレーションします。リソース アダプタがメッセージを受信するとき、その作業は特定のセキュリティ ID で実行される必要があります。「リソース アダプタのセキュリティ ID のコンフィグレーション」を参照してください。
  5. 『WebLogic Server 9.0 アプリケーションのデプロイメント』の説明に従ってリソース アダプタをデプロイします。
  6. MDB をデプロイします。詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「メッセージ駆動型 EJB」および『WebLogic Server 9.0 アプリケーションのデプロイメント』を参照してください。

以下の例では、ra.xml デプロイメント記述子で、2 つのメッセージ リスナおよびアクティブ化仕様を持つ着信接続をコンフィグレーションする方法を示しています。

コード リスト 5-3 着信接続のコンフィグレーションの例

<inbound-resourceadapter>
   <messageadapter>
      <messagelistener>
         <messagelistener-type>
         weblogic.qa.tests.connector.adapters.flex.InboundMsgListener
         </messagelistener-type>
         <activationspec>
            <activationspec-class>
            weblogic.qa.tests.connector.adapters.flex.ActivationSpecImpl
            </activationspec-class>
         </activationspec>
      </messagelistener>
      <messagelistener> 
         <messagelistener-type>
         weblogic.qa.tests.connector.adapters.flex.ServiceRequestMsgListener
         </messagelistener-type>
         <activationspec>
            <activationspec-class>
            weblogic.qa.tests.connector.adapters.flex.ServiceRequestActivationSpec
            </activationspec-class>
            </activationspec>
      </messagelistener>
   </messageadapter>
</inbound-resourceadapter>

 


接続プール パラメータのコンフィグレーション

この節では、weblogic-ra.xml デプロイメント記述子で、WebLogic Server リソース アダプタの接続プール パラメータをコンフィグレーションする方法について説明します。詳細については、「weblogic-ra.xml スキーマ」を参照してください。

initial-capacity: ManagedConnection の初期数の設定

ManagedConnection が表すエンタープライズ情報システム (EIS) の複雑さによっては、ManagedConnection の作成にコストがかかる可能性があります。WebLogic Server の起動時に、接続プールに初期数の ManagedConnection を登録し、実行時には作成しないようにすることができます。この設定は、weblogic-ra.xml 記述子ファイルの initial-capacity 要素を使用してコンフィグレーションします。この要素のデフォルト値は、1 ManagedConnection です。

WebLogic Server の起動時には開始セキュリティ プリンシパルまたはリクエスト コンテキスト情報が不明なので、「リソース アダプタのセキュリティ ID のコンフィグレーション」の説明に従って security 要素で指定する、セキュリティ サブジェクトを使用して初期接続を作成します。

max-capacity: ManagedConnection の最大数の設定

作成される ManagedConnection の数が増えるほど、メモリやディスク容量などのシステム リソースが多く消費されます。エンタープライズ情報システム (EIS) によっては、この消費がシステム全般のパフォーマンスに影響します。システム リソースに対する ManagedConnection の影響を制御するために、weblogic-ra.xml デプロイメント記述子の max-capacity 要素で、割り当てる ManagedConnection の最大数を指定できます。

接続リクエスト中に ManagedConnection (capacity-increment が 2 以上の場合は複数の ManagedConnection) を新規作成する必要がある場合、WebLogic Server が最大許容数を超えて ManagedConnection を作成することはありません。この制限を超えて ManagedConnection の割り当てを要求すると、呼び出し側に ResourceAllocationException が返されます。

capacity-increment: ManagedConnection の数の制御

J2CA 1.5 仕様に従って、アプリケーション コンポーネントがリソース アダプタを介して EIS との接続を要求すると、WebLogic Server はまず、接続プール内の既存で利用可能な ManagedConnection の中に、要求されている接続の種類と一致するものがないか探します。しかし、一致するものが見つからない場合には、新規の ManagedConnection を作成して接続リクエストに応じます。

weblogic-ra.xml 記述子ファイルの capacity-increment 要素を使用して、一致するものが見つからない場合に作成される追加の ManagedConnection の数を指定できます。この機能により、時間の経過と共に増加する接続プールのサイズとサイズが増加するたびに低下するサーバのパフォーマンスを柔軟に制御できます。

shrinking-enabled: システム リソースの使用量の制御

ManagedConnection の最大数を設定すると、処理能力を超えた数の ManagedConnection が割り当てられてサーバが過負荷になることはありませんが、常に必要に応じてシステム リソースの量が効率的に制御されるわけではありません。WebLogic Server では、リソース アダプタの接続プール内の ManagedConnection の動作状況をモニタするサービスを利用できます。使用量が減少しそのレベルで一定期間とどまっている場合、接続プールのサイズは初期容量まで、またはできる限りそれに近く、継続的な接続リクエストを十分満たせる大きさにまで縮小されます。

このシステム リソース使用量サービスはデフォルトで有効です。ただし、weblogic-ra.xml 記述子ファイルの shrinking-enabled 要素を false に設定すると、このサービスを無効にできます。

shrink-frequency-seconds: 未使用の ManagedConnection の再利用を試みるまで待機する時間の設定

weblogic-ra.xml 記述子ファイルの shrink-frequency-seconds 要素を使用すると、接続プール マネージャが未使用の ManagedConnection を再利用しようとする間隔 (秒単位) を指定できます。この要素のデフォルト値は、900 秒です。

highest-num-waiters: 接続を待機するクライアントの数の制御

接続の最大数に達していて、利用可能な接続がない場合、WebLogic Server は呼び出しがタイムアウトするまで再試行します。highest-num-waiters 要素は、同時に接続を待機するクライアントの数を制御します。

highest-num-unavailable: 使用できない接続の数の制御

接続が作成されて失敗した場合、その接続は使用不可リストに置かれます。WebLogic Server は使用不可リストにある失敗した接続を再作成しようとします。highest-num-unavailable 要素は、使用不可リストに同時に存在できる使用不可接続の数を制御します。

connection-creation-retry-frequency-seconds: 接続の再作成

追加の ManagedConnection の作成中に、失敗した接続を再作成するように WebLogic Server をコンフィグレーションするには、connection-creation-retry-frequency-seconds 要素を有効にします。デフォルトでは、この機能は無効です。

match-connections-supported: 接続のマッチング

接続リクエストにはパラメータ情報が含まれています。デフォルトでは、コネクタ コンテナは ManagedConnectionFactory の matchManagedConnections() メソッドを呼び出して、プール内の使用可能な接続をリクエスト内のパラメータと一致させます。一致に成功した接続が返されます。

ManagedConnectionFactory が matchManagedConnections() の呼び出しをサポートしていない場合もあります。その場合、matchManagedConnections() メソッドの呼び出しは javax.resource.NotSupportedException を返します。この例外が捕捉された場合、コネクタ コンテナは ManagedConnectionFactory の matchManagedConnections() メソッドの呼び出しを自動的に停止します。

match-connections-supported 要素を設定して、リソース アダプタが接続のマッチングをサポートするかどうかを指定できます。デフォルトでは、この要素は true に設定されており、matchManagedConnections() メソッドは少なくとも 1 回呼び出されます。false に設定されている場合、このメソッドは呼び出されません。

接続のマッチングがサポートされていない場合は、リソースの最大数にまだ達していなければ、新しいリソースが作成されて返されます。最大数に達しているときは、最も古い使用不可のリソースがリフレッシュされて返されます。

test-frequency-seconds: 接続の有効性のテスト

test-frequency-seconds 要素を使用すると、プール内の接続の有効性をテストする頻度 (秒単位) を指定できます。

test-connections-on-create: 作成時の接続のテスト

test-connections-on-create 要素を設定して、作成が作成されるときの接続のテストを有効にすることができます。デフォルト値は false です。

test-connections-on-release: 接続プールへの解放時の接続のテスト

test-connections-on-release 要素を設定して、接続が接続プールに解放されるときの接続のテストを有効にすることができます。デフォルト値は false です。

test-connections-on-reserve: 予約時の接続のテスト

test-connections-on-reserve 要素を設定して、接続が接続プールから予約されるときの接続のテストを有効にすることができます。デフォルト値は false です。

 


接続プロキシ ラッパー - 1.0 リソース アダプタ

接続プロキシ ラッパー機能は、J2EE 1.0 コネクタ アーキテクチャに基づいて作成されたリソース アダプタでのみ有効です。接続が要求されると、WebLogic Server は、接続オブジェクトをラップするプロキシ オブジェクトを (リソース アダプタを介して) クライアントに返します。WebLogic Server はこのプロキシを使用して以下の機能を提供します。

発生する可能性のある ClassCastException

接続リクエストで返された接続オブジェクトが (Connection クラスによって実装されたインタフェースではなく) Connection 実装クラスとしてキャストされた場合、ClassCastException が発生することがあります。この例外は、以下のいずれかの原因で発生します。

WebLogic Server は、リソース アダプタが原因の ClassCastException を検出しようとします。リソース アダプタからのキャストが失敗したことが検出された場合は、プロキシ ラッパー機能が無効にされ、接続要求時のラップされていない接続オブジェクトを返すことで処理が進められます。サーバは、プロキシ生成が無効になったことを示す警告メッセージをログに記録します。この状況が発生すると、接続リーク検出機能と XAResource の遅延登録機能も無効になります。

WebLogic Server は、コンテナ管理によるセキュリティを使用するクライアントとして動作し、リソース アダプタのデプロイ時にテストを実行することで、ClassCastException を検出しようとします。そのためには、セキュリティ資格を定義してリソース アダプタをデプロイする必要があります。

クライアントがキャストを実行し、ClassCastException を受け取った場合は、クライアント コードを以下の例のように変更します。

クライアントが接続オブジェクトを MyConnection にキャストするものとします。

  1. MyConnection をリソース アダプタの Connection インタフェースを実装するクラスとするのではなく、Connection を拡張するインタフェースとなるように MyConnection を変更します。
  2. MyConnection インタフェースを実装する MyConnectionImpl クラスを実装します。

プロキシ生成の有効化および無効化

リソース アダプタで接続プロキシを使用できるかどうかわかっている場合は、WebLogic Server 8.1 の weblogic-ra.xml にある use-connection-proxies 要素を true または false に明示的に設定することで、プロキシ テストを避けることができます。

注意 : WebLogic Server は J2CA 1.0 リソース アダプタを引き続きサポートしています。1.0 リソース アダプタの場合は、weblogic-ra.xml にある WebLogic Server 8.1 デプロイメント記述子を引き続き使用します。この記述子には 1.0 リソース アダプタに対応する要素が含まれています。

true に設定した場合、プロキシ テストは実行されず、接続プロパティが生成されます。

false に設定した場合、プロキシ テストは実行されず、接続プロキシが生成されます。

use-connection-proxies が指定されていない場合、プロキシ テストが実行されて、テストを通過するとプロキシが生成されます (リソース アダプタから ClassCastException が送出されなければ、テストを通過します)。

注意 : テストでは、クライアント コードによって発生した ClassCastException は検出できません。

 


接続のテスト

リソース アダプタの ManagedConnectionFactoryValidatingManagedConnectionFactory インタフェースを実装している場合、アプリケーション サーバでは既存の接続の有効性をテストできます。特定の ManagedConnectionFactory で、特定の発信接続または発信接続のプール全体をテストすることができます。プール全体のテストでは、プール内の各接続が個々にテストされます。この機能の詳細については、J2CA 1.5 仕様のセクション 6.5.3.4 「Detecting Invalid Connections」を参照してください。

接続のテストのコンフィグレーション

weblogic-ra.xml デプロイメント記述子で以下の省略可能な要素を使用すると、プール内の接続のテストを制御できます。

Administration Console での接続のテスト

リソース アダプタの接続プールをテストするには、次の手順に従います。

  1. Administration Console で、[デプロイメント] ページを開いて、[デプロイメント] テーブルでリソース アダプタを選択します。
  2. [テスト] タブを選択します。
  3. そのリソース アダプタの接続プールのテーブルと、各プールのテスト ステータスが表示されています。

  4. テストする接続プールを選択して、[テスト] をクリックします。

Administration Console のヘルプの「発信接続のテスト」を参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次