2009-08-19 5 views
4

Je suis en train de parcourir la section 'Simple Point-to-Point Example' du tutoriel Sun JMS (sender source, receiver source), en utilisant Glassfish comme fournisseur JMS. J'ai configuré la file d'attente QueueConnectionFactory et la file d'attente dans l'interface utilisateur d'administration de Glassfish et ajouté les fichiers JAR correspondants à mon chemin de classe et le destinataire reçoit les messages envoyés par l'expéditeur.Comment mettre fin à ce client JMS externe?

Toutefois, ni l'expéditeur ni le destinataire ne se terminent. Les principales sorties de fil normalement (après avoir appelé avec succès queueConnection.close()), mais deux fils non démon sont laissés traîner:

  • iMQReadChannel-0
  • imqConnectionFlowControl-0

Il semble (de this java.net thread) que la raison en est que queueConnection.close() renvoie juste la connexion au pool, plutôt que de le fermer vraiment. Je ne trouve aucun moyen de dire à la piscine de se fermer, donc la seule option qui me reste est System.exit(), ce qui ne va pas.

J'ai essayé de définir la taille minimale du pool à 0, la taille maximale du pool à 1 et le délai d'inactivité à 10 secondes, mais cela ne semble pas faire de différence. Même lorsque je recherche simplement la fabrique de connexions et ne demande pas de connexion, ces deux threads sont toujours démarrés et ne se terminent pas.

Toute aide très appréciée! Pourquoi ne pas simplement vous terminer avec un System.exit (0)?

Répondre

1

Étant donné l'exemple, le comportement actuel est correct (un programme Java se termine lorsque tous les threads non-démon se terminent). Peut-être que vous pouvez fermer les échantillons correctement en jouant avec les propriétés de la bibliothèque cliente (temps d'inactivité, etc ...), mais il semble que d'autres (http://www.nabble.com/Simple-JMS-Client-doesn%27t-quit-td15662753.html) connaissent toujours le même problème (et, de toute façon, je ne sais toujours pas Je ne comprends pas ce que c'est.

Questions connexes