如何让这个外部JMS客户端终止?

时间:2009-08-19 13:49:13

标签: java glassfish jms

我正在使用Glassfish作为我的JMS提供程序,完成Sun JMS教程的'Simple Point-to-Point Example'部分(sender sourcereceiver source)。我在Glassfish管理界面中设置了QueueConnectionFactory和Queue,并将相关的JAR添加到我的类路径中,接收方正在接收发送方发送的消息。

但是,发送者和接收者都不会终止。主线程正常退出(成功调用queueConnection.close()之后),但两个非守护程序线程仍然存在:

  • iMQReadChannel-0
  • imqConnectionFlowControl-0

似乎(来自this java.net thread)原因是queueConnection.close()只返回与池的连接,而不是真正关闭它。我找不到任何方法告诉池关闭,所以我唯一的选择是System.exit(),这感觉不对。

我尝试将最小池大小设置为0,将最大池大小设置为1,将空闲超时设置为10秒,但似乎没有区别。即使我只是查找连接工厂并且没有要求连接,这两个线程仍然启动并且不会终止。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

为什么不直接使用System.exit(0)终止?给定示例,当前行为是正确的(当所有非守护程序线程结束时,Java程序终止。)

也许你可以通过播放客户端库的属性(空闲时间等等)来正确关闭样本,但似乎其他人(http://www.nabble.com/Simple-JMS-Client-doesn%27t-quit-td15662753.html)仍然遇到同样的问题(无论如何,我仍然不明白这是什么意思。)

答案 1 :(得分:1)