Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)
コネクションシェアリングとコネクションアソシエーションは,コネクション共有機能です。コネクション共有機能を利用することで,リソースを効率的に使用し,パフォーマンスを向上できます。必要に応じて,コネクションアソシエーション機能を有効にしてください。
ローカルトランザクションでトランザクション管理を行っている場合,一つのリソースコネクションだけでデータベースなどのリソースにアクセスする必要があります。コネクション共有機能を使用するとユーザアプリケーションで意識することなく,一つのリソースコネクションだけでリソースアクセスができます。
グローバルトランザクションの場合も同様に,一つのリソースコネクションしかトランザクションに参加しない場合は,1フェーズコミットに最適化されるため,トランザクションの決着コストを下げることができます。
物理コネクションとは,接続先リソースのコネクションを指します。通常,サーブレットやEnterprise BeanなどのJ2EEコンポーネントが直接操作することはなく,コンテナが操作します。例えば,リソースアダプタの場合はManagedConnection(javax.resource.spi.ManagedConnection)です。
論理コネクションとは,サーブレットやEnterprise BeanなどのJ2EEコンポーネントが直接操作するコネクションを指します。例えば,リソースアダプタの場合はjavax.resource.cci.Connectionやリソースアダプタが独自に提供するコネクションです。
物理コネクションと論理コネクションの関係は,一般的に,物理コネクションから論理コネクションを生成するという関係になります。物理コネクションはコネクションプールで管理され,コネクションプールが物理コネクションの取得およびクローズを行います。
サーブレットやEnterprise BeanなどのJ2EEコンポーネントからのコネクション取得要求に対しては,コネクションプールが物理コネクションから論理コネクションを生成して返却します。コネクション解放要求に対しては,論理コネクションだけをクローズし,物理コネクションはクローズしないでプール管理します。
コネクションアソシエーション機能が有効でない場合,アプリケーションサーバが管理するトランザクション内でコネクションシェアリングが行われます。トランザクション内コネクションシェアリングは,リソースコネクションを最も効率的に使用します。トランザクション内のコネクションシェアリングについて次の図に示します。
図3-32 論理コネクションと物理コネクションの関係(トランザクション内コネクションシェアリング)
コネクションアソシエーション機能が有効な場合,およびアプリケーションサーバが管理するトランザクションの外でのコネクションシェアリングは,サーブレットやEnterprise BeanなどのJ2EEコンポーネントインスタンス内でコネクションシェアリングが行われます。コンポーネント内のコネクションシェアリングについて,次の図に示します。
図3-33 論理コネクションと物理コネクションの関係(コンポーネント内コネクションシェアリング)
コネクションシェアリングをするためには,次の条件をすべて満たす必要があります。
なお,コネクションシェアリングの定義については,「3.14.9 cosminexus.xmlでの定義」を参照してください。
コネクションを共有するかどうかは,サーブレットやEnterprise Beanの標準DDまたはcosminexus.xmlの<res-sharing-scope>タグで指定します。リソース参照ごとに指定できます。コネクションの共有はデフォルトで有効になっています。無効にする場合は,<res-sharing-scope>にUnshareableを指定します。
J2EEアプリケーションの設定については,「3.14.9 cosminexus.xmlでの定義」を参照してください。
java.sql.Connectionを,複数のトランザクション間で再利用することはできません。
java.sql.Connectionをトランザクション内で利用する場合には,トランザクションごとに,javax.sql.DataSourceからgetConnection()メソッドを使用してコネクションを取得してください。
なお,java.sql.Connectionは,トランザクション内とトランザクション外との間でも再利用することはできません。
トランザクション範囲を超えた永続性を持つコネクションを使用する場合,トランザクション内コネクションシェアリングを使用できません。その場合は,コネクションアソシエーション機能を有効にしてください。
コネクションアソシエーションは,論理コネクションと物理コネクションの関係を切り替えて,一つのリソースコネクションによるリソースアクセスを実現します。
図3-34 論理コネクションと物理コネクションの関係(コネクションアソシエーション)
図3-35 論理コネクションと物理コネクションの関係(コネクションアソシエーションとコネクションシェアリングの併用時)
コネクションアソシエーションをするためには,次の条件のすべてを満たす必要があります。
コネクションアソシエーションはデフォルトで無効になっています。
コネクションアソシエーションを有効にするための設定は,J2EEサーバのプロパティをカスタマイズして設定します。J2EEサーバの動作設定のカスタマイズについては,「3.14.10 実行環境での設定」を参照してください。
java.sql.Connectionからの生成物(例:java.sql.Statement)をトランザクションの範囲を超えて使用することはできません。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.