Spec-Zone.ru › OpenJDK 27

Класс 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
См. также:
  • SettingDefinition

Краткое описание конструкторов

SettingControl()
Модификатор Конструктор Описание
protected
Конструктор для вызова конструкторами подклассов.

Краткое описание методов

Модификатор и тип Метод Описание
abstract String combine(Set<String> settingValues)
Объединяет значения настроек всех выполняющихся записей в одно значение, если одновременно выполняется несколько записей.
abstract String getValue()
Возвращает используемое в данный момент значение этой настройки, не null.
abstract void setValue(String settingValue)
Задает значение этой настройки.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли другой объект этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Переводит текущий поток в состояние ожидания до пробуждения, обычно в результате уведомления или прерывания.
final void wait(long timeoutMillis)
Переводит текущий поток в состояние ожидания до пробуждения, обычно в результате уведомления или прерывания, либо до истечения определенного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Переводит текущий поток в состояние ожидания до пробуждения, обычно в результате уведомления или прерывания, либо до истечения определенного промежутка реального времени.

Подробное описание конструкторов

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", поскольку все записи получат как минимум все запрошенные данные.

Параметры:
settingValues — набор значений, не null
Возвращает:
используемое значение, не null

setValue

public abstract void setValue(String settingValue)
Задает значение этой настройки.

Если значение настройки недопустимо для этой настройки, метод не выбрасывает исключение. Вместо этого значение игнорируется.

Параметры:
settingValue — строковое значение, не null

getValue

public abstract String getValue()
Возвращает используемое в данный момент значение этой настройки, не null.

Значение, возвращаемое этим методом, допустимо в качестве аргумента методов setValue(String) и combine(Set).

Этот метод вызывается при регистрации события для получения значения по умолчанию. Поэтому важно, чтобы допустимое значение можно было вернуть сразу после создания экземпляра этого класса. Возвращать null недопустимо.

Возвращает:
значение настройки, не null

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API