2009-08-19 142 views
4

我通過Sun JMS教程(sender sourcereceiver source)的'Simple Point-to-Point Example'部分工作,使用Glassfish的作爲我的JMS提供者。我在Glassfish管理界面中設置了QueueConnectionFactory和Queue,並將相關的JAR添加到我的類路徑中,並且接收者正在接收發件人發送的消息。我怎樣才能讓這個外部JMS客戶端終止?

然而,無論是發送者也不是接收器終止。主線程正常退出(後成功地調用queueConnection.close()),但兩個非守護線程留給徘徊:

  • iMQReadChannel-0
  • imqConnectionFlowControl-0

看來(從this java.net thread),其原因是queueConnection.close()只是將連接返回到池,而不是真的關閉它。我找不到任何方法告訴游泳池關機,所以我唯一的選擇是System.exit(),這感覺不對。

我試過設置的最低池大小爲0,最大池大小爲1,空閒超時時間爲10秒,但它似乎沒有什麼區別。即使當我查找連接工廠並且不要求連接時,這兩個線程仍然啓動並且不會終止。

任何幫助,非常感謝!

回答

1

你爲什麼不乾脆用System.exit(0)終止?給定示例,當前行爲是正確的(當所有非守護進程線程結束時,Java程序終止)。

也許你可以通過玩客戶端庫的屬性(空閒時間等)來正確關閉示例,但似乎其他人(http://www.nabble.com/Simple-JMS-Client-doesn%27t-quit-td15662753.html)仍然遇到同樣的問題(並且,無論如何,我仍然不會不明白這一點是什麼)。