私は自分のデータベースにOracle 11gを使用しています。また、JMS実装としてOracle Streams AQ機能を使用しています。Oracle Streams AQを使用したSpring MDBでのJMSおよびHibernateトランザクションの共有
トランザクションデータアクセスとJMSトランザクションの両方に同じデータソースを使用する、Springベースのメッセージ駆動型POJO(MDP)を実装することが可能です。すべてXAトランザクションなし(IIRC、これSpringSource Advanced Pack for Oracleの機能として市販されていました)。
これはHibernateでも可能ですか?理想的には、私のMDPはJMSトランザクションを開始し、キューからメッセージを読み込み、Hibernateを介してデータアクセスのためにトランザクションを再利用します。何か問題が生じた場合は、2フェーズコミット(2PC)を使用せずに、JMSとデータベーストランザクションの両方がロールバックされます。
私はトランザクションの専門家ではないので、深く掘り下げる前に誰でもこれが可能であり、意味があることを確認できますか?
更新:
私が欲しいものはShared Transaction Resource patternの実装です。 sample codeはActiveMQとJDBCのためにそれを示していますが、Oracle Streams AQとHibernateを使用する必要があります。
アップデート2: Oracle用のSpringSource Advanced Packには、春データJDBCの一部としてopen sourcedされていると、それは「高価な分散2に頼らずに データベースとメッセージアクセスの両方のための単一のローカルトランザクションマネージャを使用するオプションを提供しますフェーズコミット トランザクション管理 "。
+1。しかし、「XA-Transactionsがない(IIRC、これはSpringSource Advanced Pack for Oracleの機能として販売されていたもの)」という文については不思議です。私は、複数のノード(JMSやDAなど)にまたがるトランザクションがXAトランザクションでなければならず、2PCを使用しなければならないことは非常に肯定的です。これは通常、シーンの背後にあるコンテナによって行われます。私が間違っている?何とかそれが不要になるいくつかの新しい素晴らしい技術はありますか? – ChssPly76
ご意見ありがとうございます。私は少し深く掘り下げてから質問を更新しました。 リンク先の記事で説明したように、私はJTAとXAを完全に避けたいと思います。 [SpringSource Advanced Pack for Oracle](https://www.springsource.com/products/enterprise/oraclepack)のドキュメント(こちら[http://www.springsource.com/downloads/springsource-advanced-pack] -for-oracle-database-download))にもその可能性が言及されています(残念ながらここで引用するには長すぎる3.2章の最後の段落を参照してください)。 –
JTAを使わずにデータソースとJMS間でtxコーディネーションを行う方法はありません。 – skaffman