モジュール jdk.jfr
パッケージ jdk.jfr

クラスSettingControl


  • public abstract class SettingControl
    extends jdk.jfr.internal.Control
    設定コントロールを作成するための基本クラス。

    次の例は、正規表現の設定コントロールの内部実装を示しています。

     
     final class RegExpControl extends SettingControl {
       private Pattern pattern = Pattern.compile(".*");
    
       @Override
       public void setValue(String value) {
         this.pattern = Pattern.compile(value);
       }
    
       @Override
       public String combine(Set<String> values) {
         return String.join("|", values);
       }
    
       @Override
       public String getValue() {
         return pattern.toString();
       }
    
       public String matches(String s) {
         return pattern.matcher(s).find();
       }
     }
     
     
    setValue(String)getValue()およびcombine(Set<String>)メソッドは、値の変更時に起動されます。これは、通常、レコーディングの開始時または停止時に発生します。 combine(Set<String>)メソッドが呼び出され、複数のレコーディングが同実行されている場合に使用する値が解決されます。

    設定コントロールには、イベントの登録時に起動できるデフォルトのコンストラクタが必要です。

    イベントに設定コントロールを使用するには、boolean値を返すメソッドを追加し、その設定コントロールをパラメータとして取ります。 メソッドに@SettingDefinition注釈を付けます。 デフォルトでは、メソッド名が設定名として使用されますが、@Name注釈を使用して名前を明示的に設定できます。 このメソッドがtrueを返した場合、イベントはコミットされます。

    setValue(String)メソッドでは、イベントがコミットされるとすぐにチェックできる効率的なデータ構造を更新することをお薦めします。

    次の例は、前述の正規表現フィルタを使用するイベントの作成方法を示しています。

     
     abstract class HTTPRequest extends Event {
       @Label("Request URI")
       protected String uri;
    
       @Label("Servlet URI Filter")
       @SettingDefinition
       protected boolean uriFilter(RegExpControl regExp) {
         return regExp.matches(uri);
       }
     }
    
     @Label("HTTP Get Request")
     class HTTPGetRequest extends HTTPRequest {
     }
    
     @Label("HTTP Post Request")
     class HTTPPostRequest extends HTTPRequest {
     }
    
     class ExampleServlet extends HTTPServlet {
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
         HTTPGetRequest request = new HTTPGetRequest();
         request.begin();
         request.uri = req.getRequestURI();
         ...
         request.commit();
       }
    
       protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
         HTTPPostRequest request = new HTTPPostRequest();
         request.begin();
         request.uri = req.getRequestURI();
         ...
         request.commit();
       }
     }
     
     
    次の例は、指定した正規表現を使用して"uriFilter"設定を割り当てることによってイベントをフィルタ処理する方法を示しています。
     
     Recording r = new Recording();
     r.enable("HTTPGetRequest").with("uriFilter", "https://www.example.com/list/.*");
     r.enable("HTTPPostRequest").with("uriFilter", "https://www.example.com/login/.*");
     r.start();
     
     

    導入されたバージョン:
    9
    関連項目:
    SettingDefinition
    • コンストラクタのサマリー

      コンストラクタ 
      修飾子 コンストラクタ 説明
      protected SettingControl()
      サブクラス・コンストラクタによる呼び出しのコンストラクタです。
    • コンストラクタの詳細

      • SettingControl

        protected SettingControl()
        サブクラス・コンストラクタによる呼び出しのコンストラクタです。
    • メソッドの詳細

      • combine

        public abstract String combine​(Set<String> settingValues)
        複数のレコーディングが同時に実行される場合に、実行中のすべてのレコーディングの設定値を1つの値に結合します。

        設定値がどのように結合されるかのセマンティックは、実装されている設定コントロールによって決まりますが、すべてのレコーディングで、少なくともリクエストされたすべてのイベントが取得されます。

        コール元は値をキャッシュする場合があるため、このメソッドに副作用はありません。 このメソッドは、nullを返すことはありません。 この設定コントロールで値が有効でない場合は、その値を無視する必要があります。

        設定コントロールがしきい値を表し、3つのレコーディングが同時に実行されていて、設定値が"10 ms""8 s"および "1 ms"である場合、このメソッドはリクエストされたすべてのデータがすべてのレコーディングに含まれることを意味するため、"1 ms"を返します。

        設定コントロールが名前のセットを表し、2つのレコーディングが同時に実行されている場合、設定値が"Smith, Jones"および"Jones, Williams"であると、すべての名前が受け入れられるため、戻される値は"Smith, Jones, Williams"になります。

        設定コントロールがブール条件を表し、リクエストされたデータの少なくともすべてのレコーディングが取得されるため、同時に4つのレコーディングが実行され、"true""false""false"および"incorrect"の値と同じです。

        定義:
        クラスjdk.jfr.internal.Controlcombine
        パラメータ:
        settingValues - nullではなく値のセット
        戻り値:
        nullではなく、使用する値
      • setValue

        public abstract void setValue​(String settingValue)
        この設定の値を設定します。

        設定値が有効でない場合、このメソッドは例外をスローしません。 かわりに、値は無視されます。

        定義:
        クラスjdk.jfr.internal.ControlsetValue
        パラメータ:
        settingValue - 文字列値(nullではない)
      • getValue

        public abstract String getValue()
        nullではなく、この設定に現在使用されている値を返します。

        このメソッドから戻される値は、setValue(String)メソッドとcombine(Set)メソッドの両方に対する引数として有効です。

        このメソッドは、デフォルト値を取得するためにイベントが登録されると起動されます。 したがって、このクラスのインスタンスが作成された直後に有効な値を戻すことができます。 nullを返すことはできません。

        定義:
        クラスjdk.jfr.internal.ControlgetValue
        戻り値:
        nullではなく、設定値