From 0fd4ce96b3dfeab811a2b5062ce7b8b6a883064e Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Fri, 29 Mar 2019 12:16:00 +0100 Subject: [PATCH] Aggiunto l'esempio del capitolo sul CDI --- .gitignore | 90 +++++++++++++++++++ cdidemo/cdidemo.iml | 33 +++++++ cdidemo/pom.xml | 75 ++++++++++++++++ .../main/java/it/plague/jeedemo/CdiMain.java | 18 ++++ .../jeedemo/annotations/EightDigits.java | 14 +++ .../plague/jeedemo/annotations/Loggable.java | 14 +++ .../jeedemo/annotations/ThirteenDigits.java | 14 +++ .../java/it/plague/jeedemo/beans/Book.java | 58 ++++++++++++ .../plague/jeedemo/beans/IsbnGenerator.java | 22 +++++ .../plague/jeedemo/beans/IssnGenerator.java | 22 +++++ .../plague/jeedemo/beans/NumberGenerator.java | 6 ++ .../interceptors/LoggingInterceptor.java | 26 ++++++ .../jeedemo/producers/LoggerProducer.java | 13 +++ .../plague/jeedemo/services/BookService.java | 21 +++++ cdidemo/src/main/resources/META-INF/beans.xml | 6 ++ .../java/it/plague/jeedemo/BookServiceIT.java | 22 +++++ .../java/it/plague/jeedemo/MockGenerator.java | 25 ++++++ cdidemo/src/test/resources/META-INF/beans.xml | 11 +++ jeedemo.iml | 12 +++ pom.xml | 62 +++++++++++++ 20 files changed, 564 insertions(+) create mode 100644 .gitignore create mode 100644 cdidemo/cdidemo.iml create mode 100644 cdidemo/pom.xml create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/CdiMain.java create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/annotations/EightDigits.java create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/annotations/Loggable.java create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/annotations/ThirteenDigits.java create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/beans/Book.java create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/beans/IsbnGenerator.java create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/beans/IssnGenerator.java create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/beans/NumberGenerator.java create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/interceptors/LoggingInterceptor.java create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/producers/LoggerProducer.java create mode 100644 cdidemo/src/main/java/it/plague/jeedemo/services/BookService.java create mode 100644 cdidemo/src/main/resources/META-INF/beans.xml create mode 100644 cdidemo/src/test/java/it/plague/jeedemo/BookServiceIT.java create mode 100644 cdidemo/src/test/java/it/plague/jeedemo/MockGenerator.java create mode 100644 cdidemo/src/test/resources/META-INF/beans.xml create mode 100644 jeedemo.iml create mode 100644 pom.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..84f198a --- /dev/null +++ b/.gitignore @@ -0,0 +1,90 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser diff --git a/cdidemo/cdidemo.iml b/cdidemo/cdidemo.iml new file mode 100644 index 0000000..9d53095 --- /dev/null +++ b/cdidemo/cdidemo.iml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cdidemo/pom.xml b/cdidemo/pom.xml new file mode 100644 index 0000000..ac46184 --- /dev/null +++ b/cdidemo/pom.xml @@ -0,0 +1,75 @@ + + + 4.0.0 + cdidemo + cdidemo + + + jeedemo + it.plague.jeedemo + 1.0-SNAPSHOT + + + + UTF-8 + it.plague.jeedemo.CdiMain + 1.7 + 1.7 + + + + + org.jboss.weld.se + weld-se-core + + + junit + junit + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.5.1 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.12.4 + + + integration-test + + integration-test + verify + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + + + java + + + it.plague.jeedemo.CdiMain + + + + + + + diff --git a/cdidemo/src/main/java/it/plague/jeedemo/CdiMain.java b/cdidemo/src/main/java/it/plague/jeedemo/CdiMain.java new file mode 100644 index 0000000..b770f49 --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/CdiMain.java @@ -0,0 +1,18 @@ +package it.plague.jeedemo; + +import it.plague.jeedemo.beans.Book; +import it.plague.jeedemo.services.BookService; +import org.jboss.weld.environment.se.Weld; +import org.jboss.weld.environment.se.WeldContainer; + +public class CdiMain { + + public static void main(String[] args) { + Weld weld = new Weld(); + WeldContainer container = weld.initialize(); + BookService bookService = container.instance().select(BookService.class).get(); + Book book = bookService.createBook("H2G2", 12.5f, "Geeky scifi Book"); + System.out.println(book); + weld.shutdown(); + } +} diff --git a/cdidemo/src/main/java/it/plague/jeedemo/annotations/EightDigits.java b/cdidemo/src/main/java/it/plague/jeedemo/annotations/EightDigits.java new file mode 100644 index 0000000..fe20882 --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/annotations/EightDigits.java @@ -0,0 +1,14 @@ +package it.plague.jeedemo.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.inject.Qualifier; + +@Qualifier +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD}) +public @interface EightDigits { + +} diff --git a/cdidemo/src/main/java/it/plague/jeedemo/annotations/Loggable.java b/cdidemo/src/main/java/it/plague/jeedemo/annotations/Loggable.java new file mode 100644 index 0000000..358020b --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/annotations/Loggable.java @@ -0,0 +1,14 @@ +package it.plague.jeedemo.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.interceptor.InterceptorBinding; + +@InterceptorBinding +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Loggable { + +} diff --git a/cdidemo/src/main/java/it/plague/jeedemo/annotations/ThirteenDigits.java b/cdidemo/src/main/java/it/plague/jeedemo/annotations/ThirteenDigits.java new file mode 100644 index 0000000..d0f1da9 --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/annotations/ThirteenDigits.java @@ -0,0 +1,14 @@ +package it.plague.jeedemo.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.inject.Qualifier; + +@Qualifier +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD}) +public @interface ThirteenDigits { + +} diff --git a/cdidemo/src/main/java/it/plague/jeedemo/beans/Book.java b/cdidemo/src/main/java/it/plague/jeedemo/beans/Book.java new file mode 100644 index 0000000..900ea41 --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/beans/Book.java @@ -0,0 +1,58 @@ +package it.plague.jeedemo.beans; + +public class Book { + + private String title; + private Float price; + private String description; + private String number; + + public Book(String title, Float price, String description) { + this.title = title; + this.price = price; + this.description = description; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Float getPrice() { + return price; + } + + public void setPrice(Float price) { + this.price = price; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + @Override + public String toString() { + return "Book{" + + "title='" + title + '\'' + + ", price=" + price + + ", description='" + description + '\'' + + ", number='" + number + '\'' + + '}'; + } + +} diff --git a/cdidemo/src/main/java/it/plague/jeedemo/beans/IsbnGenerator.java b/cdidemo/src/main/java/it/plague/jeedemo/beans/IsbnGenerator.java new file mode 100644 index 0000000..314fb7e --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/beans/IsbnGenerator.java @@ -0,0 +1,22 @@ +package it.plague.jeedemo.beans; + +import it.plague.jeedemo.annotations.Loggable; +import it.plague.jeedemo.annotations.ThirteenDigits; +import java.util.Random; +import java.util.logging.Logger; +import javax.inject.Inject; + +@ThirteenDigits +public class IsbnGenerator implements NumberGenerator { + + @Inject + private Logger logger; + + @Override + @Loggable + public String generateNumber() { + String isbn = " 13-84356- " + Math.abs(new Random().nextInt()); + logger.info("Generated ISBN: " + isbn); + return isbn; + } +} diff --git a/cdidemo/src/main/java/it/plague/jeedemo/beans/IssnGenerator.java b/cdidemo/src/main/java/it/plague/jeedemo/beans/IssnGenerator.java new file mode 100644 index 0000000..3957a89 --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/beans/IssnGenerator.java @@ -0,0 +1,22 @@ +package it.plague.jeedemo.beans; + +import it.plague.jeedemo.annotations.EightDigits; +import it.plague.jeedemo.annotations.Loggable; +import java.util.Random; +import java.util.logging.Logger; +import javax.inject.Inject; + +@EightDigits +public class IssnGenerator implements NumberGenerator { + + @Inject + private Logger logger; + + @Override + @Loggable + public String generateNumber() { + String issn = " 8- " + Math.abs(new Random().nextInt()); + logger.info("Generated ISSN: " + issn); + return issn; + } +} diff --git a/cdidemo/src/main/java/it/plague/jeedemo/beans/NumberGenerator.java b/cdidemo/src/main/java/it/plague/jeedemo/beans/NumberGenerator.java new file mode 100644 index 0000000..475c217 --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/beans/NumberGenerator.java @@ -0,0 +1,6 @@ +package it.plague.jeedemo.beans; + +public interface NumberGenerator { + + String generateNumber(); +} diff --git a/cdidemo/src/main/java/it/plague/jeedemo/interceptors/LoggingInterceptor.java b/cdidemo/src/main/java/it/plague/jeedemo/interceptors/LoggingInterceptor.java new file mode 100644 index 0000000..1448da8 --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/interceptors/LoggingInterceptor.java @@ -0,0 +1,26 @@ +package it.plague.jeedemo.interceptors; + +import it.plague.jeedemo.annotations.Loggable; +import java.util.logging.Logger; +import javax.inject.Inject; +import javax.interceptor.AroundInvoke; +import javax.interceptor.Interceptor; +import javax.interceptor.InvocationContext; + +@Interceptor +@Loggable +public class LoggingInterceptor { + + @Inject + private Logger logger; + + @AroundInvoke + public Object logMethod(InvocationContext ic) throws Exception { + logger.entering(ic.getTarget().getClass().getName(), ic.getMethod().getName()); + try { + return ic.proceed(); + } finally { + logger.exiting(ic.getTarget().getClass().getName(), ic.getMethod().getName()); + } + } +} diff --git a/cdidemo/src/main/java/it/plague/jeedemo/producers/LoggerProducer.java b/cdidemo/src/main/java/it/plague/jeedemo/producers/LoggerProducer.java new file mode 100644 index 0000000..325f067 --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/producers/LoggerProducer.java @@ -0,0 +1,13 @@ +package it.plague.jeedemo.producers; + +import java.util.logging.Logger; +import javax.enterprise.inject.Produces; +import javax.enterprise.inject.spi.InjectionPoint; + +public class LoggerProducer { + + @Produces + public Logger produceLogger(InjectionPoint injectionPoint) { + return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName()); + } +} diff --git a/cdidemo/src/main/java/it/plague/jeedemo/services/BookService.java b/cdidemo/src/main/java/it/plague/jeedemo/services/BookService.java new file mode 100644 index 0000000..3edd102 --- /dev/null +++ b/cdidemo/src/main/java/it/plague/jeedemo/services/BookService.java @@ -0,0 +1,21 @@ +package it.plague.jeedemo.services; + +import it.plague.jeedemo.annotations.Loggable; +import it.plague.jeedemo.annotations.ThirteenDigits; +import it.plague.jeedemo.beans.Book; +import it.plague.jeedemo.beans.NumberGenerator; +import javax.inject.Inject; + +@Loggable +public class BookService { + + @Inject + @ThirteenDigits + private NumberGenerator numberGenerator; + + public Book createBook(String title, Float price, String description) { + Book book = new Book(title, price, description); + book.setNumber(numberGenerator.generateNumber()); + return book; + } +} diff --git a/cdidemo/src/main/resources/META-INF/beans.xml b/cdidemo/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000..8819456 --- /dev/null +++ b/cdidemo/src/main/resources/META-INF/beans.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/cdidemo/src/test/java/it/plague/jeedemo/BookServiceIT.java b/cdidemo/src/test/java/it/plague/jeedemo/BookServiceIT.java new file mode 100644 index 0000000..c3fb949 --- /dev/null +++ b/cdidemo/src/test/java/it/plague/jeedemo/BookServiceIT.java @@ -0,0 +1,22 @@ +package it.plague.jeedemo; + +import static org.junit.Assert.assertTrue; + +import it.plague.jeedemo.beans.Book; +import it.plague.jeedemo.services.BookService; +import org.jboss.weld.environment.se.Weld; +import org.jboss.weld.environment.se.WeldContainer; +import org.junit.Test; + +public class BookServiceIT { + + @Test + public void shouldCheckNumberIsMOCK() { + Weld weld = new Weld(); + WeldContainer container = weld.initialize(); + BookService bookService = container.instance().select(BookService.class).get(); + Book book = bookService.createBook("H2G2", 12.5f, "Geeky scifi Book"); + assertTrue(book.getNumber().startsWith("MOCK")); + weld.shutdown(); + } +} diff --git a/cdidemo/src/test/java/it/plague/jeedemo/MockGenerator.java b/cdidemo/src/test/java/it/plague/jeedemo/MockGenerator.java new file mode 100644 index 0000000..3cdfe26 --- /dev/null +++ b/cdidemo/src/test/java/it/plague/jeedemo/MockGenerator.java @@ -0,0 +1,25 @@ +package it.plague.jeedemo; + +import it.plague.jeedemo.annotations.Loggable; +import it.plague.jeedemo.annotations.ThirteenDigits; +import it.plague.jeedemo.beans.NumberGenerator; +import java.util.Random; +import java.util.logging.Logger; +import javax.enterprise.inject.Alternative; +import javax.inject.Inject; + +@Alternative +@ThirteenDigits +public class MockGenerator implements NumberGenerator { + + @Inject + private Logger logger; + + @Override + @Loggable + public String generateNumber() { + String mock = "MOCK- " + Math.abs(new Random().nextInt()); + logger.info("Generated Mock: " + mock); + return mock; + } +} diff --git a/cdidemo/src/test/resources/META-INF/beans.xml b/cdidemo/src/test/resources/META-INF/beans.xml new file mode 100644 index 0000000..0f77543 --- /dev/null +++ b/cdidemo/src/test/resources/META-INF/beans.xml @@ -0,0 +1,11 @@ + + + + it.plague.jeedemo.MockGenerator + + + it.plague.jeedemo.interceptors.LoggingInterceptor + + \ No newline at end of file diff --git a/jeedemo.iml b/jeedemo.iml new file mode 100644 index 0000000..4fd5057 --- /dev/null +++ b/jeedemo.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..11bc87b --- /dev/null +++ b/pom.xml @@ -0,0 +1,62 @@ + + 4.0.0 + it.plague.jeedemo + jeedemo + 1.0-SNAPSHOT + pom + jeedemo + + + cdidemo + + + + + + org.eclipse.persistence + org.eclipse.persistence.jpa + 2.5.0 + + + org.hibernate + hibernate-validator + 6.0.16.Final + + + org.glassfish + javax.el + 3.0.1-b09 + + + org.projectlombok + lombok + 1.18.6 + provided + + + org.jboss.weld.se + weld-se-core + 2.0.0.Final + + + org.apache.derby + derbyclient + 10.9.1.0 + + + org.apache.derby + derby + 10.9.1.0 + test + + + junit + junit + 4.12 + test + + + +