Mediante el establecimiento de propiedades y políticas, el contenido de un
suceso puede cumplimentarse automáticamente.
Por qué y cuándo se efectúa esta tarea
En algunas situaciones, es posible que desee establecer determinados
datos automáticamente por cada suceso que cree. Se trata de una manera de
cumplimentar determinados valores estándar que no cambian (como el nombre de la
aplicación) o establecer determinadas propiedades en función de la información
disponible del entorno de ejecución (como la hora de creación o la
información de hebra). También puede establecer políticas que rigen el contenido de
los sucesos de acuerdo con reglas empresariales; por ejemplo, puede exigir que se
establezca un cierto nivel gravedad para los sucesos con un determinado nombre de
extensión.
Puede llevar esto a cabo creando un manejador de
contenido. Un manejador de contenido es un objeto que establece automáticamente
los valores de propiedades de cada suceso basado en políticas arbitrarias que desee
utilizar. Common Event Infrastructure no
limita hasta qué punto el manejador de contenido puede modificar los datos de un
suceso, siempre que el suceso se ajuste a la especificación de suceso básico común.
Para
garantizar que todos los orígenes de sucesos cumplen las mismas políticas, puede
crear una fábrica de sucesos asociada a un manejador de contenido (utilizando EventFactoryFactory)
y, a continuación, enlazar la fábrica de sucesos creada al espacio de nombres JNDI. En
lugar de crear su propias fábricas de sucesos, los orígenes de sucesos pueden realizar
búsquedas JNDI para acceder a la fábrica de sucesos que ya existe, sin conocimiento
del manejador de contenido. Si posteriormente cambian las reglas empresariales, puede
modificar el manejador de contenido.
Un origen de sucesos no necesita
realizar nada para permitir que se cumplimente el contenido. Si una fábrica de
sucesos se asocia a un manejador de contenido, cada suceso que cree llevará una
referencia a ese manejador de contenido. Cuando el suceso se envíe a un emisor,
el suceso llamará al método completeEvent() del manejador de contenido, que pasará
una referencia al mismo. De este modo se garantiza que se apliquen las políticas
correctas al suceso después de que el origen de sucesos haya acabado de establecer
propiedades específicas de sucesos, pero antes de que el emisor valide y
procese el suceso.
Nota: Cuando se transmite un suceso de un proceso a otro, la
referencia al manejador de contenido no se transmite con él. Esto se debe a que el
entorno en que se origina el entorno determina cómo se cumplimenta el contenido, y
es posible que la información necesaria no esté disponible en otros lugares.
Esta restricción no afecta a llamadas entre aplicaciones que son locales la una
en relación con la otra (por ejemplo, una llamada a un enterprise bean utilizando su interfaz local).
Para
crear un manejador de contenido, siga estos pasos:
Pasos para realizar esta tarea
- Cree una nueva clase Java que implemente la interfaz
org.eclipse.hyades.logging.events.cbe.ContentHandler. Esta interfaz
define un método único llamado completeEvent(CommonBaseEvent); el parámetro es el
suceso cuyo contenido debe completarse. En la implementación de este método, puede
usar los métodos getter y setter de CommonBaseEvent para procesar los
datos de propiedad del suceso de acuerdo con las políticas pertinentes.
Nota: Cuando
un origen de sucesos utiliza JNDI para recuperar una fábrica de sucesos, el
manejador de contenido se devuelve con la fábrica de sucesos. Por este motivo, el
manejador de contenido debe ser serializable.
El ejemplo
siguiente representa un manejador de contenido que establece automáticamente el
nombre de extensión de cada suceso:
import java.io.Serializable;
import org.eclipse.hyades.logging.events.cbe.*;
public class BusinessContentHandler
implements ContentHandler, Serializable {
public void completeEvent(CommonBaseEvent event)
throws CompletionException {
event.setExtensionName("business");
}
}
- Asocie el manejador de contenido a una fábrica de sucesos. Para
ello, especifique el manejador de contenido al crear la fábrica de sucesos:
EventFactory eventFactory =
(EventFactory) EventFactoryFactory.createEventFactory(contentHandler);
La fábrica de sucesos que se devuelve se asocia permanentemente al
manejador de contenido especificado.