Контекст XA для иммутантного слушателя

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


person clumsyjedi    schedule 27.05.2016    source источник
comment
Привет. Итак, поскольку я вижу параметр :host, я предполагаю, что вы пытаетесь подключиться к экземпляру HornetQ в отдельной JVM: можете ли вы рассказать мне об этой JVM? В частности, на какой версии HornetQ он работает? Кроме того, какая версия Immutant? Спасибо!   -  person jcrossley3    schedule 27.05.2016


Ответы (1)


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

person jcrossley3    schedule 27.05.2016
comment
Привет, Джим, отвечая на ваши вопросы выше, я использую HornetQ Server версии 2.5.0.SNAPSHOT (Wild Hornet, 124) и в пространстве clojure я использую зависимость [org.immutant/immutant 2.1.4]. Увы, мой производственный вариант использования — это удаленная очередь, и использование localhost в моем примере — это то, как я тестирую его локально. Большое спасибо за сообщение об ошибке и патч, очень признателен. - person clumsyjedi; 30.05.2016