Un'origine eventi viene implementata nel linguaggio di programmazione Java, utilizzando J2SE (Java 2 Platform, Standard Edition) o J2EE (Java 2 Platform, Enterprise Edition). Un'origine eventi deve inoltrare eventi validi conformi al modello Common Base Event. Ciascun evento è rappresentato come un oggetto Java.
Programmi di output e relative produzioni
Un'origine eventi non interagisce direttamente con un server degli eventi; al contrario, interagisce con un oggetto denominato programma di output (un'implementazione dell'interfaccia com.ibm.events.emitter.Emitter). Un programma di output è un oggetto locale che fornisce i metodi per inviare gli eventi.
In generale, il programma di output gestisce i dettagli della trasmissione evento; la posizione del server degli eventi, le impostazioni dei filtri o il meccanismo di trasmissione alla base non riguardano lo sviluppatore di un'origine eventi.
Dettagli come questi sono regolati dalla
produzione del programma di
output, un oggetto configurato da un amministratore e associato a uno
spazio nome JNDI (Java Naming and Directory Interface). Una produzione del programma di output è un'istanza di com.ibm.events.emitter.EmitterFactory e viene utilizzata per
creare gli oggetti del programma di output. Inoltre definisce il funzionamento dei
programmi di output che crea; include le impostazioni per:
- La modalità di transazione preferita. Questa impostazione specifica se il programma di output tenterà o di inviare ciascun evento a una nuova transazione o alla transazione corrente.
Un'origine eventi può modificare questa impostazione per un particolare programma di
output o per un inoltro di eventi, ma il profilo specifica il valore predefinito. (Questa impostazione è valida solo in un contenitore J2EE; la piattaforma J2SE non fornisce i controlli transazioni).
- La modalità di sincronizzazione preferita. Questa impostazione specifica se gli eventi vengono inviati utilizzando trasmissioni sincrone o asincrone. Nella
trasmissione sincrona il metodo sendEvent() non restituisce il controllo al
chiamante finché l'evento non viene elaborato; nella trasmissione asincrona il
metodo viene restituito subito dopo l'invio dell'evento e il chiamante non dispone di
ulteriori informazioni sull'elaborazione dell'evento. Un'origine eventi può
modificare questa impostazione per un programma di output o per un inoltro eventi, ma il
valore predefinito è
specificato dal profilo.
- I profili di trasmissione da utilizzare. Un profilo di trasmissione è un oggetto di configurazione che definisce un meccanismo di trasmissione specifico per l'invio di eventi al server degli eventi. Un profilo produzione del programma di output può specificare due profili di trasmissione, uno per la trasmissione sincrona e uno per quella asincrona.
Un'origine eventi non può modificare i profili di trasmissione utilizzati da un programma di output.
- La configurazione del filtro da utilizzare per il programma di output. Tale
configurazione definisce quale plugin filtro utilizzare per filtrare gli eventi
inviati al programma di output.
La Common Event Infrastructure comprende un plug-in filtro predefinito, ma è anche possibile implementare il proprio plug-in filtro se si desidera utilizzare un motore di filtro diverso.
Un amministratore può creare più profili produzione del programma di output, ciascuno dei quali definisce una diversa configurazione del programma di output. Un'origine eventi acquisisce un programma di output utilizzando una produzione programma di output associata a un profilo produzione programma di output esistente; perciò, tutti i programmi di output creati da una specifica produzione avranno la stessa funzionalità predefinita. Per ulteriori informazioni, vedere Richiamo di un programma di output.
Nota: se l'origine eventi è in esecuzione con Java 2 Security abilitata, e si desidera generare i propri GUID (globally unique identifier), occorre modificare il proprio file delle politiche per abilitare una corretta elaborazione. Aggiungere le seguenti voci:
permission java.io.FilePermission "${java.io.tmpdir}${/}guid.lock",
"read,write,delete";
permission java.net.SocketPermission "*", "resolve";