データベースでクライアント情報を追跡する場合には、WebSphere Application Server クライアント・データをデータ
ベース接続に受け渡すのに、2 つの方法から選択することができます。
アプリケーション・コード内の
com.ibm.websphere.rsadapter.WSConnection オブジェクト上で IBM 専有
API、setClientInformation(Properties) を呼び出すことによって、接続情報を
明示的に
受け渡すことを選択することができます。ただし場合によっては、
WebSphere Application Server によって、データベース接続へのクライアント情報の受け渡しを処理する場合もあります。クライアント情報の
この設定方法は、
暗黙的 と呼ばれます。
暗黙的なメソッドは、以下の理由によって選択します。
- アプリケーションを専有 API がない状態に保持する、または
- アプリケーションがコンテナー管理パーシスタンス (CMP) を使用する。
この場合、専有 API を使用して、データベース接続上でクライアント情報を設定することはできません。
WebSphere Application Server のトレース機能は、クライアント情報を暗黙的に設定するための機能を提供します。
2 つの特別トレース・グループ (WAS.clientinfo トレースまたはWAS.clientinfopluslogging トレース) のいずれかを指定することにより、
クライアント情報の引き渡しを使用可能または使用不可にすることができます。
考えられるランタイム・シナリオ
- 接続の共用
接続を共用する場合、WebSphere Application Server は、
最初に獲得された接続ハンドルでのみクライアント情報を設定します。
接続の共用が使用可能で、複数の getConnection メソッドが呼び出される場合
(結果的に同じ接続上にハンドルが 2 つになる)、
最初の getConnection 呼び出しによってのみ、
クライアント情報はバックエンド・データベースに引き渡されます。
このシナリオは、クライアント情報を引き渡す明示的プロセスに適用されません。
このような場合、すべての setClientinformation メソッドは、
接続の共用に関係なくデータベースにリレーされます。
- 暗黙的/明示的共存
クライアント情報をリレーするために、
明示的および暗黙的プロシージャーの両方を使用する場合、
明示的に設定されるデータと暗黙的に設定されるデータの組み合わせの一部は結合されますが、
通常は、明示的のほうが優先されます。
例えば、アプリケーションがクライアントのアカウンティング情報を "myAccountingInfo" に設定する場合、
バックエンド・データベースに渡される最後の accountingInfo ストリングは、
次のサンプル・コードのようになります。
000325_WSRdbManagedConnectionImpl@1234_myAccountingInfo:
ここで、
000325 はスレッド ID、
WSRdbManagedConnectionImpl@1234 は WebSphere 接続インスタンスです。
- クライアント情報のリセット
クライアント情報を引き渡すように Application
Server を構成する場合、
接続がプールに戻される場合で、WAS.clientinfo および WAS.clientinfopluslogging
トレース・メカニズムが使用不可
(つまり、WAS.clientinfo=all=disabled:WAS.clientinfopluslogging=all=disabled) である場合のみ、
クライアント情報はリセットされます。
しかし、明示的な場合、リセット操作が行われるのは、
アプリケーションが WSConnection 接続上で setClientInformation(null) を発行する場合のみです。
WAS.clientinfo トレース
デフォルトでは、暗黙のメカニズムは使用不可になっています。
このメカニズムを、アプリケーション・サーバーを停止および再始動することなく動的に、
あるいは WebSphere Application Server トレース・グループ WAS.clientinfo=all=enabled
を設定することによって静的にオンにすることができます。
暗黙的に収集され、
データベース接続に設定された情報は、ユーザー名、ユーザー・
ロケーション および アプリケーション名 から構成されます。
暗黙的に収集され、
データベース接続に設定された情報は、
スレッド ID、ユーザー名、ユーザー・ロケーション、およびアプリケーション名から構成されます。
重要: ユーザー名およびユーザー・ロケーションは、Java 2 セキュリティーを使用可
能にした場合のみ、暗黙的に収集し、データベース接続で設定することができます。
- スレッド ID
- WebSphere Application Server 内でアプリケーション要求の処理を制御する
Java スレッドを識別する 16 進値です。
この ID は、トレース・ヘッダーに表示されます。
- ユーザー名
- アプリケーション要求を開始するユーザーの名前。
このオプションは、Java 2 セキュリティーが使用可能な場合のみ、収集され、バックエンド・データベース (サポートされている場合) に渡されます。
ここでの情報は、
WSSecurityHelper.getFirstCaller メソッドを呼び出すことによって収集されます。
- ユーザー・ロケーション
- ユーザーのロケーションの名前であり、cell:node:server の形を取ります。
このオプションは、Java 2 セキュリティーが使用可能な
場合にのみ、適宜、収集され、バックエンド・データベースに渡されます。
ここでの情報は、
WSSecurityHelper.getFirstServer メソッドを呼び出すことによって収集されます。
- application name
- 稼働しているアプリケーションの名前。
この値は、J2EEName オブジェクトからの getApplication メソッドの出力です。
この値はグローバル・セキュリティー設定に関係なく収集されます。
WAS.clientinfopluslogging トレース
デッドロ
ックなど、データベース問題をデバッグする場合、デバッグ作業をサポートするのに必要な情報セットがあります。
この情報は通常、WebSphere Relational Resource Adapter (RRA) トレース、
および Enterprise JavaBeans (EJB) コンテナー・トレースを使用可能にすることによって取得されます。
ただし、特定の問題を複製する際に、タイミングが問題となる場合があります。
あまりに多くのトレース情報があると、
タイミングの変更など、アプリケーションの振る舞いが変更されることがあり、
問題が 2 度と起こらない場合があります。
この状態のため、
最小セットの情報のみが収集される新規トレース・グループが提供されます。
このトレース・グループは WAS.clientinfopluslogging です。
この機能は、WAS.clientinfo トレースのように、
接続でクライアント情報を暗黙的に設定し、
重要なアプリケーション・アクティビティーをロギングおよびトレースします。
これらのアクティビティーは以下のとおりです。
- 実行された SQL Strings (更新では id=? である tabl1 からの userId の選択など)。
- トランザクションの開始、コミット、およびロールバック。
- EJB 呼び出し (Create、Remove、findByPrimaryKey など)。