이 콘텐츠는 선택한 언어로 제공되지 않습니다.
Chapter 1. Migrating applications to Red Hat build of Quarkus 3.27
As an application developer, you can migrate applications that are based on Red Hat build of Quarkus version 3.2 or later to version 3.27 by using either the quarkus CLI or Maven.
The Quarkus CLI is intended for development purposes, including tasks such as creating, updating, and building Quarkus projects. However, Red Hat does not support using the Quarkus CLI in production environments.
1.1. Updating projects to the latest Red Hat build of Quarkus version 링크 복사링크가 클립보드에 복사되었습니다!
To update your Red Hat build of Quarkus projects to the latest version, follow these steps, which are explained in detail later in this guide:
-
Use the
quarkusCLI or Maven commands to run automated update tasks. - Consult the Changes that affect compatibility with earlier versions section to perform any manual update tasks.
1.1.1. Automatic updates 링크 복사링크가 클립보드에 복사되었습니다!
Running the quarkus CLI or Maven commands triggers OpenRewrite recipes that upgrade project dependencies and source code. This automated approach provides a convenient and reliable way to update your projects.
However, not all migration tasks are automated. If specific updates are not applied after running the quarkus update command or its Maven equivalent, consider the following possible reasons:
- The required migration task is not covered by the available OpenRewrite recipes.
- An extension your project depends on is incompatible with the latest Red Hat build of Quarkus version.
1.1.2. Manual updates 링크 복사링크가 클립보드에 복사되었습니다!
Manual updates give you the flexibility and control to address any migration tasks to ensure your project aligns with your specific needs. Tasks that are not automated must be handled manually.
For a list of the migration tasks required to update from the previous release to this one, see the Changes That Affect Compatibility with Earlier Versions section of this guide.
Reviewing the migration guide for each release version between the current version of your application project and the version you’re upgrading to is essential. This review process ensures you are fully informed and prepared for the update process. For example, if upgrading from version 3.20 to 3.27, you only need to review this guide. If you are upgrading from version 3.2 to 3.27, you must also review the guides for for each intermediate version:
Each task in this migration guide outlines the required changes and indicates whether they are automatically handled by the quarkus update command and its Maven equivalent.
For additional background, see the Quarkus community Migration guides.
1.2. Using the quarkus CLI to update the project 링크 복사링크가 클립보드에 복사되었습니다!
Update your Red Hat build of Quarkus projects by using the quarkus CLI.
The Quarkus CLI is intended for development purposes, including tasks such as creating, updating, and building Quarkus projects. However, Red Hat does not support using the Quarkus CLI in production environments.
Prerequisites
- An IDE
-
JDK 17 or 21 installed and
JAVA_HOMEconfigured - Apache Maven 3.9.9
- Optional: To build native Linux executables, Red Hat build of Quarkus supports using the Red Hat build of Quarkus Native Builder image (quarkus/mandrel-for-jdk-21-rhel8), which is based on GraalVM Mandrel.
-
The
quarkusCLI 3.27.0 - A project based on Red Hat build of Quarkus version 3.2 or later
Procedure
- Create a working branch for your project in your version control system.
-
Install the latest version of the
quarkusCLI by following the installation guide. Verify the installation by running the following command:
quarkus -v 3.27.0
quarkus -v 3.27.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Important: Configure the extension registry client as instructed in the "Configuring Red Hat build of Quarkus extension registry client" section of the "Getting Started with Red Hat build of Quarkus" guide.
- In the terminal, navigate to your project directory.
Update the project:
quarkus update
quarkus updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow Optional: To update to a specific stream, use the
--streamoption followed by a specific version; for example:quarkus update --stream=3.27
quarkus update --stream=3.27Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Review the output from the update command for instructions and perform any suggested tasks.
- Use a diff tool to inspect all changes made during the update process.
- Manually perform any changes that were not handled by updating the project. For details, refer to the following Changes that affect compatibility with earlier versions section.
- Ensure the project builds without errors, all tests pass, and the application functions as expected before deploying to production.
1.3. Using Maven to update the project 링크 복사링크가 클립보드에 복사되었습니다!
Update your Red Hat build of Quarkus projects by using Maven.
Prerequisites
- An IDE
-
JDK 17 or 21 installed and
JAVA_HOMEconfigured - Apache Maven 3.9.9
- Optional: To build native Linux executables, Red Hat build of Quarkus supports using the Red Hat build of Quarkus Native Builder image (quarkus/mandrel-for-jdk-21-rhel8), which is based on GraalVM Mandrel.
- A project based on Red Hat build of Quarkus version 3.2 or later
Procedure
- Create a working branch for your project in your version control system.
- Important: Configure the extension registry client as detailed in the "Configuring Red Hat build of Quarkus extension registry client" section of the "Getting Started with Red Hat build of Quarkus" guide.
- Open a terminal and navigate to your project directory.
Ensure that the Red Hat build of Quarkus Maven plugin version is aligned with the latest supported version. Configure the project according to the "Getting started with Red Hat build of Quarkus" guide, and then run:
mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.27.0.redhat-00002:update
mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.27.0.redhat-00002:updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow Optional: To update to a specific stream, use the
-Dstreamoption followed by the desired version; for example:mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.27.0.redhat-00002:update -Dstream=3.27
mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.27.0.redhat-00002:update -Dstream=3.27Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Review the output from the update command for any instructions and perform the suggested tasks.
- Use a diff tool to examine all changes made during the update process.
- Manually perform any changes that were not handled by updating the project. For details, refer to the following Changes that affect compatibility with earlier versions section.
- Ensure the project builds without errors, all tests pass, and the application functions as expected before deploying to production.
1.4. Changes that affect compatibility with earlier versions 링크 복사링크가 클립보드에 복사되었습니다!
This section describes changes in Red Hat build of Quarkus 3.27 that affect the compatibility of applications built with earlier product versions.
Review these breaking changes and take the necessary steps to ensure that your applications continue functioning after updating them to Red Hat build of Quarkus 3.27.
You can perform many of the updates listed in this section by running quarkus update or the equivalent Maven command. This triggers automated OpenRewrite recipes that update your project dependencies and source code to the latest Red Hat build of Quarkus version.
However, not all migration tasks are automated. If specific updates aren’t applied by the automated update, it might be because the required migration task isn’t covered by the available OpenRewrite recipes or an extension your project relies on is incompatible with the latest version. In such cases, you need to perform the updates manually. Be sure to review the following items to identify and address any manual migration tasks.
1.4.1. Compatibility 링크 복사링크가 클립보드에 복사되었습니다!
1.4.1.1. Transactions: QuarkusTransaction.isActive() deprecated 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, the QuarkusTransaction.isActive() method is deprecated.
The method’s behavior is ambiguous and does not reliably indicate transaction state.
Use the getStatus() method to determine the current transaction status. Update all existing uses of isActive() to getStatus() to ensure correct behavior.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the Quarkus Migration guide 3.22.
1.4.2. Core 링크 복사링크가 클립보드에 복사되었습니다!
1.4.2.1. Configuration: Legacy config classes removed 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, Quarkus removes support for legacy configuration classes. Applications that rely on extensions, including custom extensions, built on legacy configuration classes, fail to build.
Update affected extensions to versions that use @io.smallrye.config.ConfigMapping, or migrate custom extensions accordingly.
For example, replace the compatibility class GlobalDevServicesConfig with DevServicesConfig.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the following resources:
1.4.2.2. Configuration: Use .enabled instead of .enable in configuration properties 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, feature toggles in configuration use the .enabled suffix instead of .enable. This change enhances consistency across configuration properties and prevents the mixing of suffixes. The old .enable properties remain recognized for backward compatibility but are deprecated.
Run quarkus update to automatically migrate your configuration. If you update manually, rename keys such as quarkus.log.console.enable to quarkus.log.console.enabled to avoid deprecation warnings. Named logging handlers follow the same rule and use quarkus.log.handler.*."handler-name".enabled.
Example 1.1. Impacted properties include:
-
quarkus.keycloak.policy-enforcer.enablequarkus.keycloak.policy-enforcer.enabled -
quarkus.log.console.enablequarkus.log.console.enabled -
quarkus.log.console.async.enablequarkus.log.console.async.enabled -
quarkus.log.file.enablequarkus.log.file.enabled -
quarkus.log.file.async.enablequarkus.log.file.async.enabled -
quarkus.log.syslog.enablequarkus.log.syslog.enabled -
quarkus.log.syslog.async.enablequarkus.log.syslog.async.enabled -
quarkus.log.socket.enablequarkus.log.socket.enabled -
quarkus.log.socket.async.enablequarkus.log.socket.async.enabled -
quarkus.snapstart.enablequarkus.snapstart.enabled -
quarkus.smallrye-health.ui.enablequarkus.smallrye-health.ui.enabled -
quarkus.smallrye-graphql.ui.enablequarkus.smallrye-graphql.ui.enabled -
quarkus.smallrye-openapi.enablequarkus.smallrye-openapi.enabled -
quarkus.swagger-ui.enablequarkus.swagger-ui.enabled
To apply this change, run the automatic update process described in the Migrating applications to Red Hat build of Quarkus 3.27 guide.
For more information, see the Quarkus Migration guide 3.26: `.enable` to `.enabled` in configuration properties.
1.4.2.3. JGit: Dependency removed from quarkus-bom 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, the org.eclipse.jgit dependency is no longer managed in the quarkus-bom.
Now, if your application relies on JGit, add the quarkus-jgit extension to your dependencies to ensure native image compatibility and to use a compatible library version.
The quarkus-jgit extension is not supported in Red Hat build of Quarkus.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the Quarkus Migration guide 3.22.
1.4.2.4. JSON-RPC: Extensions must always produce JsonRPCProvidersBuildItem 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, a JsonRPCProvidersBuildItem must be produced regardless of the build mode.
Previously, most extensions produced this build item only in dev mode by using @BuildStep(onlyIf = IsDevelopment.class).
Now, the build process requires this item at build time to enable execution model validation on JSON-RPC classes.
The build process uses this item to identify JSON-RPC endpoints, particularly classes that use annotations such as @Blocking, @NonBlocking, or @RunOnVirtualThread.
To migrate, replace conditional build steps as follows:
Previously used code:
@BuildStep(onlyIf = IsDevelopment.class) JsonRPCProvidersBuildItem createJsonRPCService() { return new JsonRPCProvidersBuildItem(...); }@BuildStep(onlyIf = IsDevelopment.class) JsonRPCProvidersBuildItem createJsonRPCService() { return new JsonRPCProvidersBuildItem(...); }Copy to Clipboard Copied! Toggle word wrap Toggle overflow Updated code:
@BuildStep JsonRPCProvidersBuildItem createJsonRPCService() { return new JsonRPCProvidersBuildItem(...); }@BuildStep JsonRPCProvidersBuildItem createJsonRPCService() { return new JsonRPCProvidersBuildItem(...); }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Quarkus previously provided a fallback detection mechanism for JSON-RPC classes. That mechanism is removed in the current release.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the Quarkus Migration guide 3.22: extensions must produce JsonRPCProvidersBuildItem always.
1.4.2.5. Stork: No longer managed by REST Client 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, Stork is no longer a built-in dependency of the REST Client.
Now, you must add the quarkus-stork extension to your project dependencies to use Stork with REST Client.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the Quarkus Migration guide 3.22.
1.4.2.6. Test native-image-profile configuration property removed 링크 복사링크가 클립보드에 복사되었습니다!
Breaking change: The current release removes the long-deprecated quarkus.test.native-image-profile configuration property. Update any configurations that still use the removed property to use the current quarkus.test.integration-test-profile property instead.
The quarkus.test.integration-test-profile property specifies the configuration profile to use when running tests with @QuarkusIntegrationTest:
- Type: String
-
Default value:
prod -
Environment variable:
QUARKUS_TEST_INTEGRATION_TEST_PROFILE - Configuration timing: Fixed at build time
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
1.4.3. Data 링크 복사링크가 클립보드에 복사되었습니다!
1.4.3.1. Apache Derby database support removed 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, support for the Apache Derby database has been removed from Red Hat build of Quarkus.
Apache Derby was deprecated in a previous release and has now been fully removed. Applications using Derby should migrate to a supported database such as PostgreSQL, MySQL, MariaDB, or another database listed in the supported configurations.
If your application currently uses Derby, you will need to:
- Update your application dependencies to remove Derby JDBC drivers
-
Update your
application.propertiesorapplication.yamlto configure a different database - Migrate your existing Derby database schema and data to the new database
For information about configuring datasources in Red Hat build of Quarkus, see Configuring data sources.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
1.4.3.2. Dev Services default images updates 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, the default images for the following Dev Services have been updated to the following versions:
- Elasticsearch version 9.1
- OpenSearch version 3.1
Breaking change: If your applications require specific versions of these images, you must configure the container image explicitly. For example:
quarkus.elasticsearch.devservices.image-name=docker.io/elastic/elasticsearch:9.1.3
quarkus.elasticsearch.devservices.image-name=docker.io/elastic/elasticsearch:9.1.3
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the Configuring the image section of the Quarkus "Dev Services for Elasticsearch" guide.
1.4.3.3. Hibernate ORM: Database version checks 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, Hibernate ORM improves database version checks.
Earlier releases already applied these checks; this update enhances version detection accuracy and expands the scope of checks run at startup.
If application startup fails the version check, set the correct database version for your dialect or upgrade the database to a supported version.
When you use CockroachDialect, set the CockroachDB version (not a PostgreSQL version) to match the server your application connects to.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the Quarkus Migration guide 3.25.
1.4.3.4. Hibernate ORM: Schema management configuration properties renamed 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, the following Hibernate ORM (quarkus-hibernate-orm) extension properties are renamed to simplify YAML configuration and prepare for future changes.
The old properties remain recognized in the current release, but are deprecated and are planned to be removed in a future release.
Use the new properties when you upgrade to the current release.
| Old property name | New property name |
|---|---|
| quarkus.hibernate-orm.database.generation | quarkus.hibernate-orm.schema-management.strategy |
| quarkus.hibernate-orm.database.generation.create-schemas | quarkus.hibernate-orm.schema-management.create-schemas |
| quarkus.hibernate-orm.database.generation.halt-on-error | quarkus.hibernate-orm.schema-management.halt-on-error |
To apply this change, run the automatic update process described in the Migrating applications to Red Hat build of Quarkus 3.27 guide.
1.4.3.5. Hibernate ORM: Upgraded to version 7.1 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, Hibernate ORM has been upgraded to version 7.1. This upgrade introduces breaking changes that might affect your applications.
API changes
Deprecated
Sessionmethods have been removed or replaced by JPA equivalents.To apply changes marked as "Automatic", run the automatic update process described in the Migrating applications to Red Hat build of Quarkus 3.27 guide, otherwise manually perform any additional steps.
Expand Deprecated SessionmethodNew JPA equivalent Update process load(…) without a lock option
getReference(…)
Automatic
get(…)
find(…)
Automatic
delete(…)
remove(…)
Automatic
save(…)
persist(…)
Automatic
update(…)
merge(…)
Manual
load(…) with a lock option
find(…)
Manual
saveOrUpdate(…)
persist (new entity) / merge (persisted, then detached entity)
Manual
NoteWhen migrating from an
updatemethod to amergemethod, be aware of the following differences:-
mergereturns an entity instance attached to the persistence context. Ensure that you use that entity and discard the one passed as an argument. -
To ensure proper merging,
mergecan load the entity. When usingmergeon multiple entities in succession,N+1select issues might occur. To avoid this issue, load all entities in the session before themergecall, for example, by usingSession#findMultiple.
To apply this change, manually perform any additional steps described in this release note.
For more information, see Hibernate ORM Defer to JPA.
-
- Deprecated annotations have been removed or replaced by JPA equivalents. To view the impacted annotations, see Hibernate ORM Annotations.
@CascadeandCascadeTypeare deprecated and replaced by JPA equivalents such as@OneToMany(cascade = …).To apply this change, run the automatic update process described in the Migrating applications to Red Hat build of Quarkus 3.27 guide.
-
Proxy customization has changed. If you were using
@Proxy, consider@ConcreteProxyinstead, or use theSession#getReferenceorHibernate#unproxymethods. For more information, see Hibernate ORM Replace @Proxy. -
org.hibernate.Metamodelwas removed and replaced byorg.hibernate.metamodel.model.domain.JpaMetamodel. -
The
UserTypeandCompositeTypemethod signatures changed to no longer refer to internal or Service Provider Interface (SPI) types. For more information, see Hibernate ORM UserType and CompositeUserType changes. -
Various JDBC types were moved to an internal package. To map your attributes to these types, use
@JdbcTypeCodeinstead of@JdbcType. -
The
LockOptionsclass was deprecated; impacted methods have alternatives involvingLockMode. Some deprecated features of theLockOptionsclass have also been removed. For more information, see Hibernate ORM LockOptions. -
The
Session#getLobHelpermethod is deprecated. UseHibernate#getLobHelperinstead. For more information, see Hibernate ORMSession#getLobHelper.
Behavior changes
Stricter annotation validation
Misplaced mapping annotations now raise exceptions instead of being ignored. Examples include conflicting
@Basicand@ManyToOneannotations on the same attribute, or the use of attribute converters on@Idand@Version. For more information, see Hibernate ORM Domain model validations.Second-level cache usage
StatelessSessionnow uses the second-level cache by default. This change impacts migrating applications that use second-level cache andStatelessSession. For more information, see Hibernate ORM StatelessSession and second-Level cache.Batch operation changes
StatelessSessiondoes not respect thequarkus.hibernate-orm.jdbc.statement-batch-sizesetting. BecauseStatelessSessionoperations are designed to execute immediately, implicit batch operations are not required. Instead, you can use explicit batch operations such as 'insertMultiple()'. For more information, see Hibernate ORM StatelessSession and JDBC batching.Query validation
Ambiguous query strings are no longer accepted. This mainly affects
type-unsafequeries, when not passing a class toSession#createQuery, or when using Panache to create a query. Queries without aselectclause, but with a non-fetchjoin, must now specify the intended behavior. For more information, see Hibernate ORM Query with implicit SELECT and no explicit result type.Changes to types returned for date and time values by native queries
Previously,
java.sqltypes were used to represent date and time types returned by a native query. Now, native queries returnjava.timetypes in the absence of specific type instructions. For more information, see Hibernate ORM Temporal types returned by native queries.
Minimum database versions
The minimum required database versions have been updated to use the oldest version still supported by the respective vendor.
In particular, note the following updates:
- IBM DB2: minimum version updated from 10.5 to 11.1
- MariaDB: minimum version updated from 10.4 to 10.6
- Microsoft SQL Server: minimum version updated from 11.0 (2012) to 12.0 (2014)
PostgreSQL: minimum version updated from 12.0 to 13.0
For more information about current minimum versions, see Hibernate ORM Supported dialects.
MySQL/MariaDB storage engine
Using
quarkus.hibernate-orm.dialect.storage-engineto set the MySQL/MariaDB storage engine has been deprecated. Usequarkus.hibernate-orm.dialect.mariadb.storage-engine=…orquarkus.hibernate-orm.dialect.mysql.storage-engine=…instead.DDL/schema changes
- The custom database initialization script, in particular on H2 databases, might need to change to avoid the use of quotes.
-
Basic arrays are now mapped to proper array structures in a database instead of being serialized as binary data. You can revert this behavior by setting
quarkus.hibernate-orm.unsupported-properties."hibernate.type.preferred_array_jdbc_type"toVARBINARY. Otherwise, if your entity mapping includes arrays, updates to the database schema and a manual update of data are needed. For more information, see Hibernate ORM Array mapping changes. -
char/Characterattributes are now mapped tovarchar(1)instead ofchar(1). - On Oracle and Microsoft SQL Server, timestamp attributes have a different default sub-second precision.
-
On Oracle,
floatanddoubleattributes are mapped tobinary_floatandbinary_doubleinstead offloat(p),real, ordoubleprecision types. For more information, see Hibernate ORM Changes affecting DDL.
Annotation processor changes
-
The Maven artifact for the Hibernate ORM annotation processor has changed from
org.hibernate.orm:hibernate-jpamodelgentoorg.hibernate.orm:hibernate-processor. In Maven, update theannotationProcessorPath. The annotation processor
org.hibernate.jpamodelgen.JPAMetaModelEntityProcessoris deprecated in favor oforg.hibernate.processor.HibernateProcessor.To apply this change, run the automatic update process described in the Migrating applications to Red Hat build of Quarkus 3.27 guide.
-
The Maven artifact for the Hibernate ORM annotation processor has changed from
Contexts and dependency injection (CDI) restrictions for Hibernate ORM components
Some pluggable components, that are potentially retrieved before CDI is initialized, can no longer be CDI beans.
If you need to provide a custom implementation of such components, and need access to CDI within that implementation, consider retrieving other beans by using
Arc.container().instance(OtherBean.class).get(). For a list of impacted components, see the Migration guide 3.24.
JSON/XML mapping
Previously, Hibernate ORM’s "format mappers" for JSON/XML serialization in the database relied on global REST layer serialization settings by default.
Now, it is preferred to separate database layer and REST layer serialization to help ensure database format stability and prevent unnecessary migrations. However, because of this, the current release fails by default if the following conditions are met:
- Your application has a Hibernate mapping involving XML or JSON stored in the database.
- The XML or JSON serialization settings for the REST layer are customized.
Should this occur, you can update your database serialization settings:
Jackson-based JSON serialization
If the
ObjectMappercustomization applied in your application does not affect the format of the JSON stored in the database, bypass thatObjectMapperby specifyingquarkus.hibernate-orm.mapping.format.global=ignore.Otherwise, implement a custom
FormatMapperbean. First, delegate a format mapper to the global REST layer serialization.For more information, see the Migration guide 3.26 and the Customizing JSON/XML serialization/deserialization section of the Quarkus "Using Hibernate ORM and Jakarta Persistence" guide.
Then, take either of the following actions:
-
Continue to use this delegating format mapper if you want to rely on the globally configured
ObjectMapperand depend on the REST layer serialization needs. -
Prepare and test migration scripts to update your JSON data. You can use either Hibernate ORM’s default format or adapt the
FormatMapperimplementation to format JSON according to your needs.
-
Continue to use this delegating format mapper if you want to rely on the globally configured
JSON-B-based JSON serialization
This scenario is identical to that of the Jackson-based mapper. For more information, see the Migration guide 3.26.
JAXB-based XML serialization
The XML serialization format change in Hibernate ORM 7.0 also has an impact. While the Quarkus built-in JAXB-based XML format mapper uses the legacy format, removing or bypassing it with
quarkus.hibernate-orm.mapping.format.global=ignoremakes the format incompatible.To mitigate, create a mapper that delegates to Hibernate ORM’s mapper. For more information, see the Migration guide 3.26.
Then, take either of the following actions:
- Continue to use this delegating format mapper if you want to rely on the legacy format.
-
Prepare and test migration scripts to update your XML data. You can use either Hibernate ORM’s default format or adapt the
FormatMapperimplementation to format XML according to your needs.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the following resources:
1.4.3.6. Hibernate Reactive: Database version checks 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, Hibernate Reactive validates database versions during startup.
This change ensures compatibility with supported databases and prevents applications from running against unsupported or incompatible versions.
If your application connects to a database version that does not meet Hibernate Reactive’s requirements, startup fails with a clear error message.
To resolve this issue, upgrade the database to a supported version or adjust your setup accordingly.
For more information, see the Quarkus Migration guide 3.25.
1.4.3.7. Hibernate Reactive: Upgraded to version 3.1 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, Hibernate Reactive has been upgraded to version 3.1.
Hibernate Reactive 3.1 remains compatible with 3.0 for most applications, but it inherits breaking changes from Hibernate ORM.
For more information about the Hibernate ORM breaking changes, see the Hibernate ORM: Upgraded to version 7.1 release note.
The following Hibernate Reactive breaking changes are also introduced:
API changes
The
ReactiveIdentifierGeneratorAPI is updated and now extendsorg.hibernate.generator.Generator, which requires additional methods.This change affects users who define a custom identifier generator by using the
@GenericGeneratorannotation and implement their own generator classes.To implement the new API, update custom identifier generators that are defined with
@GenericGenerator.In the
Generatorinterface, update the following methods:-
generatedOnExecution(): Returntrueif the identifier is generated during query execution, orfalseif it is generated in your application code. -
getEventTypes(): Specify if the identifier changes during aninsertorupdateoperation.
-
Minimum database versions
The
quarkus-hibernate-reactiveextension aligns its minimum supported database versions with Hibernate ORM 7.1 dialect requirements. For more information about current minimum versions, see Hibernate ORM Supported dialects.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
1.4.3.8. Hibernate Search: Upgraded to version 8.1 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, Hibernate Search has been upgraded to version 8.1.
With the upgrade to the 8.x version series, some breaking changes are introduced that might impact your applications.
-
Deprecated classes are removed in favor of their recommended alternatives. Notably,
org.hibernate.search.mapper.orm.massindexing.MassIndexingMonitorhas been replaced byorg.hibernate.search.mapper.pojo.massindexing.MassIndexingMonitor. -
The
MassIndexingMonitor#addToTotalCountmethod is deprecated and replaced byMassIndexingMonitor#typeGroupMonitor(..) -
multi()methods in the projection DSL are deprecated and replaced by.list()/.set()/sortedSet()/collector(…). -
Logging categories have been updated. In particular, the
org.hibernate.search.elasticsearch.requestlogging category, used for logging every request sent to Elasticsearch, has been renamed toorg.hibernate.search.elasticsearch.client.request. For more information, see List of all available logging categories. -
Search DSL interfaces are enhanced to include an extra
SRtype argument reference guide . - The format of mass indexing logs has changed to present more information in a condensed format.
-
Metric aggregation
countDistinct()is deprecated and replaced by an option incount()aggregation:.count().field(..).distinct().
For more information, see the following resources:
1.4.4. Messaging 링크 복사링크가 클립보드에 복사되었습니다!
1.4.4.1. Apache Kafka: client upgraded to version 4.0.0 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, the Apache Kafka client artifact, kafka-clients, which is used in the quarkus-kafka-client extension, has been upgraded to version 4.0.0.
This version introduces the following changes:
- Removal of ZooKeeper dependency
- Support for some older protocols or API versions is removed
- Incompatibility with older clients or brokers that rely on deprecated features
- A minimum requirement for Java version 11 for your Quarkus application
- Improvements to client metrics
You can still connect to Apache Kafka 3.x brokers. Older brokers that rely on removed protocol versions might be incompatible.
For more information, see the following resources:
- Apache Kafka 4.0 documentation
- Quarkus Apache Kafka reference guide
1.4.5. Observability 링크 복사링크가 클립보드에 복사되었습니다!
1.4.5.1. OpenTelemetry: Changes to metrics 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, the OpenTelemetry metrics provided by the quarkus-opentelemetry extension have changed.
By default, OpenTelemetry metrics are disabled. When enabled, by setting quarkus.otel.metrics.enabled=true, metrics related to the JVM and the HTTP server are collected.
The following table lists the OpenTelemetry metrics that are now available. Note that jvm.system.cpu.utilization metric is removed in JVM mode; use jvm.cpu.recent_utilization instead.
| Metric name | Description | Type | Available on JVM | Available on Native | MP Telemetry 2.0 |
|---|---|---|---|---|---|
| http.server.request.duration | Duration of HTTP server requests | HISTOGRAM | Y | Y | Y |
| jvm.memory.committed | Measure of memory committed | LONG_SUM | Y | No data produced | Y |
| jvm.memory.used | Measure of memory used | LONG_SUM | Y | No data produced | Y |
| jvm.memory.limit | Measure of max obtainable memory | LONG_SUM | Y | Not present | Y |
| jvm.memory.used_after_last_gc | Measure of memory used, as measured after the most recent garbage collection event on this pool | LONG_SUM | Y | No data produced | Y |
| jvm.gc.duration | Duration of JVM garbage collection actions | HISTOGRAM | Y | Not present | Y |
| jvm.class.count | Number of classes currently loaded | LONG_SUM | Y | No data produced | Y |
| jvm.class.loaded | Number of classes loaded since JVM start | LONG_SUM | Y | No data produced | Y |
| jvm.class.unloaded | Number of classes unloaded since JVM start | LONG_SUM | Y | No data produced | Y |
| jvm.cpu.count | Number of processors available to the JVM | LONG_SUM | Y | Y | N |
| jvm.cpu.limit | LONG_SUM | Y | No data produced | N | |
| jvm.cpu.time | CPU time used by the process as reported by the JVM | DOUBLE_SUM | Y | Not present | N |
| jvm.system.cpu.utilization | CPU time used by the process as reported by the JVM | DOUBLE_SUM | Not present | No data produced | N |
| jvm.cpu.recent_utilization | Recent CPU utilization for the process as reported by the JVM | DOUBLE_GAUGE | Y | No data produced | N |
| jvm.cpu.longlock | Long lock times | HISTOGRAM | Y | Y | N |
| jvm.cpu.context_switch | DOUBLE_SUM | Y | No data produced | N | |
| jvm.network.io | Network read/write bytes | HISTOGRAM | Y | Not present | N |
| jvm.network.time | Network read/write duration | HISTOGRAM | Y | Not present | N |
| jvm.thread.count | Number of executing platform threads | LONG_SUM | Y | Y | Y |
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the following resources:
- Quarkus Using OpenTelemetry Metrics guide
- Quarkus Migration guide 3.25: OpenTelemetry metrics
1.4.6. Security 링크 복사링크가 클립보드에 복사되었습니다!
1.4.6.1. HTTP Authentication: Deprecated getCredentialTransport() method removed 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, the deprecated blocking HttpAuthenticationMechanism.getCredentialTransport() method is removed.
If your application or a custom security extension overrides this method, you must update the implementation to avoid compilation errors.
Replace the removed method by implementing the reactive version, as in the following example:
Uni<HttpCredentialTransport> getCredentialTransport(RoutingContext context) {
return Uni.createFrom().item(myHttpCredentialTransport);
}
Uni<HttpCredentialTransport> getCredentialTransport(RoutingContext context) {
return Uni.createFrom().item(myHttpCredentialTransport);
}
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
1.4.6.2. TLS Registry extension restructuration 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, the TLS Registry extension (quarkus-tls-registry) has been restructured to avoid having a split package between the runtime and spi modules.
As part of this reorganization, the io.quarkus.tls.TlsRegistryBuildItem class has been renamed to io.quarkus.tls.deployment.spi.TlsRegistryBuildItem. It is still located in the spi module.
If you have existing code that references the earlier TlsRegistryBuildItem class location, update your imports to use the current package:
// Earlier import import io.quarkus.tls.TlsRegistryBuildItem; // Current import import io.quarkus.tls.deployment.spi.TlsRegistryBuildItem;
// Earlier import
import io.quarkus.tls.TlsRegistryBuildItem;
// Current import
import io.quarkus.tls.deployment.spi.TlsRegistryBuildItem;
This change aligns with the architectural improvements proposed in the Quarkus project to maintain clearer separation between deployment and runtime components.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
1.4.7. Tooling 링크 복사링크가 클립보드에 복사되었습니다!
1.4.7.1. Extension developers: Support for legacy config classes removed 링크 복사링크가 클립보드에 복사되었습니다!
Breaking change: Support for building extensions with legacy config classes and the -AlegacyConfigRoot=true annotation processor option has been removed.
Extensions must now use config interfaces annotated with @ConfigMapping and @ConfigRoot.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the following resources:
1.4.7.2. Gradle: testNative and quarkusIntTest tasks no longer depend on the test task 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, the Gradle tasks testNative and quarkusIntTest no longer depend on the test task.
Now, they execute only the native tests and the integration tests respectively, allowing independent test execution stages.
Update your build scripts if you previously relied on the default task dependency that included unit tests when running native or integration tests.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the Quarkus Migration guide 3.22.
1.4.8. Web 링크 복사링크가 클립보드에 복사되었습니다!
1.4.8.1. ContextResolver: Lambda use in REST Client forbidden 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, defining a ContextResolver in REST Client with a lambda throws an IllegalArgumentException.
This occurs because the REST Client extension cannot infer the generic type, unlike previous versions that defaulted to Object.
Replace lambdas with concrete ContextResolver implementations to avoid runtime errors and ensure correct REST Client configuration.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the Quarkus Migration guide 3.22.
1.4.8.2. Panache REST: Jakarta REST resources restricted to Quarkus REST 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, Jakarta REST resource classes that use Panache work only with Quarkus REST modules.
REST Data Panache modules no longer work with RESTEasy Classic modules.
A list of the affected modules:
-
quarkus-hibernate-orm-rest-data-panache -
quarkus-hibernate-reactive-rest-data-panache -
quarkus-mongodb-rest-data-panache -
spring-data-rest
Use Quarkus REST, quarkus-rest-*, instead of RESTEasy Classic, quarkus-resteasy-*, to avoid runtime failures.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the Quarkus Migration guide 3.22.
1.4.8.3. REST: JsonView deserialization behavior changed 링크 복사링크가 클립보드에 복사되었습니다!
In the current release, Quarkus REST applies @JsonView consistently to both serialization and deserialization.
@JsonView on resource methods or DTOs now controls which properties are read from input and written to output according to the specified view classes (for example, Views.Public and Views.Private).
Previously, only serialization honored @JsonView, so deserialization might have accepted properties outside the active view. Applications that relied on that behavior might require code or configuration changes to align with the new behavior.
To apply this change, manually perform any additional steps described in this release note. The automatic update process in the Migrating applications to Red Hat build of Quarkus 3.27 guide do not cover this change.
For more information, see the Quarkus Migration guide 3.21.