RFR: 8264124: Update MXBean specification and implementation to extend mapping of CompositeType to records [v2]

Daniel Fuchs dfuchs at openjdk.java.net
Wed Mar 31 20:56:32 UTC 2021


On Wed, 31 Mar 2021 18:32:31 GMT, Mandy Chung <mchung at openjdk.org> wrote:

>> Hi Mandy, I have updated the PR with a revised version of the text above. Is that more in line what you had in mind?
>> 
>> best regards,
>> -- daniel
>
> This looks better.  I like a separate mapping section for records since the mapping rules are straight-forward.   The complexity comes if we want to support a record to implement `CompositeDataView` that allows a type to support more flexible conversion to `CompositeData` which is why you add records in the "Mappings for other types".   I am wondering if we really want to support records to implement `CompositeDataView` but we may want to avoid such a special case.
> 
> I suggest add subsections in "Mappings for other types":   There are two mapping rules: (1) _opentype(J)_ maps `J` to `CompositeType` (2) _opendata(J)_ maps `J` to `CompositeData`.   _opentype(J)_ for record class does not need to refer to other types.   The common cases for _opendata(J)_ for record class is using the canonical constructors.   The other less common cases like using non-canonical constructors and `CompositeDataView` can state that it follows the same rules as specified for other types.   "Mappings for other types" does not need any change for records.   
> 
> "Reconstructing an instance of Java type J from a CompositeData" section should be renamed to "Reconstructing an instance of Java type or record class J from a CompositeData"
> 
> Here is a minor tweaking on "Mappings for Records"
> 
> A record is convertible to a CompositeType if and only if all its components are 
> convertible to open types. Otherwise, it is not convertible.
> 
> A record class is converted to a CompositeType with one item for every record component as follows.
> - The type name of this CompositeType is determined by the type name rules detailed below. 
> - Each record component of type T, the item in the CompositeType has the same name 
>   as the record component and of type opentype(T).
> 
> The mapping from an instance of a record class to a CompositeData corresponding to 
> the CompositeType is the same as specified as for other types (add a link).
> 
> A record is reconstructed from a CompositeData using its canonical constructor. 
> The canonical constructor doesn't require the presence of @javax.management.ConstructorParameters 
> or @java.beans.ConstructorProperties annotations. If these annotations are present on
> the canonical constructor, they will be ignored.
> 
> If the CompositeData from which the record is reconstructed doesn't contain all the record components, 
> the MXBean framework will attempt to reconstruct the record in the same way as specified for 
> other types (add a link).

I have updated the PR with those changes, plus a few minor adjustments.

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

PR: https://git.openjdk.java.net/jdk/pull/3201


More information about the serviceability-dev mailing list