Los consumidores de sucesos pueden cambiar los valores de perfil de la
fábrica de emisores.
Por qué y cuándo se efectúa esta tarea
Cuando envía un suceso, puede especificar opciones que alteren
temporalmente la modalidad de transacción actual, la modalidad de sincronización, o
ambas, configuradas actualmente para el emisor. Estos valores los define
inicialmente un administrador en el perfil de la fábrica de emisores, pero los
consumidores de sucesos pueden modificarlos posteriormente.
Es posible que
un emisor no admita todas las modalidades de sincronización y transacción. Las
modalidades disponibles están sujetas a las limitaciones siguientes:
- Las modalidades de sincronización que admite un emisor se definen en el perfil
de fábrica de emisores. Puede determinar qué modalidades admite un emisor concreto
llamando al método isSynchronizationModeSupported(); consulte
com.ibm.events.emitter.Emitter en la documentación de la API Javadoc para obtener
más información.
- Las transacciones sólo están soportadas en un contenedor J2EE.
Si intenta usar una modalidad que no está soportada, el emisor emite una excepción
TransactionModeNotSupportedException o SynchronizationModeNotSupportedException.
Pasos para realizar esta tarea
Para alterar temporalmente los valores de emisor, utilice el método sendEvent(CommonBaseEvent, int, int). String eventId = emitter.sendEvent(suceso,
modalidad_sincronización,
modalidad_transacción);
Los
parámetros son los siguientes:
- suceso
- El objeto de suceso (una instancia de CommonBaseEvent) que desea enviar.
- modalidad_sincronización
- Un valor entero constante que define 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 (enviar el valor de emisor actual)
- modalidad_transacción
- Un valor entero constante que define la interfaz TransactionMode:
- TransactionMode.NEW (enviar el suceso en una nueva transacción)
- TransactionMode.SAME (enviar el suceso en la transacción actual)
- TransactionMode.DEFAULT (enviar el valor de emisor actual)
Resultado
El suceso se envía con las opciones que especifique. Estas opciones se
aplican solamente al suceso que se envía; no se efectúan cambios en los valores del
emisor, y los envíos de sucesos posteriores no se ven afectados.
El valor
devuelto, eventId, es el identificador exclusivo global del suceso
(el valor del campo globalInstanceId de CommonBaseEvent). Si el
suceso no tiene un identificador de instancia global (globalInstanceId) cuando lo
envía, el emisor le asignará uno automáticamente.
Nota: El envío de un suceso a
un emisor no garantiza que el suceso se envíen al servidor de sucesos, porque la
configuración del filtro puede provocar que se descarte el suceso. Una llamada
correcta a sendEvent() significa únicamente que el emisor ha procesado ese suceso
correctamente.
Ejemplo
En el ejemplo siguiente se altera temporalmente el valor del emisor para
enviar un suceso en una nueva transacción, pero no se altera la modalidad de
sincronización:
String eventId = sendEvent(event,
SynchronizationMode.DEFAULT,
TransactionMode.NEW);