- java.lang.Object
-
- jdk.jfr.internal.Control
-
- 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()
サブクラス・コンストラクタによる呼び出しのコンストラクタです。
-
-
-
メソッドの詳細
-
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.Control
のcombine
- パラメータ:
settingValues
-null
ではなく、値のセット- 戻り値:
null
ではなく、使用する値
-
setValue
public abstract void setValue(String settingValue)
この設定の値を設定します。この設定コントロールで設定値が有効でない場合、このメソッドは例外をスローしません。 代わりに、値は無視する必要があります。
- 定義:
- クラス
jdk.jfr.internal.Control
のsetValue
- パラメータ:
settingValue
- 文字列値、null
ではなく
-
getValue
public abstract String getValue()
null
ではなく、この設定に現在使用されている値を返します。このメソッドから返される値は、
setValue(String)
とcombine(Set)
の両方の引数として有効である必要があります。このメソッドは、イベントが登録されてデフォルト値を取得するときに呼び出されます。 したがって、このクラスのインスタンスが作成された直後に有効な値を返すことが重要です。
null
を返すことはできません- 定義:
- クラス
jdk.jfr.internal.Control
のgetValue
- 戻り値:
null
ではなく、設定値
-
-