1

我编写了一些 Java 代码来启动和停止 MQ 通道。我在 MQ 上创建了一个服务器连接通道来测试此代码。但是在执行 Java 代码时,通道的启动和停止都会出错。

停止通道给出以下错误:

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

开始频道给出以下错误:

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 的对象。

第三,我认为来自 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 回答