Quarkus 2.8.0引入了细粒度的Transaction API

2023-10-14 17:12:49 浏览数 (3)

升级概览

Quarkus 2.8.0.Final发布,特性包括:将RESTEasy Reactive作为默认 REST 层;将 GraalVM 22.0 作为默认版本;新的QuarkusTransaction API;以及 Elasticsearch Dev Services(可以自动启动devtest模式的 Elasticsearch 容器)。此外,由于存在二进制兼容性不可靠问题,AssertJ被从 Quarkus BOM 中删除。开发人员需要在他们的应用程序中明确指定 AssertJ 3.22.0

改动

默认集成了RESTEasy Reactive REST层和GraalVM 22.0。细粒度的编程事务API提供了对事务的更多控制。

引入了RESTEasy Reactive 集成,这是JAX-RS的反应式实现,由Vert.x实现。在这个版本中,RESTEasy Reactive 现在是默认的实现,支持阻塞和反应式调用,根据端点的返回类型自动选择。

REST服务器的所有依赖quarkus-resteasy都应该被quarkus-resteasy-Reactive 替代,除了quarkus-resteasy-mutiny,因为它的功能集成在RESTEasy Reactive中。

注释替换,比如org.jboss.resteasy.annotations.jaxrs。QueryParam,应该被org.jboss.resteasy替换。响应式注释,如org.jboss.resteasy.reactive.RestQuery。

REST客户端实现应该用quarkus-rest-client-reactive**依赖项取代quarkus-rest-client*依赖项。RESTEasy Reactive迁移指南和参考指南提供了进一步的迁移指南。

QuarkusTransaction API

QuarkusTransaction API现在提供了一个编程API,通过显式调用begin()和commit()方法来控制事务:

代码语言:javascript复制
QuarkusTransaction.begin();
// implementation 
QuarkusTransaction.commit();

该事务被绑定到CDI请求范围,并在异常破坏请求范围时自动回滚。或者,也可以在超时发生时启动事务并回滚:

代码语言:javascript复制
QuarkusTransaction.begin(QuarkusTransaction.beginOptions() 
.timeout(42));
// implementation
QuarkusTransaction.rollback();

Lambda作用域事务通过在事务中执行Runnable提供了另一种选择:

代码语言:javascript复制
QuarkusTransaction.run(() -> {
// implementation 
});

另外,也可以使用支持异常处理和枚举语义 DISALLOW_EXISTING, JOIN_EXISTING, SUSPEND_EXISTING, REQUIRE_NEW(默认)的Callable解决方案:

代码语言:javascript复制
int answer = QuarkusTransaction.call(QuarkusTransaction.runOptions() 
.timeout(21) .exceptionHandler((throwable) -> {
if (throwable instanceof RuntimeException) { return RunOptions.ExceptionResult.COMMIT;
} return RunOptions.ExceptionResult.ROLLBACK; 
}) .semantic(RunOptions.Semantic.REQUIRE_NEW), () -> {
// implementation 
return 42;
});

将GraalVM 22.0作为默认版本,在构建本地映像时提供了改进的日志记录。

Quarkus现在支持OpenID连接(OIDC)的密钥交换证明(PKCE),这是OAuth 2.0协议上的一个身份层。PKCE是OAuth 2.0的扩展,以减轻公共客户端请求访问令牌时的安全威胁。

维护者决定从物料清单(BOM)中删除AssertJ,因为新版本经常会破坏二进制兼容性。项目现在应该显式声明AssertJ 3.22.0,目前是最新版本。

当使用Elasticsearch扩展名时,在Dev和test模式下运行测试时,Elasticsearch服务会自动启动一个Elasticsearch容器,除非显式禁用,例如,quarkus.devservices.enabled设置为false。

0 人点赞