websphere MQ连接在服务器中保持打开状态

时间:2014-02-10 08:14:27

标签: java ibm-mq

有时,当我的Java程序收到内部错误并终止时,与MQ通道的连接仍然建立。 奇怪的是,java代码没有在我的机器上运行,但在MQ资源管理器中,它显示为已连接。

  1. 我的机器中是否有任何进程/服务正在运行,我可以手动终止以关闭连接?
  2. 你能告诉我这是什么原因(我正在使用connection.close / channel.close和queue.close)以及可能的原因
  3. 此致 阿比纳夫

2 个答案:

答案 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