Hibernate引入响应性Reactive支持


响应式编程使我们能够利用非阻塞IO来减少程序中的资源使用。长期以来,非阻塞IO并不是与关系数据库进行交互的程序的选择,因为JDBC和ODBC等数据访问API都是基于基本同步的阻塞模式设计的。
最近,情况发生了变化,例如 针对PostgreSQL,MySQL,Db2和SQL Server的Vert.x客户端API以及其他类似项目。因此,Java程序现在可以以完全异步,非阻塞的方式与关系数据库进行交互。
此外,诸如Mutiny之类的API使用流而不是嵌套的回调简化了响应式编程,从而至少减轻了Java异步编程的痛苦。
但是当然可以回溯到2006年,当我们设计Java持久性API来简化Java中的ORM并统一当时存在的ORM实现时,“反应式编程”并没有受到任何关注。因此,JPA从根本上阻止了自然支持,“反应式ORM”是根本不存在的。
因此,今天我们向社区介绍Hibernate Reactive,这是Hibernate ORM的反应式API,它支持非阻塞数据库客户端和反应式编程,作为与关系数据库进行交互的范例。
Hibernate Reactive重用了Hibernate ORM的大部分实现,但是用围绕响应流设计的新层替换了与JDBC交互的代码,并向程序员公开了一个新的响应SessionAPI
实际上,有两种反应式SessionAPI,一种用于使用Mutiny的程序,另一种用于使用Java的程序CompletionStage。

// Mutiny-based API
factory.withTransaction(
       
// retrieve a Book
        (session, tx) -> session.find(Book.class, bookId)
               
// delete the Book
                .chain(book -> session.remove(book))
)

自然,我们尽可能地避免使用JPA和Hibernate ORM,包括 OR映射注释,基本持久性操作的命名和语义 以及调整性能的选项。JPA和Hibernate的用户甚至都熟悉大多数配置属性
如果您以前使用过Hibernate,并且还对响应式流进行过一些编程,则应该立即使用Hibernate Reactive。如果您从未使用过Hibernate,或者从未使用过反应式编程,那么这是学习新知识的机会,我们将为您提供帮助!
无论哪种情况,您的最佳出发点都是我们的 《 Hibernate Reactive简介》
Hibernate Reactive仅在端到端反应技术堆栈的情况下才真正有用。因此,我们当然要确保它可以与Vert.x一起使用,并且可以直接集成到其他平台中。
但是这里令人兴奋的消息是,我们还将其与Quarkus的新反应式API集成在一起,我们将很快宣布。我们的目标是为Java开发人员提供最舒适,最熟悉的方式,使其过渡到反应式编程模型。
在以后的文章中,我们将更多地讨论Quarkus中的响应数据访问。
我们也正在努力扩展此受支持的数据库列表。当前,仅支持PostgreSQL,MySQL和Db2,但我们希望很快引入对SQL Server的支持。