我正在尝试创建一个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();
}
}
如何让它停止悬挂?
答案 0 :(得分:3)
很长一段时间,这是Glassfish的一个错误。
这里记录了一个错误(在Sun App Server的第9版中报告,比Glassfish更早),但我怀疑会有很多重复的报告:
http://java.net/jira/browse/GLASSFISH-1429
我唯一已知的修复是System.exit(0)(在finally块中),它关闭所有线程。
太可怕了,是的。
答案 1 :(得分:0)
对线程转储的良好调用。尝试发布Conn.stop()。似乎JMS客户端仍然运行非守护程序线程