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 la clase base.
- Método ADV_AdvisorInitialize. Este método proporciona un modo de realizar pasos
adicionales después de que la clase base finaliza la 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 efectuar 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
los asesores personalizados graben mensajes de texto en el archivo de anotaciones cronológicas base del 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.
Evite problemas: 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. Habitualmente, este valor cambia cada vez que llama al asesor personalizado, porque
el código base del asesor consulta todas las máquinas 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. Habitualmente, este valor cambia cada vez que llama al asesor personalizado, porque
el código base del 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 último valor de carga para un objeto servidor determinado. El código base del asesor y el daemon del gestor mantienen los valores de carga en tablas internas. Esta llamada a función resulta de utilidad si desea hacer que el comportamiento
de un protocolo o puerto sea dependiente del comportamiento de otro.
Por ejemplo, podría utilizar esta llamada a función en un asesor personalizado
que inhabilitó un servidor de aplicaciones en particular si el servidor Telnet de ese 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 servidor.
Este mandato tiene los parámetros siguientes:
- clusterId
- El identificador de clúster del objeto servidor para el que se va a obtener el valor
de carga actual. Este argumento debe ser una serie Java.
- port
- El número de puerto del objeto servidor para el que se va a 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 del 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
- La longitud de tiempo, en milisegundos, que lleva completarse la conexión.
El código base del asesor lleva a cabo esta medida de carga y la pasa al código del
asesor personalizado, que puede utilizar o ignorar la medida cuando devuelve 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 del asesor admite 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. Recuerde que no
es posible que este valor cambie durante la creación de una instancia de un asesor.
getInterval()
La función getInterval devuelve
el intervalo del asesor, es decir, el número de segundos entre ciclos del 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.