Spec-Zone.ru › OpenJDK 25

Интерфейс CompositeDataView

Все известные классы, реализующие интерфейс:
GarbageCollectionNotificationInfo, GcInfo
public interface CompositeDataView

Класс Java может реализовать этот интерфейс, чтобы указать, как его следует преобразовать в CompositeData с помощью платформы MXBean.

Обычно этот интерфейс используют, добавляя дополнительные элементы в CompositeData к тем, которые объявлены в CompositeType, предоставленном платформой MXBean. Для этого необходимо создать другой CompositeType, содержащий все те же элементы и дополнительные элементы.

Например, предположим, что у вас есть класс Measure, состоящий из строки с именем units и value, которая является либо long, либо double. Он может выглядеть так:

public class Measure implements CompositeDataView {
    private String units;
    private Number value; // a Long or a Double

    public Measure(String units, Number value) {
        this.units = units;
        this.value = value;
    }

    public static Measure from(CompositeData cd) {
        return new Measure((String) cd.get("units"),
                           (Number) cd.get("value"));
    }

    public String getUnits() {
        return units;
    }

    // Can't be called getValue(), because Number is not a valid type
    // in an MXBean, so the implied "value" property would be rejected.
    public Number _getValue() {
        return value;
    }

    public CompositeData toCompositeData(CompositeType ct) {
        try {
            List<String> itemNames = new ArrayList<String>(ct.keySet());
            List<String> itemDescriptions = new ArrayList<String>();
            List<OpenType<?>> itemTypes = new ArrayList<OpenType<?>>();
            for (String item : itemNames) {
                itemDescriptions.add(ct.getDescription(item));
                itemTypes.add(ct.getType(item));
            }
            itemNames.add("value");
            itemDescriptions.add("long or double value of the measure");
            itemTypes.add((value instanceof Long) ? SimpleType.LONG :
                          SimpleType.DOUBLE);
            CompositeType xct =
                new CompositeType(ct.getTypeName(),
                                  ct.getDescription(),
                                  itemNames.toArray(new String[0]),
                                  itemDescriptions.toArray(new String[0]),
                                  itemTypes.toArray(new OpenType<?>[0]));
            CompositeData cd =
                new CompositeDataSupport(xct,
                                         new String[] {"units", "value"},
                                         new Object[] {units, value});
            assert ct.isValue(cd);  // check we've done it right
            return cd;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

В openType поля CompositeType объекта Descriptor для атрибута или операции этого типа будет отображаться только элемент units, но фактически созданный CompositeData будет содержать и units, и value.

С версии:
1.6
См. также:
  • MXBean

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

Модификатор и тип Метод Описание
CompositeData toCompositeData(CompositeType ct)
Возвращает CompositeData, соответствующий значениям этого объекта.

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

toCompositeData

CompositeData toCompositeData(CompositeType ct)

Возвращает CompositeData, соответствующий значениям этого объекта. Возвращаемое значение обычно должно быть экземпляром CompositeDataSupport или класса, сериализуемого как CompositeDataSupport с помощью метода writeReplace. В противном случае удалённый клиент, получивший объект, может не иметь возможности восстановить его.

Параметры:
ct — ожидаемый CompositeType возвращаемого значения. Если возвращаемое значение — cd, то cd.getCompositeType().equals(ct) должно иметь значение true. Обычно это связано с тем, что cd — это CompositeDataSupport, созданный с ct в качестве CompositeType.
Возвращает:
CompositeData.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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/java.management/javax/management/openmbean/CompositeDataView.html

Spec-Zone.ru

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