2012-01-23 92 views
0

我有一個基於Spring的Web應用程序,需要通過JMX連接從ActiveMQ獲取數據。 我使用MBeanServerConnectionFactoryBean(在Spring中)從ActiveMQ獲取各種MBean屬性。Spring中的JMX:MBeanServerConnectionFactoryBean線程安全

我只有一個MBeanServerConnectionFactoryBean作爲成員變量,它用於獲取數據。如果多個請求/線程同時出現會有什麼問題?會有什麼競賽條件嗎?

請提出保持代碼線程安全的最佳方法。

回答

1

Spring FactoryBean對象不是直接從你的代碼中使用,它們應該用在你的Spring配置中。因此,它們被設計爲只能執行一次。

如果你想使用它們,包括MBeanServerConnectionFactoryBean,那麼你需要創建它們,配置它們,使用它們,並且每當你想要獲得它們創建的對象時就丟棄它們。他們肯定是而不是線程安全。

更好的是,將它作爲設計目標並在您的Spring配置中使用它們。

+0

非常感謝您的回覆。 最初,我在Spring配置中創建了MBeanServerConnectionFactoryBean。但是,在啓動我的應用程序時,它嘗試連接到ActiveMQ(mBean服務器)。 現在,如果ActiveMQ服務器關閉,則無法建立連接。 即使啓動ActiveMQ服務器,也無法建立JMX連接。 我沒有選擇,只能將MBeanServerConnectionFactoryBean移動到代碼中,並在請求進入時嘗試建立連接。 這導致了線程安全問題,因爲我有連接的成員變量。 請幫忙。 – karan1001

+0

@ user736492:更仔細地閱讀「MBeanServerConnectionFactoryBean」的文檔。它有延遲連接嘗試的選項,直到它被需要時,而不是在啓動時執行。 – skaffman

+0

是的,它有一個選項可以在第一次使用時創建連接(而不是在啓動時)。但這可能只是第一次嘗試連接(一次)。在activeMQ服務器關閉的情況下,它不會嘗試重新嘗試連接。因此,它可能不會解決我重新嘗試連接來自瀏覽器的每個請求的問題。 – karan1001