├── .editorconfig
├── .gitignore
├── .travis.yml
├── 01-CDI
├── demo01.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainCDI.java
│ │ │ └── service
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ └── resources
│ │ ├── META-INF
│ │ └── beans.xml
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ └── service
│ └── ItemServiceTest.java
├── 02-CDI
├── demo02.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainCDI.java
│ │ │ ├── service
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ └── service
│ └── ItemServiceTest.java
├── 03-JPA
├── demo03.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainCDI.java
│ │ │ ├── MainJPASchemaGen.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ └── service
│ └── ItemServiceTest.java
├── 04-JPA
├── demo04.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainCDI.java
│ │ │ ├── MainJPASchemaGen.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── Chapter.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ └── service
│ └── ItemServiceTest.java
├── 05-JPA
├── demo05.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainCDI.java
│ │ │ ├── MainJPASchemaGen.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ └── service
│ └── ItemServiceTest.java
├── 06-JPA
├── demo06.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainCDI.java
│ │ │ ├── MainJPA.java
│ │ │ ├── MainJPASchemaGen.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ ├── model
│ ├── AbstractPersistentTest.java
│ ├── BookTest.java
│ ├── CDTest.java
│ ├── ChapterTest.java
│ ├── ItemTest.java
│ └── TrackTest.java
│ └── service
│ └── ItemServiceTest.java
├── 07-JPA
├── demo07.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainCDI.java
│ │ │ ├── MainJPA.java
│ │ │ ├── MainJPASchemaGen.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ ├── model
│ ├── AbstractPersistentTest.java
│ ├── BookTest.java
│ ├── CDTest.java
│ ├── ChapterTest.java
│ ├── ItemTest.java
│ └── TrackTest.java
│ └── service
│ └── ItemServiceTest.java
├── 08-JPA
├── demo08.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainCDI.java
│ │ │ ├── MainJPA.java
│ │ │ ├── MainJPASchemaGen.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ ├── model
│ ├── AbstractPersistentTest.java
│ ├── BookTest.java
│ ├── CDTest.java
│ ├── ChapterTest.java
│ ├── ItemTest.java
│ └── TrackTest.java
│ └── service
│ └── ItemServiceTest.java
├── 09-EJB
├── demo09.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainEJB.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ └── service
│ └── ItemServiceTest.java
├── 10-EJB
├── demo10.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainEJB.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── DBPopulator.java
│ │ │ ├── DatabaseProducer.java
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ └── service
│ └── ItemServiceTest.java
├── 11-JTA
├── demo11.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainEJB.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── DBPopulator.java
│ │ │ ├── DatabaseProducer.java
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ └── service
│ └── ItemServiceTest.java
├── 12-BeanValidation
├── README.md
├── demo12.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainBeanValidation.java
│ │ │ ├── MainEJB.java
│ │ │ ├── constraints
│ │ │ └── MusicGenre.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── DBPopulator.java
│ │ │ ├── DatabaseProducer.java
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ ├── ValidationMessages.properties
│ │ ├── ValidationMessages_fr.properties
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ ├── model
│ ├── BookTest.java
│ └── CDTest.java
│ └── service
│ └── ItemServiceTest.java
├── 13-BeanValidation
├── demo13.puml
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── MainBeanValidation.java
│ │ │ ├── MainEJB.java
│ │ │ ├── constraints
│ │ │ ├── ChronologicalDates.java
│ │ │ ├── ChronologicalDatesValidator.java
│ │ │ └── MusicGenre.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── DBPopulator.java
│ │ │ ├── DatabaseProducer.java
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ └── resources
│ │ ├── META-INF
│ │ ├── beans.xml
│ │ ├── orm.xml
│ │ ├── persistence.xml
│ │ └── services
│ │ │ └── javax.enterprise.inject.spi.Extension
│ │ ├── ValidationMessages.properties
│ │ ├── ValidationMessages_fr.properties
│ │ └── log4j2.xml
│ └── test
│ └── java
│ └── org
│ └── agoncal
│ └── training
│ └── javaee
│ ├── AllTests.java
│ ├── model
│ ├── BookTest.java
│ └── CDTest.java
│ └── service
│ └── ItemServiceTest.java
├── 14-JSF
├── demo14.puml
├── deployGlassFish.sh
├── deployWildFly.sh
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── constraints
│ │ │ ├── ChronologicalDates.java
│ │ │ ├── ChronologicalDatesValidator.java
│ │ │ └── MusicGenre.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── DBPopulator.java
│ │ │ ├── DatabaseProducer.java
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ └── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ ├── resources
│ │ ├── META-INF
│ │ │ ├── persistence.xml
│ │ │ └── services
│ │ │ │ └── javax.enterprise.inject.spi.Extension
│ │ ├── ValidationMessages.properties
│ │ ├── ValidationMessages_fr.properties
│ │ └── log4j2.xml
│ └── webapp
│ │ ├── WEB-INF
│ │ ├── beans.xml
│ │ └── faces-config.xml
│ │ ├── index.html
│ │ ├── newBook.xhtml
│ │ ├── newCD.xhtml
│ │ ├── resources
│ │ ├── book.png
│ │ ├── demo
│ │ │ └── newItem.xhtml
│ │ ├── musiccd.png
│ │ └── styles.css
│ │ └── template.xhtml
│ └── test
│ ├── java
│ └── org
│ │ └── agoncal
│ │ └── training
│ │ └── javaee
│ │ ├── AllTests.java
│ │ ├── model
│ │ ├── BookTest.java
│ │ └── CDTest.java
│ │ └── service
│ │ └── ItemServiceTest.java
│ └── resources
│ └── META-INF
│ └── beans.xml
├── 15-JSF
├── demo15.puml
├── deployGlassFish.sh
├── deployWildFly.sh
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── constraints
│ │ │ ├── ChronologicalDates.java
│ │ │ ├── ChronologicalDatesValidator.java
│ │ │ └── MusicGenre.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── service
│ │ │ ├── DBPopulator.java
│ │ │ ├── DatabaseProducer.java
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ ├── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ │ │ └── view
│ │ │ └── ItemController.java
│ ├── resources
│ │ ├── META-INF
│ │ │ ├── persistence.xml
│ │ │ └── services
│ │ │ │ └── javax.enterprise.inject.spi.Extension
│ │ ├── ValidationMessages.properties
│ │ ├── ValidationMessages_fr.properties
│ │ └── log4j2.xml
│ └── webapp
│ │ ├── WEB-INF
│ │ ├── beans.xml
│ │ └── faces-config.xml
│ │ ├── index.html
│ │ ├── newBook.xhtml
│ │ ├── newCD.xhtml
│ │ ├── resources
│ │ ├── book.png
│ │ ├── demo
│ │ │ └── newItem.xhtml
│ │ ├── musiccd.png
│ │ └── styles.css
│ │ └── template.xhtml
│ └── test
│ ├── java
│ └── org
│ │ └── agoncal
│ │ └── training
│ │ └── javaee
│ │ ├── AllTests.java
│ │ ├── model
│ │ ├── BookTest.java
│ │ └── CDTest.java
│ │ └── service
│ │ └── ItemServiceTest.java
│ └── resources
│ └── META-INF
│ └── beans.xml
├── 16-JAXRS
├── README.md
├── demo16.puml
├── deployGlassFish.sh
├── deployWildFly.sh
├── pom.xml
├── rest.text
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── constraints
│ │ │ ├── ChronologicalDates.java
│ │ │ ├── ChronologicalDatesValidator.java
│ │ │ └── MusicGenre.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── rest
│ │ │ ├── ApplicationConfig.java
│ │ │ └── ItemRest.java
│ │ │ ├── service
│ │ │ ├── DBPopulator.java
│ │ │ ├── DatabaseProducer.java
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ ├── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ │ │ └── view
│ │ │ └── ItemController.java
│ ├── resources
│ │ ├── META-INF
│ │ │ ├── persistence.xml
│ │ │ └── services
│ │ │ │ └── javax.enterprise.inject.spi.Extension
│ │ ├── ValidationMessages.properties
│ │ ├── ValidationMessages_fr.properties
│ │ └── log4j2.xml
│ └── webapp
│ │ ├── WEB-INF
│ │ ├── beans.xml
│ │ └── faces-config.xml
│ │ ├── index.html
│ │ ├── newBook.xhtml
│ │ ├── newCD.xhtml
│ │ ├── resources
│ │ ├── book.png
│ │ ├── demo
│ │ │ └── newItem.xhtml
│ │ ├── musiccd.png
│ │ └── styles.css
│ │ └── template.xhtml
│ └── test
│ ├── java
│ └── org
│ │ └── agoncal
│ │ └── training
│ │ └── javaee
│ │ ├── AllTests.java
│ │ ├── model
│ │ ├── BookTest.java
│ │ └── CDTest.java
│ │ └── service
│ │ └── ItemServiceTest.java
│ └── resources
│ └── META-INF
│ └── beans.xml
├── 17-JAXRS
├── demo17.puml
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── org
│ │ └── agoncal
│ │ └── training
│ │ └── javaee
│ │ └── MainREST.java
│ └── resources
│ └── log4j2.xml
├── 18-SOAP
├── README.md
├── demo18.puml
├── deployGlassFish.sh
├── deployWildFly.sh
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── constraints
│ │ │ ├── ChronologicalDates.java
│ │ │ ├── ChronologicalDatesValidator.java
│ │ │ └── MusicGenre.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── rest
│ │ │ ├── ApplicationConfig.java
│ │ │ └── ItemRest.java
│ │ │ ├── service
│ │ │ ├── DBPopulator.java
│ │ │ ├── DatabaseProducer.java
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ ├── soap
│ │ │ └── ItemSoap.java
│ │ │ ├── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ │ │ └── view
│ │ │ └── ItemController.java
│ ├── resources
│ │ ├── META-INF
│ │ │ ├── persistence.xml
│ │ │ └── services
│ │ │ │ └── javax.enterprise.inject.spi.Extension
│ │ ├── ValidationMessages.properties
│ │ ├── ValidationMessages_fr.properties
│ │ └── log4j2.xml
│ └── webapp
│ │ ├── WEB-INF
│ │ ├── beans.xml
│ │ └── faces-config.xml
│ │ ├── index.html
│ │ ├── newBook.xhtml
│ │ ├── newCD.xhtml
│ │ ├── resources
│ │ ├── demo
│ │ │ └── newItem.xhtml
│ │ └── styles.css
│ │ └── template.xhtml
│ └── test
│ ├── java
│ └── org
│ │ └── agoncal
│ │ └── training
│ │ └── javaee
│ │ ├── AllTests.java
│ │ ├── model
│ │ ├── BookTest.java
│ │ └── CDTest.java
│ │ └── service
│ │ └── ItemServiceTest.java
│ └── resources
│ └── META-INF
│ └── beans.xml
├── 19-SOAP
├── README.md
├── demo19.puml
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── org
│ │ └── agoncal
│ │ └── training
│ │ └── javaee
│ │ └── MainSOAP.java
│ └── resources
│ └── log4j2.xml
├── 20-JMS
├── demo20.puml
├── deployGlassFish.sh
├── deployWildFly.sh
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── agoncal
│ │ │ └── training
│ │ │ └── javaee
│ │ │ ├── constraints
│ │ │ ├── ChronologicalDates.java
│ │ │ ├── ChronologicalDatesValidator.java
│ │ │ └── MusicGenre.java
│ │ │ ├── model
│ │ │ ├── Book.java
│ │ │ ├── CD.java
│ │ │ ├── Chapter.java
│ │ │ ├── DebugListener.java
│ │ │ ├── Item.java
│ │ │ ├── Language.java
│ │ │ ├── LanguageConverter.java
│ │ │ ├── Track.java
│ │ │ └── package-info.java
│ │ │ ├── rest
│ │ │ ├── ApplicationConfig.java
│ │ │ └── ItemRest.java
│ │ │ ├── service
│ │ │ ├── DBPopulator.java
│ │ │ ├── DatabaseProducer.java
│ │ │ ├── EightDigits.java
│ │ │ ├── IsbnGenerator.java
│ │ │ ├── IssnGenerator.java
│ │ │ ├── ItemService.java
│ │ │ ├── MockGenerator.java
│ │ │ ├── NumberGenerator.java
│ │ │ └── ThirteenDigits.java
│ │ │ ├── util
│ │ │ ├── CDIDebug.java
│ │ │ ├── Loggable.java
│ │ │ ├── LoggingInterceptor.java
│ │ │ └── LoggingProducer.java
│ │ │ └── view
│ │ │ └── ItemController.java
│ ├── resources
│ │ ├── META-INF
│ │ │ ├── persistence.xml
│ │ │ └── services
│ │ │ │ └── javax.enterprise.inject.spi.Extension
│ │ ├── ValidationMessages.properties
│ │ ├── ValidationMessages_fr.properties
│ │ └── log4j2.xml
│ └── webapp
│ │ ├── WEB-INF
│ │ ├── beans.xml
│ │ └── faces-config.xml
│ │ ├── index.html
│ │ ├── newBook.xhtml
│ │ ├── newCD.xhtml
│ │ ├── resources
│ │ ├── demo
│ │ │ └── newItem.xhtml
│ │ └── styles.css
│ │ └── template.xhtml
│ └── test
│ ├── java
│ └── org
│ │ └── agoncal
│ │ └── training
│ │ └── javaee
│ │ ├── AllTests.java
│ │ ├── model
│ │ ├── BookTest.java
│ │ └── CDTest.java
│ │ └── service
│ │ └── ItemServiceTest.java
│ └── resources
│ └── META-INF
│ └── beans.xml
├── README.md
└── pom.xml
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # http://editorconfig.org
4 |
5 | root = true
6 |
7 | [*]
8 | indent_style = space
9 | indent_size = 4
10 | end_of_line = lf
11 | charset = utf-8
12 | trim_trailing_whitespace = true
13 | insert_final_newline = true
14 |
15 | [*.md]
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .idea
3 | *.vpdm
4 | *.log
5 | *.iml
6 | vpproject
7 | target
8 | *.ipr
9 | *.iws
10 | rebel.xml
11 | *DB
12 | *.dat
13 | *.ddl
14 | .classpath
15 | .project
16 | .settings
17 | WebContent
18 | *dummy*.*
19 | *.png
20 |
21 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | os:
2 | - linux
3 | language: java
4 | jdk:
5 | - oraclejdk8
6 | sudo: false
7 | cache:
8 | directories:
9 | - $HOME/.m2
10 | before_install:
11 | - mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
12 | - java -version
13 | script:
14 | - mvn clean test
15 | notifications:
16 | webhooks:
17 | on_success: change # options: [always|never|change] default: always
18 | on_failure: always # options: [always|never|change] default: always
19 | on_start: false # default: false
20 |
--------------------------------------------------------------------------------
/01-CDI/demo01.puml:
--------------------------------------------------------------------------------
1 | @startuml
2 |
3 | hide members
4 |
5 | package "main" {
6 | class MainCDI
7 | }
8 | package "test" {
9 | class ItemServiceTest
10 | }
11 |
12 | package "service" {
13 | interface NumberGenerator
14 | class IsbnGenerator << @ThirteenDigits >>
15 | class IssnGenerator << @EightDigits >>
16 | class MockGenerator << @Alternative >>
17 | class ItemService
18 |
19 | ItemService <.right. NumberGenerator : @Inject
20 | NumberGenerator <|.. IsbnGenerator
21 | NumberGenerator <|.. IssnGenerator
22 | NumberGenerator <|.. MockGenerator
23 | }
24 |
25 | main ..> service
26 | test ..> service
27 |
28 | @enduml
--------------------------------------------------------------------------------
/01-CDI/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/01-CDI/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/01-CDI/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/01-CDI/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/01-CDI/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/01-CDI/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/01-CDI/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.service.ItemServiceTest;
4 | import org.junit.runner.RunWith;
5 | import org.junit.runners.Suite;
6 |
7 | @RunWith(Suite.class)
8 | @Suite.SuiteClasses({
9 | ItemServiceTest.class
10 | })
11 | public class AllTests {
12 | }
13 |
--------------------------------------------------------------------------------
/02-CDI/demo02.puml:
--------------------------------------------------------------------------------
1 | @startuml
2 |
3 | hide members
4 |
5 | package "main" {
6 | class MainCDI
7 | }
8 | package "test" {
9 | class ItemServiceTest
10 | }
11 |
12 | package "service" {
13 | interface NumberGenerator
14 | class IsbnGenerator << @ThirteenDigits >>
15 | class IssnGenerator << @EightDigits >>
16 | class MockGenerator << @Alternative >>
17 | class ItemService
18 |
19 | ItemService <.right. NumberGenerator : @Inject
20 | NumberGenerator <|.. IsbnGenerator
21 | NumberGenerator <|.. IssnGenerator
22 | NumberGenerator <|.. MockGenerator
23 | }
24 |
25 | package "util" {
26 | annotation Loggable #8FBC8F
27 | class LoggingInterceptor << @Loggable >> #8FBC8F
28 | class LoggingProducer #8FBC8F
29 | class CDIDebug << Extension >> #8FBC8F
30 | }
31 |
32 | main ..> service
33 | test ..> service
34 | service ..> util
35 |
36 | @enduml
--------------------------------------------------------------------------------
/02-CDI/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/02-CDI/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/02-CDI/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/02-CDI/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/02-CDI/src/main/java/org/agoncal/training/javaee/util/CDIDebug.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 |
5 | import javax.enterprise.event.Observes;
6 | import javax.enterprise.inject.spi.*;
7 |
8 | public class CDIDebug implements Extension {
9 |
10 | private static final org.apache.logging.log4j.Logger logger = LogManager.getLogger(CDIDebug.class);
11 |
12 | // Before
13 | private void beforeBeanDiscovery(@Observes BeforeBeanDiscovery event) {
14 | logger.debug("&&&&&&&&&&&&&&&&&&&&& CDI Debug &&&&&&&&&&&&&&&&&&&&&");
15 | }
16 |
17 | // Beans
18 | private void processAnnotatedType(@Observes ProcessAnnotatedType event) {
19 | if (event.getAnnotatedType().toString().contains("org.agoncal.training.javaee"))
20 | logger.debug("ProcessAnnotatedType: " + event.getAnnotatedType().toString());
21 | }
22 |
23 | private void afterBeanDiscovery(@Observes AfterDeploymentValidation event, BeanManager beanManager) {
24 | logger.debug("&&&&&&&&&&&&&&&&&&&&& CDI Debug &&&&&&&&&&&&&&&&&&&&&\n");
25 | }
26 | }
--------------------------------------------------------------------------------
/02-CDI/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/02-CDI/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces // TODO Get rid of @Produces and see what happens
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/02-CDI/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/02-CDI/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/02-CDI/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/02-CDI/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.service.ItemServiceTest;
4 | import org.junit.runner.RunWith;
5 | import org.junit.runners.Suite;
6 |
7 | @RunWith(Suite.class)
8 | @Suite.SuiteClasses({
9 | ItemServiceTest.class
10 | })
11 | public class AllTests {
12 | }
13 |
--------------------------------------------------------------------------------
/03-JPA/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/03-JPA/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | // TODO Get rid of the Vetoed and check the CDI debugs logs
2 | @Vetoed package org.agoncal.training.javaee.model;
3 |
4 | import javax.enterprise.inject.Vetoed;
--------------------------------------------------------------------------------
/03-JPA/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/03-JPA/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/03-JPA/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/03-JPA/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/03-JPA/src/main/java/org/agoncal/training/javaee/util/CDIDebug.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 |
5 | import javax.enterprise.event.Observes;
6 | import javax.enterprise.inject.spi.*;
7 |
8 | public class CDIDebug implements Extension {
9 |
10 | private static final org.apache.logging.log4j.Logger logger = LogManager.getLogger(CDIDebug.class);
11 |
12 | // Before
13 | private void beforeBeanDiscovery(@Observes BeforeBeanDiscovery event) {
14 | logger.debug("&&&&&&&&&&&&&&&&&&&&& CDI Debug &&&&&&&&&&&&&&&&&&&&&");
15 | }
16 |
17 | // Beans
18 | private void processAnnotatedType(@Observes ProcessAnnotatedType event) {
19 | if (event.getAnnotatedType().toString().contains("org.agoncal.training.javaee"))
20 | logger.debug("ProcessAnnotatedType: " + event.getAnnotatedType().toString());
21 | }
22 |
23 | private void afterBeanDiscovery(@Observes AfterDeploymentValidation event, BeanManager beanManager) {
24 | logger.debug("&&&&&&&&&&&&&&&&&&&&& CDI Debug &&&&&&&&&&&&&&&&&&&&&\n");
25 | }
26 | }
--------------------------------------------------------------------------------
/03-JPA/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/03-JPA/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/03-JPA/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/03-JPA/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/03-JPA/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/03-JPA/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/03-JPA/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.service.ItemServiceTest;
4 | import org.junit.runner.RunWith;
5 | import org.junit.runners.Suite;
6 |
7 | @RunWith(Suite.class)
8 | @Suite.SuiteClasses({
9 | ItemServiceTest.class
10 | })
11 | public class AllTests {
12 | }
13 |
--------------------------------------------------------------------------------
/04-JPA/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/04-JPA/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/04-JPA/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/04-JPA/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/04-JPA/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/04-JPA/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/04-JPA/src/main/java/org/agoncal/training/javaee/util/CDIDebug.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 |
5 | import javax.enterprise.event.Observes;
6 | import javax.enterprise.inject.spi.*;
7 |
8 | public class CDIDebug implements Extension {
9 |
10 | private static final org.apache.logging.log4j.Logger logger = LogManager.getLogger(CDIDebug.class);
11 |
12 | // Before
13 | private void beforeBeanDiscovery(@Observes BeforeBeanDiscovery event) {
14 | logger.debug("&&&&&&&&&&&&&&&&&&&&& CDI Debug &&&&&&&&&&&&&&&&&&&&&");
15 | }
16 |
17 | // Beans
18 | private void processAnnotatedType(@Observes ProcessAnnotatedType event) {
19 | if (event.getAnnotatedType().toString().contains("org.agoncal.training.javaee"))
20 | logger.debug("ProcessAnnotatedType: " + event.getAnnotatedType().toString());
21 | }
22 |
23 | private void afterBeanDiscovery(@Observes AfterDeploymentValidation event, BeanManager beanManager) {
24 | logger.debug("&&&&&&&&&&&&&&&&&&&&& CDI Debug &&&&&&&&&&&&&&&&&&&&&\n");
25 | }
26 | }
--------------------------------------------------------------------------------
/04-JPA/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/04-JPA/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/04-JPA/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/04-JPA/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/04-JPA/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/04-JPA/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/04-JPA/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.service.ItemServiceTest;
4 | import org.junit.runner.RunWith;
5 | import org.junit.runners.Suite;
6 |
7 | @RunWith(Suite.class)
8 | @Suite.SuiteClasses({
9 | ItemServiceTest.class
10 | })
11 | public class AllTests {
12 | }
13 |
--------------------------------------------------------------------------------
/05-JPA/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/05-JPA/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/05-JPA/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/05-JPA/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/05-JPA/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/05-JPA/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/05-JPA/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/05-JPA/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/05-JPA/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/05-JPA/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/05-JPA/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/05-JPA/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/05-JPA/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.service.ItemServiceTest;
4 | import org.junit.runner.RunWith;
5 | import org.junit.runners.Suite;
6 |
7 | @RunWith(Suite.class)
8 | @Suite.SuiteClasses({
9 | ItemServiceTest.class
10 | })
11 | public class AllTests {
12 | }
13 |
--------------------------------------------------------------------------------
/06-JPA/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/06-JPA/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/06-JPA/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/06-JPA/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/06-JPA/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/06-JPA/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/06-JPA/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/06-JPA/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/06-JPA/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/06-JPA/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/06-JPA/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/06-JPA/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/06-JPA/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.model.*;
4 | import org.agoncal.training.javaee.service.ItemServiceTest;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.Suite;
7 |
8 | @RunWith(Suite.class)
9 | @Suite.SuiteClasses({
10 | BookTest.class,
11 | CDTest.class,
12 | ChapterTest.class,
13 | ItemTest.class,
14 | TrackTest.class,
15 | ItemServiceTest.class
16 | })
17 | public class AllTests {
18 | }
19 |
--------------------------------------------------------------------------------
/07-JPA/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/07-JPA/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/07-JPA/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/07-JPA/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/07-JPA/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/07-JPA/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/07-JPA/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/07-JPA/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/07-JPA/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/07-JPA/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/07-JPA/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/07-JPA/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/07-JPA/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.model.*;
4 | import org.agoncal.training.javaee.service.ItemServiceTest;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.Suite;
7 |
8 | @RunWith(Suite.class)
9 | @Suite.SuiteClasses({
10 | BookTest.class,
11 | CDTest.class,
12 | ChapterTest.class,
13 | ItemTest.class,
14 | TrackTest.class,
15 | ItemServiceTest.class
16 | })
17 | public class AllTests {
18 | }
19 |
--------------------------------------------------------------------------------
/08-JPA/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/08-JPA/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/08-JPA/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/08-JPA/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/08-JPA/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/08-JPA/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/08-JPA/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/08-JPA/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/08-JPA/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/08-JPA/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/08-JPA/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/08-JPA/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/08-JPA/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.model.*;
4 | import org.agoncal.training.javaee.service.ItemServiceTest;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.Suite;
7 |
8 | @RunWith(Suite.class)
9 | @Suite.SuiteClasses({
10 | BookTest.class,
11 | CDTest.class,
12 | ChapterTest.class,
13 | ItemTest.class,
14 | TrackTest.class,
15 | ItemServiceTest.class
16 | })
17 | public class AllTests {
18 | }
19 |
--------------------------------------------------------------------------------
/09-EJB/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/09-EJB/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/09-EJB/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/09-EJB/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/09-EJB/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/09-EJB/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/09-EJB/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/09-EJB/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/09-EJB/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/09-EJB/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/09-EJB/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/09-EJB/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/09-EJB/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/09-EJB/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.service.ItemServiceTest;
4 | import org.junit.runner.RunWith;
5 | import org.junit.runners.Suite;
6 |
7 | @RunWith(Suite.class)
8 | @Suite.SuiteClasses({
9 | ItemServiceTest.class
10 | })
11 | public class AllTests {
12 | }
13 |
--------------------------------------------------------------------------------
/10-EJB/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/10-EJB/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/10-EJB/src/main/java/org/agoncal/training/javaee/service/DatabaseProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Produces;
4 | import javax.persistence.EntityManager;
5 | import javax.persistence.PersistenceContext;
6 |
7 | public class DatabaseProducer {
8 |
9 | @Produces
10 | @PersistenceContext(unitName = "trainingPU")
11 | private EntityManager em;
12 | }
13 |
--------------------------------------------------------------------------------
/10-EJB/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/10-EJB/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/10-EJB/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/10-EJB/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/10-EJB/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/10-EJB/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/10-EJB/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/10-EJB/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/10-EJB/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/10-EJB/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/10-EJB/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/10-EJB/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.service.ItemServiceTest;
4 | import org.junit.runner.RunWith;
5 | import org.junit.runners.Suite;
6 |
7 | @RunWith(Suite.class)
8 | @Suite.SuiteClasses({
9 | ItemServiceTest.class
10 | })
11 | public class AllTests {
12 | }
13 |
--------------------------------------------------------------------------------
/11-JTA/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/11-JTA/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/11-JTA/src/main/java/org/agoncal/training/javaee/service/DatabaseProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Produces;
4 | import javax.persistence.EntityManager;
5 | import javax.persistence.PersistenceContext;
6 |
7 | public class DatabaseProducer {
8 |
9 | @Produces
10 | @PersistenceContext(unitName = "trainingPU")
11 | private EntityManager em;
12 | }
13 |
--------------------------------------------------------------------------------
/11-JTA/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/11-JTA/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/11-JTA/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/11-JTA/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/11-JTA/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/11-JTA/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/11-JTA/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/11-JTA/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/11-JTA/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/11-JTA/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/11-JTA/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.service.ItemServiceTest;
4 | import org.junit.runner.RunWith;
5 | import org.junit.runners.Suite;
6 |
7 | @RunWith(Suite.class)
8 | @Suite.SuiteClasses({
9 | ItemServiceTest.class
10 | })
11 | public class AllTests {
12 | }
13 |
--------------------------------------------------------------------------------
/12-BeanValidation/README.md:
--------------------------------------------------------------------------------
1 | # Bean Validation
2 |
3 | ### Internationalized Messages
4 | `-Duser.language=en -Duser.country=EN`
5 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/java/org/agoncal/training/javaee/constraints/MusicGenre.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import javax.validation.ReportAsSingleViolation;
6 | import javax.validation.constraints.Pattern;
7 | import javax.validation.constraints.Size;
8 | import java.lang.annotation.*;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Pattern(regexp = "[A-Z][a-z]{1,}")
17 | @Size(min = 3, max = 20)
18 | @ReportAsSingleViolation
19 | @Constraint(validatedBy = {})
20 | @Documented
21 | @Target({ElementType.METHOD, ElementType.FIELD})
22 | @Retention(RetentionPolicy.RUNTIME)
23 | public @interface MusicGenre {
24 |
25 | String message() default "{org.agoncal.training.javaee.constraints.MusicGenre.message}";
26 |
27 | Class extends Payload>[] payload() default {};
28 |
29 | Class>[] groups() default {};
30 | }
31 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/java/org/agoncal/training/javaee/service/DatabaseProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Produces;
4 | import javax.persistence.EntityManager;
5 | import javax.persistence.PersistenceContext;
6 |
7 | public class DatabaseProducer {
8 |
9 | @Produces
10 | @PersistenceContext(unitName = "trainingPU")
11 | private EntityManager em;
12 | }
13 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/resources/ValidationMessages.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Wrong music genre
2 |
3 | title=Title length should be between {min} and {max}
4 | music.company=Wrong music company
5 | number.cds=No more than {value} CDs
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/resources/ValidationMessages_fr.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Genre musical erron\u00E9
2 |
3 | title=La taille du titre doit \u00EAtre compris entre {min} et {max}
4 | music.company=Soci\u00E9t\u00E9 erron\u00E9e
5 | number.cds={value} CDs maximum
--------------------------------------------------------------------------------
/12-BeanValidation/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/12-BeanValidation/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.model.*;
4 | import org.agoncal.training.javaee.service.ItemServiceTest;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.Suite;
7 |
8 | @RunWith(Suite.class)
9 | @Suite.SuiteClasses({
10 | BookTest.class,
11 | CDTest.class,
12 | ItemServiceTest.class
13 | })
14 | public class AllTests {
15 | }
16 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDates.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import java.lang.annotation.Documented;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.Target;
8 |
9 | import static java.lang.annotation.ElementType.TYPE;
10 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
11 |
12 | /**
13 | * @author Antonio Goncalves
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Target(TYPE)
18 | @Retention(RUNTIME)
19 | @Documented
20 | @Constraint(validatedBy = ChronologicalDatesValidator.class)
21 | public @interface ChronologicalDates {
22 |
23 | String message() default "{org.agoncal.training.javaee.constraints.ChronologicalDates.message}";
24 |
25 | Class>[] groups() default {};
26 |
27 | Class extends Payload>[] payload() default {};
28 | }
29 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDatesValidator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import org.agoncal.training.javaee.model.Book;
4 |
5 | import javax.validation.ConstraintValidator;
6 | import javax.validation.ConstraintValidatorContext;
7 |
8 | /**
9 | * @author Antonio Goncalves
10 | * Training - Beginning with The Java EE 7 Platform
11 | * http://www.antoniogoncalves.org
12 | * --
13 | */
14 | public class ChronologicalDatesValidator implements ConstraintValidator {
15 |
16 | @Override
17 | public void initialize(ChronologicalDates constraintAnnotation) {
18 | }
19 |
20 | @Override
21 | public boolean isValid(Book book, ConstraintValidatorContext context) {
22 | if (book.getEarlyAccessDate() == null || book.getPublicationDate() == null)
23 | return true;
24 |
25 | if (book.getEarlyAccessDate().getTime() < book.getPublicationDate().getTime()) {
26 | return true;
27 | }
28 | return false;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/constraints/MusicGenre.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import javax.validation.ReportAsSingleViolation;
6 | import javax.validation.constraints.Pattern;
7 | import javax.validation.constraints.Size;
8 | import java.lang.annotation.*;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Pattern(regexp = "[A-Z][a-z]{1,}")
17 | @Size(min = 3, max = 20)
18 | @ReportAsSingleViolation
19 | @Constraint(validatedBy = {})
20 | @Documented
21 | @Target({ElementType.METHOD, ElementType.FIELD})
22 | @Retention(RetentionPolicy.RUNTIME)
23 | public @interface MusicGenre {
24 |
25 | String message() default "{org.agoncal.training.javaee.constraints.MusicGenre.message}";
26 |
27 | Class extends Payload>[] payload() default {};
28 |
29 | Class>[] groups() default {};
30 | }
31 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/service/DatabaseProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Produces;
4 | import javax.persistence.EntityManager;
5 | import javax.persistence.PersistenceContext;
6 |
7 | public class DatabaseProducer {
8 |
9 | @Produces
10 | @PersistenceContext(unitName = "trainingPU")
11 | private EntityManager em;
12 | }
13 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/resources/META-INF/orm.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/resources/ValidationMessages.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Wrong music genre
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Dates have to be in chronological order
3 |
4 | title=Title length should be between {min} and {max}
5 | music.company=Wrong music company
6 | number.cds=No more than {value} CDs
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/resources/ValidationMessages_fr.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Genre musical erron\u00E9
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Les dates doivent \u00EAtre dans l'ordre chronologique
3 |
4 | title=La taille du titre doit \u00EAtre compris entre {min} et {max}
5 | music.company=Soci\u00E9t\u00E9 erron\u00E9e
6 | number.cds={value} CDs maximum
--------------------------------------------------------------------------------
/13-BeanValidation/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/13-BeanValidation/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.model.*;
4 | import org.agoncal.training.javaee.service.ItemServiceTest;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.Suite;
7 |
8 | @RunWith(Suite.class)
9 | @Suite.SuiteClasses({
10 | BookTest.class,
11 | CDTest.class,
12 | ItemServiceTest.class
13 | })
14 | public class AllTests {
15 | }
16 |
--------------------------------------------------------------------------------
/14-JSF/deployGlassFish.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | asadmin deploy --force target/cdbookstore.war
3 |
--------------------------------------------------------------------------------
/14-JSF/deployWildFly.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | jboss-cli.sh -c "deploy --force target/cdbookstore.war"
3 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDates.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import java.lang.annotation.Documented;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.Target;
8 |
9 | import static java.lang.annotation.ElementType.TYPE;
10 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
11 |
12 | /**
13 | * @author Antonio Goncalves
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Target(TYPE)
18 | @Retention(RUNTIME)
19 | @Documented
20 | @Constraint(validatedBy = ChronologicalDatesValidator.class)
21 | public @interface ChronologicalDates {
22 |
23 | String message() default "{org.agoncal.training.javaee.constraints.ChronologicalDates.message}";
24 |
25 | Class>[] groups() default {};
26 |
27 | Class extends Payload>[] payload() default {};
28 | }
29 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDatesValidator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import org.agoncal.training.javaee.model.Book;
4 |
5 | import javax.validation.ConstraintValidator;
6 | import javax.validation.ConstraintValidatorContext;
7 |
8 | /**
9 | * @author Antonio Goncalves
10 | * Training - Beginning with The Java EE 7 Platform
11 | * http://www.antoniogoncalves.org
12 | * --
13 | */
14 | public class ChronologicalDatesValidator implements ConstraintValidator {
15 |
16 | @Override
17 | public void initialize(ChronologicalDates constraintAnnotation) {
18 | }
19 |
20 | @Override
21 | public boolean isValid(Book book, ConstraintValidatorContext context) {
22 | if (book.getEarlyAccessDate() == null || book.getPublicationDate() == null)
23 | return true;
24 |
25 | if (book.getEarlyAccessDate().getTime() < book.getPublicationDate().getTime()) {
26 | return true;
27 | }
28 | return false;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/constraints/MusicGenre.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import javax.validation.ReportAsSingleViolation;
6 | import javax.validation.constraints.Pattern;
7 | import javax.validation.constraints.Size;
8 | import java.lang.annotation.*;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Pattern(regexp = "[A-Z][a-z]{1,}")
17 | @Size(min = 3, max = 20)
18 | @ReportAsSingleViolation
19 | @Constraint(validatedBy = {})
20 | @Documented
21 | @Target({ElementType.METHOD, ElementType.FIELD})
22 | @Retention(RetentionPolicy.RUNTIME)
23 | public @interface MusicGenre {
24 |
25 | String message() default "{org.agoncal.training.javaee.constraints.MusicGenre.message}";
26 |
27 | Class extends Payload>[] payload() default {};
28 |
29 | Class>[] groups() default {};
30 | }
31 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/service/DatabaseProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Produces;
4 | import javax.persistence.EntityManager;
5 | import javax.persistence.PersistenceContext;
6 |
7 | public class DatabaseProducer {
8 |
9 | @Produces
10 | @PersistenceContext(unitName = "trainingPU")
11 | private EntityManager em;
12 | }
13 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/14-JSF/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/14-JSF/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/14-JSF/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/14-JSF/src/main/resources/ValidationMessages.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Wrong music genre
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Dates have to be in chronological order
3 |
4 | title=Title length should be between {min} and {max}
5 | music.company=Wrong music company
6 | number.cds=No more than {value} CDs
--------------------------------------------------------------------------------
/14-JSF/src/main/resources/ValidationMessages_fr.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Genre musical erron\u00E9
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Les dates doivent \u00EAtre dans l'ordre chronologique
3 |
4 | title=La taille du titre doit \u00EAtre compris entre {min} et {max}
5 | music.company=Soci\u00E9t\u00E9 erron\u00E9e
6 | number.cds={value} CDs maximum
--------------------------------------------------------------------------------
/14-JSF/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/14-JSF/src/main/webapp/WEB-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/14-JSF/src/main/webapp/WEB-INF/faces-config.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/14-JSF/src/main/webapp/index.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 | Redirect...
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/14-JSF/src/main/webapp/resources/book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agoncal/agoncal-training-javaee7/ec0a4cc6b2d8359cd4bf8f499ee2b5240635a1a9/14-JSF/src/main/webapp/resources/book.png
--------------------------------------------------------------------------------
/14-JSF/src/main/webapp/resources/demo/newItem.xhtml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/14-JSF/src/main/webapp/resources/musiccd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agoncal/agoncal-training-javaee7/ec0a4cc6b2d8359cd4bf8f499ee2b5240635a1a9/14-JSF/src/main/webapp/resources/musiccd.png
--------------------------------------------------------------------------------
/14-JSF/src/main/webapp/resources/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | color: #4f6b72;
3 | background: #E6EAE9;
4 | font-family: Arial, Helvetica, sans-serif;
5 | }
6 |
7 | label {
8 | width: 150px;
9 | float: left;
10 | text-align: right;
11 | margin-right: 0.5em;
12 | display: block;
13 | }
14 |
15 | input {
16 | width: 200px;
17 | }
18 |
19 | textarea {
20 | width: 200px;
21 | height: 80px;
22 | }
23 |
24 | .oddRow {
25 |
26 | }
27 |
28 | .evenRow {
29 | background-color: #c6d0cd;
30 | }
--------------------------------------------------------------------------------
/14-JSF/src/main/webapp/template.xhtml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
10 | Default title
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Default title
23 |
24 |
25 |
26 | Default content
27 |
28 |
29 | Training Java EE 7 - Lab15 - Beginning with The Java EE 7 Platform
30 |
31 |
--------------------------------------------------------------------------------
/14-JSF/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.model.*;
4 | import org.agoncal.training.javaee.service.ItemServiceTest;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.Suite;
7 |
8 | @RunWith(Suite.class)
9 | @Suite.SuiteClasses({
10 | BookTest.class,
11 | CDTest.class,
12 | ItemServiceTest.class
13 | })
14 | public class AllTests {
15 | }
16 |
--------------------------------------------------------------------------------
/14-JSF/src/test/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/15-JSF/deployGlassFish.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | asadmin deploy --force target/cdbookstore.war
3 |
--------------------------------------------------------------------------------
/15-JSF/deployWildFly.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | jboss-cli.sh -c "deploy --force target/cdbookstore.war"
3 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDates.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import java.lang.annotation.Documented;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.Target;
8 |
9 | import static java.lang.annotation.ElementType.TYPE;
10 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
11 |
12 | /**
13 | * @author Antonio Goncalves
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Target(TYPE)
18 | @Retention(RUNTIME)
19 | @Documented
20 | @Constraint(validatedBy = ChronologicalDatesValidator.class)
21 | public @interface ChronologicalDates {
22 |
23 | String message() default "{org.agoncal.training.javaee.constraints.ChronologicalDates.message}";
24 |
25 | Class>[] groups() default {};
26 |
27 | Class extends Payload>[] payload() default {};
28 | }
29 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDatesValidator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import org.agoncal.training.javaee.model.Book;
4 |
5 | import javax.validation.ConstraintValidator;
6 | import javax.validation.ConstraintValidatorContext;
7 |
8 | /**
9 | * @author Antonio Goncalves
10 | * Training - Beginning with The Java EE 7 Platform
11 | * http://www.antoniogoncalves.org
12 | * --
13 | */
14 | public class ChronologicalDatesValidator implements ConstraintValidator {
15 |
16 | @Override
17 | public void initialize(ChronologicalDates constraintAnnotation) {
18 | }
19 |
20 | @Override
21 | public boolean isValid(Book book, ConstraintValidatorContext context) {
22 | if (book.getEarlyAccessDate() == null || book.getPublicationDate() == null)
23 | return true;
24 |
25 | if (book.getEarlyAccessDate().getTime() < book.getPublicationDate().getTime()) {
26 | return true;
27 | }
28 | return false;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/constraints/MusicGenre.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import javax.validation.ReportAsSingleViolation;
6 | import javax.validation.constraints.Pattern;
7 | import javax.validation.constraints.Size;
8 | import java.lang.annotation.*;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Pattern(regexp = "[A-Z][a-z]{1,}")
17 | @Size(min = 3, max = 20)
18 | @ReportAsSingleViolation
19 | @Constraint(validatedBy = {})
20 | @Documented
21 | @Target({ElementType.METHOD, ElementType.FIELD})
22 | @Retention(RetentionPolicy.RUNTIME)
23 | public @interface MusicGenre {
24 |
25 | String message() default "{org.agoncal.training.javaee.constraints.MusicGenre.message}";
26 |
27 | Class extends Payload>[] payload() default {};
28 |
29 | Class>[] groups() default {};
30 | }
31 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/service/DatabaseProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Produces;
4 | import javax.persistence.EntityManager;
5 | import javax.persistence.PersistenceContext;
6 |
7 | public class DatabaseProducer {
8 |
9 | @Produces
10 | @PersistenceContext(unitName = "trainingPU")
11 | private EntityManager em;
12 | }
13 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/15-JSF/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/15-JSF/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/15-JSF/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/15-JSF/src/main/resources/ValidationMessages.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Wrong music genre
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Dates have to be in chronological order
3 |
4 | title=Title length should be between {min} and {max}
5 | music.company=Wrong music company
6 | number.cds=No more than {value} CDs
--------------------------------------------------------------------------------
/15-JSF/src/main/resources/ValidationMessages_fr.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Genre musical erron\u00E9
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Les dates doivent \u00EAtre dans l'ordre chronologique
3 |
4 | title=La taille du titre doit \u00EAtre compris entre {min} et {max}
5 | music.company=Soci\u00E9t\u00E9 erron\u00E9e
6 | number.cds={value} CDs maximum
--------------------------------------------------------------------------------
/15-JSF/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/15-JSF/src/main/webapp/WEB-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/15-JSF/src/main/webapp/WEB-INF/faces-config.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/15-JSF/src/main/webapp/index.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 | Redirect...
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/15-JSF/src/main/webapp/resources/book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agoncal/agoncal-training-javaee7/ec0a4cc6b2d8359cd4bf8f499ee2b5240635a1a9/15-JSF/src/main/webapp/resources/book.png
--------------------------------------------------------------------------------
/15-JSF/src/main/webapp/resources/demo/newItem.xhtml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/15-JSF/src/main/webapp/resources/musiccd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agoncal/agoncal-training-javaee7/ec0a4cc6b2d8359cd4bf8f499ee2b5240635a1a9/15-JSF/src/main/webapp/resources/musiccd.png
--------------------------------------------------------------------------------
/15-JSF/src/main/webapp/resources/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | color: #4f6b72;
3 | background: #E6EAE9;
4 | font-family: Arial, Helvetica, sans-serif;
5 | }
6 |
7 | label {
8 | width: 150px;
9 | float: left;
10 | text-align: right;
11 | margin-right: 0.5em;
12 | display: block;
13 | }
14 |
15 | input {
16 | width: 200px;
17 | }
18 |
19 | textarea {
20 | width: 200px;
21 | height: 80px;
22 | }
23 |
24 | .oddRow {
25 |
26 | }
27 |
28 | .evenRow {
29 | background-color: #c6d0cd;
30 | }
--------------------------------------------------------------------------------
/15-JSF/src/main/webapp/template.xhtml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
10 | Default title
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Default title
23 |
24 |
25 |
26 |
27 | Default content
28 |
29 |
30 | Training Java EE 7 - Lab15 - Beginning with The Java EE 7 Platform
31 |
32 |
--------------------------------------------------------------------------------
/15-JSF/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.model.*;
4 | import org.agoncal.training.javaee.service.ItemServiceTest;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.Suite;
7 |
8 | @RunWith(Suite.class)
9 | @Suite.SuiteClasses({
10 | BookTest.class,
11 | CDTest.class,
12 | ItemServiceTest.class
13 | })
14 | public class AllTests {
15 | }
16 |
--------------------------------------------------------------------------------
/15-JSF/src/test/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/16-JAXRS/deployGlassFish.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | asadmin deploy --force target/cdbookstore.war
3 |
--------------------------------------------------------------------------------
/16-JAXRS/deployWildFly.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | jboss-cli.sh -c "deploy --force target/cdbookstore.war"
3 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDates.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import java.lang.annotation.Documented;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.Target;
8 |
9 | import static java.lang.annotation.ElementType.TYPE;
10 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
11 |
12 | /**
13 | * @author Antonio Goncalves
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Target(TYPE)
18 | @Retention(RUNTIME)
19 | @Documented
20 | @Constraint(validatedBy = ChronologicalDatesValidator.class)
21 | public @interface ChronologicalDates {
22 |
23 | String message() default "{org.agoncal.training.javaee.constraints.ChronologicalDates.message}";
24 |
25 | Class>[] groups() default {};
26 |
27 | Class extends Payload>[] payload() default {};
28 | }
29 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDatesValidator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import org.agoncal.training.javaee.model.Book;
4 |
5 | import javax.validation.ConstraintValidator;
6 | import javax.validation.ConstraintValidatorContext;
7 |
8 | /**
9 | * @author Antonio Goncalves
10 | * Training - Beginning with The Java EE 7 Platform
11 | * http://www.antoniogoncalves.org
12 | * --
13 | */
14 | public class ChronologicalDatesValidator implements ConstraintValidator {
15 |
16 | @Override
17 | public void initialize(ChronologicalDates constraintAnnotation) {
18 | }
19 |
20 | @Override
21 | public boolean isValid(Book book, ConstraintValidatorContext context) {
22 | if (book.getEarlyAccessDate() == null || book.getPublicationDate() == null)
23 | return true;
24 |
25 | if (book.getEarlyAccessDate().getTime() < book.getPublicationDate().getTime()) {
26 | return true;
27 | }
28 | return false;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/constraints/MusicGenre.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import javax.validation.ReportAsSingleViolation;
6 | import javax.validation.constraints.Pattern;
7 | import javax.validation.constraints.Size;
8 | import java.lang.annotation.*;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Pattern(regexp = "[A-Z][a-z]{1,}")
17 | @Size(min = 3, max = 20)
18 | @ReportAsSingleViolation
19 | @Constraint(validatedBy = {})
20 | @Documented
21 | @Target({ElementType.METHOD, ElementType.FIELD})
22 | @Retention(RetentionPolicy.RUNTIME)
23 | public @interface MusicGenre {
24 |
25 | String message() default "{org.agoncal.training.javaee.constraints.MusicGenre.message}";
26 |
27 | Class extends Payload>[] payload() default {};
28 |
29 | Class>[] groups() default {};
30 | }
31 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/rest/ApplicationConfig.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.rest;
2 |
3 | import javax.ws.rs.ApplicationPath;
4 | import javax.ws.rs.core.Application;
5 | import java.util.HashSet;
6 | import java.util.Set;
7 |
8 | @ApplicationPath("/rest")
9 | public class ApplicationConfig extends Application {
10 |
11 | // ======================================
12 | // = Business methods =
13 | // ======================================
14 |
15 | @Override
16 | public Set> getClasses() {
17 | Set> classes = new HashSet<>();
18 | classes.add(ItemRest.class);
19 | return classes;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/service/DatabaseProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Produces;
4 | import javax.persistence.EntityManager;
5 | import javax.persistence.PersistenceContext;
6 |
7 | public class DatabaseProducer {
8 |
9 | @Produces
10 | @PersistenceContext(unitName = "trainingPU")
11 | private EntityManager em;
12 | }
13 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/16-JAXRS/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/16-JAXRS/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/16-JAXRS/src/main/resources/ValidationMessages.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Wrong music genre
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Dates have to be in chronological order
3 |
4 | title=Title length should be between {min} and {max}
5 | music.company=Wrong music company
6 | number.cds=No more than {value} CDs
--------------------------------------------------------------------------------
/16-JAXRS/src/main/resources/ValidationMessages_fr.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Genre musical erron\u00E9
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Les dates doivent \u00EAtre dans l'ordre chronologique
3 |
4 | title=La taille du titre doit \u00EAtre compris entre {min} et {max}
5 | music.company=Soci\u00E9t\u00E9 erron\u00E9e
6 | number.cds={value} CDs maximum
--------------------------------------------------------------------------------
/16-JAXRS/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/webapp/WEB-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/webapp/WEB-INF/faces-config.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/webapp/index.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 | Redirect...
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/webapp/resources/book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agoncal/agoncal-training-javaee7/ec0a4cc6b2d8359cd4bf8f499ee2b5240635a1a9/16-JAXRS/src/main/webapp/resources/book.png
--------------------------------------------------------------------------------
/16-JAXRS/src/main/webapp/resources/demo/newItem.xhtml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/16-JAXRS/src/main/webapp/resources/musiccd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/agoncal/agoncal-training-javaee7/ec0a4cc6b2d8359cd4bf8f499ee2b5240635a1a9/16-JAXRS/src/main/webapp/resources/musiccd.png
--------------------------------------------------------------------------------
/16-JAXRS/src/main/webapp/resources/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | color: #4f6b72;
3 | background: #E6EAE9;
4 | font-family: Arial, Helvetica, sans-serif;
5 | }
6 |
7 | label {
8 | width: 150px;
9 | float: left;
10 | text-align: right;
11 | margin-right: 0.5em;
12 | display: block;
13 | }
14 |
15 | input {
16 | width: 200px;
17 | }
18 |
19 | textarea {
20 | width: 200px;
21 | height: 80px;
22 | }
23 |
24 | .oddRow {
25 |
26 | }
27 |
28 | .evenRow {
29 | background-color: #c6d0cd;
30 | }
--------------------------------------------------------------------------------
/16-JAXRS/src/main/webapp/template.xhtml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
10 | Default title
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | Default title
23 |
24 |
25 |
26 |
27 | Default content
28 |
29 |
30 | Training Java EE 7 - Lab16 - Beginning with The Java EE 7 Platform
31 |
32 |
--------------------------------------------------------------------------------
/16-JAXRS/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.model.*;
4 | import org.agoncal.training.javaee.service.ItemServiceTest;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.Suite;
7 |
8 | @RunWith(Suite.class)
9 | @Suite.SuiteClasses({
10 | BookTest.class,
11 | CDTest.class,
12 | ItemServiceTest.class
13 | })
14 | public class AllTests {
15 | }
16 |
--------------------------------------------------------------------------------
/16-JAXRS/src/test/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/17-JAXRS/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/18-SOAP/README.md:
--------------------------------------------------------------------------------
1 | # SOAP
2 |
3 | ### Generate WSDL from Java code
4 | `mvn clean compile jaxws:wsgen`
5 |
6 | ### Generated artifacts (under target/generated-sources)
7 |
8 | ├── wsdl
9 | │ ├── ItemSoapService.wsdl
10 | │ └── ItemSoapService_schema1.xsd
11 | └── wsgen
12 | └── org
13 | └── agoncal
14 | └── training
15 | └── javaee
16 | └── soap
17 | └── jaxws
18 | ├── CreateBook.java
19 | ├── CreateBookResponse.java
20 | ├── FindAllBooks.java
21 | ├── FindAllBooksResponse.java
22 | ├── FindBook.java
23 | ├── FindBookResponse.java
24 | ├── GenerateNumber.java
25 | ├── GenerateNumberResponse.java
26 | └── RemoveBook.java
27 |
--------------------------------------------------------------------------------
/18-SOAP/deployGlassFish.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | asadmin deploy --force target/cdbookstore.war
3 |
--------------------------------------------------------------------------------
/18-SOAP/deployWildFly.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | jboss-cli.sh -c "deploy --force target/cdbookstore.war"
3 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDates.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import java.lang.annotation.Documented;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.Target;
8 |
9 | import static java.lang.annotation.ElementType.TYPE;
10 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
11 |
12 | /**
13 | * @author Antonio Goncalves
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Target(TYPE)
18 | @Retention(RUNTIME)
19 | @Documented
20 | @Constraint(validatedBy = ChronologicalDatesValidator.class)
21 | public @interface ChronologicalDates {
22 |
23 | String message() default "{org.agoncal.training.javaee.constraints.ChronologicalDates.message}";
24 |
25 | Class>[] groups() default {};
26 |
27 | Class extends Payload>[] payload() default {};
28 | }
29 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDatesValidator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import org.agoncal.training.javaee.model.Book;
4 |
5 | import javax.validation.ConstraintValidator;
6 | import javax.validation.ConstraintValidatorContext;
7 |
8 | /**
9 | * @author Antonio Goncalves
10 | * Training - Beginning with The Java EE 7 Platform
11 | * http://www.antoniogoncalves.org
12 | * --
13 | */
14 | public class ChronologicalDatesValidator implements ConstraintValidator {
15 |
16 | @Override
17 | public void initialize(ChronologicalDates constraintAnnotation) {
18 | }
19 |
20 | @Override
21 | public boolean isValid(Book book, ConstraintValidatorContext context) {
22 | if (book.getEarlyAccessDate() == null || book.getPublicationDate() == null)
23 | return true;
24 |
25 | if (book.getEarlyAccessDate().getTime() < book.getPublicationDate().getTime()) {
26 | return true;
27 | }
28 | return false;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/constraints/MusicGenre.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import javax.validation.ReportAsSingleViolation;
6 | import javax.validation.constraints.Pattern;
7 | import javax.validation.constraints.Size;
8 | import java.lang.annotation.*;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Pattern(regexp = "[A-Z][a-z]{1,}")
17 | @Size(min = 3, max = 20)
18 | @ReportAsSingleViolation
19 | @Constraint(validatedBy = {})
20 | @Documented
21 | @Target({ElementType.METHOD, ElementType.FIELD})
22 | @Retention(RetentionPolicy.RUNTIME)
23 | public @interface MusicGenre {
24 |
25 | String message() default "{org.agoncal.training.javaee.constraints.MusicGenre.message}";
26 |
27 | Class extends Payload>[] payload() default {};
28 |
29 | Class>[] groups() default {};
30 | }
31 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/rest/ApplicationConfig.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.rest;
2 |
3 | import javax.ws.rs.ApplicationPath;
4 | import javax.ws.rs.core.Application;
5 | import java.util.HashSet;
6 | import java.util.Set;
7 |
8 | @ApplicationPath("/rest")
9 | public class ApplicationConfig extends Application {
10 |
11 | // ======================================
12 | // = Business methods =
13 | // ======================================
14 |
15 | @Override
16 | public Set> getClasses() {
17 | Set> classes = new HashSet<>();
18 | classes.add(ItemRest.class);
19 | return classes;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/service/DatabaseProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Produces;
4 | import javax.persistence.EntityManager;
5 | import javax.persistence.PersistenceContext;
6 |
7 | public class DatabaseProducer {
8 |
9 | @Produces
10 | @PersistenceContext(unitName = "trainingPU")
11 | private EntityManager em;
12 | }
13 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/18-SOAP/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/18-SOAP/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/18-SOAP/src/main/resources/ValidationMessages.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Wrong music genre
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Dates have to be in chronological order
3 |
4 | title=Title length should be between {min} and {max}
5 | music.company=Wrong music company
6 | number.cds=No more than {value} CDs
--------------------------------------------------------------------------------
/18-SOAP/src/main/resources/ValidationMessages_fr.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Genre musical erron\u00E9
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Les dates doivent \u00EAtre dans l'ordre chronologique
3 |
4 | title=La taille du titre doit \u00EAtre compris entre {min} et {max}
5 | music.company=Soci\u00E9t\u00E9 erron\u00E9e
6 | number.cds={value} CDs maximum
--------------------------------------------------------------------------------
/18-SOAP/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/webapp/WEB-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/webapp/WEB-INF/faces-config.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/webapp/index.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 | Redirect...
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/webapp/resources/demo/newItem.xhtml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/18-SOAP/src/main/webapp/resources/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | color: #4f6b72;
3 | background: #E6EAE9;
4 | font-family: Arial, Helvetica, sans-serif;
5 | }
6 |
7 | label {
8 | width: 150px;
9 | float: left;
10 | text-align: right;
11 | margin-right: 0.5em;
12 | display: block;
13 | }
14 |
15 | input {
16 | width: 200px;
17 | }
18 |
19 | textarea {
20 | width: 200px;
21 | height: 80px;
22 | }
23 |
24 | .oddRow {
25 |
26 | }
27 |
28 | .evenRow {
29 | background-color: #c6d0cd;
30 | }
--------------------------------------------------------------------------------
/18-SOAP/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.model.*;
4 | import org.agoncal.training.javaee.service.ItemServiceTest;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.Suite;
7 |
8 | @RunWith(Suite.class)
9 | @Suite.SuiteClasses({
10 | BookTest.class,
11 | CDTest.class,
12 | ItemServiceTest.class
13 | })
14 | public class AllTests {
15 | }
16 |
--------------------------------------------------------------------------------
/18-SOAP/src/test/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/19-SOAP/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/20-JMS/deployGlassFish.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | asadmin deploy --force target/cdbookstore.war
3 |
--------------------------------------------------------------------------------
/20-JMS/deployWildFly.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | jboss-cli.sh -c "deploy --force target/cdbookstore.war"
3 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDates.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import java.lang.annotation.Documented;
6 | import java.lang.annotation.Retention;
7 | import java.lang.annotation.Target;
8 |
9 | import static java.lang.annotation.ElementType.TYPE;
10 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
11 |
12 | /**
13 | * @author Antonio Goncalves
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Target(TYPE)
18 | @Retention(RUNTIME)
19 | @Documented
20 | @Constraint(validatedBy = ChronologicalDatesValidator.class)
21 | public @interface ChronologicalDates {
22 |
23 | String message() default "{org.agoncal.training.javaee.constraints.ChronologicalDates.message}";
24 |
25 | Class>[] groups() default {};
26 |
27 | Class extends Payload>[] payload() default {};
28 | }
29 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/constraints/ChronologicalDatesValidator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import org.agoncal.training.javaee.model.Book;
4 |
5 | import javax.validation.ConstraintValidator;
6 | import javax.validation.ConstraintValidatorContext;
7 |
8 | /**
9 | * @author Antonio Goncalves
10 | * Training - Beginning with The Java EE 7 Platform
11 | * http://www.antoniogoncalves.org
12 | * --
13 | */
14 | public class ChronologicalDatesValidator implements ConstraintValidator {
15 |
16 | @Override
17 | public void initialize(ChronologicalDates constraintAnnotation) {
18 | }
19 |
20 | @Override
21 | public boolean isValid(Book book, ConstraintValidatorContext context) {
22 | if (book.getEarlyAccessDate() == null || book.getPublicationDate() == null)
23 | return true;
24 |
25 | if (book.getEarlyAccessDate().getTime() < book.getPublicationDate().getTime()) {
26 | return true;
27 | }
28 | return false;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/constraints/MusicGenre.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.constraints;
2 |
3 | import javax.validation.Constraint;
4 | import javax.validation.Payload;
5 | import javax.validation.ReportAsSingleViolation;
6 | import javax.validation.constraints.Pattern;
7 | import javax.validation.constraints.Size;
8 | import java.lang.annotation.*;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Pattern(regexp = "[A-Z][a-z]{1,}")
17 | @Size(min = 3, max = 20)
18 | @ReportAsSingleViolation
19 | @Constraint(validatedBy = {})
20 | @Documented
21 | @Target({ElementType.METHOD, ElementType.FIELD})
22 | @Retention(RetentionPolicy.RUNTIME)
23 | public @interface MusicGenre {
24 |
25 | String message() default "{org.agoncal.training.javaee.constraints.MusicGenre.message}";
26 |
27 | Class extends Payload>[] payload() default {};
28 |
29 | Class>[] groups() default {};
30 | }
31 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/model/Language.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.model;
2 |
3 | /**
4 | * @author Antonio Goncalves
5 | * Training - Beginning with The Java EE 7 Platform
6 | * http://www.antoniogoncalves.org
7 | * --
8 | */
9 | public enum Language {
10 | FRENCH,
11 | ENGLISH,
12 | SPANISH,
13 | PORTUGUESE,
14 | ITALIAN,
15 | FINISH,
16 | DEUTSCH,
17 | RUSSIAN
18 | }
19 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/model/package-info.java:
--------------------------------------------------------------------------------
1 | @Vetoed package org.agoncal.training.javaee.model;
2 |
3 | import javax.enterprise.inject.Vetoed;
4 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/rest/ApplicationConfig.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.rest;
2 |
3 | import javax.ws.rs.ApplicationPath;
4 | import javax.ws.rs.core.Application;
5 | import java.util.HashSet;
6 | import java.util.Set;
7 |
8 | @ApplicationPath("/rest")
9 | public class ApplicationConfig extends Application {
10 |
11 | // ======================================
12 | // = Business methods =
13 | // ======================================
14 |
15 | @Override
16 | public Set> getClasses() {
17 | Set> classes = new HashSet<>();
18 | classes.add(ItemRest.class);
19 | return classes;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/service/DatabaseProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Produces;
4 | import javax.persistence.EntityManager;
5 | import javax.persistence.PersistenceContext;
6 |
7 | public class DatabaseProducer {
8 |
9 | @Produces
10 | @PersistenceContext(unitName = "trainingPU")
11 | private EntityManager em;
12 | }
13 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/service/EightDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | import javax.inject.Qualifier;
5 | import java.lang.annotation.Retention;
6 | import java.lang.annotation.Target;
7 |
8 | import static java.lang.annotation.ElementType.*;
9 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
10 |
11 | /**
12 | * @author Antonio Goncalves
13 | * Training - Beginning with The Java EE 7 Platform
14 | * http://www.antoniogoncalves.org
15 | * --
16 | */
17 | @Qualifier
18 | @Retention(RUNTIME)
19 | @Target({FIELD, TYPE, METHOD})
20 | public @interface EightDigits {
21 | }
22 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/service/MockGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.enterprise.inject.Alternative;
4 | import java.util.Random;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @Alternative
13 | @ThirteenDigits
14 | public class MockGenerator implements NumberGenerator {
15 |
16 | // ======================================
17 | // = Business methods =
18 | // ======================================
19 |
20 | public String generateNumber() {
21 | return "mock-" + Math.abs(new Random().nextInt());
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/service/NumberGenerator.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 |
4 | /**
5 | * @author Antonio Goncalves
6 | * Training - Beginning with The Java EE 7 Platform
7 | * http://www.antoniogoncalves.org
8 | * --
9 | */
10 | public interface NumberGenerator {
11 |
12 | // ======================================
13 | // = Business methods =
14 | // ======================================
15 |
16 | String generateNumber();
17 | }
18 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/service/ThirteenDigits.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.service;
2 |
3 | import javax.inject.Qualifier;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.Target;
6 |
7 | import static java.lang.annotation.ElementType.*;
8 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
9 |
10 | /**
11 | * @author Antonio Goncalves
12 | * Training - Beginning with The Java EE 7 Platform
13 | * http://www.antoniogoncalves.org
14 | * --
15 | */
16 | @Qualifier
17 | @Retention(RUNTIME)
18 | @Target({FIELD, TYPE, METHOD, PARAMETER})
19 | public @interface ThirteenDigits {
20 | }
21 |
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/util/Loggable.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import javax.interceptor.InterceptorBinding;
4 | import java.lang.annotation.*;
5 |
6 | /**
7 | * @author Antonio Goncalves
8 | * Training - Beginning with The Java EE 7 Platform
9 | * http://www.antoniogoncalves.org
10 | * --
11 | */
12 | @InterceptorBinding
13 | @Retention(RetentionPolicy.RUNTIME)
14 | @Target({ElementType.METHOD, ElementType.TYPE})
15 | @Documented
16 | public @interface Loggable {
17 | }
--------------------------------------------------------------------------------
/20-JMS/src/main/java/org/agoncal/training/javaee/util/LoggingProducer.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee.util;
2 |
3 | import org.apache.logging.log4j.LogManager;
4 | import org.apache.logging.log4j.Logger;
5 |
6 | import javax.enterprise.inject.Produces;
7 | import javax.enterprise.inject.spi.InjectionPoint;
8 |
9 | /**
10 | * @author Antonio Goncalves
11 | * Training - Beginning with The Java EE 7 Platform
12 | * http://www.antoniogoncalves.org
13 | * --
14 | */
15 | public class LoggingProducer {
16 |
17 | // ======================================
18 | // = Producer methods =
19 | // ======================================
20 |
21 | @Produces
22 | public Logger produceLogger(InjectionPoint injectionPoint) {
23 | return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
24 | }
25 | }
--------------------------------------------------------------------------------
/20-JMS/src/main/resources/META-INF/persistence.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/20-JMS/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.util.CDIDebug
--------------------------------------------------------------------------------
/20-JMS/src/main/resources/ValidationMessages.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Wrong music genre
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Dates have to be in chronological order
3 |
4 | title=Title length should be between {min} and {max}
5 | music.company=Wrong music company
6 | number.cds=No more than {value} CDs
--------------------------------------------------------------------------------
/20-JMS/src/main/resources/ValidationMessages_fr.properties:
--------------------------------------------------------------------------------
1 | org.agoncal.training.javaee.constraints.MusicGenre.message=Genre musical erron\u00E9
2 | org.agoncal.training.javaee.constraints.ChronologicalDates.message=Les dates doivent \u00EAtre dans l'ordre chronologique
3 |
4 | title=La taille du titre doit \u00EAtre compris entre {min} et {max}
5 | music.company=Soci\u00E9t\u00E9 erron\u00E9e
6 | number.cds={value} CDs maximum
--------------------------------------------------------------------------------
/20-JMS/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/20-JMS/src/main/webapp/WEB-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 | org.agoncal.training.javaee.util.LoggingInterceptor
12 |
13 |
--------------------------------------------------------------------------------
/20-JMS/src/main/webapp/WEB-INF/faces-config.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/20-JMS/src/main/webapp/index.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 | Redirect...
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/20-JMS/src/main/webapp/resources/demo/newItem.xhtml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/20-JMS/src/main/webapp/resources/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | color: #4f6b72;
3 | background: #E6EAE9;
4 | font-family: Arial, Helvetica, sans-serif;
5 | }
6 |
7 | label {
8 | width: 150px;
9 | float: left;
10 | text-align: right;
11 | margin-right: 0.5em;
12 | display: block;
13 | }
14 |
15 | input {
16 | width: 200px;
17 | }
18 |
19 | textarea {
20 | width: 200px;
21 | height: 80px;
22 | }
23 |
24 | .oddRow {
25 |
26 | }
27 |
28 | .evenRow {
29 | background-color: #c6d0cd;
30 | }
--------------------------------------------------------------------------------
/20-JMS/src/test/java/org/agoncal/training/javaee/AllTests.java:
--------------------------------------------------------------------------------
1 | package org.agoncal.training.javaee;
2 |
3 | import org.agoncal.training.javaee.model.*;
4 | import org.agoncal.training.javaee.service.ItemServiceTest;
5 | import org.junit.runner.RunWith;
6 | import org.junit.runners.Suite;
7 |
8 | @RunWith(Suite.class)
9 | @Suite.SuiteClasses({
10 | BookTest.class,
11 | CDTest.class,
12 | ItemServiceTest.class
13 | })
14 | public class AllTests {
15 | }
16 |
--------------------------------------------------------------------------------
/20-JMS/src/test/resources/META-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------