1.8. 已知问题
查看以下已知问题以了解红帽构建的 Quarkus 3.20 限制和临时解决方案。
1.8.1. FIPS:在启用了 FIPS 的环境中测试时的已知问题 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,进行了测试,以评估 Quarkus 应用程序在启用了 FIPS (Federal Information Processing Standards)模式的环境中的行为。
测试通常成功完成时,一些技术集成和原生镜像配置目前存在阻止验证或编译的限制。
在启用了 FIPS 的环境中测试显示几个关键组件的成功结果,包括 OpenID Connect (OIDC)、支持的数据库、缓存、在非原生模式和 OpenTelemetry 中与 Kafka 的消息。但是,目前无法在这些环境中验证一些技术集成和原生配置。
这些发现结果并不表示红帽构建的 Quarkus 或其组件对 FIPS 的官方支持。
无法验证的场景
以下技术集成或配置目前在启用了 FIPS 的环境中无法验证:
- MariaDB 11.x
- 在 JVM 和原生模式下使用 Mandrel 23.0 和 23.1 的 Infinispan 客户端扩展
- 在原生模式中使用 SCRAM 和 OAUTHBEARER SASL 机制的 Apache Kafka
- 原生模式中的 JDBC MSSQL 驱动程序
- DB2
- 原生模式的 reactive MSSQL 客户端
- 使用 Red Hat Mandrel 23.1 构建器镜像的原生镜像编译
重要的相关问题
以下公共 JIRA 票据提供了遇到的限制的更多详情:
- QUARKUS-5984 :由于兼容性问题,MariaDB 11.x 无法在启用了 FIPS 的环境中连接。
- QUARKUS-2036: Infinispan 客户端扩展缺少对启用了 FIPS 的环境的支持。
- QUARKUS-2984 :使用 JDBC MSSQL 和 Reactive MSSQL 客户端的本地构建在启用了 FIPS 的 RHEL 8 上会失败。
- QUARKUS-5232: SASL SCRAM 机制在启用了 FIPS 的环境中的原生模式下不可用。
- QUARKUS-5233: SASL OAUTHBEARER 机制在启用了 FIPS 的环境中的原生模式下不可用。
- MANDREL-254: Mandrel 23.1 构建器镜像需要重新工作以支持启用了 FIPS 的环境。
- QUARKUS-4387: Quarkus Reactive MySQL 客户端在启用了 FIPS 的环境中不被支持。
- QUARKUS-4612 :在带有原生 Mandrel 23.0 和 23.1 的 FIPS 上 Infinispan 客户端扩展会失败。
临时解决方案
当前还没有可用的临时解决方案。
此发行注记旨在在更广泛的兼容性测试时抢占披露已知挑战。
1.8.2. Kafka Streams 扩展在 Microsoft Windows 上缺少原生库 复制链接链接已复制到粘贴板!
由于缺少原生库 librocksdbjni-win64.dll
,在 Microsoft 上使用 quarkus-kafka-streams
扩展的应用程序会在运行时会失败。
在启动过程中,这个问题会抛出以下错误:
java.lang.RuntimeException: librocksdbjni-win64.dll was not found inside JAR
java.lang.RuntimeException: librocksdbjni-win64.dll was not found inside JAR
这个错误可防止初始化 RocksDB 组件,这是 Kafka Streams 应用程序所需的。
目前还没有可用的临时解决方案。
错误示例
如需更多信息,请参阅 QUARKUS-3434。
1.8.3. 在 Windows 上缺少 Snappy 的原生库 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,在 Windows 上运行使用 Snappy 压缩库的应用程序会因为缺少原生库而产生错误。
当尝试压缩 Windows 环境中带有 Snappy 的数据时,用户可能会遇到类似以下示例的错误消息。
错误信息示例
... org.eclipse.microprofile.reactive.messaging.Message$5@1e8dc267 from channel 'test' was not sent to Kafka topic 'test' - nacking message: org.apache.kafka.common.KafkaException: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Windows and os.arch=x86_64 ...
...
org.eclipse.microprofile.reactive.messaging.Message$5@1e8dc267 from channel 'test' was not sent to Kafka topic 'test' - nacking message: org.apache.kafka.common.KafkaException: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Windows and os.arch=x86_64
...
临时解决方案:目前还没有可用的临时解决方案。计划在以后的发行版本中解决这个问题。
如需更多信息,请参阅 QUARKUS-5983。
1.8.4. 原生镜像构建会间歇性失败,在 Mandrel 23.1 上无法访问类型错误 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,使用 Mandrel 23.1 运行时构建原生镜像可能会因为堆快照验证错误而失败。
构建过程失败并显示一个错误,表示类型没有标记为 reachable :
AnalysisType<... reachable: false>
AnalysisType<... reachable: false>
这些错误不一致,并可能在不同应用程序中发生。在受控的环境中,它们尚未可靠复制。
错误 1 示例
com.oracle.graal.pointsto.util.AnalysisError: The heap snapshot verifier discovered a type not marked as reachable: AnalysisType<VMOption$Origin[] -> HotSpotType<[Lcom/sun/management/VMOption$Origin;, resolved>, allocated: false, inHeap: false, reachable: false> at com.oracle.graal.pointsto.heap.HeapSnapshotVerifier$ScanningObserver.ensureTypeScanned(HeapSnapshotVerifier.java:332) ...
com.oracle.graal.pointsto.util.AnalysisError: The heap snapshot verifier discovered a type not marked as reachable:
AnalysisType<VMOption$Origin[] -> HotSpotType<[Lcom/sun/management/VMOption$Origin;, resolved>, allocated: false, inHeap: false, reachable: false>
at com.oracle.graal.pointsto.heap.HeapSnapshotVerifier$ScanningObserver.ensureTypeScanned(HeapSnapshotVerifier.java:332)
...
错误 2 示例
AnalysisType<MemoryType[] -> HotSpotType<[Ljava/lang/management/MemoryType;, resolved>, allocated: false, inHeap: false, reachable: false> AnalysisType<HotSpotDiagnosticMXBean$ThreadDumpFormat[] -> HotSpotType<[Lcom/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat;, resolved>, allocated: false, inHeap: false, reachable: false>
AnalysisType<MemoryType[] -> HotSpotType<[Ljava/lang/management/MemoryType;, resolved>, allocated: false, inHeap: false, reachable: false>
AnalysisType<HotSpotDiagnosticMXBean$ThreadDumpFormat[] -> HotSpotType<[Lcom/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat;, resolved>, allocated: false, inHeap: false, reachable: false>
错误 3 示例
AnalysisType<MemoryType[] -> HotSpotType<[Ljava/lang/management/MemoryType;, resolved>, allocated: false, inHeap: false, reachable: false>
AnalysisType<MemoryType[] -> HotSpotType<[Ljava/lang/management/MemoryType;, resolved>, allocated: false, inHeap: false, reachable: false>
临时解决方案:重试原生镜像构建。由于问题是间歇性的,因此构建可能会在后续尝试时成功。
计划在以后的发行版本中解决这个问题。
如需更多信息,请参阅 MANDREL-332。
1.8.5. OpenTelemetry :当禁用追踪并启用指标时,Dev 模式将无法重新载入 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,如果 application.properties
文件中设置了以下属性,则使用 quarkus-opentelemetry
扩展的应用程序不会在 Dev 模式中重启:
-
quarkus.otel.traces.enabled=false
-
quarkus.otel.metrics.enabled=true
在重新载入尝试过程中,Quarkus 会抛出 UnsatisfiedResolutionException
:
错误信息示例
jakarta.enterprise.inject.UnsatisfiedResolutionException: No bean found for required type [class io.quarkus.opentelemetry.runtime.tracing.DelayedAttributes] and qualifiers [[@jakarta.enterprise.inject.Any()]]
jakarta.enterprise.inject.UnsatisfiedResolutionException: No bean found for required type [class io.quarkus.opentelemetry.runtime.tracing.DelayedAttributes] and qualifiers [[@jakarta.enterprise.inject.Any()]]
临时解决方案
目前还没有可用的临时解决方案。计划在以后的发行版本中解决这个问题。
1.8.6. Quarkus CLI 无法发现 TLS registry CLI 插件 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.15 引入了 quarkus-tls-registry-cli
插件,该插件为 Quarkus CLI 启用 TLS registry 支持。
但是,开发工具目前不会发现托管在 maven.repository.redhat.com
上的 Quarkus CLI 插件。因此,Quarkus CLI 无法默认解析 TLS registry CLI 插件。
当出现这个问题时,CLI 会返回类似以下输出的错误:
[jbang] [ERROR] Could not resolve dependencies: The following artifacts could not be resolved: io.quarkus:quarkus-tls-registry-cli:jar:3.20.2.SP1-redhat-00003 (absent): Could not find artifact io.quarkus:quarkus-tls-registry-cli:jar:3.20.2.SP1-redhat-00003 in central (https://repo1.maven.org/maven2/)
[jbang] [ERROR] Could not resolve dependencies: The following artifacts could not be resolved: io.quarkus:quarkus-tls-registry-cli:jar:3.20.2.SP1-redhat-00003 (absent): Could not find artifact io.quarkus:quarkus-tls-registry-cli:jar:3.20.2.SP1-redhat-00003 in central (https://repo1.maven.org/maven2/)
临时解决方案: 要启用 Quarkus CLI 解析插件,请将 JBang 配置为使用位于 https://maven.repository.redhat.com/ga/
的 Red Hat Maven 存储库。
您可以使用以下方法之一:
使用以下内容创建
jbang.properties
文件:run.repos=central,https://maven.repository.redhat.com/ga/
run.repos=central,https://maven.repository.redhat.com/ga/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在本地应用此配置,请将该文件放在项目的根目录中。要全局应用配置,请将该文件放在
~/.jbang
目录中。如果已安装 JBang,请运行以下命令在全局范围内配置存储库:
jbang config set run.repos central,https://maven.repository.redhat.com/ga/
jbang config set run.repos central,https://maven.repository.redhat.com/ga/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如需更多信息,请参阅 QUARKUS-5183。
1.8.7. Quarkus CLI 只更新红帽构建的 Quarkus 平台版本 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,运行 update 命令只更新红帽构建的 Quarkus 平台 com.redhat.quarkus.platform
中包含的 BOM。如果版本的一部分、quarkus-qpid-jms-bom
和 quarkus-operator-sdk-bom
,则可以包括 quarkus-camel-bom
和 quarkus-camel-bom 和 quarkus-cxf-bom
。
但是,该命令不会更新与上游社区版本关联的 BOM 版本。如果您的项目同时包含红帽构建的 Quarkus 和上游 BOM,则此问题可能会导致 Quarkus 和上游 BOM 组合不兼容。
update 命令示例
mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.20.2.SP1-redhat-00003:update -Dmaven.repo.local=<path-to-local-repo>
$ mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.20.2.SP1-redhat-00003:update -Dmaven.repo.local=<path-to-local-repo>
有问题的 pom.xml
文件示例
- 1
- 没有更新版本。
临时解决方案:手动更新版本号。
如需更多信息,请参阅 QUARKUS-5185。
在 Red Hat build of Quarkus 3.20 中,使用带有返回 Mutiny 类型的异步 REST 客户端的 Hibernate Reactive 可能会导致当前 Hibernate Reactive 会话或事务丢失。
这是因为在没有复制其父级的初始上下文的新 Vert.x 上下文上调用用户回调。因此,回调可能会因为会话或事务缺失而失败,或者静默失败,而不会刷新对数据库的实体更改。更改也可以刷新到新的事务中,而不是预期的外部事务。
临时解决方案
目前还没有可用的临时解决方案。计划在以后的发行版本中解决这个问题。
在 Red Hat build of Quarkus 3.20 中,使用 quarkus/mandrel-for-jdk-21-rhel8:23.1
红帽构建的 Quarkus Native Builder 镜像在启用了 FIPS 的环境中的原生模式中初始化 RSA 密码会生成 NullPointerException
(NPE)错误。
这个问题只在启用了 FIPS 的原生模式下发生,它不会影响禁用 FIPS 的原生模式。在启用了 FIPS 的 Red Hat build 时,它也不会影响 JVM 模式。
启用 FIPS 的环境中不支持原生模式。
错误信息示例
2024-10-17 10:45:01,931 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /repro failed, error id: 9b1f5dbb-058b-4c9b-9377-f3acc0a6cba5-1: java.lang.RuntimeException: java.lang.NullPointerException at org.acme.ReproResource.init(ReproResource.java:38) ...
2024-10-17 10:45:01,931 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /repro failed, error id: 9b1f5dbb-058b-4c9b-9377-f3acc0a6cba5-1: java.lang.RuntimeException: java.lang.NullPointerException
at org.acme.ReproResource.init(ReproResource.java:38)
...
临时解决方案:
如果存在,从
application.properties
文件中删除以下属性:quarkus.security.security-providers=SunPKCS11
quarkus.security.security-providers=SunPKCS11
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
application.properties
文件中添加以下属性,以在运行时初始化ReproResource
类:quarkus.native.additional-build-args=--initialize-at-run-time=org.acme.ReproResource
quarkus.native.additional-build-args=--initialize-at-run-time=org.acme.ReproResource
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如需更多信息,请参阅 MANDREL-245。
1.8.10. Websocket 下一步:在打开事件异常时不会递增连接错误指标 复制链接链接已复制到粘贴板!
在带有 websocket-next
扩展的 Quarkus 3.20 中,当 @WebSocket
端点在 @OnOpen
生命周期方法中抛出异常时,以下指标不会递增:
-
quarkus_websockets_server_connections_opened_errors_total{uri=${ENDPOINT}}
-
quarkus_websockets_client_connections_opened_errors_total{uri=${ENDPOINT}}
这个行为会影响服务器端和客户端 WebSocket 连接指标。
临时解决方案:目前还没有可用的临时解决方案。计划在以后的发行版本中解决这个问题。
如需更多信息,请参阅 QUARKUS-5977。