Untersuchen Sie den Status und die Attribute des Brokers, mit dem Ihre Konfigurationsmanager-Proxy-Anwendung verbunden ist, und holen Sie Informationen zu dessen Ressourcen ein.
Vor dem Start
Dieser Schritt setzt voraus, dass zunächst der unter Verbindung zu einem Broker aus einer Konfigurationsmanager-Proxy-Anwendung herstellen beschriebene Schritt ausgeführt wurde.
Der Konfigurationsmanager-Proxy verarbeitet auch implementierte Nachrichtengruppen; diese werden als Attribute implementierter Ausführungsgruppen verarbeitet.
Diese Objekte, die zusammengefasst als verwaltete Objekte bezeichnet werden, bilden den Großteil der Schnittstelle zum Broker. Daher sollten Sie sich mit diesen Objekten vertraut machen, um die Funktion des Konfigurationsmanager-Proxys zu verstehen.
Java-Klasse | Klassenfunktion |
---|---|
BrokerProxy | Beschreibt Broker. |
ExecutionGroupProxy | Beschreibt Ausführungsgruppen. |
MessageFlowProxy | Beschreibt Nachrichtenflüsse, die bereits für Ausführungsgruppen implementiert sind; beschreibt keine Nachrichtenflüsse in der Ansicht 'Brokeranwendungsentwicklung' des WebSphere Message Broker Toolkits. |
LogProxy | Stellt das Protokoll der aktuellen Verwaltungsaktivität auf dem Broker für alle Benutzer dar. |
ActivityLogProxy | Das Protokoll für den zuletzt ausgeführten Nachrichtenfluss und die letzte Ressourcenaktivität. |
DataCaptureProxy | Repräsentiert Daten, die in einem Brokerdatenspeicher abgelegt sind. Die abgerufenen Daten sind in DataCaptureEntry-Objekten enthalten. |
Das Objekt LogProxy enthält Nachrichten (die als LogEntry-Objekte erstellt werden), in denen die Änderungen aufgezeichnet sind, die zuletzt an den verwalteten Objekten vorgenommen wurden. Diese Nachrichten enthalten die folgenden Informationen:
Das Objekt ActivityLogProxy enthält Nachrichten, die als ActivityLogEntry-Objekte erstellt werden und in denen übergeordnete Aktivitäten in Zusammenhang mit Nachrichtenflüssen und deren Interaktionen mit externen Ressourcen aufgezeichnet sind. Weitere Informationen zu diesen Nachrichten finden Sie im Abschnitt Aktivitätenprotokolle verwenden. Aktivitätenprotokolle werden für Nachrichtenflüsse sowie für bestimmte Ressourcentypen generiert.
Sie können ein Objekt ActivityLogProxy für einen Nachrichtenfluss aus einem Objekt MessageFlowProxy abrufen. Verwenden Sie für den Abruf eines Objekts ActivityLogProxy für einen Ressourcentyp das Objekt ResourceManagerProxy. Rufen Sie die Methode getActivityLog() im Objekt MessageFlowProxy oder im Objekt ResourceManagerProxy auf. Weitere Informationen hierzu finden Sie im Abschnitt Mit Aktivitätenprotokollen in einer Konfigurationsmanager-Proxy-Anwendung arbeiten.
Sie können mithilfe des Objekts AdminQueueProxy feststellen, welche Arbeitsvorgänge gerade in Bearbeitung sind oder auf ihre Verarbeitung durch den Broker warten. Der folgende Code veranschaulicht den Zugriff auf die Warteschlange:
BrokerConnectionParameters bcp =
new MQBrokerConnectionParameters("localhost", 1414, "QMGR");
BrokerProxy b = BrokerProxy.getInstance(bcp);
AdminQueueProxy l = b.getAdministrationQueue();
Für jedes verwaltete Objekt stehen eine Reihe öffentlicher Methoden zur Verfügung, mit deren Hilfe Anwendungen Eigenschaften des Brokers abfragen und bearbeiten können, auf den die Instanz verweist. Um über die zugehörige API auf ein verwaltetes Objekt zugreifen zu können, müssen Sie zunächst eine Kennung anfordern, und zwar von dem Objekt, das der logische Eigner des verwalteten Objekts ist.
Beispiel: Da Broker die logischen Eigner von Ausführungsgruppen sind, muss die Anwendung zum Erlangen einer Kennung für Ausführungsgruppe EG1, die auf Broker B1 ausgeführt wird, eine Kennung für das ExecutionGroupProxy-Objekt, das durch EG1 dargestellt wird, vom BrokerProxy-Objekt, das durch B1 dargestellt wird, anfordern.
Für ein BrokerProxy-Objekt, das auf den Broker B1 verweist, kann die Anwendung Methoden aufrufen, mit denen der Ausführungsstatus des Brokers abgerufen werden kann oder alle Nachrichtenflüsse des Brokers gestartet werden. Sie können außerdem Anwendungen schreiben, mit denen Änderungen, die an den Brokerobjekten vorgenommen wurden, verfolgt werden können, indem die als LogEntry-Objekte verwalteten Nachrichten gelesen werden.
Im folgenden Beispiel wird eine Kennung für das Objekt BrokerProxy angefordert. Da das Objekt BrokerProxy das logische Stammverzeichnis in der Baumstruktur der verwalteten Objekte ist, kann Ihre Anwendung auf alle anderen Objekte im Broker direkt oder indirekt zugreifen.
Der Broker ist der direkte Eigner der Ausführungsgruppen, und daher gibt es eine Methode, mit der Anwendungen über das BrokerProxy-Objekt eine Kennung für das ExecutionGroupProxy-Objekt anfordern können. Ebenso ist die Ausführungsgruppe logischer Eigner aller Nachrichtenflüsse, sodass es möglich ist, Methoden auf dem ExecutionGroupProxy-Objekt für den Zugriff auf die MessageFlowProxy-Objekte aufzurufen.
Die folgende Anwendung durchsucht die Baumstruktur der verwalteten Objekte, um den Ausführungsstatus eines implementierten Nachrichtenflusses zu ermitteln. Dabei wird in der Anwendung davon ausgegangen, dass der Nachrichtenfluss MF1 in der Ausführungsgruppe EG1 auf Broker B1 implementiert ist; Sie können diese Werte im Code durch andere für den Broker gültige Werte ersetzen.
import com.ibm.broker.config.proxy.*;
public class GetMessageFlowRunState {
public static void main(String[] args) {
BrokerProxy b = null;
try {
BrokerConnectionParameters bcp =
new MQBrokerConnectionParameters(
"localhost",
1414,
"");
b = BrokerProxy.getInstance(bcp);
} catch (ConfigManagerProxyException cmpex) {
System.out.println("Error connecting: "+cmpex);
}
if (b != null) {
System.out.println("Connected to broker!");
displayMessageFlowRunState(b, "EG1", "MF1");
b.disconnect();
}
}
private static void displayMessageFlowRunState(
BrokerProxy b,
String egName,
String flowName) {
try {
ExecutionGroupProxy eg =
b.getExecutionGroupByName(egName);
if (eg != null) {
MessageFlowProxy mf =
eg.getMessageFlowByName(flowName);
if (mf != null) {
boolean isRunning = mf.isRunning();
System.out.print("Flow "+flowName+" on " +
egName+" on "+b.getName()+" is ");
if (isRunning) {
System.out.println("running");
} else {
System.out.println("stopped");
}
} else {
System.err.println("No such flow "+flowName);
}
} else {
System.err.println("No such exegrp "+egName+"!");
}
} catch(ConfigManagerProxyPropertyNotInitializedException
ex) {
System.err.println("Comms problem! "+ex);
}
}
}
Die Anwendung muss die Namen der Objekte, die sie bearbeiten kann, nicht unbedingt kennen. Jedes verwaltete Objekt enthält Methoden, über die Mengen von Objekten zurückgegeben werden, deren Eigner das jeweilige verwaltete Objekt ist. Dieses Verfahren wird durch folgendes Beispiel, in dem die Namen aller Ausführungsgruppen innerhalb des Brokers ermittelt werden, veranschaulicht.
import java.util.Enumeration;
import com.ibm.broker.config.proxy.*;
public class DisplayExecutionGroupNames {
public static void main(String[] args) {
BrokerProxy b = null;
try {
BrokerConnectionParameters bcp =
new MQBrokerConnectionParameters(
"localhost",
1414,
"");
b = BrokerProxy.getInstance(bcp);
} catch (ConfigManagerProxyException cmpex) {
System.out.println("Error connecting: "+cmpex);
}
if (b != null) {
System.out.println("Connected to broker!");
displayExecutionGroupNames(b);
b.disconnect();
}
}
private static void displayExecutionGroupNames(BrokerProxy b)
{
try {
Enumeration<ExecutionGroupProxy> allEGs = b.getExecutionGroups(null);
while (allEGs.hasMoreElements()) {
ExecutionGroupProxy thisEG =
allEGs.nextElement();
System.out.println("Found EG: "+thisEG.getName());
}
} catch(ConfigManagerProxyPropertyNotInitializedException
ex) {
System.err.println("Comms problem! "+ex);
}
}
}
Die Methode BrokerProxy.getExecutionGroups(Properties) ist die Schlüsselmethode. Bei Angabe eines Nullarguments gibt die Methode eine Aufzählung aller ExecutionGroupProxy-Objekte des Brokers zurück. Mit dieser Methode durchsucht die Anwendung der Reihe nach alle ExecutionGroupProxy-Objekte und zeigt die zugehörigen Namen an.
Mit dem Argument 'Eigenschaften' der Methode BrokerProxy.getExecutionGroups(Eigenschaften) können die Merkmale der gesuchten Ausführungsgruppen genau angegeben werden. Die Anwendung kann dieses Argument für nahezu alle Methoden verwenden, mit denen verwaltete Objekte zurückgegeben werden; es ist eine effektive Möglichkeit, die Objekte zu filtern, die für die Anwendung relevant sind.
Beispiele für Merkmale, die zum Filtern einer Objektsuche angegeben werden können, sind der Ausführungsstatus, die Kurzbeschreibung oder offensichtlichere Merkmale wie der Name und die UUID. Damit Sie die Logik für gefilterte Suchen erstellen können, müssen Sie wissen, wie Informationen in den jeweiligen verwalteten Objekten gespeichert werden.
Die Merkmale eines verwalteten Objekts werden lokal im Objekt unter Verwendung einer Hashtabelle gespeichert, wobei jedes Merkmal als {Schlüssel, Wert}-Tupel dargestellt ist. Jeder Schlüssel entspricht dem Namen eines Attributs (z. B. Name), und jeder Wert entspricht dem Wert (z. B. BROKER1).
Für jeden Schlüsselnamen muss eine Konstante aus der AttributeConstants-Klasse verwendet werden (com.ibm.broker.config.proxy). Eine vollständige Liste mit den Schlüsseln und den entsprechenden Werte für die einzelnen verwalteten Objekte finden Sie in der Java-Dokumentation für die Klasse AttributesConstant; Sie können diese Liste auch über die Funktion Show raw property table for this object (Tabelle mit unformatierten Eigenschaften für dieses Objekt anzeigen) der Musteranwendung CMP-API-Testprogramm anzeigen. Wenn Sie die Funktion aufrufen, wird eine vollständige Auflistung der {Schlüssel, Wert}-Paare für die jeweiligen verwalteten Objekte angezeigt.
Das Argument 'Eigenschaften' in den Suchmethoden ist eine Gruppe dieser {Schlüssel, Wert}-Paare, die in jedem verwalteten Objekt in der zurückgegebenen Aufzählung enthalten sein muss. Als Beispiel dient folgendes Codefragment:
Properties p = new Properties();
p.setProperty(AttributeConstants.OBJECT_RUNSTATE_PROPERTY,
AttributeConstants.OBJECT_RUNSTATE_RUNNING);
Enumeration<MessageFlowProxy> mf = executionGroup.getMessageFlows(p);
Vorausgesetzt, dass die Variable executionGroup ein gültiges ExecutionGroupProxy-Objekt ist, enthält die zurückgegebene Aufzählung ausschließlich aktive Nachrichtenflüsse (d. h. OBJECT_RUN_STATE_PROPERTY entspricht OBJECT_RUNSTATE_RUNNING).
Properties p = new Properties();
p.setProperty(AttributeConstants.NAME_PROPERTY,
"EG1");
ExecutionGroupProxy eg1 = brokerProxy.getExecutionGroup(p);
eine Alternative zur folgenden Anweisung dar:ExecutionGroupProxy eg1 = brokerProxy.getTopicByName("EG1");
Wenn mehrere {Schlüssel, Wert}-Paare zu einem Eigenschaftenfilter hinzugefügt werden, müssen alle Eigenschaften im untergeordneten Objekt enthalten sein, damit ein Objekt passt. Wenn eine Methode eine logische OR- oder NOT-Operation für einen Filter ausführen soll, müssen Sie einen speziellen Anwendungscode dafür schreiben.
Wenn AdministeredObjects in einer Anwendung zum ersten Mal instanziiert wird, fordert die CMP-API die Merkmale für dieses Objekt vom Broker an. Diese Vorgänge laufen asynchron ab, d. h., wenn ein Merkmal zum ersten Mal angefordert wird, hält die CMP-API die Verarbeitung unter Umständen an, während sie auf die vom Broker zurückzugebenden Informationen wartet. Wenn die Informationen nicht nach Ablauf einer bestimmten Zeit zurückgegeben werden (zum Beispiel weil der Broker inaktiv ist), wird die Ausnahmebedingung ConfigManagerProxyPropertyNotInitializedException ausgegeben. Mithilfe der Methode BrokerProxy.setRetryCharacteristics() kann die Anwendung die maximale Wartezeit für die Musteranwendung CMP-API vorgeben.