针对不变听众的XA语境

时间:2016-05-27 05:29:04

标签: clojure hornetq immutant

我正在尝试使用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 个答案:

答案 0 :(得分:1)

我认为您发现了bug,但在您的情况下,我认为有一种解决方法:如果您的队列是远程的,您只需要:xa? true选项。您仍然可以使用immutant.transactions/transaction宏在侦听器处理程序中创建将HornetQ操作绑定到MySQL的XA事务。有关示例,请参阅docs