Thanks Romain.
Should all be merged into the same PR. Fill free to review and close yours.
It should be included in mine.

Le mer. 2 déc. 2020 à 15:38, Romain Manni-Bucau <rmannibu...@gmail.com> a
écrit :

> Let say it enables more control whereas this kind of toggle system
> properties can be random when apps don't need the same (once again it is
> functional and not about perf there).
> Feel free to take back my PR, was just sharing the idea with code to try to
> fix it together faster.
>
> 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 mer. 2 déc. 2020 à 15:30, Jean-Louis MONTEIRO <jeano...@gmail.com> a
> écrit :
>
> > Hey Romain,
> >
> > Your email was clear on how to do it. But thanks for creating the PR.
> > To be honest, I don't really care if you prefer this way. Essentially,
> > instead of adding a property into a file, I'll now add a Maven dependency
> > into my pom file.
> >
> > Does not change much.
> > If on the other hand, it makes OSGi deployments easier, I'm fine with
> it. I
> > just need some updates in your PR if I may.
> >
> > Le mer. 2 déc. 2020 à 13:13, Romain Manni-Bucau <rmannibu...@gmail.com>
> a
> > écrit :
> >
> > > Send a PR with the "SPI" option which enables to have this toggle *at
> > will*
> > > and drop it when not desired anymore without any config.
> > > Hope it illustrates better than words one toggle option which
> > > wouldnt depend on the env.
> > >
> > > 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 mer. 2 déc. 2020 à 11:49, Jean-Louis MONTEIRO <jeano...@gmail.com>
> a
> > > écrit :
> > >
> > > > I understand it's a nice feature and the RFC does not address it.
> > > > What I'm not happy with is that adding this feature breaks what's
> > > actually
> > > > in the spec.
> > > >
> > > > I would prefer us to implement this feature without breaking standard
> > > > features.
> > > > I'll push a proposal for now and we can improve.
> > > >
> > > >
> > > >
> > > >
> > > > Le mar. 1 déc. 2020 à 15:13, Romain Manni-Bucau <
> rmannibu...@gmail.com
> > >
> > > a
> > > > écrit :
> > > >
> > > > > Le mar. 1 déc. 2020 à 14:40, Jonathan Gallimore <
> > > > > jonathan.gallim...@gmail.com> a écrit :
> > > > >
> > > > > > I'll address a few points inline below, but at a high level, what
> > are
> > > > we
> > > > > > looking to achieve from a spec/tck challenge?
> > > > > >
> > > > > > I can see a case for some clarification and updates to the
> Javadoc.
> > > > > >
> > > > > > The assertions that /- will return an error (as that references
> an
> > > > index
> > > > > to
> > > > > > append to after the *end* of an array - i.e. array.length) are
> > tested
> > > > in
> > > > > > the TCK, and other implementations must be passing that TCK. It's
> > > hard
> > > > to
> > > > > > see a spec change happening, as there is no spec document beyond
> > the
> > > > RFCs
> > > > > > that I can find. A TCK change that would enable Johnzon to pass,
> > and
> > > > > > require other currently passing implementations to make a change
> > > seems
> > > > > > unlikely. Jakarta EE 8's TCK has been around a while and has
> > > > > > implementations that pass. The Jakarta EE 9 TCK is basically
> "done"
> > > and
> > > > > is
> > > > > > essentially the same as EE8, bar the namespace change. I guess
> > > adding a
> > > > > > test exclude is possible, but serves to make this more vague and
> > > vendor
> > > > > > dependent (and non-portable) which feels like it defeats the
> > purpose
> > > -
> > > > > > surely having it better defined and tested is the way to go.
> > > > > >
> > > > >
> > > > > Well, here the fact is that it does not impact other vendors since
> it
> > > is
> > > > a
> > > > > johnzon vendor specific feature we put in a shadow of the
> > > (javax/jakarta)
> > > > > spec handling in a custom fashion an error case.
> > > > > Typically the case where we can exclude the TCK since it is
> > irrelevant
> > > > for
> > > > > our impl but I understand also it is not perfect.
> > > > >
> > > > >
> > > > > >
> > > > > > I appreciate that this introduces a backwards incompatible
> change,
> > > and
> > > > > that
> > > > > > there may be other consumers of the library that would have an
> > issue
> > > if
> > > > > > this just changed. This seems like a fairly straightforward case
> > that
> > > > > could
> > > > > > be easily and quickly solved with a feature switch, and passing
> the
> > > TCK
> > > > > is
> > > > > > a worthwhile goal, both for Johnzon and TomEE. I suspect the TCK
> > > > > challenge
> > > > > > will take a bit of time, and we'll likely end up back at the
> > feature
> > > > > switch
> > > > > > anyway.
> > > > > >
> > > > >
> > > > > Issue is we dont have a Json.createPointerFactory(mapWithToggle) so
> > it
> > > > is a
> > > > > global flag which means it breaks some deployments anyway - at
> least
> > at
> > > > > tomee level - when > 1 app is deployed (or >= 1 app + 1 extension).
> > > > >
> > > > >
> > > > > >
> > > > > > On Fri, Nov 27, 2020 at 10:44 AM Romain Manni-Bucau <
> > > > > rmannibu...@gmail.com
> > > > > > >
> > > > > > wrote:
> > > > > >
> > > > > > > Hi JL,
> > > > > > >
> > > > > > > As discussed together - but sharing for others - we must take
> > into
> > > > > > account
> > > > > > > some points:
> > > > > > >
> > > > > > > 1. reading both spec, JSON-Patch enables to handle /- as your
> > first
> > > > did
> > > > > > (ie
> > > > > > > consider it is last element). JSON-Patch uses JSON-Pointer but
> > > > nowhere
> > > > > it
> > > > > > > is written it behaves as JSON-Pointer in all cases and it is
> > > > typically
> > > > > > > "integration" definition which can extend an underlying spec
> > > > (otherwise
> > > > > > > most of EE wouldn't be right? ;))
> > > > > > >
> > > > > >
> > > > > > I think the idea is that it references a non-existent element,
> > > *after*
> > > > > the
> > > > > > last element in an array. So if you have an array [0, 1, 2, 3,
> 4],
> > > then
> > > > > > "/-" would reference element _5_ (assuming you start your
> numbering
> > > at
> > > > > 0),
> > > > > > and not the last element in the array (index 4).
> > > > > >
> > > > >
> > > > > This is the jsonpointer spec right,  but JSONPatch never requires
> to
> > > not
> > > > > handle the case as we do, it is just not written (and why we used
> it
> > > > also).
> > > > > Issue on jsonpointer side being we can't have another character
> which
> > > > means
> > > > > "last element".
> > > > >
> > > > >
> > > > > >
> > > > > >
> > > > > > > 2. On johnzon point of view we can't break this feature which
> was
> > > > > > requested
> > > > > > > by user and transitive users (ie user of products built with
> > > johnzon)
> > > > > > > without at least a clear migration path so if we want to break
> we
> > > > > should
> > > > > > do
> > > > > > > a 1.3 (dont think we need a 1.2 maintenance branch, we can do
> it
> > > > > lazily),
> > > > > > > document how to migrate from current behavior to new one (i'll
> > > detail
> > > > > it
> > > > > > > after) and communicate on it on our website properly
> (index.html
> > > ref
> > > > > and
> > > > > > > dedicated page I guess with the release annoucement).
> Alternative
> > > is
> > > > to
> > > > > > > challenge the TCK, it is a failure case so it is typically the
> > kind
> > > > of
> > > > > > case
> > > > > > > we can plug custom/vendor behavior (we do in other parts of the
> > > > JSON-B
> > > > > > spec
> > > > > > > for ex). Overall idea is to not let users on the road because
> > some
> > > > TCK
> > > > > > > exist (functional and users over procedural work).
> > > > > > >
> > > > > >
> > > > > > I'd be interested in the history, it helps to be mindful of it
> when
> > > > > making
> > > > > > changes.
> > > > > >
> > > > >
> > > > > Goal is to be able to work on the last element, there is nothing in
> > > specs
> > > > > about this one but it is very common to need that (see it as
> "length"
> > > > > operator).
> > > > > Indeed we can enrich jsonlogic module to cover that case but most
> > users
> > > > > just bring jsonp+jsonb and not johnzon-jsonlogic.
> > > > >
> > > > >
> > > > > >
> > > > > >
> > > > > > >
> > > > > > > On strict TCK side, we can also do a johnzon-tck module where
> we
> > > wrap
> > > > > the
> > > > > > > provider to handle that case and pass the TCK, this is purely
> > > > technical
> > > > > > to
> > > > > > > be compliant but would avoid to break anything.
> > > > > > > Now if we really want to be strict in our implementation we
> must
> > > > still
> > > > > > > enable this last element case. One option not far from what we
> > have
> > > > is
> > > > > to
> > > > > > > use our json-logic module and add some jsonpatch operators.
> > > Combining
> > > > > > > multiple operators we can manage to fulfill this common
> patching
> > > > need -
> > > > > > but
> > > > > > > we break the overall API + require a new module to be added to
> > > apps).
> > > > > > >
> > > > > > > Lastly I would note that JSON Pointer *enables* our impl:
> > > > > > >
> > > > > > > > Note that the use of the "-" character to index an array will
> > > > always
> > > > > > >
> > > > > > >    result in such an error condition because by definition it
> > > refers
> > > > to
> > > > > > >    a nonexistent array element.  Thus, applications of JSON
> > Pointer
> > > > > need
> > > > > > >    to specify how that character is to be handled, if it is to
> be
> > > > > > >    useful.
> > > > > > >
> > > > > > >
> > > > > > > >  For example, some applications might stop pointer processing
> > > upon
> > > > an
> > > > > > >
> > > > > > >    error, while others may attempt to recover from missing
> values
> > > by
> > > > > > >    inserting default ones.
> > > > > > >
> > > > > > >
> > > > > > > Literally means "this is a case we consider as an error but
> your
> > > > > > > application can recover from it" and we do ;).
> > > > > > >
> > > > > >
> > > > > > Sort of. "applications of JSON Pointer need to specify how that
> > > > character
> > > > > > is to be handled". What's the definition of "application of JSON
> > > > > pointer"?
> > > > > > In the case of TomEE, I'd suggest the "application" is Jakarta
> EE,
> > > > which
> > > > > > has specified that an error should be thrown. In a standalone
> case,
> > > is
> > > > > the
> > > > > > application whatever is consuming Johnzon, or Johnzon itself?
> > > > > >
> > > > >
> > > > > Well TCK define it but not the JSON-P spec and I'm more than happy
> to
> > > > > request to drop that TCK since it was completely passed under the
> > > radar -
> > > > > guess TCK were never really reviewed).
> > > > > Also note that the JsonPointer javadoc - since there is no pdf or
> > spec
> > > > > document - does not mention it must implement the RFC but only that
> > it
> > > > must
> > > > > respect its syntax and part of its constraints.
> > > > > So really it was under the radar more than anything and we must not
> > > > assume
> > > > > this TCK was intended originally when JsonPointer class was created
> > > IMHO.
> > > > >
> > > > >
> > > > > >
> > > > > >
> > > > > > > Since it is an error case I would start by challenging the TCK
> to
> > > > make
> > > > > it
> > > > > > > vendor dependent and exclude it from the passing list for now.
> > > > > > > If really blocking we can go with plan B and try to have a
> > > migration
> > > > > path
> > > > > > > but it sounds like a lot of effort for everyone for literally 0
> > > gain
> > > > > > IMHO.
> > > > > > >
> > > > > >
> > > > > > Personally, I'd prefer a switch that enables us to comply with
> the
> > > > > Jakarta
> > > > > > EE spec behaviour, rather than introducing something vendor
> > specific
> > > > and
> > > > > > non-portable into the spec.
> > > > > >
> > > > >
> > > > > We would have the factory I would be for that but since we don't I
> > see
> > > > way
> > > > > more pitfalls than advantages - except passing the TCK there is
> none
> > > > > actually but in OSGi env or multiapp containers it would be a real
> > pain
> > > > :(
> > > > > - so if it is the solution you want (and I fully get it is the
> > fastest
> > > to
> > > > > pass TCK which is likely current goal) then maybe just wrap
> > > JsonProvider
> > > > > with a custom
> TCKJsonPointer(johnzonProvider.createJsonPointer(...))
> > > and
> > > > > validate the tck case.
> > > > > It is quite trivial to do in tomee-tck setup and will give you a
> "not
> > > > > risky" flagging.
> > > > >
> > > > > Don't get me wrong, I'm not very happy of that but I just don't
> want
> > we
> > > > > drop an used feature for a test which is not needed at spec level.
> > > > > Alternative I discussed with JL was to provide a clear migration
> path
> > > and
> > > > > adding some jsonlogic operator to fill the gap, it is also very
> > doable,
> > > > > only point I'm not sure is that adding a module will match other
> > users
> > > > > expectations. Assuming that yes we can do a 1.2.9 keeping this
> > feature
> > > > (we
> > > > > have some fixes we should let go out before any breaking change),
> do
> > > the
> > > > > changes in jsonlogic module (we can do them before too since it is
> > only
> > > > > additions) and do a 1.3.0 fully compliant with the documentation
> > > updated.
> > > > > Small variation of this option is to have our own SPI for
> JsonPointer
> > > > > factory this way it can be overriden for TCK and we can also keep
> our
> > > > > impl, I'm less a fan of this one since it will bring a proprietary
> > > import
> > > > > in portable code in a nasty way instead of splitting it properly
> > (like
> > > > > jsonlogic module option does).
> > > > >
> > > > > Hope it makes sense.
> > > > >
> > > > >
> > > > > >
> > > > > > Jon
> > > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Jean-Louis
> > > >
> > >
> >
> >
> > --
> > Jean-Louis
> >
>


-- 
Jean-Louis

Reply via email to