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 01/14] 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 + + + + From 0784cbfb09e8acdbaec3fb717c3bcc7d94d43e80 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Fri, 29 Mar 2019 12:19:19 +0100 Subject: [PATCH 02/14] Aggiunto l'esempio del capitolo sulla Bean Validation --- beanvalidationdemo/beanvalidationdemo.iml | 39 +++++++++ beanvalidationdemo/pom.xml | 87 +++++++++++++++++++ .../main/java/it/plague/jeedemo/Address.java | 32 +++++++ .../it/plague/jeedemo/BeanValidationMain.java | 13 +++ .../main/java/it/plague/jeedemo/Customer.java | 31 +++++++ .../main/java/it/plague/jeedemo/Email.java | 37 ++++++++ .../src/main/java/it/plague/jeedemo/USA.java | 14 +++ .../main/java/it/plague/jeedemo/ZipCode.java | 29 +++++++ .../it/plague/jeedemo/ZipCodeChecker.java | 9 ++ .../it/plague/jeedemo/ZipCodeValidator.java | 38 ++++++++ .../src/main/resources/META-INF/beans.xml | 6 ++ .../resources/ValidationMessages.properties | 1 + .../java/it/plague/jeedemo/AddressIT.java | 23 +++++ .../java/it/plague/jeedemo/CustomerIT.java | 48 ++++++++++ .../src/test/resources/META-INF/beans.xml | 6 ++ pom.xml | 1 + 16 files changed, 414 insertions(+) create mode 100644 beanvalidationdemo/beanvalidationdemo.iml create mode 100644 beanvalidationdemo/pom.xml create mode 100644 beanvalidationdemo/src/main/java/it/plague/jeedemo/Address.java create mode 100644 beanvalidationdemo/src/main/java/it/plague/jeedemo/BeanValidationMain.java create mode 100644 beanvalidationdemo/src/main/java/it/plague/jeedemo/Customer.java create mode 100644 beanvalidationdemo/src/main/java/it/plague/jeedemo/Email.java create mode 100644 beanvalidationdemo/src/main/java/it/plague/jeedemo/USA.java create mode 100644 beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCode.java create mode 100644 beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCodeChecker.java create mode 100644 beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCodeValidator.java create mode 100644 beanvalidationdemo/src/main/resources/META-INF/beans.xml create mode 100644 beanvalidationdemo/src/main/resources/ValidationMessages.properties create mode 100644 beanvalidationdemo/src/test/java/it/plague/jeedemo/AddressIT.java create mode 100644 beanvalidationdemo/src/test/java/it/plague/jeedemo/CustomerIT.java create mode 100644 beanvalidationdemo/src/test/resources/META-INF/beans.xml diff --git a/beanvalidationdemo/beanvalidationdemo.iml b/beanvalidationdemo/beanvalidationdemo.iml new file mode 100644 index 0000000..110df22 --- /dev/null +++ b/beanvalidationdemo/beanvalidationdemo.iml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/beanvalidationdemo/pom.xml b/beanvalidationdemo/pom.xml new file mode 100644 index 0000000..8200027 --- /dev/null +++ b/beanvalidationdemo/pom.xml @@ -0,0 +1,87 @@ + + + 4.0.0 + beanvalidationdemo + beanvalidationdemo + + + jeedemo + it.plague.jeedemo + 1.0-SNAPSHOT + + + + UTF-8 + it.plague.jeedemo.BeanValidationMain + 1.7 + 1.7 + + + + + org.hibernate + hibernate-validator + + + org.glassfish + javax.el + + + org.jboss.weld.se + weld-se-core + + + org.projectlombok + lombok + + + 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.BeanValidationMain + + + + + + + diff --git a/beanvalidationdemo/src/main/java/it/plague/jeedemo/Address.java b/beanvalidationdemo/src/main/java/it/plague/jeedemo/Address.java new file mode 100644 index 0000000..c5ba402 --- /dev/null +++ b/beanvalidationdemo/src/main/java/it/plague/jeedemo/Address.java @@ -0,0 +1,32 @@ +package it.plague.jeedemo; + +import javax.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Address { + + @NotNull + private String street1; + private String street2; + @NotNull + private String city; + private String state; + @NotNull + @ZipCode + private String zipCode; + private String coutry; + + public Address(@NotNull String street1, @NotNull String city, String state, + @NotNull String zipCode, String coutry) { + this.street1 = street1; + this.city = city; + this.state = state; + this.zipCode = zipCode; + this.coutry = coutry; + } +} diff --git a/beanvalidationdemo/src/main/java/it/plague/jeedemo/BeanValidationMain.java b/beanvalidationdemo/src/main/java/it/plague/jeedemo/BeanValidationMain.java new file mode 100644 index 0000000..9dbf7d0 --- /dev/null +++ b/beanvalidationdemo/src/main/java/it/plague/jeedemo/BeanValidationMain.java @@ -0,0 +1,13 @@ +package it.plague.jeedemo; + +/** + * Hello world! + * + */ +public class BeanValidationMain +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} diff --git a/beanvalidationdemo/src/main/java/it/plague/jeedemo/Customer.java b/beanvalidationdemo/src/main/java/it/plague/jeedemo/Customer.java new file mode 100644 index 0000000..8aa40dd --- /dev/null +++ b/beanvalidationdemo/src/main/java/it/plague/jeedemo/Customer.java @@ -0,0 +1,31 @@ +package it.plague.jeedemo; + +import java.util.Date; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Past; +import javax.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Customer { + + @NotNull + @Size(min = 2) + private String firstName; + private String lastName; + @Email + private String email; + private String phoneNumber; + @Past + private Date dateOfBirth; + private Address deliveryAddress; + + public Customer( + @NotNull @Size(min = 2) String firstName, String lastName, String email) { + this(firstName, lastName, email, null, null, null); + } +} diff --git a/beanvalidationdemo/src/main/java/it/plague/jeedemo/Email.java b/beanvalidationdemo/src/main/java/it/plague/jeedemo/Email.java new file mode 100644 index 0000000..5cfd9dd --- /dev/null +++ b/beanvalidationdemo/src/main/java/it/plague/jeedemo/Email.java @@ -0,0 +1,37 @@ +package it.plague.jeedemo; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.validation.Constraint; +import javax.validation.Payload; +import javax.validation.ReportAsSingleViolation; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +@Size(min = 7) +@Pattern(regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\." + + "[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*" + + "@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?") +@ReportAsSingleViolation +@Constraint(validatedBy = {}) +@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Email { + + String message() default "{it.plague.jeedemo.Email.message}"; + + Class[] groups() default {}; + + Class[] payload() default {}; + + @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, ElementType.PARAMETER}) + @Retention(RetentionPolicy.RUNTIME) + @interface List { + + Email[] value(); + } +} diff --git a/beanvalidationdemo/src/main/java/it/plague/jeedemo/USA.java b/beanvalidationdemo/src/main/java/it/plague/jeedemo/USA.java new file mode 100644 index 0000000..aa4a2b7 --- /dev/null +++ b/beanvalidationdemo/src/main/java/it/plague/jeedemo/USA.java @@ -0,0 +1,14 @@ +package it.plague.jeedemo; + +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 USA { + +} diff --git a/beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCode.java b/beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCode.java new file mode 100644 index 0000000..ebf3d03 --- /dev/null +++ b/beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCode.java @@ -0,0 +1,29 @@ +package it.plague.jeedemo; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.validation.Constraint; +import javax.validation.Payload; + +@Constraint(validatedBy = ZipCodeValidator.class) +@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ZipCode { + + String message() default "{it.plague.jeedemo.beanvalidation.ZipCode.message}"; + + Class[] groups() default {}; + + Class[] payload() default {}; + + @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, ElementType.PARAMETER}) + @Retention(RetentionPolicy.RUNTIME) + @interface List { + + ZipCode[] value(); + } +} diff --git a/beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCodeChecker.java b/beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCodeChecker.java new file mode 100644 index 0000000..c72bbc1 --- /dev/null +++ b/beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCodeChecker.java @@ -0,0 +1,9 @@ +package it.plague.jeedemo; + +public class ZipCodeChecker { + + public boolean isZipCodeValid(String value) { + // TODO it's not important for this example, here could you do anything do you want + return true; + } +} diff --git a/beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCodeValidator.java b/beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCodeValidator.java new file mode 100644 index 0000000..199d0b3 --- /dev/null +++ b/beanvalidationdemo/src/main/java/it/plague/jeedemo/ZipCodeValidator.java @@ -0,0 +1,38 @@ +package it.plague.jeedemo; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.inject.Inject; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +public class ZipCodeValidator implements ConstraintValidator { + + /** + * FIXME + * this attribute not work, because @Produce + * not defined + */ + @Inject + @USA + private ZipCodeChecker checker; + + private Pattern zipPattern = Pattern.compile("\\d{5}(-\\d{5})?"); + + @Override + public void initialize(ZipCode zipCode) { + + } + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + Matcher m = zipPattern.matcher(value); + if (!m.matches()) { + return false; + } + return checker.isZipCodeValid(value); + } +} diff --git a/beanvalidationdemo/src/main/resources/META-INF/beans.xml b/beanvalidationdemo/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000..8819456 --- /dev/null +++ b/beanvalidationdemo/src/main/resources/META-INF/beans.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/beanvalidationdemo/src/main/resources/ValidationMessages.properties b/beanvalidationdemo/src/main/resources/ValidationMessages.properties new file mode 100644 index 0000000..627fe5e --- /dev/null +++ b/beanvalidationdemo/src/main/resources/ValidationMessages.properties @@ -0,0 +1 @@ +it.plague.jeedemo.Email.message=invalid email address \ No newline at end of file diff --git a/beanvalidationdemo/src/test/java/it/plague/jeedemo/AddressIT.java b/beanvalidationdemo/src/test/java/it/plague/jeedemo/AddressIT.java new file mode 100644 index 0000000..5d850e7 --- /dev/null +++ b/beanvalidationdemo/src/test/java/it/plague/jeedemo/AddressIT.java @@ -0,0 +1,23 @@ +package it.plague.jeedemo; + +import static org.junit.Assert.*; + +import java.util.Set; +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.ValidatorFactory; +import org.junit.Test; + +public class AddressIT { + + @Test + public void shouldRaiseConstraintViolationCauseInvalidZipCode() { + ValidatorFactory vf = Validation.buildDefaultValidatorFactory(); + Validator validator = vf.getValidator(); + Address address = new Address("233 Spring Street", "New York", "NY", "DUMMY", "USA"); + Set> violations = validator.validate(address); + assertEquals(1, violations.size()); + vf.close(); + } +} diff --git a/beanvalidationdemo/src/test/java/it/plague/jeedemo/CustomerIT.java b/beanvalidationdemo/src/test/java/it/plague/jeedemo/CustomerIT.java new file mode 100644 index 0000000..e2b668c --- /dev/null +++ b/beanvalidationdemo/src/test/java/it/plague/jeedemo/CustomerIT.java @@ -0,0 +1,48 @@ +package it.plague.jeedemo; + +import static org.junit.Assert.assertEquals; + +import java.util.Set; +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.ValidatorFactory; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; + +public class CustomerIT { + + private static ValidatorFactory vf; + private static Validator validator; + + @BeforeClass + public static void init() { + vf = Validation.buildDefaultValidatorFactory(); + validator = vf.getValidator(); + } + + @AfterClass + public static void close() { + vf.close(); + } + + @Test + public void shouldRaiseNoConstraintViolation() { + Customer customer = new Customer("John", "Smith", "jsmith@gmail.com"); + Set> violations = validator.validate(customer); + assertEquals(0, violations.size()); + } + + @Test + public void shouldRaiseConstraintViolationCauseInvalidEmail() { + Customer customer = new Customer("John", "Smith", "DummyEmail"); + Set> violations = validator.validate(customer); + assertEquals(1, violations.size()); + assertEquals("invalid email address", violations.iterator().next().getMessage()); + assertEquals("DummyEmail", violations.iterator().next().getInvalidValue()); + assertEquals("{it.plague.jeedemo.Email.message}", + violations.iterator().next().getMessageTemplate()); + } +} diff --git a/beanvalidationdemo/src/test/resources/META-INF/beans.xml b/beanvalidationdemo/src/test/resources/META-INF/beans.xml new file mode 100644 index 0000000..8819456 --- /dev/null +++ b/beanvalidationdemo/src/test/resources/META-INF/beans.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 11bc87b..6a36978 100644 --- a/pom.xml +++ b/pom.xml @@ -10,6 +10,7 @@ cdidemo + beanvalidationdemo From 2898a2ff133bbd74c9a00957baa3eaed1003510d Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Fri, 29 Mar 2019 14:32:48 +0100 Subject: [PATCH 03/14] Rimuovo classi main --- beanvalidationdemo/pom.xml | 16 ---------------- .../it/plague/jeedemo/BeanValidationMain.java | 13 ------------- pom.xml | 1 + 3 files changed, 1 insertion(+), 29 deletions(-) delete mode 100644 beanvalidationdemo/src/main/java/it/plague/jeedemo/BeanValidationMain.java diff --git a/beanvalidationdemo/pom.xml b/beanvalidationdemo/pom.xml index 8200027..49fb236 100644 --- a/beanvalidationdemo/pom.xml +++ b/beanvalidationdemo/pom.xml @@ -14,7 +14,6 @@ UTF-8 - it.plague.jeedemo.BeanValidationMain 1.7 1.7 @@ -67,21 +66,6 @@ - - org.codehaus.mojo - exec-maven-plugin - 1.2.1 - - - - java - - - it.plague.jeedemo.BeanValidationMain - - - - diff --git a/beanvalidationdemo/src/main/java/it/plague/jeedemo/BeanValidationMain.java b/beanvalidationdemo/src/main/java/it/plague/jeedemo/BeanValidationMain.java deleted file mode 100644 index 9dbf7d0..0000000 --- a/beanvalidationdemo/src/main/java/it/plague/jeedemo/BeanValidationMain.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.plague.jeedemo; - -/** - * Hello world! - * - */ -public class BeanValidationMain -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); - } -} diff --git a/pom.xml b/pom.xml index 6a36978..2ed2870 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,7 @@ cdidemo beanvalidationdemo + jpademo From e9f8ecc30eda4833b073c703e9daad4377a47399 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Fri, 29 Mar 2019 14:44:46 +0100 Subject: [PATCH 04/14] Aggiunto l'esempio del capitolo su Java Persistence API --- jpademo/jpademo.iml | 41 ++++++++++ jpademo/pom.xml | 82 +++++++++++++++++++ .../src/main/java/it/plague/jeedemo/Book.java | 37 +++++++++ .../src/main/resources/META-INF/insert.sql | 3 + .../main/resources/META-INF/persistence.xml | 40 +++++++++ .../test/java/it/plague/jeedemo/BookIT.java | 70 ++++++++++++++++ 6 files changed, 273 insertions(+) create mode 100644 jpademo/jpademo.iml create mode 100644 jpademo/pom.xml create mode 100644 jpademo/src/main/java/it/plague/jeedemo/Book.java create mode 100644 jpademo/src/main/resources/META-INF/insert.sql create mode 100644 jpademo/src/main/resources/META-INF/persistence.xml create mode 100644 jpademo/src/test/java/it/plague/jeedemo/BookIT.java diff --git a/jpademo/jpademo.iml b/jpademo/jpademo.iml new file mode 100644 index 0000000..13d6ecc --- /dev/null +++ b/jpademo/jpademo.iml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jpademo/pom.xml b/jpademo/pom.xml new file mode 100644 index 0000000..9af52a4 --- /dev/null +++ b/jpademo/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + jpademo + jpademo + + + jeedemo + it.plague.jeedemo + 1.0-SNAPSHOT + + + + UTF-8 + 1.7 + 1.7 + + + + + org.eclipse.persistence + org.eclipse.persistence.jpa + + + org.hibernate + hibernate-validator + + + org.glassfish + javax.el + + + org.apache.derby + derbyclient + + + org.apache.derby + derby + test + + + org.projectlombok + lombok + provided + + + junit + junit + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.12.4 + + + integration-test + + integration-test + verify + + + + + + + diff --git a/jpademo/src/main/java/it/plague/jeedemo/Book.java b/jpademo/src/main/java/it/plague/jeedemo/Book.java new file mode 100644 index 0000000..b1f20d5 --- /dev/null +++ b/jpademo/src/main/java/it/plague/jeedemo/Book.java @@ -0,0 +1,37 @@ +package it.plague.jeedemo; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@Builder +@NamedQueries({ + @NamedQuery(name = "Book.findAll", query = "select b from Book b"), + @NamedQuery(name = "Book.findOneH2G2", query = "select b from Book b where b.title = 'H2G2'") +}) +public @Data +class Book { + + @Id + @GeneratedValue + private Long id; + @NotNull + private String title; + private Float price; + @Size(min = 10, max = 2000) + private String description; + private String isbn; + private Integer nbOfPage; + private Boolean illustrations; +} diff --git a/jpademo/src/main/resources/META-INF/insert.sql b/jpademo/src/main/resources/META-INF/insert.sql new file mode 100644 index 0000000..2c8e481 --- /dev/null +++ b/jpademo/src/main/resources/META-INF/insert.sql @@ -0,0 +1,3 @@ +insert into book(id, title, description, illustrations, isbn, nbofpage, price) values (1000, 'Beginning Java EE 6', 'Best Java EE book ever', 1, '1234-5678', 450, 49) +insert into book(id, title, description, illustrations, isbn, nbofpage, price) values (1001, 'Beginning Java EE 7', 'No, this is the best', 1, '5678-9012', 550, 53) +insert into book(id, title, description, illustrations, isbn, nbofpage, price) values (1010, 'The Lord of the Rings', 'One ring to rule them all', 0, '1234-5678', 222, 23) diff --git a/jpademo/src/main/resources/META-INF/persistence.xml b/jpademo/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..9835c63 --- /dev/null +++ b/jpademo/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,40 @@ + + + + + org.eclipse.persistence.jpa.PersistenceProvider + it.plague.jeedemo.Book + + + + + + + + + + + + + + + + + org.eclipse.persistence.jpa.PersistenceProvider + it.plague.jeedemo.Book + + + + + + + + + + + + + \ No newline at end of file diff --git a/jpademo/src/test/java/it/plague/jeedemo/BookIT.java b/jpademo/src/test/java/it/plague/jeedemo/BookIT.java new file mode 100644 index 0000000..765ed02 --- /dev/null +++ b/jpademo/src/test/java/it/plague/jeedemo/BookIT.java @@ -0,0 +1,70 @@ +package it.plague.jeedemo; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.validation.ConstraintViolationException; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + + +public class BookIT { + + private EntityManager em; + + @Before + public void initEntityManager() { + EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpademoTestUnit"); + em = emf.createEntityManager(); + } + + @After + public void closeEntityManager() { + if (em != null) { + em.close(); + } + } + + @Test + public void shouldCreateJavaEE7Book() { + Book book = em.find(Book.class, 1001L); + assertEquals("Beginning Java EE 7", book.getTitle()); + } + + @Test + public void shouldCreateH2G2Book() { + Book book = Book.builder() + .title("H2G2") + .description("The Hitchhiker's Guide to the Galaxy") + .price(12.5f) + .isbn("1-84023-742-2") + .nbOfPage(354) + .illustrations(false) + .build(); + + em.getTransaction().begin(); + em.persist(book); + em.getTransaction().commit(); + assertNotNull("ID should not be null", book.getId()); + + book = em.createNamedQuery("Book.findOneH2G2", Book.class).getSingleResult(); + assertEquals("The Hitchhiker's Guide to the Galaxy", book.getDescription()); + } + + @Test(expected = ConstraintViolationException.class) + public void shouldRaiseConstraintViolationCauseNullTitle() { + Book book = Book.builder() + .title(null) + .description("Null title, should fail") + .price(12.5f) + .isbn("1-84023-742-2") + .nbOfPage(354) + .illustrations(false) + .build(); + em.persist(book); + } +} From 09af0ccdfb9c8072acedf39875f6eef0ea78ba97 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Fri, 29 Mar 2019 16:02:49 +0100 Subject: [PATCH 05/14] Aggiunto l'esempio capitolo su Enterprise JavaBean --- ejbdemo/ejbdemo.iml | 42 +++++++++ ejbdemo/pom.xml | 88 +++++++++++++++++++ .../src/main/java/it/plague/jeedemo/Book.java | 35 ++++++++ .../main/java/it/plague/jeedemo/BookEJB.java | 39 ++++++++ .../java/it/plague/jeedemo/BookEJBRemote.java | 16 ++++ .../it/plague/jeedemo/DatabasePopulator.java | 56 ++++++++++++ .../it/plague/jeedemo/DatabaseProducer.java | 12 +++ ejbdemo/src/main/resources/META-INF/beans.xml | 8 ++ .../main/resources/META-INF/persistence.xml | 16 ++++ .../java/it/plague/jeedemo/BookEJBIT.java | 54 ++++++++++++ pom.xml | 7 ++ 11 files changed, 373 insertions(+) create mode 100644 ejbdemo/ejbdemo.iml create mode 100644 ejbdemo/pom.xml create mode 100644 ejbdemo/src/main/java/it/plague/jeedemo/Book.java create mode 100644 ejbdemo/src/main/java/it/plague/jeedemo/BookEJB.java create mode 100644 ejbdemo/src/main/java/it/plague/jeedemo/BookEJBRemote.java create mode 100644 ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java create mode 100644 ejbdemo/src/main/java/it/plague/jeedemo/DatabaseProducer.java create mode 100644 ejbdemo/src/main/resources/META-INF/beans.xml create mode 100644 ejbdemo/src/main/resources/META-INF/persistence.xml create mode 100644 ejbdemo/src/test/java/it/plague/jeedemo/BookEJBIT.java diff --git a/ejbdemo/ejbdemo.iml b/ejbdemo/ejbdemo.iml new file mode 100644 index 0000000..39dfcd5 --- /dev/null +++ b/ejbdemo/ejbdemo.iml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ejbdemo/pom.xml b/ejbdemo/pom.xml new file mode 100644 index 0000000..9445b13 --- /dev/null +++ b/ejbdemo/pom.xml @@ -0,0 +1,88 @@ + + + + 4.0.0 + ejbdemo + ejbdemo + + + jeedemo + it.plague.jeedemo + 1.0-SNAPSHOT + + + + UTF-8 + 1.7 + 1.7 + + + + + org.eclipse.persistence + org.eclipse.persistence.jpa + + + org.hibernate + hibernate-validator + + + org.glassfish + javax.el + + + org.apache.derby + derbyclient + + + org.apache.derby + derby + test + + + org.projectlombok + lombok + provided + + + org.glassfish.main.extras + glassfish-embedded-all + provided + + + junit + junit + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.12.4 + + + integration-test + + integration-test + verify + + + + + + + diff --git a/ejbdemo/src/main/java/it/plague/jeedemo/Book.java b/ejbdemo/src/main/java/it/plague/jeedemo/Book.java new file mode 100644 index 0000000..f0f7d9b --- /dev/null +++ b/ejbdemo/src/main/java/it/plague/jeedemo/Book.java @@ -0,0 +1,35 @@ +package it.plague.jeedemo; + +import java.io.Serializable; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.NamedQuery; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Entity +@Data +@NoArgsConstructor +@Builder +@NamedQuery(name = "Book.findAll", query = "select b from Book b") +public class Book implements Serializable { + + @Id + @GeneratedValue + private Long id; + @NotNull + @Column(nullable = false) + private String title; + private Float price; + @Size(max = 2000) + @Column(length = 2000) + private String description; + private String isbn; + private Integer nbOfPage; + private Boolean illustrations; +} diff --git a/ejbdemo/src/main/java/it/plague/jeedemo/BookEJB.java b/ejbdemo/src/main/java/it/plague/jeedemo/BookEJB.java new file mode 100644 index 0000000..4fa19e9 --- /dev/null +++ b/ejbdemo/src/main/java/it/plague/jeedemo/BookEJB.java @@ -0,0 +1,39 @@ +package it.plague.jeedemo; + +import java.util.List; +import javax.ejb.LocalBean; +import javax.ejb.Stateless; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; +import javax.validation.constraints.NotNull; + +@Stateless +@LocalBean +public class BookEJB implements BookEJBRemote { + + @Inject + private EntityManager em; + + @Override + public List findBooks() { + TypedQuery query = em.createNamedQuery("Book.findAll", Book.class); + return query.getResultList(); + } + + @Override + public @NotNull Book createBook(@NotNull Book book) { + em.persist(book); + return book; + } + + @Override + public @NotNull Book updateBook(@NotNull Book book) { + return em.merge(book); + } + + @Override + public void deleteBook(@NotNull Book book) { + em.remove(em.merge(book)); + } +} diff --git a/ejbdemo/src/main/java/it/plague/jeedemo/BookEJBRemote.java b/ejbdemo/src/main/java/it/plague/jeedemo/BookEJBRemote.java new file mode 100644 index 0000000..523fca0 --- /dev/null +++ b/ejbdemo/src/main/java/it/plague/jeedemo/BookEJBRemote.java @@ -0,0 +1,16 @@ +package it.plague.jeedemo; + +import java.util.List; +import javax.ejb.Remote; + +@Remote +public interface BookEJBRemote { + + List findBooks(); + + Book createBook(Book book); + + void deleteBook(Book book); + + Book updateBook(Book book); +} diff --git a/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java b/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java new file mode 100644 index 0000000..8ba1f3d --- /dev/null +++ b/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java @@ -0,0 +1,56 @@ +package it.plague.jeedemo; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.annotation.sql.DataSourceDefinition; +import javax.ejb.Singleton; +import javax.ejb.Startup; +import javax.inject.Inject; + + +@Startup +@Singleton +@DataSourceDefinition( + className = "org.apache.derby.jdbc.EmbeddedDataSource", + name = "java:global/jdbc/ejbdemoDS", + user = "app", + password = "app", + databaseName = "ejbdemo", + properties = {"connectionAttributes=;create=true"}) +public class DatabasePopulator { + + @Inject + private BookEJB bookEJB; + + private Book h2g2; + private Book lord; + + @PostConstruct + private void populateDB() { + h2g2 = Book.builder() + .title("Beginning Java EE 7") + .price(35f) + .description("Great book") + .isbn("1-8763-9125-7") + .nbOfPage(605) + .illustrations(true) + .build(); + lord = Book.builder() + .title("The Lord of the Rings") + .price(50.4f) + .description("SciFi") + .isbn("1-84023-742-2") + .nbOfPage(1216) + .illustrations(true) + .build(); + + bookEJB.createBook(h2g2); + bookEJB.createBook(lord); + } + + @PreDestroy + private void clearDB() { + bookEJB.deleteBook(h2g2); + bookEJB.deleteBook(lord); + } +} diff --git a/ejbdemo/src/main/java/it/plague/jeedemo/DatabaseProducer.java b/ejbdemo/src/main/java/it/plague/jeedemo/DatabaseProducer.java new file mode 100644 index 0000000..a9087da --- /dev/null +++ b/ejbdemo/src/main/java/it/plague/jeedemo/DatabaseProducer.java @@ -0,0 +1,12 @@ +package it.plague.jeedemo; + +import javax.enterprise.inject.Produces; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + +public class DatabaseProducer { + + @Produces + @PersistenceContext(unitName = "ejbdemoPU") + private EntityManager em; +} diff --git a/ejbdemo/src/main/resources/META-INF/beans.xml b/ejbdemo/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000..5c49eb7 --- /dev/null +++ b/ejbdemo/src/main/resources/META-INF/beans.xml @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/ejbdemo/src/main/resources/META-INF/persistence.xml b/ejbdemo/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..ed7b83f --- /dev/null +++ b/ejbdemo/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,16 @@ + + + + + java:global/jdbc/ejbdemoDS + + + + + + + + \ No newline at end of file diff --git a/ejbdemo/src/test/java/it/plague/jeedemo/BookEJBIT.java b/ejbdemo/src/test/java/it/plague/jeedemo/BookEJBIT.java new file mode 100644 index 0000000..5856513 --- /dev/null +++ b/ejbdemo/src/test/java/it/plague/jeedemo/BookEJBIT.java @@ -0,0 +1,54 @@ +package it.plague.jeedemo; + +import static org.junit.Assert.*; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; +import javax.ejb.embeddable.EJBContainer; +import javax.naming.Context; +import org.junit.Test; + +public class BookEJBIT { + + @Test + public void shouldCreateABook() throws Exception { + Map properties = new HashMap<>(); + properties.put(EJBContainer.MODULES, new File("target/classes")); + try (EJBContainer ec = EJBContainer.createEJBContainer(properties)) { + Context ctx = ec.getContext(); + + // Check JNDI dependencies (Datasource and EJBs) + assertNotNull(ctx.lookup("java:global/jdbc/ejbdemoDS")); + assertNotNull(ctx.lookup("java:global/classes/BookEJB!it.plague.jeedemo.BookEJBRemote")); + assertNotNull(ctx.lookup("java:global/classes/BookEJB!it.plague.jeedemo.BookEJB")); + + // Looks up the EJB + BookEJB bookEJB = (BookEJB) ctx.lookup("java:global/classes/BookEJB!it.plague.jeedemo.BookEJB"); + + // Find all the books and makes sure there are two (inserted by the DBPopulator) + assertEquals(2, bookEJB.findBooks().size()); + + // Creates an instance of book; + Book book = Book.builder() + .title("H2G2") + .price(12.5f) + .description("Scifi book") + .isbn("1-24561-799-0") + .nbOfPage(354) + .illustrations(false) + .build(); + book = bookEJB.createBook(book); + assertNotNull("ID should not be null", book.getId()); + + // Find all the books and makes sure is an extra one + assertEquals(3, bookEJB.findBooks().size()); + + // Removes the created book + bookEJB.deleteBook(book); + + // Finds all the books and makes sure there is one less + assertEquals(2, bookEJB.findBooks().size()); + } + } +} diff --git a/pom.xml b/pom.xml index 2ed2870..4f79e02 100644 --- a/pom.xml +++ b/pom.xml @@ -12,6 +12,7 @@ cdidemo beanvalidationdemo jpademo + ejbdemo @@ -47,6 +48,12 @@ derbyclient 10.9.1.0 + + org.glassfish.main.extras + glassfish-embedded-all + 4.0 + provided + org.apache.derby derby From 23f2d852495e7f479fa05c51d848a68cfb2fae4e Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Sat, 30 Mar 2019 00:33:26 +0100 Subject: [PATCH 06/14] Aggiunto l'esempio di JAXB e JSON-P --- .idea/codeStyles/codeStyleConfig.xml | 5 ++ .idea/compiler.xml | 24 +++++++ .idea/encodings.xml | 9 +++ .idea/misc.xml | 32 +++++++++ .idea/vcs.xml | 6 ++ beanvalidationdemo/beanvalidationdemo.iml | 39 +--------- cdidemo/cdidemo.iml | 33 +-------- jeedemo.iml | 12 +--- jpademo/jpademo.iml | 28 -------- pom.xml | 1 + xmlandjsondemo/pom.xml | 71 +++++++++++++++++++ .../java/it/plague/jeedemo/CreditCard.java | 26 +++++++ .../it/plague/jeedemo/CreditCardJSonTest.java | 37 ++++++++++ .../it/plague/jeedemo/CreditCardXmlTest.java | 46 ++++++++++++ xmlandjsondemo/xmlandjsondemo.iml | 2 + 15 files changed, 262 insertions(+), 109 deletions(-) create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 xmlandjsondemo/pom.xml create mode 100644 xmlandjsondemo/src/main/java/it/plague/jeedemo/CreditCard.java create mode 100644 xmlandjsondemo/src/test/java/it/plague/jeedemo/CreditCardJSonTest.java create mode 100644 xmlandjsondemo/src/test/java/it/plague/jeedemo/CreditCardXmlTest.java create mode 100644 xmlandjsondemo/xmlandjsondemo.iml diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..b9d18bf --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..07edf43 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..b8f3ecd --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..6e79789 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + Angular + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/beanvalidationdemo/beanvalidationdemo.iml b/beanvalidationdemo/beanvalidationdemo.iml index 110df22..74f3f13 100644 --- a/beanvalidationdemo/beanvalidationdemo.iml +++ b/beanvalidationdemo/beanvalidationdemo.iml @@ -1,39 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/cdidemo/cdidemo.iml b/cdidemo/cdidemo.iml index 9d53095..74f3f13 100644 --- a/cdidemo/cdidemo.iml +++ b/cdidemo/cdidemo.iml @@ -1,33 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/jeedemo.iml b/jeedemo.iml index 4fd5057..74f3f13 100644 --- a/jeedemo.iml +++ b/jeedemo.iml @@ -1,12 +1,2 @@ - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/jpademo/jpademo.iml b/jpademo/jpademo.iml index 13d6ecc..93e6728 100644 --- a/jpademo/jpademo.iml +++ b/jpademo/jpademo.iml @@ -10,32 +10,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2ed2870..b18fc0d 100644 --- a/pom.xml +++ b/pom.xml @@ -12,6 +12,7 @@ cdidemo beanvalidationdemo jpademo + xmlandjsondemo diff --git a/xmlandjsondemo/pom.xml b/xmlandjsondemo/pom.xml new file mode 100644 index 0000000..601969e --- /dev/null +++ b/xmlandjsondemo/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + xmlandjsondemo + xmlandjsondemo + + + jeedemo + it.plague.jeedemo + 1.0-SNAPSHOT + + + + UTF-8 + 1.7 + 1.7 + + + + + javax.json + javax.json-api + 1.1 + + + org.glassfish + javax.json + 1.1 + + + org.projectlombok + lombok + provided + + + junit + junit + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.12.4 + + + integration-test + + integration-test + verify + + + + + + + diff --git a/xmlandjsondemo/src/main/java/it/plague/jeedemo/CreditCard.java b/xmlandjsondemo/src/main/java/it/plague/jeedemo/CreditCard.java new file mode 100644 index 0000000..13ab105 --- /dev/null +++ b/xmlandjsondemo/src/main/java/it/plague/jeedemo/CreditCard.java @@ -0,0 +1,26 @@ +package it.plague.jeedemo; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +public class CreditCard { + + @XmlAttribute + private String number; + @XmlElement(name = "expiry_date") + private String expiryDate; + @XmlElement(name = "control_number") + private Integer controlNumber; + private String type; +} diff --git a/xmlandjsondemo/src/test/java/it/plague/jeedemo/CreditCardJSonTest.java b/xmlandjsondemo/src/test/java/it/plague/jeedemo/CreditCardJSonTest.java new file mode 100644 index 0000000..37c0307 --- /dev/null +++ b/xmlandjsondemo/src/test/java/it/plague/jeedemo/CreditCardJSonTest.java @@ -0,0 +1,37 @@ +package it.plague.jeedemo; + +import static org.junit.Assert.*; + +import java.io.StringWriter; +import javax.json.Json; +import javax.json.stream.JsonGenerator; +import org.junit.Test; + +public class CreditCardJSonTest { + + public static final String creditCardJSon = + "{\"creditCard\":" + + "{\"number\":\"12345678\"," + + "\"expiryDate\":\"10/14\"," + + "\"controlNumber\":566," + + "\"type\":\"Visa\"}" + + "}"; + + @Test + public void shouldGenerateACreditCard() { + CreditCard creditCard = new CreditCard("12345678", "10/14", 566, "Visa"); + StringWriter writer = new StringWriter(); + JsonGenerator generator = Json.createGenerator(writer); + generator.writeStartObject() + .writeStartObject("creditCard") + .write("number", creditCard.getNumber()) + .write("expiryDate", creditCard.getExpiryDate()) + .write("controlNumber", creditCard.getControlNumber()) + .write("type", creditCard.getType()) + .writeEnd() + .writeEnd() + .close(); + assertEquals(creditCardJSon, writer.toString().trim()); + } + +} diff --git a/xmlandjsondemo/src/test/java/it/plague/jeedemo/CreditCardXmlTest.java b/xmlandjsondemo/src/test/java/it/plague/jeedemo/CreditCardXmlTest.java new file mode 100644 index 0000000..12d8119 --- /dev/null +++ b/xmlandjsondemo/src/test/java/it/plague/jeedemo/CreditCardXmlTest.java @@ -0,0 +1,46 @@ +package it.plague.jeedemo; + +import static org.junit.Assert.assertEquals; + +import java.io.StringReader; +import java.io.StringWriter; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import org.junit.Test; + +public class CreditCardXmlTest { + + public static final String creditCardXml = + "" + + "" + + "10/14" + + "566" + + "Visa" + + ""; + + @Test + public void shouldMarshallACreditCard() throws JAXBException { + CreditCard creditCard = new CreditCard("12345678", "10/14", 566, "Visa"); + StringWriter writer = new StringWriter(); + JAXBContext context = JAXBContext.newInstance(CreditCard.class); + Marshaller marshaller = context.createMarshaller(); + marshaller.marshal(creditCard, writer); + System.out.println(writer); + assertEquals(creditCardXml, writer.toString().trim()); + } + + @Test + public void shouldUnmarshallACreditCard() throws JAXBException { + StringReader reader = new StringReader(creditCardXml); + JAXBContext context = JAXBContext.newInstance(CreditCard.class); + Unmarshaller unmarshaller = context.createUnmarshaller(); + CreditCard creditCard = (CreditCard) unmarshaller.unmarshal(reader); + assertEquals("12345678", creditCard.getNumber()); + assertEquals("10/14", creditCard.getExpiryDate()); + assertEquals((Object) 566, creditCard.getControlNumber()); + assertEquals("Visa", creditCard.getType()); + } + +} diff --git a/xmlandjsondemo/xmlandjsondemo.iml b/xmlandjsondemo/xmlandjsondemo.iml new file mode 100644 index 0000000..78b2cc5 --- /dev/null +++ b/xmlandjsondemo/xmlandjsondemo.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file From fa1f4fecd31a926c7a3e8523598c3bde5aa5d23f Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Mon, 1 Apr 2019 08:40:25 +0200 Subject: [PATCH 07/14] Corretti vari errori --- .gitignore | 1 + ejbdemo/ejbdemo.iml | 4 +++- ejbdemo/pom.xml | 6 ++++++ ejbdemo/src/main/java/it/plague/jeedemo/Book.java | 2 ++ .../main/java/it/plague/jeedemo/DatabasePopulator.java | 8 ++++---- ejbdemo/src/test/java/it/plague/jeedemo/BookEJBIT.java | 6 ++++-- pom.xml | 2 +- 7 files changed, 21 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 84f198a..a3faa8c 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ *.zip *.tar.gz *.rar +*.dat # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* diff --git a/ejbdemo/ejbdemo.iml b/ejbdemo/ejbdemo.iml index 39dfcd5..eb85289 100644 --- a/ejbdemo/ejbdemo.iml +++ b/ejbdemo/ejbdemo.iml @@ -17,6 +17,7 @@ + @@ -27,6 +28,7 @@ + @@ -35,7 +37,7 @@ - + diff --git a/ejbdemo/pom.xml b/ejbdemo/pom.xml index 9445b13..ad6d1d7 100644 --- a/ejbdemo/pom.xml +++ b/ejbdemo/pom.xml @@ -24,6 +24,12 @@ org.eclipse.persistence org.eclipse.persistence.jpa + + org.eclipse.persistence + org.eclipse.persistence.jpa.modelgen.processor + 2.5.0 + provided + org.hibernate hibernate-validator diff --git a/ejbdemo/src/main/java/it/plague/jeedemo/Book.java b/ejbdemo/src/main/java/it/plague/jeedemo/Book.java index f0f7d9b..541f323 100644 --- a/ejbdemo/src/main/java/it/plague/jeedemo/Book.java +++ b/ejbdemo/src/main/java/it/plague/jeedemo/Book.java @@ -8,6 +8,7 @@ import javax.persistence.Id; import javax.persistence.NamedQuery; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @@ -15,6 +16,7 @@ import lombok.NoArgsConstructor; @Entity @Data @NoArgsConstructor +@AllArgsConstructor @Builder @NamedQuery(name = "Book.findAll", query = "select b from Book b") public class Book implements Serializable { diff --git a/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java b/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java index 8ba1f3d..7dd5b01 100644 --- a/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java +++ b/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java @@ -3,18 +3,18 @@ package it.plague.jeedemo; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.sql.DataSourceDefinition; -import javax.ejb.Singleton; import javax.ejb.Startup; +import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; @Startup -@Singleton +@ApplicationScoped @DataSourceDefinition( className = "org.apache.derby.jdbc.EmbeddedDataSource", name = "java:global/jdbc/ejbdemoDS", - user = "app", - password = "app", + user = "APP", + password = "APP", databaseName = "ejbdemo", properties = {"connectionAttributes=;create=true"}) public class DatabasePopulator { diff --git a/ejbdemo/src/test/java/it/plague/jeedemo/BookEJBIT.java b/ejbdemo/src/test/java/it/plague/jeedemo/BookEJBIT.java index 5856513..4bff095 100644 --- a/ejbdemo/src/test/java/it/plague/jeedemo/BookEJBIT.java +++ b/ejbdemo/src/test/java/it/plague/jeedemo/BookEJBIT.java @@ -1,6 +1,7 @@ package it.plague.jeedemo; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import java.io.File; import java.util.HashMap; @@ -24,7 +25,8 @@ public class BookEJBIT { assertNotNull(ctx.lookup("java:global/classes/BookEJB!it.plague.jeedemo.BookEJB")); // Looks up the EJB - BookEJB bookEJB = (BookEJB) ctx.lookup("java:global/classes/BookEJB!it.plague.jeedemo.BookEJB"); + BookEJB bookEJB = (BookEJB) ctx + .lookup("java:global/classes/BookEJB!it.plague.jeedemo.BookEJB"); // Find all the books and makes sure there are two (inserted by the DBPopulator) assertEquals(2, bookEJB.findBooks().size()); diff --git a/pom.xml b/pom.xml index 4f79e02..b11af7c 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ org.glassfish.main.extras glassfish-embedded-all - 4.0 + 4.1 provided From b0d62ac83e470f9ed324c55818a91ece10973fff Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Mon, 1 Apr 2019 12:13:28 +0200 Subject: [PATCH 08/14] Fix definizione DatabasePopulator come EJB --- .gitignore | 1 + ejbdemo/ejbdemo.iml | 8 ++++---- ejbdemo/pom.xml | 9 --------- .../main/java/it/plague/jeedemo/DatabasePopulator.java | 6 +++--- jpademo/jpademo.iml | 5 ++++- pom.xml | 2 +- 6 files changed, 13 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index a3faa8c..0bede59 100644 --- a/.gitignore +++ b/.gitignore @@ -89,3 +89,4 @@ fabric.properties # Android studio 3.1+ serialized cache file .idea/caches/build_file_checksums.ser +/ejbdemo/testdb/ diff --git a/ejbdemo/ejbdemo.iml b/ejbdemo/ejbdemo.iml index eb85289..d94b47a 100644 --- a/ejbdemo/ejbdemo.iml +++ b/ejbdemo/ejbdemo.iml @@ -4,7 +4,9 @@ - + + + @@ -34,10 +36,8 @@ - - - + diff --git a/ejbdemo/pom.xml b/ejbdemo/pom.xml index ad6d1d7..b5408c4 100644 --- a/ejbdemo/pom.xml +++ b/ejbdemo/pom.xml @@ -38,15 +38,6 @@ org.glassfish javax.el - - org.apache.derby - derbyclient - - - org.apache.derby - derby - test - org.projectlombok lombok diff --git a/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java b/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java index 7dd5b01..9c5ab0c 100644 --- a/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java +++ b/ejbdemo/src/main/java/it/plague/jeedemo/DatabasePopulator.java @@ -3,19 +3,19 @@ package it.plague.jeedemo; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.sql.DataSourceDefinition; +import javax.ejb.Singleton; import javax.ejb.Startup; -import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; @Startup -@ApplicationScoped +@Singleton @DataSourceDefinition( className = "org.apache.derby.jdbc.EmbeddedDataSource", name = "java:global/jdbc/ejbdemoDS", user = "APP", password = "APP", - databaseName = "ejbdemo", + databaseName = "testdb", properties = {"connectionAttributes=;create=true"}) public class DatabasePopulator { diff --git a/jpademo/jpademo.iml b/jpademo/jpademo.iml index 13d6ecc..43e53ae 100644 --- a/jpademo/jpademo.iml +++ b/jpademo/jpademo.iml @@ -4,7 +4,10 @@ - + + + + diff --git a/pom.xml b/pom.xml index b11af7c..99ef36d 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ org.glassfish.main.extras glassfish-embedded-all - 4.1 + 4.1.2 provided From 9e07e624e0aa1d9dddd0aa497a7fcbc07b80fe3d Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Tue, 2 Apr 2019 12:31:18 +0200 Subject: [PATCH 09/14] Aggiunto l'esempio del capitolo sulle Java Message Service --- .idea/compiler.xml | 3 + .idea/encodings.xml | 2 + ejbdemo/ejbdemo.iml | 29 -------- jmsdemo/pom.xml | 66 +++++++++++++++++++ .../it/plague/jeedemo/ExpensiveOrderMDB.java | 25 +++++++ .../java/it/plague/jeedemo/OrderConsumer.java | 29 ++++++++ .../main/java/it/plague/jeedemo/OrderDTO.java | 18 +++++ .../java/it/plague/jeedemo/OrderProducer.java | 32 +++++++++ pom.xml | 1 + 9 files changed, 176 insertions(+), 29 deletions(-) create mode 100644 jmsdemo/pom.xml create mode 100644 jmsdemo/src/main/java/it/plague/jeedemo/ExpensiveOrderMDB.java create mode 100644 jmsdemo/src/main/java/it/plague/jeedemo/OrderConsumer.java create mode 100644 jmsdemo/src/main/java/it/plague/jeedemo/OrderDTO.java create mode 100644 jmsdemo/src/main/java/it/plague/jeedemo/OrderProducer.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 07edf43..13249f0 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -2,6 +2,7 @@ + @@ -9,7 +10,9 @@ + + diff --git a/.idea/encodings.xml b/.idea/encodings.xml index b8f3ecd..236f921 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -3,6 +3,8 @@ + + diff --git a/ejbdemo/ejbdemo.iml b/ejbdemo/ejbdemo.iml index d94b47a..423fba3 100644 --- a/ejbdemo/ejbdemo.iml +++ b/ejbdemo/ejbdemo.iml @@ -12,33 +12,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jmsdemo/pom.xml b/jmsdemo/pom.xml new file mode 100644 index 0000000..39bb98a --- /dev/null +++ b/jmsdemo/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + jmsdemo + jmsdemo + + + jeedemo + it.plague.jeedemo + 1.0-SNAPSHOT + + + + UTF-8 + 1.7 + 1.7 + + + + + org.projectlombok + lombok + provided + + + org.glassfish.main.extras + glassfish-embedded-all + provided + + + junit + junit + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-failsafe-plugin + 2.12.4 + + + integration-test + + integration-test + verify + + + + + + + diff --git a/jmsdemo/src/main/java/it/plague/jeedemo/ExpensiveOrderMDB.java b/jmsdemo/src/main/java/it/plague/jeedemo/ExpensiveOrderMDB.java new file mode 100644 index 0000000..894a17c --- /dev/null +++ b/jmsdemo/src/main/java/it/plague/jeedemo/ExpensiveOrderMDB.java @@ -0,0 +1,25 @@ +package it.plague.jeedemo; + +import javax.ejb.ActivationConfigProperty; +import javax.ejb.MessageDriven; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; + +@MessageDriven(mappedName = "jms/javaee7/Topic", + activationConfig = { + @ActivationConfigProperty(propertyName = "acknowledgeMod", propertyValue = "Auto-acknowledge"), + @ActivationConfigProperty(propertyName = "messageSelector", propertyValue = "orderAmount > 1000") + }) +public class ExpensiveOrderMDB implements MessageListener { + + @Override + public void onMessage(Message message) { + try { + OrderDTO order = message.getBody(OrderDTO.class); + System.out.println("Expensive order received: " + order); + } catch (JMSException e) { + e.printStackTrace(); + } + } +} diff --git a/jmsdemo/src/main/java/it/plague/jeedemo/OrderConsumer.java b/jmsdemo/src/main/java/it/plague/jeedemo/OrderConsumer.java new file mode 100644 index 0000000..e47ccdc --- /dev/null +++ b/jmsdemo/src/main/java/it/plague/jeedemo/OrderConsumer.java @@ -0,0 +1,29 @@ +package it.plague.jeedemo; + +import javax.jms.ConnectionFactory; +import javax.jms.Destination; +import javax.jms.JMSContext; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; + +public class OrderConsumer { + + public static void main(String[] args) throws NamingException { + // Get the JNDI context + Context jndiContext = new InitialContext(); + + // Looks up the administered objects + ConnectionFactory connectionFactory = + (ConnectionFactory) jndiContext.lookup("jms/javaee7/ConnectionFactory"); + Destination destination = + (Destination) jndiContext.lookup("jms/javaee7/Topic"); + + try (JMSContext context = connectionFactory.createContext()) { + while (true) { + OrderDTO order = context.createConsumer(destination).receiveBody(OrderDTO.class); + System.out.println("Order received: " + order); + } + } + } +} diff --git a/jmsdemo/src/main/java/it/plague/jeedemo/OrderDTO.java b/jmsdemo/src/main/java/it/plague/jeedemo/OrderDTO.java new file mode 100644 index 0000000..4f3f405 --- /dev/null +++ b/jmsdemo/src/main/java/it/plague/jeedemo/OrderDTO.java @@ -0,0 +1,18 @@ +package it.plague.jeedemo; + +import java.io.Serializable; +import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class OrderDTO implements Serializable { + + private Long orderId; + private Date creationDate; + private String customerName; + private Float totalAmount; +} diff --git a/jmsdemo/src/main/java/it/plague/jeedemo/OrderProducer.java b/jmsdemo/src/main/java/it/plague/jeedemo/OrderProducer.java new file mode 100644 index 0000000..7429ab2 --- /dev/null +++ b/jmsdemo/src/main/java/it/plague/jeedemo/OrderProducer.java @@ -0,0 +1,32 @@ +package it.plague.jeedemo; + +import java.util.Date; +import javax.jms.ConnectionFactory; +import javax.jms.Destination; +import javax.jms.JMSContext; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; + +public class OrderProducer { + + public static void main(String[] args) throws NamingException { + // Creates an orderDto with a total amount parameter + Float totalAmount = Float.valueOf(args[0]); + OrderDTO order = new OrderDTO(12342L, new Date(), "Betty Moreu", totalAmount); + + // Get the JNDI context + Context jndiContext = new InitialContext(); + + // Looks up the administered objects + ConnectionFactory connectionFactory = + (ConnectionFactory) jndiContext.lookup("jms/javaee7/ConnectionFactory"); + Destination destination = + (Destination) jndiContext.lookup("jms/javaee7/Topic"); + + try (JMSContext context = connectionFactory.createContext()) { + // Sends an object message to the topic + context.createProducer().setProperty("orderAmount", totalAmount).send(destination, order); + } + } +} diff --git a/pom.xml b/pom.xml index c1e9333..f8f7084 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ jpademo ejbdemo xmlandjsondemo + jmsdemo From e3bbb0831753e862b806ce9a5ad067a5844e1e6a Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Tue, 2 Apr 2019 21:58:30 +0200 Subject: [PATCH 10/14] Aggiunto l'esempio del capitolo su SOAP Web Service (JAX-WS) --- .idea/compiler.xml | 1 + .idea/encodings.xml | 1 + .idea/misc.xml | 3 + jaxwsdemo-service/jaxwsdemoservice.iml | 2 + jaxwsdemo-service/pom.xml | 72 +++++++++++++++++++ .../java/it/plague/jeedemo/CardValidator.java | 13 ++++ .../java/it/plague/jeedemo/CreditCard.java | 30 ++++++++ .../java/it/plague/jeedemo/Validator.java | 9 +++ .../it/plague/jeedemo/CardValidatorIT.java | 62 ++++++++++++++++ .../it/plague/jeedemo/CardValidatorTest.java | 21 ++++++ pom.xml | 1 + 11 files changed, 215 insertions(+) create mode 100644 jaxwsdemo-service/jaxwsdemoservice.iml create mode 100644 jaxwsdemo-service/pom.xml create mode 100644 jaxwsdemo-service/src/main/java/it/plague/jeedemo/CardValidator.java create mode 100644 jaxwsdemo-service/src/main/java/it/plague/jeedemo/CreditCard.java create mode 100644 jaxwsdemo-service/src/main/java/it/plague/jeedemo/Validator.java create mode 100644 jaxwsdemo-service/src/test/java/it/plague/jeedemo/CardValidatorIT.java create mode 100644 jaxwsdemo-service/src/test/java/it/plague/jeedemo/CardValidatorTest.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 13249f0..6fdb87c 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -12,6 +12,7 @@ + diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 236f921..797721e 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -4,6 +4,7 @@ + diff --git a/.idea/misc.xml b/.idea/misc.xml index 6e79789..39545a1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,9 @@ + + +