我正在尝试创建一个Java Application Client项目,该项目将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();
}

}

如何使其停止挂起?

最佳答案

长期以来,它一直是Glassfish中的一个错误。

这里记录了一个错误(在Sun App Server的版本9中,早于Glassfish所报告),但我怀疑会有很多重复的报告:

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

我唯一已知的修复方法是System.exit(0)(在finally块中),它关闭所有线程。

太可怕了

10-07 13:17
查看更多