インタフェースCompositeDataView

既知のすべての実装クラス:
GarbageCollectionNotificationInfo, GcInfo

public interface CompositeDataView

Javaクラスは、このインタフェースを実装することにより、MXBeanフレームワークを使ってCompositeDataに変換する方法を示すことができます。

このクラスの一般的な使用方法は、MXBeanフレームワークの提供するCompositeTypeで宣言される項目に加えて、補足項目をCompositeDataに追加することです。 このためには、同一の項目を持ち、かつ補足項目も持つ別のCompositeTypeを作成する必要があります。

たとえば、unitsという名前のStringと、longdoubleのいずれかであるvalueとで構成されるMeasureクラスを考えましょう。 これは、次のようになります。

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);
        }
    }
}

この属性型またはオペレーション型のDescriptoropenTypeフィールドに表示されるCompositeTypeには、units項目だけが示されます。ただし、生成される実際のCompositeDataには、unitsvalueの両方が含まれます。

導入されたバージョン:
1.6
関連項目:
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    このオブジェクト内の値に対応するCompositeDataを返します。
  • メソッドの詳細

    • toCompositeData

      CompositeData toCompositeData(CompositeType ct)

      このオブジェクト内の値に対応するCompositeDataを返します。 通常、戻り値はCompositeDataSupportのインスタンス、またはwriteReplaceメソッドを介してCompositeDataSupportとして直列化を行うクラスになります。 それ以外の場合、オブジェクトを受信するリモート・クライアントは、再構築を実行できない可能性があります。

      パラメータ:
      ct - 戻り値の予想されるCompositeType 戻り値がcdである場合、cd.getCompositeType().equals(ct)はtrueになる。 通常、これは、cdctCompositeTypeとして構築されたCompositeDataSupportであるため。
      戻り値:
      CompositeData