Utilice los métodos de asesor y llamadas a función siguientes en los asesores personalizados.
Tenga en cuenta que los asesores han de tener todas las rutinas necesarias. Los
asesores deben tener los métodos de clase base siguientes:
- Una rutina de constructor. El
constructor llama al constructor de clase base.
- Un método ADV_AdvisorInitialize.
Este método proporciona una manera de realizar pasos adicionales después de que
la clase base termine su inicialización.
- Una rutina getLoad. La clase de asesor base lleva a cabo la apertura del socket; la función getLoad
sólo necesita emitir las peticiones de envío y recepción adecuadas para completar el ciclo del asesor.
Constructor (proporcionado por la base del asesor)
public <nombre_asesor> {
String sName;
String sVersion;
int iDefaultPort;
int iInterval;
String sDefaultLogFileName;
boolean replace
)
- sName
- Nombre del asesor personalizado.
- sVersion
- Versión del asesor personalizado.
- iDefaultPort
- Número de puerto en el que ponerse en contacto con el servidor si no
se especifica ningún número de puerto en la llamada.
- iInterval
- Intervalo al que el asesor consultará a los servidores.
- sDefaultLogFileName
- Este parámetro es necesario pero no se utiliza. El único valor aceptable es la serie vacía, ""
- replace
- Determina si este asesor funciona o no en modalidad de sustitución. Los valores posibles
son los siguientes:
- true: sustituye la carga calculada por el código base
del asesor por el valor indicado por el asesor personalizado.
- false: añade el valor de carga indicado por el asesor personalizado
al valor de carga calculado por el código base del asesor.
Método ADV_AdvisorInitialize()
void ADV_AdvisorInitialize()
Este método se proporciona para realizar cualquier inicialización que pueda ser
necesaria para el asesor personalizado. Este método se llama después de que se inicie el módulo base del asesor.
En muchos casos, incluidos los asesores estándar, no se utiliza este método y
el código consta de una instrucción return sólo. Este método se puede utilizar para llamar al método
suppressBaseOpeningSocket(), que sólo es válido desde este método.
En muchos casos, incluidos los asesores estándar, no se utiliza este método y
el código consta de una instrucción return sólo. Puede utilizar este método para llamar
al método suppressBaseOpeningSocket, que es válido sólo desde el método ADV_AdvisorInitialize.
Método ADVLOG()
La función ADVLOG permite que un asesor personalizado grabe un mensaje de texto
en el archivo de anotaciones cronológicas base de asesor. El formato es el siguiente:
void ADVLOG (int logLevel, String mensaje)
Este mandato tiene los parámetros siguientes:
- logLevel
- Nivel de estado en el que el mensaje se graba en el archivo de
anotaciones cronológicas. El archivo de anotaciones cronológicas de asesor se organiza
en etapas; a los mensajes más urgentes se les asigna el nivel de estado 0 y
los mensajes menos urgentes reciben los números más altos. Al tipo de mensaje más verboso se le asigna el nivel de estado 5.
Estos niveles se utilizan para controlar los tipos de mensajes que el
usuario recibe en tiempo real (el mandato dscontrol se utiliza para establecer
la verbosidad). Los errores de máxima gravedad deben anotarse siempre en el nivel 0.
- message
- Mensaje que se debe grabar en el archivo de anotaciones cronológicas. El valor de este parámetro es una serie
Java estándar.
Función getAdvisorName
La función getAdvisorName
devuelve una serie Java con la parte de sufijo del nombre de asesor personalizado.
Por ejemplo, para un asesor denominado ADV_cdload.java, esta función devuelve el valor
cdload.
Esta función no acepta parámetros.
Avoid trouble: No es posible que este valor cambie durante una instanciación de un asesor.
gotcha
caller.getCurrentServerId()
La función getCurrentServerId
devuelve una serie Java que es una representación única del servidor actual. Normalmente, este valor cambia cada vez que se llama al asesor personalizado, porque
el código base de asesor consulta todas las máquinas de servidor en serie.
Esta función no acepta parámetros.
caller.getCurrentClusterId()
La llamada a la función getCurrentClusterId
devuelve una serie Java que es una representación única del clúster actual. Normalmente, este valor cambia cada vez que se llama al asesor personalizado,
porque la base de asesor consulta todos los clústeres en serie.
Esta función no acepta parámetros.
caller.getSocket()
La llamada a la función getSocket
devuelve un socket Java que representa el socket abierto en el servidor actual para la comunicación.
Esta función no toma ningún parámetro.
caller.getLatestLoad()
La función getLatestLoad permite que un asesor personalizado obtenga el valor
de carga más reciente para un objeto de servidor determinado. El código base del asesor y el daemon del gestor mantienen los valores de carga en tablas internas. Esta llamada de función es útil si desea que el comportamiento de un protocolo o puerto
sea dependiente del comportamiento de otro. Por ejemplo, puede utilizar esta
llamada de función en un asesor personalizado que ha inhabilitado un servidor
de aplicaciones determinado si
el servidor Telnet de esa misma máquina estaba inhabilitado.
La sintaxis es:
int caller.getLatestLoad (String ID_clúster, int puerto, String ID_servidor)
Los tres argumentos juntos definen un objeto de servidor.
Este mandato tiene los parámetros siguientes:
- clusterId
- Identificador de clúster del objeto de servidor para el que se debe obtener
el valor de carga actual. Este argumento debe ser una serie Java.
- port
- Número de puerto del objeto de servidor para el que se debe obtener
el valor de carga actual.
- serverId
- Identificador de servidor del objeto de servidor para el que se debe obtener
el valor de carga actual. Este argumento debe ser una serie Java. El valor de retorno es un entero.
- Un valor de retorno positivo representa el valor de carga real asignado para el
objeto que se ha consultado.
- El valor -1 indica que el servidor preguntó acerca de si estaba inactivo.
- El valor -2 indica que el estado del servidor preguntó acerca de si era desconocido.
caller.receive()
La función receive obtiene información de la conexión de socket.La sintaxis es:
caller.receive(StringBuffer *response)
Este mandato tiene los parámetros siguientes:
- response
- Se trata de un almacenamiento intermedio de serie en el que se sitúan los datos recuperados. De forma adicional, la función devuelve un valor entero con la importancia siguiente:
- 0 indica que los datos se han enviado satisfactoriamente.
- Un número negativo indica un error.
caller.send()
La función send utiliza la conexión de socket establecida para enviar un paquete
de datos al servidor, utilizando el puerto especificado.La sintaxis es la siguiente:
caller.send(String mandato)
Este mandato tiene los parámetros siguientes:
- command
- Se trata de una serie que contiene los datos que se van a enviar al servidor. La función
devuelve un valor entero con la importancia siguiente:
- 0 indica que los datos se han enviado satisfactoriamente.
- Un número negativo indica un error.
getLoad()
int getLoad( int iConnectTime; ADV_Thread *caller )
Esta función tiene los parámetros siguientes:
- iConnectTime
- Tiempo, en milisegundos, que ha tardado la conexión en completarse.
Esta medición de carga la realiza la base de asesor y se pasa al código de asesor
personalizado, que puede utilizar o ignorar la medición al devolver
el valor de carga. Si no se ha podido realizar la conexión, este valor se establece en -1.
- caller
- La instancia de la clase base del asesor donde se incluyen los métodos base del asesor.
Las llamadas a función disponibles para los asesores personalizados: los métodos, o funciones,
descritos en los apartados siguientes se pueden llamar desde los asesores personalizados. El código base de asesor soporta
estos métodos.
Algunas de estas llamadas a función
se pueden realizar directamente, por ejemplo, nombre_función(), pero otras necesitan el
prefijo caller. "Caller" representa la instancia de asesor base que
admite el asesor personalizado que se está ejecutando.
getAdviseOnPort()
La función getAdviseOnPort devuelve
el número de puerto en el que se está ejecutando el asesor personalizado que efectúa la llamada.
El valor de retorno es un entero Java (int) y la función no acepta parámetros.
Nota: No es posible que este valor cambie durante una instanciación de un asesor.
getAdvisorName()
La función getAdvisorName
devuelve una serie Java con la parte de sufijo del nombre de asesor personalizado. Por ejemplo, para
un asesor denominado ADV_cdload.java, esta función devuelve el valor cdload.Esta función no toma ningún parámetro. Tenga en cuenta que este valor no puede cambiar durante una instanciación
de un asesor.
getInterval()
La función getInterval devuelve el intervalo de asesor, es decir, el número
de segundos entre ciclos de asesor. Este
valor es igual al valor predeterminado establecido en el constructor del asesor personalizado,
a no ser que se haya modificado el valor durante la ejecución mediante el mandato dscontrol.
El valor de retorno es un entero Java (int).
La función no toma ningún parámetro.
suppressBaseOpeningSocket()
La llamada a la función suppressBaseOpeningSocket
permite que un asesor personalizado especifique si el código de asesor base
abre un socket TCP para el servidor en nombre del asesor personalizado. Si el
asesor no utiliza la comunicación directa con el servidor para determinar su estado,
puede que no sea necesario abrir este socket. Esta llamada a función se puede emitir sólo una vez y debe emitirse desde la rutina de Método ADV_AdvisorInitialize().
La función no acepta parámetros.