From 3f5aca5ec28245c72059d7eff90c370e38f57a82 Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Wed, 28 Dec 2016 16:43:13 +0100 Subject: [PATCH 1/2] added cdi samples demonstrating use of @Specializes --- cdi/README.md | 2 + cdi/pom.xml | 2 + cdi/specializes-qualifiers/pom.xml | 13 ++++ .../org/javaee7/cdi/specializes/Greeting.java | 15 +++++ .../org/javaee7/cdi/specializes/Personal.java | 18 ++++++ .../cdi/specializes/SpecializedGreeting.java | 15 +++++ .../javaee7/cdi/specializes/GreetingTest.java | 60 +++++++++++++++++++ .../src/test/resources/beans.xml | 9 +++ cdi/specializes/pom.xml | 13 ++++ .../org/javaee7/cdi/specializes/Greeting.java | 11 ++++ .../cdi/specializes/SpecializedGreeting.java | 15 +++++ .../javaee7/cdi/specializes/GreetingTest.java | 36 +++++++++++ cdi/specializes/src/test/resources/beans.xml | 9 +++ 13 files changed, 218 insertions(+) create mode 100644 cdi/specializes-qualifiers/pom.xml create mode 100644 cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/Greeting.java create mode 100644 cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/Personal.java create mode 100644 cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/SpecializedGreeting.java create mode 100644 cdi/specializes-qualifiers/src/test/java/org/javaee7/cdi/specializes/GreetingTest.java create mode 100644 cdi/specializes-qualifiers/src/test/resources/beans.xml create mode 100644 cdi/specializes/pom.xml create mode 100644 cdi/specializes/src/main/java/org/javaee7/cdi/specializes/Greeting.java create mode 100644 cdi/specializes/src/main/java/org/javaee7/cdi/specializes/SpecializedGreeting.java create mode 100644 cdi/specializes/src/test/java/org/javaee7/cdi/specializes/GreetingTest.java create mode 100644 cdi/specializes/src/test/resources/beans.xml diff --git a/cdi/README.md b/cdi/README.md index b80caf6c2..b2caee759 100644 --- a/cdi/README.md +++ b/cdi/README.md @@ -27,6 +27,8 @@ The [JSR 346](https://jcp.org/en/jsr/detail?id=346) updates and clarifications t - events-conditional-reception - instance - instance-qualifiers + - specializes + - specializes-qualifiers ## How to run diff --git a/cdi/pom.xml b/cdi/pom.xml index cad40efd8..d339fb018 100644 --- a/cdi/pom.xml +++ b/cdi/pom.xml @@ -38,6 +38,8 @@ events-conditional-reception instance instance-qualifiers + specializes + specializes-qualifiers diff --git a/cdi/specializes-qualifiers/pom.xml b/cdi/specializes-qualifiers/pom.xml new file mode 100644 index 000000000..a863ab5eb --- /dev/null +++ b/cdi/specializes-qualifiers/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + + org.javaee7 + cdi + 1.0-SNAPSHOT + ../pom.xml + + cdi-specializes-qualifiers + Java EE 7 Sample: CDI - @Specializes with @Qualifier(s) + diff --git a/cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/Greeting.java b/cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/Greeting.java new file mode 100644 index 000000000..f6ef657c2 --- /dev/null +++ b/cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/Greeting.java @@ -0,0 +1,15 @@ +package org.javaee7.cdi.specializes; + +import javax.inject.Named; + + +/** + * @author Radim Hanus + */ +@Personal +@Named("base") +public class Greeting { + public String greet(String name) { + return "Hello " + name; + } +} diff --git a/cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/Personal.java b/cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/Personal.java new file mode 100644 index 000000000..47de4bb63 --- /dev/null +++ b/cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/Personal.java @@ -0,0 +1,18 @@ +package org.javaee7.cdi.specializes; + +import javax.inject.Qualifier; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + + +/** + * @author Radim Hanus + */ +@Qualifier +@Retention(RUNTIME) +@Target({TYPE, METHOD, FIELD, PARAMETER}) +public @interface Personal { +} diff --git a/cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/SpecializedGreeting.java b/cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/SpecializedGreeting.java new file mode 100644 index 000000000..3017082fc --- /dev/null +++ b/cdi/specializes-qualifiers/src/main/java/org/javaee7/cdi/specializes/SpecializedGreeting.java @@ -0,0 +1,15 @@ +package org.javaee7.cdi.specializes; + +import javax.enterprise.inject.Specializes; + + +/** + * @author Radim Hanus + */ +@Specializes +public class SpecializedGreeting extends Greeting { + @Override + public String greet(String name) { + return "Hello my friend " + name; + } +} diff --git a/cdi/specializes-qualifiers/src/test/java/org/javaee7/cdi/specializes/GreetingTest.java b/cdi/specializes-qualifiers/src/test/java/org/javaee7/cdi/specializes/GreetingTest.java new file mode 100644 index 000000000..ad8348dbc --- /dev/null +++ b/cdi/specializes-qualifiers/src/test/java/org/javaee7/cdi/specializes/GreetingTest.java @@ -0,0 +1,60 @@ +package org.javaee7.cdi.specializes; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.enterprise.inject.Any; +import javax.enterprise.inject.Default; +import javax.enterprise.inject.Instance; +import javax.enterprise.util.AnnotationLiteral; +import javax.inject.Inject; +import javax.inject.Named; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class GreetingTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(JavaArchive.class) + .addClasses(Personal.class, Greeting.class, SpecializedGreeting.class) + .addAsManifestResource("beans.xml"); + } + + @Inject + @Personal + private Greeting personalBean; + + @Inject + @Named("base") + private Greeting simpleBean; + + @Inject + @Any + private Instance instance; + + @Test + public void beans_should_be_specialized() throws Exception { + // specialized implementation automatically inherits all qualifiers of the base implementation + assertThat(personalBean, instanceOf(SpecializedGreeting.class)); + assertThat(simpleBean, instanceOf(SpecializedGreeting.class)); + } + + @Test + public void default_bean_should_not_be_available() throws Exception { + // specialized implementation inherited some qualifiers so that Default has not been set + Instance defaultInstance = instance.select(new AnnotationLiteral() {}); + assertTrue(defaultInstance.isUnsatisfied()); + } +} diff --git a/cdi/specializes-qualifiers/src/test/resources/beans.xml b/cdi/specializes-qualifiers/src/test/resources/beans.xml new file mode 100644 index 000000000..1572f779b --- /dev/null +++ b/cdi/specializes-qualifiers/src/test/resources/beans.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/cdi/specializes/pom.xml b/cdi/specializes/pom.xml new file mode 100644 index 000000000..9ca5bb73a --- /dev/null +++ b/cdi/specializes/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + + org.javaee7 + cdi + 1.0-SNAPSHOT + ../pom.xml + + cdi-specializes + Java EE 7 Sample: CDI - @Specializes + diff --git a/cdi/specializes/src/main/java/org/javaee7/cdi/specializes/Greeting.java b/cdi/specializes/src/main/java/org/javaee7/cdi/specializes/Greeting.java new file mode 100644 index 000000000..49565bcee --- /dev/null +++ b/cdi/specializes/src/main/java/org/javaee7/cdi/specializes/Greeting.java @@ -0,0 +1,11 @@ +package org.javaee7.cdi.specializes; + + +/** + * @author Radim Hanus + */ +public class Greeting { + public String greet(String name) { + return "Hello " + name; + } +} diff --git a/cdi/specializes/src/main/java/org/javaee7/cdi/specializes/SpecializedGreeting.java b/cdi/specializes/src/main/java/org/javaee7/cdi/specializes/SpecializedGreeting.java new file mode 100644 index 000000000..3017082fc --- /dev/null +++ b/cdi/specializes/src/main/java/org/javaee7/cdi/specializes/SpecializedGreeting.java @@ -0,0 +1,15 @@ +package org.javaee7.cdi.specializes; + +import javax.enterprise.inject.Specializes; + + +/** + * @author Radim Hanus + */ +@Specializes +public class SpecializedGreeting extends Greeting { + @Override + public String greet(String name) { + return "Hello my friend " + name; + } +} diff --git a/cdi/specializes/src/test/java/org/javaee7/cdi/specializes/GreetingTest.java b/cdi/specializes/src/test/java/org/javaee7/cdi/specializes/GreetingTest.java new file mode 100644 index 000000000..d599ee56f --- /dev/null +++ b/cdi/specializes/src/test/java/org/javaee7/cdi/specializes/GreetingTest.java @@ -0,0 +1,36 @@ +package org.javaee7.cdi.specializes; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.assertThat; + + +/** + * @author Radim Hanus + */ +@RunWith(Arquillian.class) +public class GreetingTest { + @Deployment + public static Archive deploy() { + return ShrinkWrap.create(JavaArchive.class) + .addClasses(Greeting.class, SpecializedGreeting.class) + .addAsManifestResource("beans.xml"); + } + + @Inject + private Greeting bean; + + @Test + public void should_bean_be_specialized() throws Exception { + assertThat(bean, instanceOf(SpecializedGreeting.class)); + } +} diff --git a/cdi/specializes/src/test/resources/beans.xml b/cdi/specializes/src/test/resources/beans.xml new file mode 100644 index 000000000..1572f779b --- /dev/null +++ b/cdi/specializes/src/test/resources/beans.xml @@ -0,0 +1,9 @@ + + + + + From 9493507304d44536c16b237cafd457adde741c13 Mon Sep 17 00:00:00 2001 From: Radim Hanus Date: Wed, 28 Dec 2016 16:48:25 +0100 Subject: [PATCH 2/2] added cdi samples demonstrating use of @Specializes --- cdi/specializes-qualifiers/pom.xml | 2 +- cdi/specializes/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cdi/specializes-qualifiers/pom.xml b/cdi/specializes-qualifiers/pom.xml index a863ab5eb..114bc8054 100644 --- a/cdi/specializes-qualifiers/pom.xml +++ b/cdi/specializes-qualifiers/pom.xml @@ -9,5 +9,5 @@ ../pom.xml cdi-specializes-qualifiers - Java EE 7 Sample: CDI - @Specializes with @Qualifier(s) + Java EE 7 Sample: CDI - specializes-qualifiers diff --git a/cdi/specializes/pom.xml b/cdi/specializes/pom.xml index 9ca5bb73a..0a40f0951 100644 --- a/cdi/specializes/pom.xml +++ b/cdi/specializes/pom.xml @@ -9,5 +9,5 @@ ../pom.xml cdi-specializes - Java EE 7 Sample: CDI - @Specializes + Java EE 7 Sample: CDI - specializes