2016-05-27 12 views
0

Я пытаюсь использовать immutant для управления транзакциями через HornetQ и mysql. Поскольку я понимаю документы, для этого я должен использовать транзакции 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

Hi. Поэтому, поскольку я вижу параметр: host, я предполагаю, что вы пытаетесь подключиться к экземпляру HornetQ в отдельной JVM: можете ли вы рассказать мне об этой JVM? В частности, какая версия HornetQ работает? Кроме того, какая версия Immutant? Благодаря! – jcrossley3

ответ

1

Я думаю, что вы обнаружили bug, но в вашем случае я думаю, что есть обходное решение: вам нужна только опция :xa? true, если ваша очередь удалена. Вы все равно можете создать транзакцию XA, связывающую ваши действия HornetQ с MySQL в вашем обработчике прослушивателя, используя макрос immutant.transactions/transaction. См. Пример docs.

+0

Привет, Джим, в ответ на ваши вопросы выше. Я использую HornetQ Server версии 2.5.0.SNAPSHOT (Wild Hornet, 124) и в пространстве clojure Я занимаюсь зависимостью [org.immutant/immutant «2.1.4»]. Увы, мой пример использования - удаленная очередь, а использование localhost в моем примере - это то, как я тестирую его локально. Большое спасибо за отчет об ошибке и патч, который очень ценится. – clumsyjedi