WebLogic 診断フレームワークのコンフィグレーションと使い方

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

インスツルメンテーションのコンフィグレーション

WebLogic 診断フレームワーク (WebLogic Diagnostic Framework : WLDF) のインスツルメンテーション コンポーネントは、BEA WebLogic Server® インスタンスおよびそのサーバ インスタンスで実行中のアプリケーションに診断コードを追加するためのメカニズムを提供します。WLDF のインスツルメンテーションで主要な機能は次のとおりです。

WLDF には、あらかじめ定義された診断モニタと診断アクションのライブラリが用意されています。また、アプリケーション スコープのカスタム モニタを作成し、診断コードが挿入されるアプリケーション内の位置をユーザが決めることもできます。

インスツルメンテーションについては、以下の節で説明します。

 


概念と用語

この節では、インスツルメンテーションの概念と用語について説明します。

インスツルメンテーションのスコープ

実行可能なインスツルメンテーション サービスには、システム レベル (サーバおよびクラスタ) のものとアプリケーション レベルのものがあります。概念、サービス、コンフィグレーション オプション、および実装機能の多くは両者とも同じです。ただし、相違点もいくつかあります。それらについて、このマニュアルで説明します。「サーバ スコープ インスツルメンテーション」は、WebLogic Server インスタンスおよびクラスタ固有のインスツルメンテーションのコンフィグレーションと機能を指し、「アプリケーション スコープ インスツルメンテーション」は、WebLogic サーバにデプロイされているアプリケーション固有のコンフィグレーションと機能を指します。スコープは各モニタに組み込まれており、ユーザがモニタのスコープを変更することはできません。

コンフィグレーションとデプロイメント

サーバまたはクラスタ向けのサーバ スコープ インスツルメンテーションは、診断モジュールの一部として、DOMAIN_NAME/config/diagnostics ディレクトリにある XML コンフィグレーション ファイルでコンフィグレーションおよびデプロイされ、config.xml からリンクされています。

アプリケーション スコープ インスツルメンテーションも、診断モジュールとしてコンフィグレーションおよびデプロイされます。ただし、アプリケーション スコープの場合は、デプロイされるアプリケーションの ARCHIVE_PATH/META-INF ディレクトリ内のアプリケーション アーカイブと共にパッケージ化された weblogic-diagnostics.xml という XML コンフィグレーション ファイルを使用します。

ジョインポイント、ポイントカット、診断ロケーション

インスツルメンテーション コードは、サーバおよびアプリケーションのコード内の特定の場所に挿入 (または「ウィービング」) されます。この特定の場所を表すために、以下の用語が使用されています。

注意 : コード内に AspectJ アスペクトがウィービングされているクラスでは WLDF 診断モニタを使用できません。

診断モニタのタイプ

診断モニタは、そのスコープと種類によって分類されます。スコープは、サーバ スコープかアプリケーション スコープのどちらかです。種類は、モニタのポイントカット、診断場所、およびアクションによって決まります。たとえば、Servlet_Around_Service はアプリケーション スコープの代理モニタです。このモニタを使用すると、特定のサーブレット メソッドや JSP メソッドの入り口と出口で診断アクションをトリガできます。

インスツルメンテーション診断モニタには、以下に示す 3 種類があります。

表 10-1 に、各種類のモニタの違いを簡単に示します。

表 10-1 診断モニタのタイプ
モニタ タイプ
スコープ (有効範囲)
ポイントカット
診断ロケーション
アクション
標準モニタ
サーバ
固定
固定
固定
代理モニタ
サーバまたはアプリケーション
固定
固定
コンフィグレーション可能
カスタム モニタ
アプリケーション
コンフィグレーション可能
コンフィグレーション可能
コンフィグレーション可能

モニタに対して「仕分けマスク」を設定すると、診断アクションがトリガされるタイミングを制限できます。このマスクによって、診断コンテキストのどの仕分けフラグがアクションをトリガするかが決まります。モニタの仕分けマスクの設定については、「<wldf-instrumentation-monitor> XML 要素」を参照してください。

注意 : 診断コンテキスト、仕分けの注入、および仕分けフィルタについては、「診断コンテキストを管理するための DyeInjection モニタのコンフィグレーション」で説明します。

診断アクション

診断アクションは、関連する代理モニタまたはカスタム モニタに対応する診断コードを実行します (標準モニタの場合、アクションはあらかじめ定義されています)。代理モニタまたはカスタム モニタが何らかの意味のある処理を行うには、モニタに対して少なくとも 1 つのアクションをコンフィグレーションする必要があります。

WLDF 診断ライブラリでは、以下のアクションを利用できます。アクションをモニタにアタッチするには、DIAG_MODULE.xml コンフィグレーション ファイルの <action> 要素でアクション名を指定します。

アクションは、モニタに正しく対応している必要があります。たとえば、TraceElapsedTime アクションは、診断ロケーションの種類が around のカスタム モニタ、または代理モニタで使用できます。詳細については、「WLDF インスツルメンテーション ライブラリ」を参照してください。

 


インスツルメンテーション コンフィグレーション ファイル

インスツルメンテーションは、診断記述子の一部として XML コンフィグレーション ファイルでコンフィグレーションされます。このファイルの名前と格納場所は、システムレベル (サーバ スコープ) のインスツルメンテーションを実装しているか、アプリケーション レベル (アプリケーション スコープ) のインスツルメンテーションを実装しているかによって異なります。

診断 XML スキーマは以下の場所にあります。

   http://www.bea.com/ns/weblogic/90/diagnostics.xsd

詳細については、『WebLogic Server Diagnostics Schema Reference』を参照してください。

各診断記述子ファイルは、以下の行で始まる必要があります。

<wldf-resource xmlns="http://www.bea.com/ns/weblogic/90/diagnostics" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

WLDF リソースのコンフィグレーションの概要については、「WLDF コンフィグレーションについて」を参照してください。

 


インスツルメンテーションに使用する XML 要素

この節では、記述子のコード フラグメント、インスツルメンテーションのコンフィグレーションに使用する XML 要素をまとめた表、および各インスツルメンテーション診断モニタについて簡単に説明した表を示します。

<instrumentation> XML 要素

表 10-2 では、DIAG_MODULE.xml ファイルの <instrumentation> 要素について説明します。以下のコンフィグレーション フラグメントでは、この要素の使用方法を示します。

<wldf-resource>
  <name>MyDiagnosticModule</name>
<instrumentation>
   <enabled>true</enabled>
   <!-- 次の <include> 要素は、1 つのアプリケーション スコープ
        インスツルメンテーション要素にのみ適用される -->
   <include>foo.bar.com.*</include>
   <!-- この診断モジュールに対する診断モニタを定義する
        &lt;wldf-instrumentation-monitor&gt; 要素 -->
</instrumentation>
<!-- この診断モニタをコンフィグレーションする他の要素 -->
</wldf-resource>

表 10-2 DIAG_MODULE.xml コンフィグレーション ファイル内の <instrumentation> XML 要素
要素
説明
<instrumentation>
インスツルメンテーション コンフィグレーションを開始する要素。
<enabled>
true の場合、インスツルメンテーションは有効。false の場合、インスツルメントされたコードは、このインスツルメンテーション スコープのクラスに挿入されておらず、このスコープ内のすべての診断モニタは無効。デフォルト値は false
サーバとそこにデプロイされているアプリケーションに対するインスツルメンテーションを有効にするには、サーバ レベルでインスツルメンテーションを有効にする必要がある。さらに、(サーバ スコープのインスツルメンテーションの有効化に加えて) アプリケーションに対するインスツルメンテーションを有効にするには、アプリケーション レベルでインスツルメンテーションを有効にする必要がある。
<include>
インスツルメントされたコードを挿入できるクラスのリストを指定する要素 (省略可能)。ワイルドカード (*) を使用可能。複数の <include> 要素を指定できる。指定した場合、インスツルメンテーションの対象となるには、クラスは <include> パターンに一致する必要がある。
アプリケーション スコープのインスツルメンテーションの場合にのみ有効。<include> または <exclude> パターンを指定すると、アプリケーション スコープ全体に適用される。

注意 : また、特定の診断モニタに対して <include> パターンおよび <exclude> パターンを指定することもできる。表 10-3<include><exclude> の項目を参照。

クラスがロードされると、インスツルメンテーション コードを挿入する前に、<include> または <exclude> のパターン チェックに成功する必要がある。クラスが <include> または <exclude> のパターン チェックに成功した場合でも、インスツルメントされるかどうかは、コンフィグレーション記述子で定義されている診断モニタによって決まる。ライブラリ内にあるアプリケーション スコープの代理モニタには、あらかじめ定義されている独自のクラスおよびポイントカットがある。カスタム モニタでは、独自のポイントカット式を指定する。そのため、<include> または <exclude> のパターン チェックに成功しても、クラスはインスツルメントされない場合がある。

注意 : インスツルメンテーションは、クラスのロード時にアプリケーションに挿入される。サイズの大きなアプリケーションを頻繁にロードする環境では、<include> または <exclude> 要素をうまく使えば、利便性の向上を期待できる。小さなアプリケーションや、中規模または大規模のアプリケーションでも頻繁にはロードしない場合は、この要素を無視しても構わない。

<exclude>
インスツルメントされたコードを挿入できないクラスのリストを指定する要素 (省略可能)。ワイルドカード (*) を使用可能。複数の <exclude> 要素を指定できる。指定した場合、<exclude> パターンに一致するクラスはインスツルメントされない。
アプリケーション スコープのインスツルメンテーションの場合にのみ有効。上記の <include> の説明を参照。

<wldf-instrumentation-monitor> XML 要素

診断モニタは <wldf-instrumentation-monitor> 要素で定義されます。<wldf-instrumentation-monitor> 要素は、サーバ スコープのインスツルメンテーションの DIAG_MODULE.xml 記述子またはアプリケーション スコープのインスツルメンテーションの META-INF/weblogic-diagnostics.xml 記述子における <instrumentation> 要素の子要素です。

次のフラグメントは、アプリケーションの代理モニタおよびカスタム モニタのコンフィグレーションを示しています (サーバ スコープのインスツルメンテーションの場合は、アプリケーション スコープのモニタをサーバ スコープのモニタに置き換えれば、このフラグメントを変更できます)。

<instrumentation>
   <enabled>true</enabled>
      <wldf-instrumentation-monitor>
       <name>Servlet_Before_Service</name>
       <enabled>true</enabled>
       <dye-mask>USER1</dye-mask>
       <dye-filtering-enabled>true</dye-filtering-enabled>
       <action>TraceAction</action>
     </wldf-instrumentation-monitor>
     <wldf-instrumentation-monitor>
       <name>MyCustomMonitor</name>
       <enabled>true</enabled>
       <action>TraceAction</action>
       <location-type>before</location-type>
          <pointcut>call( * com.foo.bar.* get*(...));</pointcut>
     </wldf-instrumentation-monitor>
</instrumentation>

ここでは、Servlet_Before_Service モニタは仕分けマスクを設定しており、仕分けフィルタが有効になっています。これは、インスツルメンテーションがサーバ レベルで有効になっており、DyeInjection モニタが有効化されて適切にコンフィグレーションされている場合にのみ役に立ちます。DyeInjection モニタのコンフィグレーションについては、「診断コンテキストを管理するための DyeInjection モニタのコンフィグレーション」を参照してください。

表 10-3 に、<wldf-instrumentation-monitor> 要素の説明を示します。

表 10-3 DIAG_MODULE.xml ファイルまたは weblogic-diagnostics.xml ファイル内の <wldf-instrumentation-monitor> XML 要素
要素
説明
<wldf-instrumentation-monitor>
診断モニタのコンフィグレーションを開始する要素。
<enabled>
true の場合、モニタは有効。false の場合、モニタは無効。各モニタを個別に有効または無効にできる。デフォルト値は true
<name>
モニタの名前。標準モニタと代理モニタの場合は、「WLDF インスツルメンテーション ライブラリ」であらかじめ定義されているモニタの名前を使用する。カスタム モニタの場合は、モニタを識別する任意の文字列を使用可能。カスタム モニタの名前はユニークでなければならない。つまり、ライブラリ内の他のモニタと名前が重複することはできない。
<description>
モニタを説明する要素 (省略可能)。
<action>
代理モニタとカスタム モニタに適用される要素 (省略可能)。アクションを 1 つ以上指定しない場合、モニタは情報を生成しない。複数の <action> 要素を指定できる。アクションは、モニタのタイプに対応している必要がある。代理モニタとカスタム モニタ用にあらかじめ定義されているアクションのリストについては、「WLDF インスツルメンテーション ライブラリ」を参照。
<dye-filtering-enabled>
省略可能な要素。true の場合、そのモニタで仕分けフィルタが有効になる。false の場合、仕分けフィルタは無効。仕分けフィルタがサーバ レベルで無効の場合、個別のモニタに対して仕分けフィルタを有効にしても、フィルタ処理は実行されない。デフォルト値は false
<dye-mask>
省略可能な要素。仕分けフィルタが有効になっている場合、仕分けマスクは、診断コンテキスト内の値と比較して、アクションを起こすかどうかを決定する。仕分けおよび仕分けフィルタの詳細については、「診断コンテキストを管理するための DyeInjection モニタのコンフィグレーション」を参照。
<properties>
省略可能な要素。仕分けフラグ用に name=value のペアを設定する。
現在は DyeInjection モニタにのみ適用される。
<location-type>
beforeafteraround のいずれかの値を持つ要素 (省略可能)。この要素によって、ポイントカットを基準にアクションがトリガされるタイミング (ポイントカットの前でトリガされるか、ポイントカットの後でトリガされるか、ポイントカットの前後でトリガされるか) が決まる。
カスタム モニタの場合にのみ有効。標準モニタおよび代理モニタでは、この値はあらかじめ定義されている。カスタム モニタでは、診断ロケーションの種類とポイントカットを定義する必要がある。
<pointcut>
省略可能な要素。ポイントカット要素には、診断コードが挿入されるジョインポイントを定義する式が格納される。
カスタム モニタの場合にのみ有効。標準モニタおよび代理モニタでは、この値はあらかじめ定義されている。カスタム モニタでは、診断ロケーションの種類とポイントカットを定義する必要がある。
ポイントカットの構文については、「カスタム モニタのポイントカットの定義」を参照。
<include>
インスツルメントされたコードを挿入できるクラスのリストを指定する要素 (省略可能)。ワイルドカード (*) を使用可能。複数の <include> 要素を指定できる。指定した場合、インスツルメンテーションの対象となるには、クラスは <include> パターンに一致する必要がある。
アプリケーション スコープのインスツルメンテーションの場合にのみ有効。<include> または <exclude> パターンを指定すると、親 <wldf-instrumentation-monitor> 要素で定義されるモニタにのみ適用される。

注意 : インスツルメントされたアプリケーション スコープ全体に対して <include> パターンおよび <exclude> パターンを指定することもできる。表 10-2<include><exclude> の項目を参照。

クラスがロードされると、インスツルメンテーション コードを挿入する前に、<include> または <exclude> のパターン チェックに成功する必要がある。クラスが <include> または <exclude> のパターン チェックに成功した場合でも、インスツルメントされるかどうかは、コンフィグレーション記述子で定義されている診断モニタによって決まる。ライブラリ内にあるアプリケーション スコープの代理モニタには、あらかじめ定義されている独自のクラスおよびポイントカットがある。カスタム モニタでは、独自のポイントカット式を指定する。そのため、<include> または <exclude> のパターン チェックに成功しても、クラスはインスツルメントされない場合がある。

注意 : インスツルメンテーションは、クラスのロード時にアプリケーションに挿入される。サイズの大きなアプリケーションを頻繁にロードする環境では、<include> または <exclude> 要素をうまく使えば、利便性の向上を期待できる。小さなアプリケーションや、中規模または大規模のアプリケーションでも頻繁にはロードしない場合は、この要素を無視しても構わない。

<exclude>
インスツルメントされたコードを挿入できないクラスのリストを指定する要素 (省略可能)。ワイルドカード (*) を使用可能。複数の <exclude> 要素を指定できる。指定した場合、<exclude> パターンに一致するクラスはインスツルメントされない。
アプリケーション スコープのインスツルメンテーションの診断モニタにのみ有効。上記の <include> の説明を参照。

<dye-filtering-enabled><dye-mask> については、さらに以下の情報があります。

したがって、仕分けフィルタのメカニズムを使用すると、モニタは特定の要求に対してのみ診断アクションを実行でき、それによって他の要求の処理が遅くなることはありません。診断コンテキストおよび仕分けベクトルの詳細については、「診断コンテキストを管理するための DyeInjection モニタのコンフィグレーション」を参照してください。

各モニタ タイプへの <wldf-instrumentation-monitor> の XML 要素のマッピング

表 10-4 に、どの <wldf-instrumentation-monitor> 要素がどのモニタに対応しているかを示します。

表 10-4 各モニタ タイプへのインスツルメンテーション XML 要素のマッピング
要素
標準
代理
カスタム
<wldf-instrumentation-monitor>
X
X
X
<name>
X
X
X
<description>
X
X
X
<enabled>
X
X
X
<action>
 
X
X
<dye-filtering-enabled>
 
X
X
<dye-mask>
 
X
X
<properties>
X1
   
<location-type>
   
X
<pointcut>
   
X

1現在は、DyeInjection モニタで、仕分けフラグに name=value ペアを設定する場合にのみ使用されます。

 


サーバ スコープのインスツルメンテーションのコンフィグレーション

サーバ レベルでインスツルメンテーションを有効にし、サーバ スコープのモニタをコンフィグレーションするには、以下の手順を実行します。

  1. 作成する WLDF システム リソースの数を決定します。
  2. 1 つのドメインで複数の DIAG_MODULE.xml 診断記述子ファイルを使用できますが、サーバ (またはクラスタ) ごとにデプロイできる診断記述子ファイルは一度に 1 つだけです。複数のファイルを作成する理由は、柔軟性です。たとえば、DOMAIN_NAME/config/diagnostics ディレクトリに 5 つの診断記述子ファイルを保存し、ファイルごとに異なるインスツルメンテーション (に加え、おそらくハーベスタおよび監視と通知) のコンフィグレーションを格納できます。次に、特定の状況でどのモニタをアクティブにするかに基づいて、サーバにファイルをデプロイします。

  3. どのサーバ スコープ モニタをコンフィグレーションに含めるかを決めます。
    • サーバまたはそのサーバにデプロイされているものに対して仕分けフィルタを使用する場合は、DyeInjection モニタをコンフィグレーションします。
    • 1 つまたは複数のサーバ スコープ代理モニタを使用する場合は、どのモニタを使用し、各モニタにどのアクションを関連付けるかを決めます。
  4. コンフィグレーション ファイル (複数可) を作成してコンフィグレーションします。
    • Administration Console を使用して代理モニタ用の DIAG_MODULE.xml ファイルを作成する場合 (推奨手順)、コンソールには、そのモニタに対応するアクションのみが表示されます。エディタまたは WebLogic Scripting Tool (WLST) でコンフィグレーション ファイルを作成する場合は、アクションとモニタを正しく関連付ける必要があります。
    • config.xml ファイルのコンフィグレーションの詳細については、『ドメインのコンフィグレーションについて』の「ドメイン コンフィグレーション ファイル」を参照してください。
  5. デプロイメント記述子ファイルを検証してデプロイします。サーバ スコープのインスツルメンテーションの場合は、サーバの実行中にモニタを追加および削除したり、モニタを有効または無効にしたりできます。

コード リスト 10-1 に、サーバ スコープ インスツルメンテーションのコンフィグレーション ファイルのサンプルを示します。このサンプルでは、インスツルメンテーションを有効にし、DyeInjection 標準モニタおよび Connector_Before_Work 代理モニタをコンフィグレーションします。1 つの <instrumentation> 要素に、モジュールのすべてのインスツルメンテーションのコンフィグレーションが格納されます。各診断モニタは、個別の <wldf-instrumentation-monitor> 要素で定義されます。

コード リスト 10-1 サーバ スコープのインスツルメンテーションのサンプル (DIAG_MODULE.xml 内)
<wldf-resource xmlns="http://www.bea.com/ns/weblogic/90/diagnostics" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
   xsi:schemaLocation="http://www.bea.com/ns/weblogic/90/diagnostics.xsd">
  <instrumentation>
    <enabled>true</enabled>
    <wldf-instrumentation-monitor>
      <name>DyeInjection</name>
      <description>Inject USER1 and ADDR1 dyes</description>
      <enabled>true</enabled>
      <properties>USER1=weblogic
       ADDR1=127.0.0.1</properties>
    </wldf-instrumentation-monitor>
    <wldf-instrumentation-monitor>
      <name>Connector_Before_Work</name>
      <enabled>true</enabled>
      <action>TraceAction</action>
      <dye-filtering-enabled>true</dye-filtering-enabled>
      <dye-mask>USER1</dye-mask>
    </wldf-instrumentation-monitor>
  </instrumentation>
</wldf-resource>

 


アプリケーション スコープのインスツルメンテーションのコンフィグレーション

アプリケーション レベルでは、WLDF のインスツルメンテーションは、デプロイ可能なモジュールとしてコンフィグレーションされます。このモジュールは、アプリケーションの一部としてデプロイされます。

以下の節では、アプリケーション スコープのインスツルメンテーションのコンフィグレーションで必要な情報について説明します。

システム スコープのインスツルメンテーションとアプリケーション スコープのインスツルメンテーションの比較

アプリケーションのインスツルメントは、システム レベルでのインスツルメントと似ていますが、以下の点が違います。

アプリケーション スコープ インスツルメンテーションの XML 記述子は、サーバ スコープ インスツルメンテーションの場合と同じ方法で定義されます。WLDF インスツルメンテーション ライブラリで使用可能な代理モニタと診断アクションを使用すると、アプリケーション専用のインスツルメンテーションをコンフィグレーションできます。また、ユーザ独自のカスタム モニタも作成できますが、カスタム モニタにアタッチする診断アクションは、WLDF インスツルメンテーション ライブラリから指定する必要があります。

表 10-5 では、システム モジュールとアプリケーション モジュールの機能とスコープを比較します。

表 10-5 システム モジュールとアプリケーション モジュールの比較
モジュールの種類
オブジェクトの動的な追加/削除
コンソールでのオブジェクトの追加/削除
JMX でのリモート変更
JSR-88 での変更 (非リモート)
コンソールでの変更
システム モジュール
不可
可 - JMX から
アプリケーション モジュール
可 (ホットスワップが有効な場合)
不可 (ホットスワップが有効でない場合。モジュールを再デプロイする必要がある)
不可
可 - プランから

アプリケーションのインスツルメントに必要な手順の概要

アプリケーションの診断モニタを実装するには、以下の手順を実行します。

  1. サーバでインスツルメンテーションが有効になっていることを確認します。「サーバ スコープのインスツルメンテーションのコンフィグレーション」を参照してください。
  2. 適切な形式の META-INF/weblogic-diagnostics.xml 記述子ファイルをアプリケーション用に作成します。
  3. アプリケーション アーカイブに記述子ファイルを格納します。
  4. アプリケーションをデプロイします。「WLDF アプリケーション モジュールのデプロイメント」を参照してください。

代理モニタの記述子ファイルの作成

次に、アプリケーション スコープの代理モニタ用に整形された META-INF/weblogic-diagnostics.xml ファイルの例を示します。

<wldf-resource xmlns="http://www.bea.com/ns/weblogic/90/diagnostics" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.bea.com/ns/weblogic/90/diagnostics.xsd">
   <instrumentation>
      <enabled>true</enabled>
      <wldf-instrumentation-monitor>
         <name>Servlet_Before_Service</name>
         <enabled>true</enabled>
         <dye-mask>USER1</dye-mask>
         <dye-filtering-enabled>true</dye-filtering-enabled>
         <action>TraceAction</action>
      </wldf-instrumentation-monitor>
   </instrumentation>
</wldf-resource>

Servlet_Before_Service モニタは、WLDF モニタ ライブラリから選択したアプリケーション スコープのモニタです。複数のサーブレット メソッドまたは JSP メソッドの入り口にジョインポイントを設定するポイントカットを使用してハードコード化されています。アプリケーションは仕分けフィルタを有効にし、仕分けマスクに USER1 フラグを設定しているので、TraceAction アクションは、アプリケーションに渡される診断コンテキスト内の仕分けベクトルに USER1 フラグ セットがある場合にのみ呼び出されます (仕分けベクトルは、DyeInjection モニタを介してシステム レベルで設定されます)。したがって、このアプリケーションの Servlet_Before_Service モニタは、仕分けベクトルを確認し、USER1 フラグ セットを見つけるまで、基本的に何も行いません。このフィルタ処理を実行すれば、生成される診断データの量を減らし、その時点で管理者にとって意味のあるデータのみを生成することができます。

カスタム モニタの記述子ファイルの作成

次に、カスタム モニタの整形式 META-INF/weblogic-diagnostics.xml ファイルの例を示します。

コード リスト 10-2 カスタム モニタのコンフィグレーションのサンプル (DIAG_MODULE.xml 内)
<wldf-resource xmlns="http://www.bea.com/ns/weblogic/90/diagnostics" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.bea.com/ns/weblogic/90/diagnostics.xsd">
 <instrumentation>
      <enabled>true</enabled>
      <wldf-instrumentation-monitor>
         <name>MyCustomMonitor</name>
         <enabled>true</enabled>
         <action>TraceAction</action>
         <location-type>before</location-type>
         <pointcut>call( * com.foo.bar.* get* (...));</pointcut>
      </wldf-instrumentation-monitor>
   </instrumentation>
</wldf-resource>

カスタム モニタの場合、<name> は、開発者が指定した任意の文字列です。このモニタはカスタムなので、アクションの呼び出し用にあらかじめ定義された診断ロケーションはありません。記述子ファイルでは、診断ロケーションの種類とポイントカット式を定義する必要があります。この例では、TraceAction アクションは、ポイントカット式で定義されたメソッドが呼び出される前 (<location-type>before</location-type>) に呼び出されます。表 10-6 では、コード リスト 10-2 のポイントカット式の解析方法を示しています (ワイルドカードの使用に注意してください)。

表 10-6 ポイントカット式のサンプルの説明
ポイントカット式
説明
call( * com.foo.bar.* get* (...))
call( ) : ジョインポイントがこのポイントカット式の残りで定義されているメソッドが呼び出されたときに、定義されたアクションをトリガする。
call( * com.foo.bar.* get* (...))
*: 戻り値。ワイルドカードは、メソッドの戻り値の型を問わないことを示す。
call( * com.foo.bar.* get* (...))
com.foo.bar.*: com.foo.bar クラスとそのサブパッケージのメソッドが当てはまる。
call( * com.foo.bar.* get* (...))
get* : get という文字列で始まる任意のメソッドが当てはまる。
call( * com.foo.bar.* get* (...))
(...) : 省略記号は、メソッドで指定できる引数の数に制限がないことを示す。

このポイントカット式は、パッケージ com.foo.bar とそのサブパッケージ内にあるすべてのクラスの get*() を一致対象にします。メソッドは、void を含む任意の型の値を返すことができます。また、任意の型の引数を、数に制限なく持つことができます。インスツルメンテーション コードは、これらのメソッドの前に挿入され、そのメソッドが呼び出される直前に、TraceAction アクションが呼び出されます。

ポイントカットの定義に使用する文法の詳細については、「カスタム モニタのポイントカットの定義」を参照してください。

カスタム モニタのポイントカットの定義

カスタム モニタでは、診断アクションの呼び出し場所を指定するポイントカット式をユーザが作成するので、代理モニタよりも柔軟な操作が可能です。代理モニタの場合は、アクション ライブラリからアクションを選択する必要があります。

ジョインポイントは、精密に定義された、プログラム内の固有の位置です。ポイントカットは、ジョインポイントのセットを指定する式です。この節では、以下のポイントカット構文を使用して、ポイントカットの式を定義する方法について説明します。

カスタム モニタでは 2 種類のポイントカットを指定できます。

ポイントカット式を定義する構文は次のとおりです。

<pointcut> ::= [(] <joinpoint> [ <conditional> <joinpoint> ] [)]
<joinpoint> ::= [(] <execution-joinpoint> | <call-joinpoint>
<execution-pointcut> ::= execution ( <access-type> <joinpoint-signature> )
<callsite-pointcut> ::= call ( <joinpoint-signature> )
<joinpoint-signature> ::= <method-signature>
<method-signature> ::= <return-type> <class-type>.<method-name>
   ( <parameter-list> ) 
<return-type> ::= <class-type> | <primitive-type>
<parameter-list> ::= <parameter-type> [, <parameter-type>] *
<parameter-type> ::= <class-type> | <primitive-type> | <elipsis>
<class-type> ::= [<use-class-hierarchy>] ?    <class-or-interface-name-pattern>
<conditional> ::= AND [NOT] | OR [NOT] | NOT
<use-class-hierarchy> ::= '+'
<elipsis> ::= '...'

次のルールが適用されます。

たとえば、以下のポイントカットは、パッケージ com.foo.bar とそのサブパッケージ内にあるすべてのクラスの、初期化された全パブリック メソッドのメソッド実行を一致対象にします。初期化されたメソッドは、void を含む任意の型の値を返すことができます。また、任意の型の引数を、数に制限なく持つことができます。

  execution(public * com.foo.bar.* initialize(...))

以下のポイントカットは、com.foo.bar.MyInterface インタフェース (または、たまたまクラスだった場合はサブクラス) を直接または間接的に実装するすべてのクラスにあるメソッド呼び出し (呼び出しサイト) を一致対象にします。名前が get で始まり、int 値を返すパブリック メソッドが対象になります。また、メソッドは、java.lang.String 型の引数 1 つを受け付けるものでなければなりません。

call(int +com.foo.bar.MyInterface get*(java.lang.String))

以下の例では、ブール演算子を使用してポイントカット式ツリーを構築する方法を示します。

  call(void com.foo.bar.* set*(java.lang.String)) OR
  call( * com.foo.bar.* get*())

以下の例では、前の式ツリーが、コンフィグレーション ファイルでどのように <pointcut> 要素として変換されるかを示します。

  <pointcut>call(void com.foo.bar.* set*(java.lang.String)) OR
  call( * com.foo.bar.* get*())</pointcut>

  ページの先頭       前  次