2016-05-27 13 views
0

Ich versuche, immutant zu verwenden, um Transaktionen über HornetQ und mysql zu verwalten. Wie ich die Dokumente verstehe, muss ich XA-Transaktionen verwenden, da ich eine eigenständige App betreibe und nicht in einem App-Server.XA Kontext für immutante Listener

Aber wenn ich versuche und setze: xa? Für den Kontext meiner Anwendung erhalte ich Ausnahmen, wenn ich binde, um einen Listener einzurichten.

(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})) 

Dies wirft „java.lang.IllegalStateException: Sie kein Kind Zusammenhang von einem XA Kontext schaffen.“ aus dem Aufruf (msg/listen). Was mache ich falsch?

+0

Hallo. Da ich die Option host sehe, gehe ich davon aus, dass Sie versuchen, sich mit einer HornetQ-Instanz in einer separaten JVM zu verbinden: Können Sie mir etwas über diese JVM sagen? Welche Version von HornetQ läuft gerade? Auch welche Version von Immutant? Vielen Dank! – jcrossley3

Antwort

1

Ich denke, Sie haben eine bug entdeckt, aber in Ihrem Fall, ich denke, es gibt eine Problemumgehung: Sie brauchen nur diese Option :xa? true, wenn Ihre Warteschlange remote ist. Sie können weiterhin eine XA-Transaktion erstellen, die Ihre HornetQ-Aktionen an MySQL in Ihrem Listener-Handler bindet, indem Sie das Makro immutant.transactions/transaction verwenden. Ein Beispiel finden Sie in der docs.

+0

Hallo Jim, als Antwort auf deine Fragen oben benutze ich HornetQ Server Version 2.5.0.SNAPSHOT (Wild Hornet, 124) und im Clojure Space ziehe ich die [org.immutant/immutant "2.1.4"] Abhängigkeit ein. Leider ist mein Produktionsanwendungsfall eine ferne Warteschlange und die Verwendung von localhost in meinem Beispiel ist nur, wie ich es lokal teste. Vielen Dank für den Fehlerbericht und Patch, sehr geschätzt. – clumsyjedi