Verwenden Sie die folgenden Advisor-Methoden und Funktionsaufrufe in Ihren angepassten Advisor-Funktionen.
Beachten Sie, dass angepasste Advisor-Funktionen alle erforderlichen Routinen haben müssen. Advisor
müssen die folgenden Basisklassenmethoden haben:
- Eine Routine constructor. Der Konstruktor ruft den Basisklassenkonstruktor auf.
- Eine Methode "ADV_AdvisorInitialize". Diese Methode bietet die Möglichkeit, zusätzliche Schritte
auszuführen, nachdem die Initialisierung der Basisklasse abgeschlossen ist.
- Eine Routine getLoad. Die Basis-Advisor-Klasse führt das
Öffnen des Sockets aus. Die Methode "getLoad" muss nur die entsprechenden Sende- und
Empfangsanforderungen absetzen, um den Advisor-Zyklus zu beenden.
Konstruktor (bereitgestellt vom Advisor-Basiscode)
public <Advisor-Name> {
String sName;
String sVersion;
int iDefaultPort;
int iInterval;
String sDefaultLogFileName;
boolean replace
)
- sName
- Der Name der angepassten Advisor-Funktion.
- sVersion
- Die Version der angepassten Advisor-Funktion.
- iDefaultPort
- Die Nummer des Ports, über den die Verbindung zum Server hergestellt wird, wenn keine Portnummer im Aufruf angegeben ist.
- iInterval
- Das Intervall, in dem der Advisor die Server abfragt.
- sDefaultLogFileName
- Dieser Parameter ist erforderlich, wird aber nicht verwendet. Der einzige gültige Wert ist eine Nullzeichenfolge
("").
- replace
- Gibt an, ob dieser Advisor im Ersetzungsmodus arbeitet. Die gültigen Werte sind im Folgenden beschrieben:
- true – Die vom Advisor-Basiscode berechnete Last durch den von der angepassten Advisor-Funktion gemeldeten Wert ersetzen.
- false – Den von der angepassten Advisor-Funktion gemeldeten Lastwert zu dem vom Advisor-Basiscode berechneten
Lastwert addieren.
Methode "ADV_AdvisorInitialize()"
void ADV_AdvisorInitialize()
Diese Methode führt alle Initialisierungsoperationen durch, die für die angepasste Advisor-Funktion erforderlich sind.
Sie wird nach dem Start des Advisor-Basismoduls aufgerufen.
In vielen Fällen (z. B. bei den Standard-Advisor-Funktionen) wird diese Methode nicht verwendet, und ihr Code besteht
aus einer einzigen Rückkehranweisung. Diese Methode kann verwendet werden, um die Methode
suppressBaseOpeningSocket() aufzurufen, die nur in dieser Methode
gültig ist.
In vielen Fällen (z. B. bei den Standard-Advisor-Funktionen) wird diese Methode nicht verwendet, und ihr Code besteht
aus einer einzigen Rückkehranweisung. Sie können diese Methode verwenden, um die Methode
"suppressBaseOpeningSocket" aufzurufen, die nur in der Methode "ADV_AdvisorInitialize" gültig ist.
Methode "ADVLOG()"
Die Funktion ADVLOG
ermöglicht einer angepassten Advisor-Funktion, eine Textnachricht an die Basisprotokolldatei der Advisor-Funktion zu schreiben.
Das Format ist wie folgt:
void ADVLOG (int logLevel, String Nachricht)
Dieser Befehl hat die folgenden Parameter:
- logLevel
- Die Statusstufe, auf der die Nachricht in die Protokolldatei geschrieben wird. Die
Advisor-Protokolldatei ist in Stufen organisiert: die dringendsten Nachrichten erhalten die Statusstufe
0 und die weniger dringenden Nachrichten erhalten höhere Nummern. Die Statusstufe 5 steht für den
ausführlichsten Nachrichtentyp. Diese Stufen werden verwendet, um die Typen von Nachrichten zu steuern, die der Benutzer in
Echtzeit empfängt. (Die Ausführlichkeit wird mit dem Befehl "dscontrol" festgelegt.)
Schwer wiegende Fehler sollten immer auf der Stufe 0 protokolliert werden.
- Nachricht
- Die Nachricht, die in die Protokolldatei geschrieben werden soll. Der Wert für diesen Parameter ist eine
Java-Standardzeichenfolge.
Funktion getAdvisorName
Die Funktion getAdvisorName
gibt eine Java-Zeichenfolge mit dem Suffix des Namens Ihrer angepassten Advisor-Funktion zurück.
Für eine Advisor-Funktion mit dem Namen "ADV_cdload.java" gibt diese Funktion beispielsweise den Wert
cdload zurück.
An diese Funktion werden keine Parameter übergeben.
Probleme vermeiden:
Dieser Wert kann während einer Instanzierung einer Advisor-Funktion nicht geändert werden.
gotcha
caller.getCurrentServerId()
Die Funktion getCurrentServerId
gibt eine Java-Zeichenfolge zurück, die eine eindeutige Darstellung für den aktuellen Server ist. Dieser
Wert ändert sich gewöhnlich bei jedem Aufruf der angepassten Advisor-Funktion, weil der Advisor-Basiscode nacheinander alle Servermaschinen abfragt.
An diese Funktion werden keine Parameter übergeben.
caller.getCurrentClusterId()
Der Funktionsaufruf getCurrentClusterId
gibt eine Java-Zeichenfolge zurück, die eine eindeutige Darstellung für den aktuellen Cluster ist. Dieser
Wert ändert sich gewöhnlich bei jedem Aufruf der angepassten Advisor-Funktion, weil der Advisor-Basiscode nacheinander alle Cluster abfragt.
An diese Funktion werden keine Parameter übergeben.
caller.getSocket()
Der Funktionsaufruf getSocket
gibt einen Java-Socket zurück, der den Socket darstellt, der für den aktuellen Server zur Kommunikation
geöffnet wurde.
An diese Funktion werden keine Parameter übergeben.
caller.getLatestLoad()
Die Funktion getLatestLoad
ermöglicht einer angepassten Advisor-Funktion, den aktuellen Lastwert für ein bestimmtes Serverobjekt abzurufen.
Die Lastwerte werden vom Advisor-Basiscode und vom Managerdämon in internen Tabellen verwaltet.
Dieser Funktionsaufruf ist hilfreich, wenn Sie das Verhalten eines Protokolls
oder Ports vom Verhalten eines anderen abhängig machen möchten.
Sie können diesen Funktionsaufruf beispielsweise in einer angepassten Advisor-Funktion verwenden, die einen
bestimmten Anwendungsserver inaktiviert, wenn der Telnet-Server auf derselben Maschine inaktiviert wurde.
Die Syntax ist wie folgt:
int caller.getLatestLoad (String Cluster-ID, int Port, String Server-ID)
Die drei Argumente zusammen definieren ein einziges Serverobjekt.
Dieser Befehl hat die folgenden Parameter:
- Cluster-ID
- Die Clusterkennung des Serverobjekts, für das der aktuelle Lastwert abgerufen werden soll.
Dieses Argument muss eine Java-Zeichenfolge sein.
- Port
- Die Portnummer des Serverobjekts, für das der aktuelle Lastwert abgerufen werden soll.
- Server-ID
- Die Serverkennung des Serverobjekts, für das der aktuelle Lastwert abgerufen werden soll.
Dieses Argument muss eine Java-Zeichenfolge sein. Der Rückgabewert ist eine ganze Zahl.
- Ein positiver Rückgabewert stellt den tatsächlichen Lastwert des abgefragten Objekts dar.
- Der Wert -1 gibt an, dass der abgefragte Server inaktiv ist.
- Der Wert -2 gibt an, dass der Status des abgefragten Servers unbekannt ist.
caller.receive()
Die Funktion receive
ruft Informationen von der Socket-Verbindung ab. Die Syntax ist wie folgt:
caller.receive(StringBuffer *response)
Dieser Befehl hat die folgenden Parameter:
- response
- Dies ist ein Zeichenfolgepuffer, in dem die abgerufenen Daten abgelegt werden. Außerdem gibt
die Funktion einen ganzzahligen Wert mit der folgenden Signifikanz zurück:
- 0 gibt an, dass die Daten erfolgreich gesendet wurden.
- Eine negative Zahl zeigt einen Fehler an.
caller.send()
Die Funktion send verwendet
die eingerichtete Socket-Verbindung, um ein Datenpaket über den angegebenen Port an den Server zu senden.
Die Syntax ist wie folgt:
caller.send(String Befehl)
Dieser Befehl hat die folgenden Parameter:
- Befehl
- Diese ist eine Zeichenfolge, die die an den Server zu sendenden Daten enthält. Die Funktion gibt
einen ganzzahligen Wert mit der folgenden Signifikanz zurück:
- 0 gibt an, dass die Daten erfolgreich gesendet wurden.
- Eine negative Zahl zeigt einen Fehler an.
getLoad()
int getLoad( int iConnectTime; ADV_Thread *caller )
Diese Funktion hat die folgenden Parameter:
- iConnectTime
- Gibt an, wie lange (in Millisekunden) die Fertigstellung der Verbindung gedauert hat.
Diese Lastmessung wird vom Advisor-Basiscode durchgeführt und an den angepassten Advisor-Code übergeben, der
die Messung bei der Rückgabe des Lastwerts verwenden oder ignorieren kann.
Wenn die Verbindung scheitert, wird der Wert auf -1 gesetzt.
- caller
- Die Instanz der Advisor-Basisklasse, in der Advisor-Basismethoden bereitgestellt werden.
Die Funktionsaufrufe, die angepassten Advisor-Funktionen zur Verfügung stehen, sind die Methoden bzw. Funktionen, die in den
folgenden Abschnitten beschrieben werden. Diese Methoden werden vom Advisor-Basiscode unterstützt.
Einige dieser Funktionsaufrufe können direkt ausgeführt werden, z. B.
function_name(), aber andere erfordern das Präfix "caller".
Caller stellt die Basis-Advisor-Instanz dar, die die ausgeführte angepasste Advisor-Funktion unterstützt.
getAdviseOnPort()
Die Funktion getAdviseOnPort gibt die Nummer
des Ports zurück, an dem die aufrufende angepasste Advisor-Funktion ausgeführt wird.
Der Rückgabewert ist ein Java-Integer (int), und es werden keine Parameter an die Funktion übergeben.
Anmerkung:
Dieser Wert kann während einer Instanzierung eines Advisors nicht geändert werden.
getAdvisorName()
Die Funktion "getAdvisorName" gibt eine Java-Zeichenfolge
mit dem Suffix des Namens Ihrer angepassten Advisor-Funktion zurück.
Für eine Advisor-Funktion mit dem Namen "ADV_cdload.java" gibt diese Funktion beispielsweise den Wert
cdload zurück. An diese Funktion werden keine Parameter übergeben. Beachten Sie, dass
dieser Wert während einer Instanzierung eines Advisors nicht geändert werden.
getInterval()
Die Funktion "getInterval" gibt das Advisor-Intervall
zurück, d. h. die Anzahl der Sekunden zwischen Advisor-Zyklen. Dieser Wert entspricht dem im Konstruktor der angepassten
Advisor-Funktion gesetzten Standardwert, sofern dieser Wert nicht zur Laufzeit mit dem Befehl "dscontrol" geändert wurde.
Der Rückgabewert ist ein Java-Integer (int).
An diese Funktion werden keine Parameter übergeben.
suppressBaseOpeningSocket()
Der Funktionsaufruf
"suppressBaseOpeningSocket"
ermöglicht einer angepassten Advisor-Funktion anzugeben, ob der Basis-Advisor-Code
einen TCP-Socket zum Server für die angepasste Advisor-Funktion öffnet.
Wenn Ihre Advisor-Funktion keine direkte Kommunikation mit dem Server verwendet, um seinen Status zu bestimmen,
muss dieser Socket unter Umständen nicht geöffnet werden. Dieser Funktionsaufruf
kann nur ein einziges Mal abgesetzt werden. Er muss von der Routine ADV_AdvisorInitialize() abgesetzt werden.
An diese Funktion werden keine Parameter übergeben.