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

クラスSettingControl

java.lang.Object
jdk.jfr.SettingControl

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

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

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 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
関連項目: