我正在尝试创建一个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块中),它关闭所有线程。
太可怕了