Отправка сообщения с JMS зависает при выходе - PullRequest
3 голосов
/ 27 ноября 2011

Я пытаюсь создать проект клиента приложения Java, который отправляет сообщение JMS в очередь на сервере Glassfish.

Проблема в том, что после того, как приложение отправляет сообщение, оно зависает, когда оно должно выйти. Сообщение передается успешно, но по какой-то причине приложение не закрывается. Я попытался отладить приложение и могу пройти его до конца static void main, и вот где оно зависает.

Вот код:

import javax.jms.*;
import javax.naming.InitialContext;


public class Main {

public void SendMessage() throws Exception {
    InitialContext ctx = new InitialContext();
    ConnectionFactory cf = (ConnectionFactory) ctx.lookup("jms/TestFactory");
    Queue queue = (Queue)ctx.lookup("jms/TestQueue");
    Connection conn = cf.createConnection();
    Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
    MessageProducer prod = s.createProducer(queue);

    TextMessage txt = s.createTextMessage("testing");
    prod.send(txt);

    prod.close();
    s.close();
    conn.close();
}

public static void main(String[] args) throws Exception {
    Main m = new Main();
    m.SendMessage();
}

public Main() {
    super();
}

}

Как мне заставить его перестать висеть?

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Долгое время это была ошибка в Glassfish.

Здесь записана ошибка (о которой сообщалось в версии 9 Sun App Server, предшествующей Glassfish), но я подозреваю, что будет много повторяющихся отчетов:

http://java.net/jira/browse/GLASSFISH-1429

Мое единственное известное исправление - System.exit (0) (в блоке finally), который закрывает все потоки.

Ужасно, да.

0 голосов
/ 28 ноября 2011

Хороший вызов в дампе потока.Попробуйте ввести Conn.stop ().Кажется, что у клиента JMS все еще нет потоков демона, работающих

...