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 макро. Смотрите документы для примера.

Другие вопросы по тегам