Interface EventService
- All Superinterfaces:
EventProducer
- All Known Implementing Classes:
EventServiceImpl
The service is able to run in a transactional mode where all events are recorded and fired after the transaction commits in one step as an event bundle.
To start a transaction, the framework calls the transactionStarted()
method, and at transaction commit the
framework calls transactionCommitted()
to fire the event bundle. Upon rollback the framework calls
transactionRolledback()
to clean up recorded events.
Events are recorded in a thread variable so they are valid only in the current thread.
An event marked Event.isInline()
is dispatched immediately, otherwise it is recorded in a thread-based bundle
of current events. If no transaction was started, an event marked Event.isCommitEvent()
is used to flush the
event bundle to its listeners, otherwise the transaction commit does the flush.
Listeners are of two types: EventListener
notified as the event is raised and PostCommitEventListener
notified after the transaction was committed.
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addEventListener
(EventListenerDescriptor listener) Adds a new event listener.Creates the registered domain event producers.void
fireEvent
(String name, EventContext context) Fires an event given its name and a context.void
Fires an event.void
fireEventBundle
(EventBundle event) Fires all recorded events in a transaction.void
fireEventBundleSync
(EventBundle event) Fires an event bundle in synchronous mode.getEventListener
(String name) Gets the event listener descriptor corresponding to the give name.Gets the list of the registered event listeners.Get the list of the registered post commit event listeners.void
removeEventListener
(EventListenerDescriptor listener) Removes an event listener.void
Waits until all asynchronous tasks are finished.void
waitForAsyncCompletion
(long timeout) Waits until all asynchronous tasks are finished, but waits no longer than the given number of milliseconds.
-
Method Details
-
addEventListener
Adds a new event listener. Used by the framework.The event listener is described by a
EventListenerDescriptor
that may specify a priority. Both types of listeners (immediate and post-commit) are registered.- Parameters:
listener
- the listener to add
-
removeEventListener
Removes an event listener. Used by the framework.- Parameters:
listener
- the listener to remove
-
fireEvent
Fires an event given its name and a context.- Parameters:
name
- the event namecontext
- the event context
-
fireEvent
Fires an event.If a transaction was started, the event is registered if needed to be sent after the transaction commit.
- Specified by:
fireEvent
in interfaceEventProducer
- Parameters:
event
- the event to fire
-
fireEventBundle
Fires all recorded events in a transaction. Used by the framework.The events are fired to
PostCommitEventListener
listeners. Events are fired in the form of an event bundle.- Specified by:
fireEventBundle
in interfaceEventProducer
- Parameters:
event
- the event bundle
-
fireEventBundleSync
Fires an event bundle in synchronous mode. Used by the framework.This means that asynchronous listeners will be run synchronously.
-
getEventListeners
List<EventListener> getEventListeners()Gets the list of the registered event listeners.Modification on this list will not modify the internal lists in this
EventService
.- Returns:
- the event listeners
-
getPostCommitEventListeners
List<PostCommitEventListener> getPostCommitEventListeners()Get the list of the registered post commit event listeners.Modification on this list will not modify the internal lists in this
EventService
.- Returns:
- the post commit event listeners
-
getEventListener
Gets the event listener descriptor corresponding to the give name.- Parameters:
name
- the event listener name- Returns:
- the descriptor, or
null
if not found - Since:
- 5.8
-
waitForAsyncCompletion
void waitForAsyncCompletion()Waits until all asynchronous tasks are finished. -
waitForAsyncCompletion
void waitForAsyncCompletion(long timeout) Waits until all asynchronous tasks are finished, but waits no longer than the given number of milliseconds.- Parameters:
timeout
- the maximum time to wait for, in milliseconds
-
createDomainEventProducers
List<DomainEventProducer> createDomainEventProducers()Creates the registered domain event producers.- Since:
- 11.4
-