Thanks for all your initiative on this, Ladicek. It's great that we've
gotten this in.
On Tue, Aug 30, 2022 at 6:08 AM Ladislav Thon <lthon(a)redhat.com> wrote:
Hi,
On Wed, Aug 17, 2022 at 10:37 AM Ladislav Thon <lthon(a)redhat.com> wrote:
> On Tue, Aug 16, 2022 at 8:59 PM Brian Stansberry <
> brian.stansberry(a)redhat.com> wrote:
>
>> On Tue, Aug 16, 2022 at 10:00 AM Ladislav Thon <lthon(a)redhat.com> wrote:
>>
>>> Upgrading in WildFly should be pretty straightforward, though I
>>> remember WildFly still ships its own `CompositeIndex`, which should really
>>> be replaced by the one in Jandex.
>>>
>>
>> Is that a blocker to doing this upgrade, or just a good thing to do when
>> we can?
>>
>
> Not a blocker, no, just requires changes -- the IndexView interface has a
> couple of new methods that must be implemented.
>
I found that `CompositeIndex` in WildFly actually doesn't implement
`IndexView`, so no changes are necessary there.
WildFly can remove it and use Jandex's `CompositeIndex` whenever it wants
-- including never, if there's no need.
Thanks; good to know. Intellij tells me we have 190 uses of CompositeIndex,
so I expect we'll have to think about it a bit.
>
>
>> I'm not sure if all WildFly components using Jandex have already updated
>>> to 2.4.3, though -- if not, it will be more interesting.
>>>
>>
>> IC. That will take some research, given the hundreds of usages on
>>
https://mvnrepository.com/artifact/org.jboss/jandex/usages?sort=newest.
>> Besides the ones you mentioned in your first post I see Hibernate ORM and
>> Search and Ironjacamar on there. And then I got tired of clicking through
>> pages.
>>
>
> Gotcha. Quickly looking at the projects you mention, Hibernate ORM and
> Search would require minuscule changes to migrate away from the deprecated
> methods in 2.4.3 (but none of that is in production code), IronJacamar is
> fine. For upgrading to 3.0, they all use the `Indexer` API, so a few more
> changes would be required in Hibernate ORM, while Hibernate Search
> and IrocJacamar would require a rebuild (they use `Indexer.index()`, which
> changed return type, which is binary incompatible, but they ignore the
> returned value, so the source will compile without changes).
>
OK, so good news here. I released Jandex 3.0.0 last week, with even better
compatibility than before. Using David's Bridger Maven plugin, I was able
to restore binary compatibility for 3 out of 4 methods that change return
type in Jandex 3.
Specifically for `Indexer.index()`, a synthetic bridge method exists with
the `ClassInfo` signature, except it always returns `null`. This means that
`Indexer.index()` callers that used to ignore the return value are directly
compatible with Jandex 3.0.0 (including Hibernate Search and IronJacamar).
For Hibernate ORM, the necessary changes are very small and PRs are up (see
https://hibernate.atlassian.net/browse/HHH-15466). Those PRs will make
Hibernate ORM compatible with Jandex 3.0, while it is still built against
Jandex 2.x. So that upgrade can go in independently.
There's also a PR for WildFly Core, which is basically ready to go, and a
PR for full WildFly which depends on Hibernate ORM (see above) and SmallRye
OpenAPI. PRs are also up, but SmallRye OpenAPI can't be made compatible
with both Jandex 2.x and 3.0 at the same time, so this upgrade will have to
be in the same commit as the Jandex upgrade.
That's probably all. I've had green results for `mvn clean install
-DallTests` on both WildFly Core and full WildFly locally, so I think it
should be smooth.
LT
>
> I can do the necessary changes, but I don't know what component versions
> target WildFly 27 and how their release plans look like.
>
> We probably should try updating to 3.0.0-RC1 immediately and see what
> breaks... Except I see 3.0.0-RC1 never made it to Central, because of an
> annoying Maven feature/bug (where if the last module in the build is
> configured to not deploy, nothing deploys). Funny that no one complained
> :-) I've released 3.0.0-RC2, it's in Central now, so let's use that.
>
> LT
>
>
>>
>>
>>> LT
>>>
>>> On Tue, Aug 16, 2022 at 4:37 PM Brian Stansberry <
>>> brian.stansberry(a)redhat.com> wrote:
>>>
>>>> Hi Ladislav,
>>>>
>>>> Thanks for this thorough update. It came in when I was on PTO and I
>>>> read it but wasn't inclined to reply then. :) And thanks as well for
>>>> the WFLY-16569 updates.
>>>>
>>>> Do you have a sense for when Jandex 3.0 will go final? We're
planning
>>>> for WF 27 Beta1, likely in early September, and this seems like a good
move
>>>> to make in that release, if it will be ready.
>>>>
>>>> Cheers,
>>>> Brian
>>>>
>>>>
>>>>
>>>> On Tue, Jun 28, 2022 at 4:19 AM Ladislav Thon <lthon(a)redhat.com>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> last week, I've released Jandex 3.0.0-RC1, and yesterday,
I've
>>>>> released Jandex 2.4.3.Final. (A corresponding release of the Jandex
Maven
>>>>> plugin is on its way to Central as we speak.)
>>>>>
>>>>> There's a few breaking changes in Jandex 3.0 and the 2.4.3
release is
>>>>> supposed to make migration easier (or at least require less
coordination).
>>>>>
>>>>> Specifically, Jandex 2.4.3 deprecates these 2 methods because they
>>>>> have a different return type in 3.0:
>>>>>
>>>>> - ClassInfo.annotations()
>>>>> - MethodInfo.parameters()
>>>>>
>>>>> Replacements are, respectively:
>>>>>
>>>>> - ClassInfo.annotationsMap()
>>>>> - MethodInfo.parameterTypes()
>>>>>
>>>>> These 2 replacement methods are present both in Jandex 2.4.3 and
>>>>> 3.0.0[-RC1].
>>>>>
>>>>> Additionally, certain usages of MethodInfo.parameters() can be
>>>>> simplified using MethodInfo.parametersCount() and parameterType(int).
These
>>>>> 2 methods are also present both in 2.4.3 and 3.0.0[-RC1].
>>>>>
>>>>> Updating to Jandex 2.4.3 is safe, because it's fully compatible
with
>>>>> previous releases. A project that uses Jandex 2.4.3 and avoids
deprecated
>>>>> methods is almost fully _binary_ compatible with Jandex 3.0 (almost
because
>>>>> of the return type change in Indexer.index(), but that should only
affect a
>>>>> very small number of existing code paths).
>>>>>
>>>>> I went through the projects that I know use Jandex and made the
>>>>> necessary changes myself and will submit PRs in the coming days.
These
>>>>> projects are:
>>>>>
>>>>> - Quarkus, including ArC and RESTEasy Reactive
>>>>> - Gizmo
>>>>> - Weld
>>>>> - SmallRye OpenAPI
>>>>> - SmallRye Async API -- no changes required
>>>>> - SmallRye GraphQL
>>>>> - WildFly Core -- no changes required, just updating Jandex
>>>>> - WildFly Full
>>>>> - RESTEasy (classic) -- no changes required
>>>>>
>>>>> If you maintain (or know about) some other project that uses Jandex,
>>>>> feel free to ping me, I'll be happy to help.
>>>>>
>>>>> Note that there are more changes in Jandex 3.0. All the details can
>>>>> be found in the issue tracker:
>>>>>
https://github.com/smallrye/jandex/milestone/3 For your convenience,
>>>>> here's a summary of what's coming in Jandex 3.0 and is
technically a
>>>>> breaking change, even though most of them won't likely affect
anyone:
>>>>>
>>>>> - moved Jandex to SmallRye
>>>>> - bumped minimum Java version to 8
>>>>> - regularized access to annotations from AnnotationTarget
>>>>> - this is why ClassInfo.annotations() needs to change the return
>>>>> type
>>>>> - there are methods to access annotations without considering
>>>>> nested annotation targets, too!
>>>>> - regularized access to method parameters from MethodInfo
>>>>> - this is why MethodInfo.parameters() needs to change the return
>>>>> type
>>>>> - common parameter-accessing methods on MethodInfo ignore
>>>>> mandated/synthetic parameters
>>>>> - special methods exist to access all parameters, including
>>>>> mandated/synthetic
>>>>> - added a new kind of types, TypeVariableReference, to faithfully
>>>>> represent recursive type variables
>>>>> - changed Indexer.index() to return void (instead of ClassInfo)
>>>>> - required to be able to post-process an index during
>>>>> Indexer.complete()
>>>>> - added indexing of class-retained annotations
>>>>> - Jandex 2 only indexes runtime-retained annotations
>>>>> - AnnotationInstance.runtimeVisible() can be used to distinguish
>>>>> - added a few methods to IndexView
>>>>> - navigation for interfaces: getKnownDirectSubinterfaces(),
>>>>> getAllKnownSubinterfaces()
>>>>> - navigation for packages: getClassesInPackage(), getSubpackages()
>>>>> - breaks projects that implement this interface on their own
(which
>>>>> I know at least WildFly and Quarkus do)
>>>>> - removed IndexReader.getDataVersion()
>>>>> - it's been incorrect anyway, and I couldn't find anyone
using it
>>>>>
>>>>> When Jandex 3.0 goes final, which I hope happens in a few weeks, I
>>>>> will publish an announcement with all details on the SmallRye blog.
In the
>>>>> meantime, I'll use the previously mentioned projects (and their
test
>>>>> suites) to verify that Jandex 3.0 doesn't contain any hidden
surprises.
>>>>>
>>>>> Any questions? Ideas? My inbox and the Jandex issue tracker are
>>>>> always open :-)
>>>>>
>>>>> Thanks,
>>>>>
>>>>> LT
>>>>> _______________________________________________
>>>>> wildfly-dev mailing list -- wildfly-dev(a)lists.jboss.org
>>>>> To unsubscribe send an email to wildfly-dev-leave(a)lists.jboss.org
>>>>> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
>>>>
>>>>
>>>>
>>>> --
>>>> Brian Stansberry
>>>> Principal Architect, Red Hat JBoss EAP
>>>> He/Him/His
>>>>
>>>
>>
>> --
>> Brian Stansberry
>> Principal Architect, Red Hat JBoss EAP
>> He/Him/His
>>
>