jmx-dev RFR: 8264124: Update MXBean specification and implementation to extend mapping of CompositeType to records [v3]

Daniel Fuchs dfuchs at openjdk.java.net
Wed Mar 31 15:35:53 UTC 2021


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

Daniel Fuchs has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains seven additional commits since the last revision:

 - Merge branch 'master' into mxbeans-8264124
 - Minor tweaks. Improved test.
 - Merge branch 'master' into mxbeans-8264124
 - Integrated review feedback. Updated the section for Mapping to records.
 - Integrated review feedback. Added a section for Mapping to records.
 - Fixed typo. Moved example with record after example with from method to respect the logical order of precedence.
 - 8264124: Update MXBean specification and implementation to extend mapping of CompositeType to records

-------------

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/3201/files
  - new: https://git.openjdk.java.net/jdk/pull/3201/files/1c3292ce..59965133

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=3201&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=3201&range=01-02

  Stats: 15001 lines in 575 files changed: 11278 ins; 1193 del; 2530 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


More information about the jmx-dev mailing list