├── .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[] 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[] 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[] 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[] 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[] 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 | <ui:insert name="title">Default title</ui:insert> 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[] 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[] 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 | <ui:insert name="title">Default title</ui:insert> 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[] 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[] 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 | <ui:insert name="title">Default title</ui:insert> 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[] 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[] 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[] 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[] 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 | --------------------------------------------------------------------------------