-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Migration Guide 2.14
Quarkus 2.14.0.Final still defaults to GraalVM CE / Mandrel 22.2 but, starting with 2.14.1.Final, Quarkus will default to using GraalVM CE / Mandrel 22.3 for generating native executables.
Starting with 22.3, substitution (and other) annotations located under the package com.oracle.svm.core.annotate
have been moved from org.graalvm.nativeimage:svm:jar
to org.graalvm.sdk:graal-sdk:jar
.
If your code relies on any of these annotations, please update your pom files accordingly, i.e., substituting the svm
dependency with the graal-sdk
one.
NOTE: Some annotations, like @AlwaysInline
have been moved from com.oracle.svm.core.annotate
to com.oracle.svm.core
, and are not shipped in org.graalvm.sdk:graal-sdk:jar
.
If your code relies on such annotations, you are strongly advised to reconsider their use as they are not public API.
If, however, they turn out to be mandatory for the correct functionality of your code please make sure to update the import
statements in your source code and include org.graalvm.nativeimage:svm:jar
in addition to org.graalvm.sdk:graal-sdk:jar
in the dependencies of your project.
Starting with 22.3 Mandrel no longer provides Java 11 based releases.
As a result, if you used Mandrel builder images with the suffix -java11
in the past, please be advised that such images will no longer be available, thus you are encouraged to use the -java17
suffixed ones.
Note, however, that this doesn't mean that you may no longer produce native executables with Mandrel for Java 11 projects.
You may still compile your Java 11 projects using OpenJDK 11 and produce native executables from the resulting Java 11 bytecode using the -java17
Mandrel builder images.
The Kubernetes Client has been upgraded from 5.12 to 6.1. Please refer to the Kubernetes Client 6 migration guide.
The deprecated annotation io.quarkus.arc.config.ConfigProperties
was removed.
Users are encouraged to use the @io.smallrye.config.ConfigMapping
instead.
Please read the Mapping configuration to objects for more information.
The quarkus-opentelemetry-exporter-jaeger
extension was moved to the quarkus-opentelemetry-exporter at Quarkiverse.
The quarkus-opentelemetry-exporter-otlp
extension was removed and the code is now part of quarkus-opentelemetry
, as the default exporter.
Your project dependencies need to be updated accordingly. The config properties remain the same.
The following changes impact multipart support in RESTEasy Reactive:
- BREAKING: Previously, you could catch all file uploads regardless of the parameter name using the syntax:
@RestForm List<FileUpload> all
, but this was ambiguous and unintuitive, so now this form will only fetch parameters namedall
(just like for every other form element of other types) and you have to use this form to catch every parameter regardless of its name:@RestForm(FileUpload.ALL) List<FileUpload> all
. - The
@MultipartForm
annotation is now deprecated. It is now equivalent to@BeanParam
which you may use in its stead. Multipart form parameter support has been added to@BeanParam
- The
@BeanParam
is now optional and implicit for any non-annotated method parameter which has fields annotated with any@Rest*
or@*Param
annotations. - Multipart elements are no longer limited to being encapsulated inside
@MultipartForm
-annotated classes: they can be used as method endpoint parameters as well as endpoint class fields. - Multipart elements now default to the
@PartType(MediaType.TEXT_PLAIN)
mime type, unless they are of typeFileUpload
,Path
,File
,byte[]
orInputStream
- Multipart elements of the
MediaType.TEXT_PLAIN
mime type are now deserialised using the regularParamConverter
infrastructure (previously they were usingMessageBodyReader
) - Multipart elements of the
FileUpload
,Path
,File
,byte[]
orInputStream
types are deserialised specially. - Multipart elements of other mime types (explicitely set) still use the appropriate
MessageBodyReader
infrastructure. - Multipart elements can now be wrapped in
List
in order to obtain all values of the part that have the same name. - Any client call including
@RestForm
or@FormParam
parameters defaults to theMediaType.APPLICATION_FORM_URLENCODED
content type, unless they are of theFile
,Path
,Buffer
,Multi<Byte>
orbyte[]
types, in which case it defaults to theMediaType.MULTIPART_FORM_DATA
content type.
The following deprecated methods from Hibernate ORM with Panache and Hibernate ORM with Panache in Kotlin was removed:
io.quarkus.hibernate.orm.panache.PanacheRepositoryBase#getEntityManager(Class<?> clazz)
io.quarkus.hibernate.orm.panache.kotlin.PanacheRepositoryBase#getEntityManager(clazz: KClass<Any>)
Both can be replaced by Panache.getEntityManager(Class<?> clazz)
.
Quarkus doesn't support the manual creation of ValidatorFactory
: you have to use the ValidatorFactory
managed by Quarkus that you can inject via CDI.
The main reason for this decision is that a ValidatorFactory
has to be very carefully crafted to work in native executables.
Until now, you could still do that and handle a ValidatorFactory
yourself (if you could make it work...). Starting with 2.14, when some component of your application tries to create a ValidatorFactory
, we actually return the ValidatorFactory
managed by Quarkus. This is to improve the compatibility with components creating their own ValidatorFactory
.
If you are storing your Quartz jobs in a database via JDBC, you will have to update your JOB_DETAILS
table as a class name has changed.
Executing the following query will fix the issue:
UPDATE JOB_DETAILS set JOB_CLASS_NAME = 'io.quarkus.quartz.runtime.QuartzSchedulerImpl$InvokerJob' WHERE JOB_CLASS_NAME = 'io.quarkus.quartz.runtime.QuartzScheduler$InvokerJob';