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.
1 Kommentar. Hinterlasse eine Antwort
This is a great post. It’s very informative and well written. I’ll check back for more posts like this one.