Класс EventFactory
- java.lang.Object
-
- jdk.jfr.EventFactory
public final class EventFactory extends Object
Класс для определения события во время выполнения.
Настоятельно рекомендуется определять событие во время компиляции, если структура поля известна, чтобы виртуальная машина Java (JVM) могла оптимизировать код, возможно, удалить всю инструментацию, если Flight Recorder неактивен или если параметр включения для этого события установлен в false.
Чтобы определить событие во время компиляции, см. Event.
Следующий пример демонстрирует, как реализовать динамический Event класс.
List<ValueDescriptor> fields = new ArrayList<>();
List<AnnotationElement> messageAnnotations = Collections.singletonList(new AnnotationElement(Label.class, "Message"));
fields.add(new ValueDescriptor(String.class, "message", messageAnnotations));
List<AnnotationElement> numberAnnotations = Collections.singletonList(new AnnotationElement(Label.class, "Number"));
fields.add(new ValueDescriptor(int.class, "number", numberAnnotations));
String[] category = { "Example", "Getting Started" };
List<AnnotationElement> eventAnnotations = new ArrayList<>();
eventAnnotations.add(new AnnotationElement(Name.class, "com.example.HelloWorld"));
eventAnnotations.add(new AnnotationElement(Label.class, "Hello World"));
eventAnnotations.add(new AnnotationElement(Description.class, "Helps programmer getting started"));
eventAnnotations.add(new AnnotationElement(Category.class, category));
EventFactory f = EventFactory.create(eventAnnotations, fields);
Event event = f.newEvent();
event.set(0, "hello, world!");
event.set(1, 4711);
event.commit();
- Since:
- 9
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static EventFactory |
create(List<AnnotationElement> annotationElements,
List<ValueDescriptor> fields) |
Создает объект |
EventType |
getEventType() |
Возвращает тип события, связанный с этим фабрикой событий. |
Event |
newEvent() |
Инициализирует событие, чтобы его можно было заполнить данными и записать в систему Flight Recorder. |
void |
register() |
Регистрирует не зарегистрированное событие. |
void |
unregister() |
Отменяет регистрацию события, связанного с этим фабрикой событий. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Методы
create
public static EventFactory create(List<AnnotationElement> annotationElements,
List<ValueDescriptor> fields)
Создает объект EventFactory.
Порядок описателей значений определяет индекс, используемый при установке значений события.
- Parameters:
-
annotationElements- список элементов аннотации, описывающих аннотации события, неnull -
fields- список описателей, описывающих поля события, неnull - Returns:
- фабрика событий, не
null - Throws:
-
IllegalArgumentException- если входной данные некорректны. Например, входные данные могут быть некорректными, если тип или имя поля некорректны в языке Java или элемент аннотации ссылается на тип, который не может быть найден. -
SecurityException- если менеджер безопасности существует, и у вызывающего объекта нетFlightRecorderPermission("registerEvent") - See Also:
Event.set(int, Object)
newEvent
public Event newEvent()
Инициализирует событие, чтобы его можно было заполнить данными и записать в систему Flight Recorder.
Используйте метод Event.set(int, Object) для установки значения.
- Returns:
- экземпляр события, не
null
getEventType
public EventType getEventType()
Возвращает тип события, связанный с этой фабрикой событий.
- Returns:
- тип события, связанный с этой фабрикой событий, не
null - Throws:
-
IllegalStateException- если фабрика событий создана с аннотациейRegistered(false), и класс события не зарегистрирован вручную до вызова этого метода
register
public void register()
Регистрирует не зарегистрированное событие.
По умолчанию, класс события, связанный с этой фабрикой событий, регистрируется при создании фабрики событий, если у события нет аннотации Registered.
Зарегистрированный класс события может записывать данные в Flight Recorder, а метаданные о событиях можно получить, вызвав FlightRecorder.getEventTypes().
Если класс события, связанный с этим фабрикой событий, уже зарегистрирован, вызов этого метода игнорируется.
- Throws:
-
SecurityException- если менеджер безопасности существует, и у вызывающего объекта нетFlightRecorderPermission("registerEvent") - See Also:
-
Registered,FlightRecorder.register(Class)
unregister
public void unregister()
Отменяет регистрацию события, связанного с этой фабрикой событий.
Незарегистрированный класс события не может записывать данные в Flight Recorder, а метаданные о событиях нельзя получить, вызвав FlightRecorder.getEventTypes().
Если класс события, связанный с этим фабрикой событий, не зарегистрирован, вызов этого метода игнорируется.
- Throws:
-
SecurityException- если менеджер безопасности существует, и у вызывающего объекта нетFlightRecorderPermission("registerEvent") - See Also:
-
Registered,FlightRecorder.unregister(Class)
© 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/EventFactory.html