CDI Events können mit Hilfe einer Event Source gefeuert werden, z. B.
@Inject
@Urgent
Event<Message> urgentMessageEventSource;
...
urgentMessageEventSource.fire(new Message(...));
Im angedeuteten Code ist @Urgent ein Qualifier und Message eine beliebige Java-Klasse.
Bis CDI 3 kann zum Versenden von Events auch ein BeanManager genutzt werden:
@Inject
BeanManager beanManager;
...
beanManager.fireEvent(new Message(...), new AnnotationLiteral<Urgent>() {});
BeanManager#fireEvent steht in CDI 4 nicht mehr zur Verfügung. Stattdessen kann getEvent/select/fire verwendet werden:
beanManager.getEvent().select(new AnnotationLiteral<Urgent>() {}).fire(new Message(...));
Die neue Form hat den Vorteil, dass statt fire auch fireAsync zur Verfügung steht und somit auch asynchron versendet werden kann.







