Skip to content

Migration Guide 3.22

Ladislav Thon edited this page Mar 25, 2025 · 3 revisions
Note

We highly recommend the use of quarkus update to update to a new version of Quarkus.

Items marked below with ⚙️ ✅ are automatically handled by quarkus update.

Jakarta REST resources with Panache

The REST Data Panache modules (quarkus-hibernate-orm-rest-data-panache, quarkus-hibernate-reactive-rest-data-panache, quarkus-mongodb-rest-data-panache and spring-data-rest) no longer work in combination with quarkus-resteasy* modules, only with quarkus-rest* modules.

Extensions should produce JsonRPCProvidersBuildItem always

Previously, the JsonRPCProvidersBuildItem was produced in most extensions only in dev mode, typically using

@BuildStep(onlyIf = IsDevelopment.class)
JsonRPCProvidersBuildItem createJsonRPCService() {
    return new JsonRPCProvidersBuildItem(...);
}

This is because there was only a single purpose for JsonRPCProvidersBuildItem: to register the given class for Dev UI JSON RPC.

However, The JSON RPC classes can use execution model affecting annotations (@Blocking, @NonBlocking, @RunOnVirtualThread), which Quarkus validates. Specifically for that validation purpose, the execution model validation used to contain a gross hack that tried to guess whether the given class is a JSON RPC class, but that is being removed.

The JsonRPCProvidersBuildItem is now used as a primary source of information for which classes are Dev UI JSON RPC classes. Therefore, the JsonRPCProvidersBuildItem should be produced always.

Quarkus will carry the gross hack for a few more releases, but it will be removed in Quarkus 3.24.

If you use the same approach as above, just replace @BuildStep(onlyIf = IsDevelopment.class) with @BuildStep. If you use a more complex approach, it is typically possible to extract the production of JsonRPCProvidersBuildItem into a separate build step that can be executed always, while the original build step remains dev-only.

Current version

LTS versions

Next version in main

Clone this wiki locally