0

HornetQ と mysql の間でトランザクションを管理するために immutant を使用しようとしています。ドキュメントを理解しているので、これを行うには XA トランザクションを使用する必要があります。これは、アプリ サーバー内ではなくスタンドアロン アプリを実行しているためです。

ただし、:xa? を設定しようとすると? 私のアプリケーションのコンテキストでは、リスナーをセットアップするときに例外が発生します。

(ns example
  (:require [immutant.messaging :as msg]))

(def capture (atom nil))
(let [ctx (msg/context :host "localhost" :xa? true)
      queue (msg/queue "example" :context ctx)]
  (reset! capture nil)
  (msg/listen queue (fn [m] (reset! capture m)))
  (msg/publish queue {:my :msg}))

これにより、「java.lang.IllegalStateException: You can't create a child context from an XA context.」がスローされます。(msg/listen) 呼び出しから。私は何を間違っていますか?

4

1 に答える 1

1

バグを発見したと思いますが、あなたの場合、回避策があると思い:xa? trueます。キューがリモートの場合にのみ、そのオプションが必要です。immutant.transactions/transactionマクロを使用して、リスナーハンドラーで HornetQ アクションを MySQL にバインドする XA トランザクションを作成することもできます。例については、ドキュメントを参照してください。

于 2016-05-27T19:36:23.777 に答える