In my application, a restful web service can fire CDI events (tested and working, events are fired when expected and a simple observer method will log the event as planned).
However, in most case, I would need these events to update the UI of the management console, which is a Vaadin 7.3 application, using Vaadin-CDI.
When the service is called, the event is fired, and here is the resulting error:
Caused by: java.lang.IllegalStateException: CDI listener identified, but there is no active UI available.
Debugger in hand, I have already checked that CDI is properly started. Stuff is injected, @Observes method is properly called etc...
Here is the code of the Vaadin UI:
@CDIUI
public class Console extends UI {
@Inject
private PersonDao dao; // Properly injected
private Layout layout;
private void addClickedLabel() {
Label label = new Label("Clicked !!");
layout.addComponent(label);
}
@Override
protected void init(final VaadinRequest vaadinRequest) {
layout = new FormLayout();
Button b = new Button("Click me !!");
layout.addComponent(b);
b.addClickListener(clickEvent -> { addClickedLabel(); });
this.setContent(layout);
}
// Method called, but exception raised before !st line is executed.
private void receiveConnectionEvent(@Observes final ConnectionEvent event) {
UI.getCurrent().access(() -> {
String desc = String desc = String.format("Event: %s from %s.", event.getType(), event.getSource());
Label label = new Label(desc);
layout.addComponent(label);
});
}
}
I've done my RTFM thing, tried my luck with google, any help on how to properly update UIs from CDI events would be really great!