This RFE proposes to extend the MXBean framework to define a mapping to records.
The MXBean framework already defines a mapping of `CompositeType` to plain java
objects. Records are a natural representation of CompositeTypes. A record can
be easily reconstructed from a `CompositeData` through the record canonical
constructor. A clear advantage of records over plain java objects is that the
canonical constructor will not need to be annotated in order to map composite
data property names to constructor parameter names.
With this RFE, here is an example comparing coding a composite type
`NamedNumber` that consists of an `int` and a `String`, using records and using
a plain java class. In both case, the `CompositeType` looks like this:
CompositeType(
"NamedNumber", // typeName
"NamedNumber", // description
new String[] {"number", "name"}, // itemNames
new String[] {"number", "name"}, // itemDescriptions
new OpenType[] {SimpleType.INTEGER,
SimpleType.STRING} // itemTypes
);
The plain Java class needs a public constructor annotated with
`@ConstructorParameters` annotation:
public class NamedNumber {
public int getNumber() {return number;}
public String getName() {return name;}
@ConstructorParameters({"number", "name"})
public NamedNumber(int number, String name) {
this.number = number;
this.name = name;
}
private final int number;
private final String name;
}
And the equivalent with a record class:
public record NamedNumber(int number, String name) {}
-------------
Commit messages:
- 8264124: Update MXBean specification and implementation to extend mapping of
CompositeType to records
Changes: https://git.openjdk.java.net/jdk/pull/3201/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3201&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8264124
Stats: 679 lines in 3 files changed: 647 ins; 12 del; 20 mod
Patch: https://git.openjdk.java.net/jdk/pull/3201.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/3201/head:pull/3201
PR: https://git.openjdk.java.net/jdk/pull/3201