有时,当我的Java程序收到内部错误并终止时,与MQ通道的连接仍然建立。 奇怪的是,java代码没有在我的机器上运行,但在MQ资源管理器中,它显示为已连接。
此致 阿比纳夫
答案 0 :(得分:0)
我的机器上是否有任何进程/服务正在运行 手动终止以关闭连接?
您需要在代码中包含try / catch逻辑,当遇到问题时,请在catch子句中让代码调用其清理逻辑(即关闭队列并从队列管理器断开连接)。
你能告诉我这是什么原因(我正在使用 connection.close / channel.close和queue.close)可能是什么 可能的
显然,你不是,它与你早先的陈述相冲突:
当我的Java程序出现内部错误并终止时,
因此,添加适当的try / catch逻辑并正确关闭队列并断开与队列管理器的连接,即使程序中出现错误也是如此。
答案 1 :(得分:0)
您最后可以添加以下方法:
private void cleanUp() {
if (producer != null) {
try {
producer.close();
} catch (JMSException jmsex) {
logger.error("WebSphereMQMessageSender. cleanUp: Producer could not be closed.");
recordFailure(jmsex);
}
}
if (session != null) {
try {
session.close();
} catch (JMSException jmsex) {
logger.error("WebSphereMQMessageSender. cleanUp: Session could not be closed.");
recordFailure(jmsex);
}
}
if (connection != null) {
try {
connection.close();
} catch (JMSException jmsex) {
logger.error("WebSphereMQMessageSender. cleanUp: Connection could not be closed.");
recordFailure(jmsex);
}
}
}
有关详细信息,请参阅this。