Interfaces de programación JRas para el registro cronológico (en desuso)
La infraestructura JRas descrita en esta tarea y sus subtareas han caído en desuso. No obstante, puede conseguir resultados parecidos utilizando el registro cronológico de Java™.
Consideraciones generales
Se puede configurar WebSphere Application Server para que utilice la seguridad de Java 2 para limitar el acceso a los recursos protegidos como, por ejemplo, el sistema de archivos y los sockets. Puesto que las extensiones escritas por el usuario suelen acceder a este tipo de recursos protegidos, dichas extensiones deberán contener las correspondientes llamadas de comprobación de seguridad utilizando las llamadas doPrivileged de AccessController. Además, las extensiones escritas por el usuario deben contener el correspondiente archivo de políticas. En general, se recomienda colocar las extensiones escritas por el usuario en un paquete distinto. Es responsabilidad de usted restringir el acceso a las extensiones escritas por el usuario según corresponda.
Desarrollo de un manejador
Los manejadores desarrollados por el usuario deben implementar la interfaz RASIHandler. La interfaz RASIHandler extiende la interfaz RASIMaskChangeGenerator que, a su vez, extiende la interfaz RASIObject. A continuación se describen brevemente los métodos introducidos por cada una de estas interfaces así como sugerencias de implementación. Para obtener información más detallada sobre interfaces o métodos concretos, consulte la correspondiente documentación del API del producto.
Interfaz RASIObject
- El kit de herramientas de registro cronológico JRas autónomo soporta a una configuración básica basada en archivos de propiedades. Para implementar este soporte de configuración, se almacena el estado de la configuración como un conjunto de pares clave-valor en un archivo de propiedades. Los métodos public Hashtable getConfig y public void setConfig(Hashtable ht) se usan para obtener y establecer el estado de la configuración. Las extensiones JRas no soportan una configuración basada en propiedades. Implemente estos métodos como 'no operaciones' o sin operación. Puede implementar su propia configuración basada en propiedades utilizando estos métodos.
- Los registradores, manejadores y formateadores pueden ser objetos con nombre. Por ejemplo, las extensiones de JRas requieren que el usuario proporcione un nombre para los registradores que se obtienen del gestor. Puede dar nombre a los manejadores. Los métodos public String getName y public void setName(String nombre) se proporcionan para obtener o establecer el campo de nombre. Actualmente las extensiones de JRas no llaman estos métodos de los manejadores de usuario. Puede implementar estos métodos como desee, incluso como 'no operaciones' o sin operación.
- Los registradores, manejadores y formateadores también pueden contener un campo de descripción. Los métodos public String getDescription y public void setDescription(String desc) se pueden usar para obtener o establecer el campo de descripción. Actualmente, las extensiones de JRas no utilizan el campo de descripción. Puede implementar estos métodos como desee, incluso como 'no operaciones' o sin operación.
- El método public String getGroup se proporciona para que lo use la interfaz RASManager. Puesto que las extensiones de JRas proporcionan su propia clase Manager, nunca se llama este método. Impleméntelo como una 'no operación' o sin operación.
Interfaz RASIMaskChangeGenerator
La interfaz RASIMaskChangeGenerator es la interfaz que define los métodos de implementación para el filtrado de sucesos basado en un estado de máscara. Actualmente lo implementan tanto los registradores como los manejadores. Por definición, un objeto que implementa esta interfaz contiene una máscara de mensaje y una máscara de rastreo, aunque es posible que no sea necesario utilizar ambas. Por ejemplo, los registradores de mensajes contienen una máscara de rastreo, pero dicha máscara nunca se usa, porque el registrador de mensajes nunca genera sucesos de rastreo. Sin embargo, los manejadores pueden utilizar de forma activa ambos valores de máscara. Por ejemplo, un manejador individual puede manejar tanto sucesos de mensaje como sucesos de rastreo.
- Los métodos public long getMessageMask y public void setMessageMask(long mascara) se usan para obtener o establecer el valor de la máscara de mensaje. Los métodos public long getTraceMask y public void setTraceMask(long mascara) se usan para obtener o establecer el valor de la máscara de rastreo.
Además, esta interfaz introduce el concepto de retorno de llamada a las partes interesadas cuando una máscara cambia de estado. El objeto de devolución de llamada debe implementar la interfaz RASIMaskChangeListener.
- Los métodos public void addMaskChangeListener(RASIMaskChangeListener escucha) y public void removeMaskChangeListener(RASIMaskChangeListener escucha) se utilizan para añadir o suprimir escuchas en el manejador. El método public Enumeration getMaskChangeListeners devuelve una enumeración de la lista de escuchas registrados en ese momento. El método public void fireMaskChangedEvent(RASMaskChangeEvent mc) se usa para devolver la llamada a todos los escuchas registrados a fin de informarles de un suceso de cambio de máscara.
Por motivos de eficiencia, los registros de mensajes y rastreo de las extensiones JRas implementan la interfaz RASIMaskChangeListener. Las implementaciones de registrador mantienen una máscara compuesta además de la máscara de registrador. La máscara compuesta de registrador se crea realizando un or lógico en las correspondientes máscaras de todos los manejadores que están registrados en dicho registrador y después realizando un and del resultado con la máscara de registrador. Por ejemplo, la máscara compuesta del registrador de mensajes se crea realizando un "or" de las máscaras de mensajes de todos los manejadores registrados en dicho registrador y después realizando un "and" del resultado con la máscara de mensaje de registrador.
Todos los manejadores tienen que facilitar la correspondiente implementación de estos métodos. Además, cuando se crea una instancia de un manejador de usuario, el registrador que se añade debe registrarse en el manejador con el método addMaskChangeListener. Cuando se modifica la máscara de mensaje o la máscara de rastreo del manejador, se debe informar al registrador sobre el cambio de máscara con un retorno de llamada. Este proceso permite que el registrador mantenga de forma dinámica la máscara compuesta.
La clase RASMaskChangedEvent se define mediante el kit de herramientas de registro JRas autónomo. En este contexto se soporta el uso directo de dicha clase en el código de usuario.
Además RASIMaskChangeGenerator introduce el concepto de guardar en caché los nombres de todas las clases de sucesos de rastreo y mensajes que procesa el objeto implementador. El propósito de estos métodos es permitir que un programa de gestión como, por ejemplo, una interfaz gráfica de usuario pueda recuperar la lista de nombres, realizar una introspección de las clases para determinar los tipos de suceso que pueden procesar y mostrar los resultados. Las extensiones de JRas nunca llaman estos métodos, por lo tanto, se pueden implementar como si fueran 'no operaciones'.
- Los métodos public void addMessageEventClass(String nombre) y public void removeMessageEventClass(String nombre) se pueden invocar para añadir o eliminar un nombre de clase de suceso de mensaje en la lista. El método public Enumeration getMessageEventClasses devuelve una enumeración de la lista de nombres de clases de sucesos de mensajes. Del mismo modo, se pueden llamar los métodos public void addTraceEventClass(String nombre) y public void removeTraceEventClass(String nombre) para añadir o suprimir un nombre de clase de suceso de rastreo en la lista. El método public Enumeration getTraceEventClasses devuelve una enumeración de la lista de nombres de clases de sucesos de rastreo.
Interfaz RASIHandler
La interfaz RASIHandler introduce los métodos que son específicos del comportamiento de un manejador.
La interfaz RASIHandler, tal y como la proporciona el kit de herramientas de registro JRas autónomo, soporta manejadores que ejecutan en modo asíncrono o síncrono. En el modo asíncrono, los sucesos suelen ser encolados por el hilo llamante y luego escritos por un hilo de trabajo. Puesto que la generación de hilos no está soportada en un entorno de WebSphere Application Server, es de esperar que los manejadores no encolen ni sometan a procesos por lotes los sucesos, aunque esta actividad no esté expresamente prohibida.
- Los métodos public int getMaximumQueueSize() y public void setMaximumQueueSize(int tamagno) crean excepciones IllegalStateException para gestionar el tamaño máximo de la cola. El método public int getQueueSize se proporciona para consultar el tamaño de cola real.
- Los métodos public int getRetryInterval y public void setRetryInterval(int intervalo) soportan el concepto de reintento de errores, lo que implica cierta forma de encolamiento.
- Los métodos public void addFormatter(RASIFormatter formateador), public void removeFormatter(RASIFormatter formateador) y public Enumeration getFormatters se proporcionan para gestionar la lista de formateadores con los que puede configurarse el manejador. Se pueden proporcionar formateadores diferentes para clases de sucesos diferentes en caso de ser necesario.
- Los métodos public void openDevice, public void closeDevice y public void stop se proporcionan para gestionar el dispositivo subyacente del que el manejador es una abstracción.
- Los métodos public void logEvent(RASIEvent event) y public void writeEvent(RASIEvent event) se proporcionan para pasar sucesos al manejador para su procesamiento.
Desarrollo de un formateador
Los formateadores escritos por el usuario deben implementar la interfaz RASIFormatter. La interfaz RASIFormatter extiende la interfaz RASIObject. La implementación de la interfaz RASIObject es la misma para manejadores y formateadores. A continuación se describen brevemente los métodos que introduce la interfaz RASIFormatter. Para obtener información más detallada sobre los métodos que introduce esta interfaz, consulte la correspondiente documentación del API del producto.
Interfaz RASIFormatter
- Las clases concretas de RASHandler que proporciona el kit de herramientas de registro JRas autónomo usan los métodos public void setDefault(boolean distintivo) y public boolean isDefault para determinar si un formateador concreto es el formateador predeterminado. Dado que estas clases RASHandler nunca deben utilizarse en un entorno de WebSphere Application Server, la semántica de estos métodos la puede determinar el usuario.
- Los métodos public void addEventClass(String nombre), public void removeEventClass(String nombre) y public Enumeration getEventClasses se proporcionan para determinar qué clases de suceso puede usar un formateador para dar formato. Puede proporcionar las implementaciones que correspondan.
- Los objetos de manejador llaman el método public String format(RASIEvent suceso) y éste devuelve una representación del suceso en cadena con formato.