Firstly, decide if using an event-based paradigm for the application makes sense. Event-driven systems are very useful if they meet the following characteristics:
Components are loosely coupled
Operations can be processed asynchronously
The state of an operation may be part of a transient (in-memory) workflow
Events can be broadcast and received by multiple listeners
There is a standard agreement for what details an event should have
The event topics are (or become) known at development time
On the other hand, the following are not suitable for (OSGi) event-driven systems:
Where the state of the workflow is not only UI-based but part of the domain
Where the consumption of an event is handled transactionally
Where large volumes of events can throttle single-threaded delivery
Where there is a lack of event payload structure
Where there is a requirement for a synchronous response to occur