1

解決した

IBM Technote IZ66146から回答を見つけました

同じ問題を抱えている他の人に役立つことを願っています。


MQ Queue からメッセージを読み取る簡単なメソッドを作成しました。
ループで、メッセージを読み取ろうとします (waitInterval を使用)。キューからメッセージを正常に読み取ると、2195 リターン コードが返されます。どうすればこれを解決できますか?

これは、例外処理などを行わない単純化されたバージョンのコードです。

   public static void main(String args[]) {
    MQException.logExclude(MQException.MQRC_NO_MSG_AVAILABLE);
    MQException.logExclude(MQException.MQRC_UNEXPECTED_ERROR);
    MQException.log = null;
            while (true) {
        incomeDeployMsg = readFromQueue(waitReadInterval);
                    System.out.println(dateFormater.format(new Date()) + " Income msg");
            }
   } 
    public String readFromQueue(int waitInterval) throws MQException{
    MQMessage message = new MQMessage();
    try {
        if (m_inQueue == null || !m_inQueue.isOpen())
            m_inQueue = m_mqQmgr.accessQueue(m_inQueueName, CMQC.MQOO_INQUIRE + CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INPUT_SHARED);
        message.messageId = CMQC.MQMI_NONE;
        MQGetMessageOptions gmo = new MQGetMessageOptions();
        gmo.options = CMQC.MQGMO_WAIT;
        gmo.waitInterval = waitInterval;
        m_inQueue.get(message, gmo);
                    return message.readStringOfCharLength(message.getMessageLength());
    } catch (MQException mqe) {
        throw mqe;
    } finally {
        message.clearMessage();
    }
}

結果の最初の行は私のコードからのものではありません!!! 標準出力に出力するのはIBMのクラスだと思います。エラーを解決するにはどうすればよいですか?

結果:

MQJE001: 完了コード '2'、理由 '2195'。
2013-05-15 11:44:27 収入メッセージ

4

3 に答える 3

2

MQException.logExclude() で 2 行をコメントアウトし、以下を使用します。

MQException.log = null;
于 2013-05-15T14:42:14.897 に答える
0

これが望ましくない場合は、catch ブロックで、例外の理由コードが 2195 であるかどうかを確認し、それに応じてコードを記述します。

お気に入り:

catch (MQException mqe) {
     if(mqe.reasonCode==2195)
     {
/* DO NOTHING FOR THIS ERROR */

      }
     else
     {  
        throw mqe;
      }

}
于 2013-05-15T13:44:17.217 に答える