2016-04-23 4 views
2

Gibt es eine Möglichkeit, ein PCF-Programm zu schreiben, um den Kanalstatus für Cluster-Sender/Empfänger-Kanäle zu erhalten, die sich im Status "Running" befinden?
Ich habe so etwas, das mir Channel-Status von nur einem Kanal gibt!Wie schreibt man den PCF-Befehl, um den Kanalstatus mit einer Bedingung zu erhalten?

// send the request and collect the responses 
    String checkStatus=""; 
    String channelName =""; 
// build a request 
    request = new PCFMessage(CMQCFC.MQCMD_INQUIRE_CHANNEL_STATUS); 
// add a parameter designating the name of the channel for which status is requested 
    request.addParameter(CMQCFC.MQCACH_CHANNEL_NAME, "TO.*"); 
// add a parameter designating the instance type (current) desired 
    request.addParameter(CMQCFC.MQIACH_CHANNEL_INSTANCE_TYPE, CMQC.MQOT_CURRENT_CHANNEL); 

    responses = agent.send(request); 
    for (int j = 0; j < responses.length; j++) { 
     // get the channel name and trim the spaces 
     String temp =""; 
     temp = responses[j].getStringParameterValue(CMQCFC.MQCACH_CHANNEL_NAME); 
     channelName = temp.trim(); 

     int chlStatus = responses[j].getIntParameterValue(CMQCFC.MQIACH_CHANNEL_STATUS); 
     //System.out.println("channel status: " + chlStatus); 
     String[] chStatusText = { 
      "", "MQCHS_BINDING", "MQCHS_STARTING", "MQCHS_RUNNING", 
       "MQCHS_STOPPING", "MQCHS_RETRYING", "MQCHS_STOPPED", 
       "MQCHS_REQUESTING", "MQCHS_PAUSED", 
       "", "", "", "", "MQCHS_INITIALIZING" 
     }; 
     checkStatus = chStatusText[chlStatus]; 
     //System.out.println("channel status: " + checkStatus); 
    } 
    System.out.println("chl: " + channelName + " STATUS: " + checkStatus + ")"); 

Der obige Code gibt den Kanalstatus nur für einen Kanal und nicht für alle Kanäle an. Was ist hier falsch?

+0

Fragen Sie, wie Sie die zurückgegebene Ganzzahl in Running (oder andere Zustände) umwandeln oder fragen Sie, wie Sie andere Informationen aus dem Kanalstatus-Datensatz und dem Status Running abrufen können? –

+0

Grundsätzlich würde ich gerne einen PCF-Befehl schreiben, der den untenstehenden runmqsc-Anweisungen (TO. *) Entspricht, wo (STATUS eq RUNNING) – sijo0703

Antwort

3

Der PCF-Teil Ihres Codes sieht gut aus, aber das Ausdrucken des Ergebnisses ist ein fehlerhafter Code.

responses = agent.send(request); 
for (int j = 0; j < responses.length; j++) { 
    : 
    : 
    checkStatus = chStatusText[chlStatus]; 
} 
System.out.println("chl: " + channelName + " STATUS: " + checkStatus + ")"); 

Sie haben eine for-Schleife alle gehen rund um die Antworten, aber dann ist die println außerhalb der for-Schleife und somit nur für die endgültige Antwort das Ergebnis auszudrucken.

+1

Danke! Ich brauche mehr Schlaf, denke ich :) – sijo0703

+0

Ich habe 2 Kanäle. Es funktioniert für den Serververbindungskanal, über den ich eine Verbindung zum Warteschlangenmanager herstelle. Bei anderen Kanälen schlägt es fehl, da AMQ9502: Typ des Kanals, der für die angeforderte Aktion nicht geeignet ist. ERKLÄRUNG: Der angeforderte Vorgang kann nicht auf dem Kanal 'remote.local' ausgeführt werden. Einige Operationen sind nur für bestimmte Kanaltypen gültig. Dieser Kanal ist ein "RECEIVER" -Kanaltyp. Zum Beispiel können Sie nur einen Kanal vom initiierenden Ende pingen oder auslösen. – itsraja

+0

Sie haben Ihren Kommentar zu einer Frage zum Anzeigen eines Kanals hinzugefügt. Willst du damit sagen, dass beim Versuch, einen Kanal anzuzeigen, dieser Fehler auftritt? Alles was du sagst ist "Es funktioniert ..." du sagst nicht was "es" ist. Schlage vor, du möchtest vielleicht eine neue Frage beginnen, anstatt dich an das Ende zu heften, wenn du etwas anderes machst? –

1

Greifen Sie mein Open-Source-Projekt namens MQ Channel Monitor. Laden Sie den Quellcode herunter und überprüfen Sie die Datei "PCFChlStatus.java". Es gibt eine Methode namens getMCAStatus(), die im Grunde genommen das ist, wonach Sie suchen.

Verwandte Themen