We have been using CDI events for application development quite extensively. For instance we use events to propagate entity lifecycle events (@Created/@Updated/@Deleted Customer customer) or GUI selections (@Selected/@Deselected Customer customer) and implement related business logic in event observers. (e.g. send email for newly created customers, clear cached values on select/deselect/create/update/delete ...).
This works quite well, however we have noticed that especially our JSF Presentation Tier contains lots of observer methods implementing the same behavior for a group of related CDI events.
Example:
public class XyzBean { public void onCustomerCreate(@Observes @Created Customer customer) { reset();} public void onCustomerUpdate(@Observes @Updated Customer customer) { reset();} public void onCustomerDelete(@Observes @Deleted Customer customer) { reset();} }
Looks ugly, doesn't it?
The above example could be improved if CDI would be able to observe a group of qualified events, e.g. public void onCustomerLifeCycleEvent(@Observes @LifeCycleChange Customer customer)
{ reset(); }- ignore method and qualifier names for now.
Since Java does not support annotation inheritance grouping could be achieved using "qualified qualifier annotations":
@Qualifier public @interface LifeCycleChange @Qualifier @LifeCycleChange public @interface Created @Qualifier @LifeCycleChange public @interface Updated @Qualifier @LifeCycleChange public @interface Deleted @Qualifier public @interface SelectionChange @Qualifier @SelectionChange public @interface Selected @Qualifier @SelectionChange public @interface Deselected
WDYT? Side effects? Problems?