Hibernate引入響應性Reactive支援

banq發表於2020-12-12

響應式程式設計使我們能夠利用非阻塞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的支援。

相關文章