2017-01-26 32 views
1

我們有一個grails web應用程序,它接受http請求並使用activemq將處理委託給pub-sub jms。視圖中的開放會話如何與jms連接/會話一起使用?

因爲在將消息發佈到目的地之後返回http請求,因此在發佈後立即關閉了Open Session In View攔截器令牌?

當用戶開始處理來自activemq隊列的消息(服務方法在這裏是訂戶)時,整個事務(訂戶服務方法中有多個事務)是否在單個會話中,或者休眠模板策略是否打開會話對於單個事務並在提交後關閉它將被使用? 如果是這樣,對於單個jms消息處理,將會有多個會話將被打開和關閉?

我一直在撓我的頭一陣子,但無法得到它的解決,任何幫助將是有益的!

+0

您是否使用任何插件(例如Grails的JMS插件)?這將有助於回答你的問題。 –

+0

@JoshuaMoore是的,我們使用grails「jms:1.3」作爲插件。 –

回答

0

好的,你在這裏有幾個問題。

讓我們先從第一個:

...是打開會話視圖攔截令牌發佈後立即關閉?

它關閉,因爲它通常。當HTTP請求結束時。發佈JMS消息對此沒有影響。

下一頁:

當用戶開始處理從ActiveMQ的隊列中的消息...將整個事務是在單個會話中...?

答案是它取決於。這取決於您可以使用自己的代碼更改默認行爲。但是,如果您遵循單一事務服務方法的最常見模式來處理消息,那麼將只使用一個hibernate會話(由JMS插件功能提供)和一個事務(由您的服務方法提供)。事務和休眠會話都將關閉

+0

那麼,爲了接收消息,每個jms連接都會有一個新的hibernate會話嗎? 我一直在尋找jms會話和hibernate會話之間的關係,但還沒有找到具體的消息。任何來源將有所幫助! –