Интерфейс 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);
         }
     }
 }

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

С:
1.6
См. также:
MXBean

Методы

Модификатор и типМетодОписание
CompositeDatatoCompositeData​(CompositeType ct)

Возвращает CompositeData, соответствующий значениям в этом объекте.

Методы

toCompositeData(javax.management.openmbean.CompositeType)

CompositeData toCompositeData(CompositeType ct)

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

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

© 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/java.management/javax/management/openmbean/CompositeDataView.html

Spec-Zone .ru
спецификации, руководства, описания, API