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