Los consumidores de sucesos pueden modificar los valores del perfil de la fábrica de emisores.
Por qué y cuándo realizar esta tarea
Cuando se envía un suceso, se pueden especificar opciones que alteren temporalmente la modalidad de transacción o de sincronización actuales, o ambas, que se han configurado actualmente para el emisor. Estos valores los define inicialmente un administrador del perfil de la fábrica de emisores, pero los
consumidores de sucesos pueden modificarlos más adelante.
Es posible que un emisor no dé soporte a todas las modalidades de sincronización y transacción.
Las modalidades disponibles están sujetas a las siguientes limitaciones:
- Las modalidades de sincronización a las que da soporte un emisor las
define el perfil de fábrica del emisor. Puede averiguar qué modalidades
admite un determinado emisor llamando al método isSynchronizationModeSupported();
consulte la documentación de la API Javadoc donde trate de com.ibm.events.emitter.Emitter para obtener
más información.
- Sólo se da soporte a las transacciones en un contenedor J2EE.
Si intenta utilizar una modalidad que no está soportada, el emisor
genera una excepción TransactionModeNotSupportedException o
SynchronizationModeNotSupportedException.
Pasos para realizar esta tarea
Para alterar temporalmente los valores del emisor, utilice el
método sendEvent(CommonBaseEvent, int, int). String eventId = emitter.sendEvent(event,
synchronizationMode,
transactionMode);
Los parámetros son los siguientes:
- event
- El objeto event (una instancia de CommonBaseEvent) que desea enviar.
- synchronizationMode
- Una constante de entero definida mediante la interfaz SynchronizationMode. Debe ser una de las constantes siguientes:
- SynchronizationMode.ASYNCHRONOUS (enviar el suceso de forma asíncrona)
- SynchronizationMode.SYNCHRONOUS (enviar el suceso de forma síncrona)
- SynchronizationMode.DEFAULT (utilizar el valor del emisor actual)
- transactionMode
- Una constante de entero definida por la interfaz TransactionMode:
- TransactionMode.NEW (enviar el suceso en una transacción nueva)
- TransactionMode.SAME (enviar el suceso en la transacción actual)
- TransactionMode.DEFAULT (utilizar el valor del emisor actual)
Resultado
El suceso se envía con las opciones que haya especificado.
Estas opciones solamente se aplican al suceso individual que se está enviando; no se realizan cambios en los valores del emisor y los envíos de sucesos posteriores no resultan afectados.
El valor devuelto eventId es el identificador exclusivo globalmente del suceso (el valor del campo globalInstanceId de
CommonBaseEvent). Si el suceso no tiene un identificador globalInstanceId cuando lo envía, automáticamente el emisor le asigna uno.
Nota: Si se somete un suceso a un emisor no se garantiza que
se envíe el suceso al servidor de sucesos, dado que los valores del filtro
podrían provocar que se descartara el suceso. Una
llamada satisfactoria a sendEvent sólo significa que el emisor ha
procesado correctamente el suceso.
El ejemplo siguiente altera temporalmente los valores del emisor para enviar un suceso en una transacción nueva pero no altera temporalmente la modalidad de sincronización:
String eventId = sendEvent(event,
SynchronizationMode.DEFAULT,
TransactionMode.NEW);