2012-01-19 70 views
4

我們正在研究IBM WebSphere MQ應用程序,並且我們使用JMS API來操作消息。但是我們有一個問題,就是連接需要花費太多時間,我們想要集中JMS連接,因爲它是一個獨立的應用程序,我們沒有應用程序容器來提供JNDI或池服務。那麼是否有解決方案來解決這個問題?對於JDBC,我們可以使用DBCP或c3p0歸檔池中的數據源,在JMS中,是否有任何類似的項目可以池化JMS連接?如何在獨立Java應用程序中池化JMS連接?

回答

5

它曾經是JMS MQConnectionFactory內置了池,但似乎在版本7中,它已被刪除。

在早期版本的WebSphere MQ JMS中設置ConnectionPooling的使用。此方法保留與舊版MQJMS應用程序 兼容,但由於此連接池 功能已從版本7中刪除,因此設置此屬性 將不起作用。

在沒有其他的情況下,您可以使用Apache Commons Pool。 DBCP(使用Pool)的想法與非JDBC對象相同。

+0

似乎Apache Commons Pool是我可能的方法。謝謝。 – phyerbarte

+0

謝謝,我曾嘗試過spring'CachingConnectionFactory',但它失敗了。但是,當我們使用wmq版本6時,我會嘗試本地池 - 'setUseConnectionPooling(true)' – vikingsteve

0

Spring的CachingConnectionFactory適用於這種用例。 https://stackoverflow.com/a/31119435/1765341中的這個答案解釋瞭如何在Tomcat中執行此操作,但是那裏的代碼可以很容易地適用於Java獨立應用程序。與編寫Apache Commons Pool實現相比,這應該更容易(也更不容易出錯)。