モジュール 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>)-methodの目的は、複数の記録が同時に行われている場合に使用する値を解決することです。

    設定コントロールには、イベントの登録時に呼び出されるデフォルトのコンストラクタが必要です。

    イベントで設定コントロールを使用するには、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"に構成ファイルを指定するか、プログラムで次のように"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を返すことはありません。 この設定コントロールで値が有効でない場合は、その値を無視する必要があります。

        例、

        設定コントロールがしきい値を表し、設定値"10 ms""8 s" "1 ms"で同時に3つの記録が実行されている場合、すべての記録が少なくともリクエストしたすべてのデータを取得するため、このメソッドは"1 ms"を返します。

        設定コントロールが名前のセットを表しており、設定値"ホッパー、クヌス"と"クヌス、ダイクストラ"で同時に2つの記録が実行されている場合、すべての名前が受け入れられるため、戻り値は"ホッパー、クヌス、ダイクストラ"でなければなりません。

        設定コントロールがブール条件を表し、同時に4つの記録が以下の値 "true", "false", "false", "incorrect"で実行されている場合、すべての記録が少なくともリクエストされたすべてのデータを取得するため、このメソッドは"true"を返す必要があります。

        定義:
        クラス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ではなく、設定値