2009-08-19 4 views
4

Я работаю над секцией 'Simple Point-to-Point Example' руководства Sun JMS (sender source, receiver source), используя Glassfish в качестве моего поставщика JMS. Я установил QueueConnectionFactory и Queue в пользовательском интерфейсе браузера Glassfish и добавил соответствующие 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) по-прежнему испытывают ту же проблему (и, во всяком случае, я все еще нахожу Не понимаю, в чем дело.