2009-08-19 13 views
4

Ich arbeite durch die 'Simple Point-to-Point Example' Abschnitt der Sun JMS-Lernprogramm (sender source, receiver source), mit Glassfish als mein JMS-Provider. Ich habe die QueueConnectionFactory und Queue in der Glassfish Admin-Benutzeroberfläche eingerichtet und die relevanten JARs zu meinem Klassenpfad hinzugefügt, und der Empfänger empfängt die vom Absender gesendeten Nachrichten.Wie kann ich diesen externen JMS-Client zum Beenden bringen?

Allerdings enden weder Sender noch Empfänger. Die Haupt Thread beendet normalerweise (nach queueConnection.close() erfolgreich Aufruf), aber zwei Nicht-Daemon-Threads werden hängen gelassen um:

  • iMQReadChannel-0
  • imqConnectionFlowControl-0

Es scheint (von this java.net thread), dass Der Grund ist, dass queueConnection.close() nur die Verbindung zum Pool zurückgibt, anstatt sie wirklich zu schließen. Ich kann keine Möglichkeit finden, dem Pool zu sagen, dass er herunterfahren soll. Die einzige Option, die mir bleibt, ist System.exit(), was sich falsch anfühlt.

Ich habe versucht, die minimale Pool-Größe auf 0, die maximale Pool-Größe auf 1 und die Leerlauf-Timeout auf 10 Sekunden, aber es scheint keinen Unterschied zu machen. Auch wenn ich nur die Verbindungsfactory nachschaue und nicht nach einer Verbindung frage, werden diese beiden Threads immer noch gestartet und enden nicht.

Jede Hilfe sehr geschätzt!

Antwort

1

Warum beenden Sie nicht einfach mit einem System.exit (0)? Bei gegebenem Beispiel ist das aktuelle Verhalten korrekt (ein Java-Programm wird beendet, wenn alle Nicht-Daemon-Threads enden).

Vielleicht können Sie die Proben richtig herunterfahren lassen, indem Sie mit den Eigenschaften der Client-Bibliothek spielen (Leerlaufzeit, etc ...), aber es scheint, dass andere (http://www.nabble.com/Simple-JMS-Client-doesn%27t-quit-td15662753.html) immer noch das gleiche Problem haben (und ich trotzdem verstehe nicht, was der Punkt ist).

Verwandte Themen