From 8e541d6aca977b11eafe0463d132a6171600d2e9 Mon Sep 17 00:00:00 2001 From: Erik Lumme Date: Tue, 12 Sep 2017 13:31:26 +0300 Subject: [PATCH] Migrate IIInjectionAndScopes --- .../articles/IIInjectionAndScopes.asciidoc | 253 ++++++++++++++++++ documentation/articles/contents.asciidoc | 1 + documentation/articles/img/hello-earnest.png | Bin 0 -> 17965 bytes documentation/articles/img/hello-stranger.png | Bin 0 -> 16280 bytes documentation/articles/img/hello-world.png | Bin 0 -> 21695 bytes 5 files changed, 254 insertions(+) create mode 100644 documentation/articles/IIInjectionAndScopes.asciidoc create mode 100644 documentation/articles/img/hello-earnest.png create mode 100644 documentation/articles/img/hello-stranger.png create mode 100644 documentation/articles/img/hello-world.png diff --git a/documentation/articles/IIInjectionAndScopes.asciidoc b/documentation/articles/IIInjectionAndScopes.asciidoc new file mode 100644 index 0000000000..618b816283 --- /dev/null +++ b/documentation/articles/IIInjectionAndScopes.asciidoc @@ -0,0 +1,253 @@ +[[ii-injection-and-scopes]] +II - Injection and scopes +------------------------- + +In this tutorial we'll take a closer look at the @CDIUI annotation and +use CDI to inject some beans to our application. + +[[cdiui]] +@CDIUI +~~~~~~ + +The @CDIUI annotation is the way in which you let the Vaadin CDI plugin +know which UI's should be accessible to the user and how they should be +mapped. It accepts one optional String parameter indicating the UI path. +If an explicit path is not provided the class name of the UI will be +used to construct a pathname by the following convention: any trailing +"UI" will be truncated and camelcase will be converted to hyphenated +lowercase. Some examples of the convention: + +.... +HelloWorldUI → hello-world +ExampleUI → example +VisualEditor → visual-editor +.... + +Passing an empty String as the path will cause the UI to be mapped to +the root of the deployment. Most single UI applications will probably +want to do this. + +[[injecting-beans]] +Injecting beans +~~~~~~~~~~~~~~~ + +Now that the UI itself has been injected, we can use the @Inject +annotation to further inject beans to it. Let's create something for us +to actually inject. + +We'll define the following interface, and an implementation for it. + +[source,java] +.... +package com.vaadin.cdi.tutorial; + +public interface Greeting { + public String getText(); +} +.... + +[source,java] +.... +package com.vaadin.cdi.tutorial; + +import java.io.Serializable; + +public class SimpleGreetingImpl implements Greeting, Serializable { + + @Override + public String getText() { + return "Hello, World!"; + } +} +.... + +So far so good, now we'll inject it into our UI. You'll need to add the +CDI API as a dependency in your pom.xml. (Group id: javax.enterprise, +artefact id: cdi-api, version: 1.2) + +[source,java] +.... +package com.vaadin.cdi.tutorial; + +import javax.inject.Inject; + +import com.vaadin.annotations.Theme; +import com.vaadin.cdi.CDIUI; +import com.vaadin.server.VaadinRequest; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.Label; +import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; + +@SuppressWarnings("serial") +@CDIUI("") +@Theme("valo") +public class HelloWorldUI extends UI { + + @Inject + private Greeting greeting; + + @Override + protected void init(VaadinRequest request) { + final VerticalLayout layout = new VerticalLayout(); + layout.setMargin(true); + setContent(layout); + + Button button = new Button("Click Me"); + button.addClickListener(new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + layout.addComponent(new Label(greeting.getText())); + } + }); + layout.addComponent(button); + } +} +.... + +Let's run that and see. + +image:img/hello-world.png[Injection seems to be working] + +So far so good. Suppose we want to say hello to the user by name. We'll +create a class to store our user data in. For now it's a simple POJO +just for storing the name in a single string. + +[source,java] +.... +package com.vaadin.cdi.tutorial; + +import java.io.Serializable; + +public class UserInfo implements Serializable { + private String name; + + public UserInfo() { + this.name = "stranger"; + } + + public UserInfo(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} +.... + +We'll inject that to the UI and assign the user some name during +initalization (for now) + +[source,java] +.... +@Inject +private UserInfo user; + +@Override +protected void init(VaadinRequest request) { + ... + user.setName("Ernest"); +} +.... + +Then we'll create a new implementation of the Greeting and inject the +user there as well. + +[source,java] +.... +package com.vaadin.cdi.tutorial; + +import javax.inject.Inject; + +public class UserGreetingImpl implements Greeting { + + @Inject + private UserInfo user; + + @Override + public String getText() { + return "Hello, " + user.getName() + "!"; + } +} +.... + +Now, it would be easy to think that that's all you need but we're not +quite there. There are two issues with this that need to be addressed. +The first one will become immediately obvious when you try to deploy the +application. The deployment will fail as the injection in HelloWorldUI +is ambiguous, that is CDI doesn't know which implementation of Greeting +we want. + +There are three annotations that are useful in situations like this: +@Default, @Alternative and @Specializes. Giving a bean any of these +annotations will affect it's preference order when the CDI container is +looking for which implementation to inject. Unless otherwise specified, +beans will be considered to have the @Default annotation. Beans with the +@Alternative annotation will only be injected if that particular bean is +named in the beans.xml file (TODO: add link). Beans with the +@Specializes annotation will be considered a drop-in replacement for +it's superclass, and will be used over any implementations it extends. + +In our case, we'll want to give SimpleGreetingImpl the @Default +annotation and UserGreetingImpl the @Alternative annotation. + +[source,java] +.... +@Default +public class SimpleGreetingImpl implements Greeting { +.... + +[source,java] +.... +@Alternative +public class UserGreetingImpl implements Greeting { +.... + +After that the application could actually be deployed. To tell CDI we'll +want to use our alternative implementation we need to create the +beans.xml in our WEB-INF folder, and add the following declaration to +it: + +[source,xml] +.... + + + com.vaadin.cdi.tutorial.UserGreetingImpl + + +.... + +Let's try that out: + +image:img/hello-stranger.png[Something's not right] + +Better, but not quite there yet. We're getting the wrong username, +despite the fact that we set the username to "Earnest" in the UI. The +problem here is the scope of the bean. If you don't specify a scope for +your bean either in the bean class itself or at the injection point, +it'll default to using the dependent scope. Every time you inject a +dependent bean you'll get a new instance, which is clearly not what we +want here. Let's go back to our UserInfo class and assign it an explicit +scope. + +[source,java] +.... +import com.vaadin.cdi.UIScoped; + +@UIScoped +public class UserInfo { +... +.... + +The @UIScoped annotation is specific to Vaadin CDI. Anything injected +with that annotation will get the same instance while within the same +UI. Load a different UI and you'll get a different instance. If the +session expires or the UI is closed the instances will be cleaned up. + +Let's see if it worked. + +image:img/hello-earnest.png[Something IS right] + +Looks like we're making progress. diff --git a/documentation/articles/contents.asciidoc b/documentation/articles/contents.asciidoc index 7d01141ac4..4c94702d63 100644 --- a/documentation/articles/contents.asciidoc +++ b/documentation/articles/contents.asciidoc @@ -54,4 +54,5 @@ are great, too. - link:UsingBeanValidationToValidateInput.asciidoc[Using Bean Validation to validate input] - link:VaadinSpringTips.asciidoc[Vaadin Spring tips] - link:VaadinCDI.asciidoc[Vaadin CDI] +- link:IIInjectionAndScopes.asciidoc[II - Injection and scopes] - link:CreatingAUIExtension.asciidoc[Creating a UI extension] diff --git a/documentation/articles/img/hello-earnest.png b/documentation/articles/img/hello-earnest.png new file mode 100644 index 0000000000000000000000000000000000000000..1de661e134d8e50e2255f15c7785569e66bae047 GIT binary patch literal 17965 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 literal 0 HcmV?d00001 diff --git a/documentation/articles/img/hello-stranger.png b/documentation/articles/img/hello-stranger.png new file mode 100644 index 0000000000000000000000000000000000000000..1c2834febb2599443e49dd6a6e94cdbd1de5dfe4 GIT binary patch literal 16280 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 aXIa~5D)7vNc(VY9%uS6gjEW3yg#8=Lcd3{F literal 0 HcmV?d00001 -- 2.39.5