1

MQ チャネルを開始および停止するための Java コードをいくつか作成しました。このコードをテストするために、MQ にサーバー接続チャネルを作成しました。ただし、Java コードの実行中に、チャネルの開始と停止の両方でエラーが発生します。

チャネルを停止すると、次のエラーが発生します。

about to stop channel
MQJE001: Completion Code 2, Reason 2202

Start Channel で次のエラーが発生します。

com.ibm.mq.MQException: MQJE001: An MQException occurred: Completion Code 2, Reason 2009
MQJE016: MQ queue manager closed channel immediately during connect
Closure reason = 2009

コード:

package com.asm.MQListenerChannelRestart;

import com.ibm.mq.pcf.*;
import com.ibm.mq.*;
import com.ibm.mq.pcf.CMQCFC;


public class MQListenerChannelRestart implements CMQCFC  {

    public void startChannel(PCFAgent pcfAgent){
        PCFParameter [] parameters = new PCFParameter [] {
                new MQCFST (MQCACH_CHANNEL_NAME, "TESTChanne"),
                new MQCFST(MQCACH_USER_ID,"user"),
                new MQCFST(MQCACH_PASSWORD,"password")
             };


        try {

            System.out.println("about to start channel");
            MQMessage [] pcfResponses = pcfAgent.send (MQCMD_START_CHANNEL, 
                                                  parameters);

            MQCFH cfh = new MQCFH(pcfResponses[0]);
            System.out.println("Parameter count="+cfh.parameterCount);
            System.out.println("Reason = "+cfh.reason);
            System.out.println(cfh.toString());

            pcfResponses = pcfAgent.send(MQCMD_INQUIRE_CHANNEL_STATUS, parameters);
            cfh = new MQCFH(pcfResponses[0]);
            System.out.println("Channel status is ==="+cfh.toString());
        } catch (Exception e) {
          e.printStackTrace();
        }
    }

    public void stopChannel(PCFAgent pcfAgent){
        PCFParameter [] parameters = new PCFParameter [] {
                new MQCFST (MQCACH_CHANNEL_NAME, "TESTChanne"),
                new MQCFIN (MQIACF_QUIESCE, MQQO_NO )
               };


        try {

            System.out.println("about to stop channel");
            MQMessage [] pcfResponses = pcfAgent.send (MQCMD_STOP_CHANNEL, 
                                                  parameters);

            MQCFH cfh = new MQCFH(pcfResponses[0]);
            System.out.println("Parameter count="+cfh.parameterCount);
            System.out.println("Reason = "+cfh.reason);
            System.out.println(cfh.toString());

            pcfResponses = pcfAgent.send(MQCMD_INQUIRE_CHANNEL_STATUS, parameters);
            cfh = new MQCFH(pcfResponses[0]);
            System.out.println("Channel status is ==="+cfh.toString());
        } catch (Exception e) {
          e.printStackTrace();
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        PCFAgent pcfAgent = null;


        MQListenerChannelRestart mqListenerChannelRestart = new MQListenerChannelRestart();
        mqListenerChannelRestart.stopChannel(pcfAgent);
        mqListenerChannelRestart.startChannel(pcfAgent);
    }

}

誰かがこれを解決するのを手伝ってくれますか?

4

1 に答える 1

0

まず第一に、PCFAgent オブジェクトを実際にインスタンス化したことがありません。

次に、PCFMessageAgent を介して PCF コマンドをキュー マネージャーに送信します。PCFMessageAgent は実際には PCFAgent を拡張しているため、PCFMessageAgent のオブジェクトを作成します。

第 3 に、PCFCommand からの応答は MQMessage で保持できるとは思いません。むしろ、PCFMessage で取得する必要があります。

PCF の詳細については、こちらを参照してください。

また、ここに PCF_CommonMethods の非常に良い例があります: ftp:// 119.44.222.58/opt/mqm/samp/pcf/samples/PCF_CommonMethods.java

現時点では、次のようなコードを作成したいと考えています。

 PCFMessageAgent agent = new PCFMessageAgent ("localhost", 1414, "CLIENT");
 PCFParameter [] parameters = new PCFParameter [] {
            new MQCFST (MQCACH_CHANNEL_NAME, "TESTChanne"),
            new MQCFST(MQCACH_USER_ID,"user"),
            new MQCFST(MQCACH_PASSWORD,"password")
         };

       PCFMessage   request = new PCFMessage (MQCMD_START_CHANNEL,parameters);

       PCFMessage []   responses = agent.send (request);
于 2013-05-15T12:08:36.373 に答える