Created https://github.com/apache/johnzon/pull/83 to try to share what I
meant and try to solve it to enable the release (note I did it a bit in a
hurry, the coming weeks are quite busy for me - so happy to get a second
pair of eyes + optionally somebody running the jsonb tck)

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://rmannibucau.metawerx.net/> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
<https://www.packtpub.com/application-development/java-ee-8-high-performance>


Le dim. 10 avr. 2022 à 18:42, Romain Manni-Bucau <rmannibu...@gmail.com> a
écrit :

>
>
> Le dim. 10 avr. 2022 à 17:34, Mark Struberg <strub...@yahoo.de.invalid> a
> écrit :
>
>> Oki will re-introduce that ct.
>> Should then be backward compat, isn't?
>>
>
> If the modifier check is there back yep
>
>
>> LieGrue,
>> strub
>>
>>
>> > Am 10.04.2022 um 17:24 schrieb Romain Manni-Bucau <
>> rmannibu...@gmail.com>:
>> >
>> > Le dim. 10 avr. 2022 à 17:16, Mark Struberg <strub...@yahoo.de.invalid>
>> a
>> > écrit :
>> >
>> >> Actually there is not much diff. There is one ct which was only used in
>> >> JsonbAccessMode as true. Everywhere else it was feed as false.
>> >> Now we could keep this flag and feed it as default if you really like.
>> >> That should be rather easy to do if you think it's necessary. But
>> still I'd
>> >> mark that 4param ct as @Deprecated. Wdyt?
>> >>
>> >
>> > Well it is used by users writing custom access mode quite often so we
>> must
>> > keep it and its associated behavior as a minimum for coming release.
>> > No issue to make an abstract class with more children to keep it
>> simpler in
>> > the code but please dont break it.
>> >
>> >
>> >> LieGrue,
>> >> strub
>> >>
>> >>> Am 10.04.2022 um 16:24 schrieb Romain Manni-Bucau <
>> rmannibu...@gmail.com
>> >>> :
>> >>>
>> >>> Hi Mark,
>> >>>
>> >>> If I read the diff correctly we still have some breaking change in
>> >>> FieldAndMethodAccessMode
>> >>> constructor/behavior? Can we get it fixed?
>> >>> In terms of design, jsonb access mode was originally thought as
>> >> delegating
>> >>> the research of the writers/readers to a 3rd party access mode and
>> just
>> >>> refilter on top of it with jsonb rules.
>> >>> Now it is kind of mixed in the code (inheritance + composition vs just
>> >>> composition), the reason it was not done was to avoid to expose the
>> >> default
>> >>> delegate access mode when a 4rd party access mode was using and mix
>> them
>> >> in
>> >>> the jsonbaccess mode, not 100% sure if we want to keep the original
>> >> design
>> >>> there or not but mentionning it since it now prevent us to change it
>> >> later.
>> >>>
>> >>> Overall except the missing constructor it looks ok to me, happy to get
>> >>> thoughts on the access mode pattern too.
>> >>>
>> >>> Romain Manni-Bucau
>> >>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>> >>> <https://rmannibucau.metawerx.net/> | Old Blog
>> >>> <http://rmannibucau.wordpress.com> | Github <
>> >> https://github.com/rmannibucau> |
>> >>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
>> >>> <
>> >>
>> https://www.packtpub.com/application-development/java-ee-8-high-performance
>> >>>
>> >>>
>> >>>
>> >>> Le sam. 9 avr. 2022 à 23:49, Mark Struberg <strub...@yahoo.de.invalid>
>> a
>> >>> écrit :
>> >>>
>> >>>> here we go. plz take a look!
>> >>>>
>> >>>> https://github.com/struberg/johnzon/tree/JOHNZON-364 <
>> >>>> https://github.com/struberg/johnzon/tree/JOHNZON-364>
>> >>>>
>> >>>> txs and LieGrue,
>> >>>> strub
>> >>>>
>> >>>>
>> >>>>> Am 09.04.2022 um 23:14 schrieb Mark Struberg
>> <strub...@yahoo.de.INVALID
>> >>>>> :
>> >>>>>
>> >>>>> Looked at your proposed solution, but it might be tricky to get it
>> >>>> working. The problem is that we have two modules: mapper and jsonb.
>> And
>> >> in
>> >>>> JOHNZON-250 we added a logic to the mapper module which is ONLY
>> defined
>> >> and
>> >>>> useful in Jsonb. This is the alwaysPreferMethodVisibility in
>> >>>> org.apache.johnzon.mapper.access.FieldAndMethodAccessMode. This
>> actually
>> >>>> did break the mapper. Sorry that I did not catch this earlier.
>> >>>>>
>> >>>>> Note that the FieldAndMethodAccessMode is only used if no other
>> >>>> AccessMode is configured. There is also a JsonbAccessMode which
>> >> delegates
>> >>>> through to the accessMode of the Mapper. Normally means the
>> >>>> FieldAndMethodAccessMode, but could be different.
>> >>>>> We could implement the logic in JsonbAccessMode, totally ditching
>> the
>> >>>> accessMode coming from the Mapper. Also thought about having the
>> >>>> JsonbAccessMode extending the FieldAndMethodAccessMode and adding the
>> >>>> handling as parameter over there. still not really perfect imo.
>> >>>>>
>> >>>>> Will try to ship a patch proposal tomorrow.
>> >>>>>
>> >>>>> LieGrue,
>> >>>>> strub
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>> Am 28.03.2022 um 10:22 schrieb Romain Manni-Bucau <
>> >>>> rmannibu...@gmail.com>:
>> >>>>>>
>> >>>>>> Le lun. 28 mars 2022 à 10:05, Mark Struberg
>> <strub...@yahoo.de.invalid
>> >>>> <mailto:strub...@yahoo.de.invalid>> a
>> >>>>>> écrit :
>> >>>>>>
>> >>>>>>> +1 for getting rid of java.beans.
>> >>>>>>>
>> >>>>>>> I've created a spec ticket for the open questions:
>> >>>>>>> https://github.com/eclipse-ee4j/jsonb-api/issues/325 <
>> >>>>>>> https://github.com/eclipse-ee4j/jsonb-api/issues/325>
>> >>>>>>>
>> >>>>>>> My point is: until my fix we clearly did break 4.6. And class
>> >>>> hierarchies
>> >>>>>>> are totally not portable right now anyway. Introducing  It's just
>> >> badly
>> >>>>>>> underspecified.
>> >>>>>>> So I do not see why the current implementation does make it worse.
>> >>>>>>>
>> >>>>>>
>> >>>>>> Well this one is easy to answer: it changes the behavior and breaks
>> >>>> users
>> >>>>>> so it is not an option for a patch version and to be honest the
>> >> proposed
>> >>>>>> fix solves it for both cases so think we should tackle it this
>> way, at
>> >>>>>> least for now until the spec clarifies it any other way.
>> >>>>>> Once again, the source of the issue is more that we lack an
>> >> integration
>> >>>>>> between mapper and jsonb modules than anything else and this
>> >> integration
>> >>>>>> had kind of been done but broke mapper so think we should fix it
>> back,
>> >>>> just
>> >>>>>> costs us a constructor we could have avoided without this issue
>> AFAIK
>> >> so
>> >>>>>> not a big deal, no?
>> >>>>>>
>> >>>>>>
>> >>>>>>>
>> >>>>>>> LieGrue,
>> >>>>>>> strub
>> >>>>>>>
>> >>>>>>>> Am 21.03.2022 um 09:52 schrieb Romain Manni-Bucau <
>> >>>> rmannibu...@gmail.com
>> >>>>>>>> :
>> >>>>>>>>
>> >>>>>>>> Hi,
>> >>>>>>>>
>> >>>>>>>> From what we discussed on this issue, the thing is that our jsonb
>> >>>> access
>> >>>>>>>> mode does not enable the visibility to see all readers/writers
>> cause
>> >>>>>>> there
>> >>>>>>>> is some hardcoded filtering in the delegates so I think the
>> trick is
>> >>>> to
>> >>>>>>>> simply add a toggle to the delegates access modes we use to not
>> have
>> >>>> this
>> >>>>>>>> filtering and 100% rely on the visibility filtering in
>> jsonbaccess
>> >>>> mode
>> >>>>>>> we
>> >>>>>>>> already have in place.
>> >>>>>>>>
>> >>>>>>>> Before the release we must also ensure getters computation cache
>> is
>> >>>>>>> cleaned
>> >>>>>>>> up after the ClassMapping is created - we don't want to keep
>> that in
>> >>>>>>> memory
>> >>>>>>>> at runtime and not sure we can clean up at another time since we
>> >> don't
>> >>>>>>> want
>> >>>>>>>> a background thread for that.
>> >>>>>>>> I also think it is not worth to depends on java.beans
>> (java.desktop
>> >>>>>>> module)
>> >>>>>>>> so we would reimpl decapitalize as we already did somewhere else
>> (it
>> >>>> is
>> >>>>>>> one
>> >>>>>>>> liner anyway ;)).
>> >>>>>>>> Lastly, FieldAndMethodAccessMode constructor compatibility must
>> be
>> >>>>>>> restored
>> >>>>>>>> (it is part of our API and used), default should stay 1-1 but as
>> >>>>>>> mentionned
>> >>>>>>>> I'd add a new toggle (with a constructor calling "this" to keep
>> the
>> >>>>>>>> backward compat) to ignore the filtering.
>> >>>>>>>>
>> >>>>>>>> Sounds like this way we solve all issues and can release.
>> >>>>>>>>
>> >>>>>>>> Romain Manni-Bucau
>> >>>>>>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>> >>>>>>>> <https://rmannibucau.metawerx.net/> | Old Blog
>> >>>>>>>> <http://rmannibucau.wordpress.com> | Github <
>> >>>>>>> https://github.com/rmannibucau> |
>> >>>>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
>> >>>>>>>> <
>> >>>>>>>
>> >>>>
>> >>
>> https://www.packtpub.com/application-development/java-ee-8-high-performance
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> Le lun. 21 mars 2022 à 09:00, Mark Struberg
>> >> <strub...@yahoo.de.invalid
>> >>>>>
>> >>>>>>> a
>> >>>>>>>> écrit :
>> >>>>>>>>
>> >>>>>>>>> To sum this up:
>> >>>>>>>>>
>> >>>>>>>>> The problem lies partly in the JSON-B spec. It doesn't define
>> what
>> >>>>>>> happens
>> >>>>>>>>> if there are class hierarchies like class A extends B.
>> >>>>>>>>>
>> >>>>>>>>> In 3.7.1 it states that
>> >>>>>>>>> For a serialization operation, if a matching public getter
>> method
>> >>>>>>> exists,
>> >>>>>>>>> the method is called to obtain the value of the property. If a
>> >>>> matching
>> >>>>>>>>> getter method with private, protected, or defaulted to
>> package-only
>> >>>>>>> access
>> >>>>>>>>> exists, then this field is ignored. If no matching getter method
>> >>>> exists
>> >>>>>>> and
>> >>>>>>>>> the field is public, then the value is obtained directly from
>> the
>> >>>> field.
>> >>>>>>>>>
>> >>>>>>>>> This can get changed y using a @JsonbVisibility
>> >>>>>>>>>
>> >>>>>>>>> 4.6 Custom visibility
>> >>>>>>>>> To customize scope and field access strategy as specified in
>> >> section
>> >>>>>>>>> 3.7.1, it is possible to specify
>> >>>>>>> javax.json.bind.annotation.JsonbVisibility
>> >>>>>>>>> annotation or to override default behavior globally calling
>> >>>>>>>>> JsonbConfig::withPropertyVisibilityStrategy method with given
>> >> custom
>> >>>>>>>>> property visibility strategy.
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> The problem is that that the PropertyVisibilityStrategy is
>> simply
>> >> not
>> >>>>>>>>> ready to implement the rules of 3.7.1 in a portable way when it
>> >>>> comes to
>> >>>>>>>>> class hierarchies
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>
>> >>>>
>> >>
>> https://github.com/apache/geronimo-specs/blob/trunk/geronimo-jsonb_1.0_spec/src/main/java/javax/json/bind/config/PropertyVisibilityStrategy.java
>> >>>>>>>>> <
>> >>>>>>>>>
>> >>>>>>>
>> >>>>
>> >>
>> https://github.com/apache/geronimo-specs/blob/trunk/geronimo-jsonb_1.0_spec/src/main/java/javax/json/bind/config/PropertyVisibilityStrategy.java
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> So either we say that the spec simply does not define what
>> should
>> >>>> happen
>> >>>>>>>>> in case of hierarchic classes (totally valid imo) or we need to
>> >> ditch
>> >>>>>>> our
>> >>>>>>>>> DefaultPropertyVisibility logic completely. It's simply not
>> >> possible
>> >>>> to
>> >>>>>>>>> implement it that way.
>> >>>>>>>>>
>> >>>>>>>>> The reason why I removed the logic from the Reader is the
>> >> following:
>> >>>>>>> Even
>> >>>>>>>>> if the reader says 'oh there is a getter, so let's hide the
>> >> property'
>> >>>>>>> you
>> >>>>>>>>> STILL are perfectly allowed - as per the spec - to have
>> Visibility
>> >>>>>>>>> strategies which do disable ALL methods and ONLY use field
>> access.
>> >>>>>>>>> That means the current impl is surely more correct than before,
>> but
>> >>>> not
>> >>>>>>>>> yet perfect.
>> >>>>>>>>>
>> >>>>>>>>> LieGrue,
>> >>>>>>>>> strub
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>> Am 28.02.2022 um 11:17 schrieb Romain Manni-Bucau <
>> >>>>>>> rmannibu...@gmail.com
>> >>>>>>>>>> :
>> >>>>>>>>>>
>> >>>>>>>>>> Hi JL,
>> >>>>>>>>>>
>> >>>>>>>>>> Last commit broke some stuff.
>> >>>>>>>>>> Dicussed it quickly offline with Mark but Im AFK for a few
>> days,
>> >>>> can it
>> >>>>>>>>>> wait some days? Otherwise maybe just pick this commit?
>> >>>>>>>>>>
>> >>>>>>>>>> Le lun. 28 févr. 2022 à 10:37, Jean-Louis Monteiro <
>> >>>>>>>>> jlmonte...@tomitribe.com>
>> >>>>>>>>>> a écrit :
>> >>>>>>>>>>
>> >>>>>>>>>>> Hi all,
>> >>>>>>>>>>>
>> >>>>>>>>>>> Is it ok to release a 1.2.17?
>> >>>>>>>>>>> I'm looking for a Jakarta EE fix -
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>
>> >>>>
>> >>
>> https://github.com/apache/johnzon/commit/a1c53d99c3280cbfc35b369ac4ce138e12f1d5ff
>> >>>>>>>>>>>
>> >>>>>>>>>>> Do you guys have some additional fixes to push?
>> >>>>>>>>>>> --
>> >>>>>>>>>>> Jean-Louis Monteiro
>> >>>>>>>>>>> http://twitter.com/jlouismonteiro
>> >>>>>>>>>>> http://www.tomitribe.com
>> >>>>>
>> >>>>
>> >>>>
>> >>
>> >>
>>
>>

Reply via email to