簡體   English   中英

使用Oracle Streams AQ在Spring MDB中共享JMS和Hibernate事務?

[英]Sharing JMS and Hibernate transactions in a Spring MDB using Oracle Streams AQ?

我正在使用Oracle 11g作為我的數據庫,並將其Oracle Streams AQ功能用作JMS實現。

據我所知,應該可以實現一個基於Spring的消息驅動的POJO(MDP),它使用相同的數據源進行事務數據訪問和JMS事務 - 所有這些都沒有XA-Transactions(IIRC,它作為一個市場銷售) SpringSource Advanced Pack for Oracle的特性)。

這也可以使用Hibernate嗎? 理想情況下,我的MDP將啟動JMS事務並從隊列中讀取消息,然后通過Hibernate重新使用該事務進行數據訪問。 如果出現任何問題,JMS和數據庫事務都將回退,而不使用兩階段提交(2PC)。

我不是一個交易大師,所以在我開始深入挖掘之前,任何人都可以確認這是可能的並且也有意義嗎?

更新:
我想要的是共享事務資源模式的實現 示例代碼演示了ActiveMQ和JDBC,但我需要使用Oracle Streams AQ和Hibernate。

Update2: SpringSource Advanced Pack for Oracle作為Spring Data JDBC的一部分開源 ,它“提供了使用單個本地事務管理器進行數據庫和消息訪問的選項,而無需采用昂貴的分布式兩階段提交事務管理”。

正如你所說,2PC不應該是必要的,因為appserver應該處理它。 但是,您幾乎必須使用JTA(即JavaEE容器)事務,而不是vanilla DataSource事務,因為JMS僅適用於JTA。

這不是什么大問題,只是更加繁瑣:

  1. 你的Spring配置應該使用<jee:jndi-lookup/>來獲取對容器的DataSource的引用,並將該數據源注入到spring管理的hibernate SessionFactory中。
  2. 然后,您需要在上下文中引入事務管理器( <tx:jta-transaction-manager/>應該適用於大多數應用服務器)。
  3. 在Spring JMS MessageListenerContainer ,將上面的事務管理器引用插入其中。

這一切都有意義嗎,還是我應該詳細說明? 此設置確保容器管理的事務跨JMS和Hibernate交互保持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM