2016-05-27 6 views
0

私はHornetQとmysqlの間でトランザクションを管理するためにimmutantを使用しようとしています。ドキュメントを理解しているので、これを行うには、アプリケーションサーバー内ではなくスタンドアロンのアプリケーションを実行しているため、XAトランザクションを使用する必要があります。不変リスナーの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:XAコンテキストから子コンテキストを作成できません。」 (msg/listen)呼び出しから取得します。私は間違って何をしていますか?

+0

こんにちは。だから私は:hostオプションを見るので、別のJVMでHornetQインスタンスに接続しようとしていると仮定しています。そのJVMについて教えてください。特にHornetQのどのバージョンが動作していますか?また、Immutantのバージョンは?ありがとう! – jcrossley3

答えて

1

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

+0

こんにちはJim、上記の質問に私はHornetQ Serverバージョン2.5.0.SNAPSHOT(Wild Hornet、124)を使用していますが、clojureスペースでは[org.immutant/immutant "2.1.4"]依存関係を引き出しています。ああ、私のプロダクションユースケースはリモートキューです。私の例でlocalhostを使用するのは、ローカルでテストする方法です。バグ報告とパッチをありがとう、ありがとうございました。 – clumsyjedi

関連する問題