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) вызова. Что я делаю неправильно?
1 ответ
Я думаю, что вы обнаружили ошибку, но в вашем случае, я думаю, что есть обходной путь: вам нужно только это :xa? true
вариант, если ваша очередь удалена. Вы все еще можете создать транзакцию XA, связывающую ваши действия HornetQ с MySQL в вашем обработчике слушателя, используя immutant.transactions/transaction
макро. Смотрите документы для примера.