Как я могу заставить этот внешний JMS-клиент завершать работу? - PullRequest
4 голосов
/ 19 августа 2009

Я работаю с разделом «Простой пример точка-точка» учебного руководства по Sun JMS ( источник отправителя , источник получателя ), используя Glassfish в качестве моего JMS-провайдера. Я установил QueueConnectionFactory и Queue в пользовательском интерфейсе администратора Glassfish и добавил соответствующие JAR-файлы в мой путь к классам, и получатель получает сообщения, отправленные отправителем.

Однако ни отправитель, ни получатель не завершают свою работу. Основной поток завершается нормально (после успешного вызова queueConnection.close()), но два потока, не являющихся демонами, остаются без дела:

  • iMQReadChannel-0
  • imqConnectionFlowControl-0

Кажется (из этого потока java.net ), что причина в том, что queueConnection.close() просто возвращает соединение с пулом, а не закрывает его. Я не могу найти способ заставить пул завершить работу, поэтому единственная опция, с которой я остаюсь - это System.exit(), что кажется неправильным.

Я пытался установить минимальный размер пула равным 0, максимальный размер пула равным 1, а время простоя равным 10 секундам, но, похоже, это не имеет значения. Даже когда я просто просматриваю фабрику соединений и не запрашиваю соединение, эти два потока все еще запускаются и не завершаются.

Любая помощь высоко ценится!

Ответы [ 2 ]

1 голос
/ 20 декабря 2010
1 голос
/ 09 сентября 2009

Почему бы вам просто не завершить с System.exit (0)? Учитывая пример, текущее поведение является правильным (программа на Java завершается, когда заканчиваются все потоки, не являющиеся демонами).

Возможно, вы можете правильно отключить сэмплы, поиграв со свойствами клиентской библиотеки (простой и т. Д.), Но, похоже, другие (http://www.nabble.com/Simple-JMS-Client-doesn%27t-quit-td15662753.html) все еще сталкиваются с той же проблемой (и, во всяком случае, я до сих пор не понимаю, в чем дело).

...