2009-08-19 93 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)仍然遇到同样的问题(并且,无论如何,我仍然不会不明白这一点是什么)。