クラスSettingControl

java.lang.Object
jdk.jfr.SettingControl

public abstract class SettingControl extends Object
設定コントロールを作成するための基本クラス。

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

final class RegExpControl extends SettingControl {
    private static final String DEFAULT_VALUE = ".*";
    private Pattern pattern = Pattern.compile(DEFAULT_VALUE);

    @Override
    public String combine(Set<String> values) {
        List<String> valid = new ArrayList<>();
        for (String value : values) {
            try {
                Pattern.compile(value);
                valid.add(value);
            } catch (PatternSyntaxException pse) {
                // Ignore invalid patterns
            }
        }
        if (valid.isEmpty()) {
            return DEFAULT_VALUE;
        }
        if (valid.size() == 1) {
            return valid.getFirst();
        }
        return "(" + String.join(")|(", valid) + ")";
    }

    @Override
    public void setValue(String value) {
        try {
            this.pattern = Pattern.compile(value);
        } catch (PatternSyntaxException pse) {
            // Ignore invalid patterns
        }
    }

    @Override
    public String getValue() {
        return pattern.pattern();
    }

    public boolean 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
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    サブクラス・コンストラクタによる呼び出しのコンストラクタです。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    abstract String
    combine(Set<String> settingValues)
    複数のレコーディングが同時に実行される場合に、実行中のすべてのレコーディングの設定値を1つの値に結合します。
    abstract String
    nullではなく、この設定に現在使用されている値を返します。
    abstract void
    setValue(String settingValue)
    この設定の値を設定します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • コンストラクタの詳細

    • 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"の値と同じです。

      パラメータ:
      settingValues - nullではなく値のセット
      戻り値:
      nullではなく、使用する値
    • setValue

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

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

      パラメータ:
      settingValue - 文字列値(nullではない)
    • getValue

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

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

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

      戻り値:
      nullではなく、設定値