Spec-Zone.ru › OpenJDK 25

Класс 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

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

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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/jdk.jfr/jdk/jfr/SettingControl.html

Spec-Zone.ru

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