Vaadin service interfaces as a CDI bean
Some Vaadin service interfaces can be implemented as a CDI bean. This way there is no need to register your implementation in the framework, and it became a managed bean with CDI features. Interfaces looked up by the add-on:
I18NProvider
Instantiator
SystemMessagesProvider
ErrorHandler
Beans have to be qualified by @VaadinServiceEnabled
to be picked up.
Example of a SystemMessagesProvider
:
Java
@VaadinServiceEnabled
@VaadinServiceScoped
public class TestSystemMessagesProvider implements SystemMessagesProvider {
@Override
public SystemMessages getSystemMessages(SystemMessagesInfo systemMessagesInfo) {
CustomizedSystemMessages messages = new CustomizedSystemMessages();
messages.setInternalErrorMessage("Sorry, something went wrong :(");
return messages;
}
}
Note | @VaadinServiceScoped context’s purpose is to define a context with the lifespan of the Vaadin Service. It is not mandatory for these kind of beans, but other Vaadin contexts likely cause issues. There is no guarantee that an active vaadin session, or ui context exists during the add-on looks up any of these beans. Standard CDI @Dependent , and @ApplicationScoped contexts are safe too. |