Класс SettingControl
- 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>) вызывается для определения значения, которое следует использовать, когда одновременно выполняется несколько записей.
Элемент управления настройками должен иметь конструктор по умолчанию, который можно вызвать при регистрации события.
Для использования элемента управления настройками с событием добавьте метод, который возвращает значение 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();
- Since:
- 9
- See Also:
SettingDefinition
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
SettingControl() |
Конструктор для вызова конструкторами подклассов. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract String |
combine(Set<String> settingValues) |
Объединяет значения настроек для всех работающих записей в одно значение, когда одновременно выполняется несколько записей. |
abstract String |
getValue() |
Возвращает текущее используемое значение для этой настройки, не |
abstract void |
setValue(String settingValue) |
Устанавливает значение для этой настройки. |
Методы, объявленные в классе jdk.jfr.internal.Control
clone
Методы, объявленные в классе java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Конструкторы
SettingControl
protected SettingControl()
Конструктор для вызова конструкторами подклассов.
Методы
combine
public abstract String combine(Set<String> settingValues)
Объединяет значения настроек для всех работающих записей в одно значение, когда одновременно выполняется несколько записей.
Семантика объединения значений настроек зависит от реализованного элемента управления настройками, но все записи должны получить по крайней мере все запрошенные события.
Этот метод не должен иметь побочных эффектов, поскольку вызывающая сторона может кэшировать значения. Этот метод никогда не должен возвращать null или выбрасывать исключение. Если значение недействительно для данного элемента управления настройками, это значение должно быть проигнорировано.
Примеры:
Если элемент управления настройками представляет собой порог, и три записи выполняются одновременно со значениями настроек "10 ms", "8 s", и "1 ms", этот метод возвращает "1 ms", потому что это означает, что все записи получают по крайней мере все запрашиваемые данные.
Если элемент управления настройками представляет собой набор имен, и две записи выполняются одновременно со значениями настроек "Smith, Jones" и "Jones,
Williams", возвращаемое значение равно "Smith, Jones, Williams", потому что все имена будут приняты.
Если элемент управления настройками представляет собой булево условие, и четыре записи выполняются одновременно со значениями "true", "false", "false", и "incorrect", этот метод возвращает "true", потому что все записи получают по крайней мере все запрашиваемые данные.
- Specified by:
-
combineв классеjdk.jfr.internal.Control - Parameters:
-
settingValues- набор значений, неnull - Returns:
- значение для использования, не
null
setValue
public abstract void setValue(String settingValue)
Устанавливает значение для этой настройки.
Если значение настройки недействительно для этого элемента управления настройками, этот метод не генерирует исключение. Вместо этого значение игнорируется.
- Specified by:
-
setValueв классеjdk.jfr.internal.Control - Parameters:
-
settingValue- строковое значение, неnull
getValue
public abstract String getValue()
Возвращает текущее используемое значение для этой настройки, не null.
Возвращаемое этим методом значение допустимо в качестве аргумента для метода setValue(String) и метода combine(Set).
Этот метод вызывается при регистрации события для получения значения по умолчанию. Поэтому важно, чтобы действительное значение можно было вернуть сразу после создания экземпляра этого класса. Недопустимо возвращать null.
- Specified by:
-
getValueв классеjdk.jfr.internal.Control - Returns:
- значение настройки, не
null
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/jdk.jfr/jdk/jfr/SettingControl.html