Impostando le proprietà e le politiche, il contenuto eventi può essere completato in modo automatico.
Perché e quando eseguire questa attività
In alcuni casi, per ogni evento creato, si potrebbe desiderare di impostare
automaticamente alcuni dati delle proprietà. È un modo per completare determinati valori standard
invariabili (ad esempio il nome dell'applicazione) o impostare alcune proprietà in base alle
informazioni disponibili dall'ambiente di runtime (ad esempio la data di creazione o le
informazioni sul thread). Inoltre, è anche possibile impostare delle politiche che controllino il contenuto eventi in base a regole aziendali; ad esempio, si desidera impostare su un determinato valore la gravità di ogni evento con uno specifico nome estensione.
È possibile farlo creando un handler dei contenuti. Un handler dei contenuti è un oggetto che imposta automaticamente i valori delle proprietà di ciascun evento in base a politiche arbitrarie a scelta. La Common Event Infrastructure non pone limiti alla modalità di modifica dei dati da parte dell'handler dei contenuti, purché l'evento resti conforme alla specifica Common Base Event.
Per assicurare che tutte le origini eventi rispettino le stesse politiche, è possibile creare una produzione
eventi associata a un handler dei contenuti (utilizzando EventFactoryFactory) e
collegarla quindi in uno spazio nome JNDI. Invece di creare le proprie produzioni eventi, le origini eventi possono quindi eseguire delle ricerche JNDI per accedere alla produzione eventi che già esiste, senza sapere nulla dell'handler dei contenuti. Se le regole aziendali in seguito subiscono delle variazioni, è possibile modificare l'handler dei contenuti in un'unica sede.
Una origine eventi non deve fare nulla per abilitare il completamento del contenuto. Se una produzione
eventi è associata a un handler dei contenuti, ciascun evento creato dalla produzione include un
riferimento a tale handler. Quando l'evento viene inoltrato a un programma di output, l'evento
richiama il metodo completeEvent() dell'handler dei contenuti, passando un riferimento a se stesso.
Ciò garantisce l'applicazione delle politiche corrette all'evento dopo l'impostazione delle
proprietà specifiche dell'evento da parte dell'origine eventi ma prima che l'evento venga
convalidato ed elaborato dal programma di output.
Nota: quando l'evento viene trasmesso da un processo a un altro, il riferimento all'handler dei contenuti non viene trasmesso.
Questo avviene perché il completamento dei contenuti dipende dall'ambiente in cui l'evento ha avuto
origine e le informazioni necessarie potrebbero non essere disponibili altrove. Questa limitazione
non influisce sulle chiamate tra applicazioni che sono locali l'una per l'altra (ad esempio, una
chiamata a un bean enterprise con la sua interfaccia locale).
Per creare un
handler dei contenuti, attenersi alle seguenti procedure:
Passi per questa attività
- Creare una nuova classe Java che implementi l'interfaccia org.eclipse.hyades.logging.events.cbe.ContentHandler. Quest'interfaccia definisce un singolo metodo denominato completeEvent(CommonBaseEvent); il parametro è l'evento di cui deve essere completato il contenuto. Nell'implementazione specifica di questo metodo,
è possibile utilizzare i metodi getter e setter di CommonBaseEvent per
elaborare i dati delle proprietà dell'evento in base alle politiche applicate.
Nota: quando
un'origine dati utilizza JNDI per richiamare una produzione eventi, l'handler dei
contenuti viene restituito insieme alla produzione eventi. Per questo motivo, l'handler dei contenuti deve essere serializzabile.
L'esempio riportato di seguito rappresenta un semplice handler dei contenuti che imposta automaticamente il nome dell'estensione di ciascun evento:
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");
}
}
- Associare l'handler dei contenuti a una produzione eventi. A tale scopo,
specificare l'handler dei contenuti durante la creazione della produzione eventi:
EventFactory eventFactory =
(EventFactory) EventFactoryFactory.createEventFactory(contentHandler);
La produzione eventi restituita è associata in modo permanente all'handler dei contenuti specificato.