├── .gitignore ├── LICENSE ├── README.md ├── README_ES.md ├── images ├── launchPage.png ├── launchPage2.png ├── loginmetrics.png ├── microprofile-que-aprenderemos.png └── openapi.png ├── lab01 ├── finish │ ├── .gitignore │ ├── application.iml │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── app │ │ │ │ ├── HackDayApplication.java │ │ │ │ └── resources │ │ │ │ └── GroupResource.java │ │ └── liberty │ │ │ └── config │ │ │ └── server.xml │ │ └── test │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── app │ │ └── rest │ │ └── GroupRestTest.java └── start │ ├── .gitignore │ └── pom.xml ├── lab02 ├── finish │ ├── .gitignore │ ├── api-impl │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── ecjug │ │ │ │ │ └── hackday │ │ │ │ │ └── api │ │ │ │ │ └── impl │ │ │ │ │ ├── CountryApi.java │ │ │ │ │ ├── MeetUpApi.java │ │ │ │ │ └── client │ │ │ │ │ ├── EventServiceImpl.java │ │ │ │ │ ├── GroupServiceImpl.java │ │ │ │ │ └── MembersServiceImpl.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ ├── beans.xml │ │ │ │ └── microprofile-config.properties │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── api │ │ │ └── impl │ │ │ └── test │ │ │ └── GroupServiceTest.java │ ├── api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── api │ │ │ ├── EventService.java │ │ │ ├── GroupService.java │ │ │ └── MembersService.java │ ├── application │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── app │ │ │ │ ├── HackDayApplication.java │ │ │ │ └── resources │ │ │ │ ├── GroupResource.java │ │ │ │ └── MemberResource.java │ │ │ ├── liberty │ │ │ └── config │ │ │ │ └── server.xml │ │ │ ├── resources │ │ │ └── META-INF │ │ │ │ ├── beans.xml │ │ │ │ └── microprofile-config.properties │ │ │ └── webapp │ │ │ ├── WEB-INF │ │ │ └── web.xml │ │ │ └── index.html │ ├── domain │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── domain │ │ │ └── model │ │ │ ├── Country.java │ │ │ ├── Event.java │ │ │ ├── Group.java │ │ │ └── Member.java │ ├── mongito │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── ecjug │ │ │ │ │ └── hackday │ │ │ │ │ └── mongo │ │ │ │ │ └── MongoClientProducer.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ ├── beans.xml │ │ │ │ └── microprofile-config.properties │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── mongo │ │ │ └── test │ │ │ ├── JUG.java │ │ │ └── MongoClientProducerTest.java │ ├── pom.xml │ └── repository │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── repository │ │ │ │ ├── EventRepository.java │ │ │ │ ├── GroupRepository.java │ │ │ │ ├── MemberRepository.java │ │ │ │ └── impl │ │ │ │ ├── EventRepositoryImpl.java │ │ │ │ ├── GroupRepositoryImpl.java │ │ │ │ └── MemberRepositoryImpl.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ └── test │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── repository │ │ └── test │ │ └── EventRepositoryTest.java └── start │ ├── .gitignore │ ├── api-impl │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── api │ │ │ │ └── impl │ │ │ │ ├── CountryApi.java │ │ │ │ ├── MeetUpApi.java │ │ │ │ └── client │ │ │ │ ├── EventServiceImpl.java │ │ │ │ └── GroupServiceImpl.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ └── test │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── api │ │ └── impl │ │ └── test │ │ └── GroupServiceTest.java │ ├── api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── api │ │ ├── EventService.java │ │ ├── GroupService.java │ │ └── MembersService.java │ ├── application │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── app │ │ │ ├── HackDayApplication.java │ │ │ └── resources │ │ │ └── GroupResource.java │ │ ├── liberty │ │ └── config │ │ │ └── server.xml │ │ ├── resources │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ └── webapp │ │ ├── WEB-INF │ │ └── web.xml │ │ └── index.html │ ├── domain │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── domain │ │ └── model │ │ ├── Country.java │ │ ├── Event.java │ │ └── Group.java │ ├── mongito │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── mongo │ │ │ │ └── MongoClientProducer.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ └── test │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── mongo │ │ └── test │ │ ├── JUG.java │ │ └── MongoClientProducerTest.java │ ├── pom.xml │ └── repository │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── repository │ │ │ ├── EventRepository.java │ │ │ ├── GroupRepository.java │ │ │ ├── MemberRepository.java │ │ │ └── impl │ │ │ ├── EventRepositoryImpl.java │ │ │ └── GroupRepositoryImpl.java │ └── resources │ │ └── META-INF │ │ ├── beans.xml │ │ └── microprofile-config.properties │ └── test │ └── java │ └── org │ └── ecjug │ └── hackday │ └── repository │ └── test │ └── EventRepositoryTest.java ├── lab03 ├── finish │ ├── .gitignore │ ├── api-impl │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── ecjug │ │ │ │ │ └── hackday │ │ │ │ │ └── api │ │ │ │ │ └── impl │ │ │ │ │ ├── CountryApi.java │ │ │ │ │ ├── MeetUpApi.java │ │ │ │ │ ├── client │ │ │ │ │ ├── EventServiceImpl.java │ │ │ │ │ ├── GroupServiceImpl.java │ │ │ │ │ └── MembersServiceImpl.java │ │ │ │ │ └── health │ │ │ │ │ └── MeetupHealthCheck.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ ├── beans.xml │ │ │ │ └── microprofile-config.properties │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── api │ │ │ └── impl │ │ │ └── test │ │ │ └── GroupServiceTest.java │ ├── api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── api │ │ │ ├── EventService.java │ │ │ ├── GroupService.java │ │ │ └── MembersService.java │ ├── application │ │ ├── .dockerignore │ │ ├── Dockerfile │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── app │ │ │ │ ├── HackDayApplication.java │ │ │ │ └── resources │ │ │ │ ├── GroupResource.java │ │ │ │ └── MemberResource.java │ │ │ ├── liberty │ │ │ └── config │ │ │ │ └── server.xml │ │ │ ├── resources │ │ │ └── META-INF │ │ │ │ ├── beans.xml │ │ │ │ └── microprofile-config.properties │ │ │ ├── security │ │ │ └── key.jks │ │ │ └── webapp │ │ │ ├── WEB-INF │ │ │ └── web.xml │ │ │ └── index.html │ ├── domain │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── domain │ │ │ └── model │ │ │ ├── Country.java │ │ │ ├── Event.java │ │ │ ├── Group.java │ │ │ └── Member.java │ ├── mongito │ │ ├── pom.xml │ │ └── src │ │ │ ├── main │ │ │ ├── java │ │ │ │ └── org │ │ │ │ │ └── ecjug │ │ │ │ │ └── hackday │ │ │ │ │ └── mongo │ │ │ │ │ ├── MongoClientProducer.java │ │ │ │ │ └── health │ │ │ │ │ └── MongoHealthCheck.java │ │ │ └── resources │ │ │ │ └── META-INF │ │ │ │ ├── beans.xml │ │ │ │ └── microprofile-config.properties │ │ │ └── test │ │ │ └── java │ │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── mongo │ │ │ └── test │ │ │ ├── JUG.java │ │ │ └── MongoClientProducerTest.java │ ├── pom.xml │ └── repository │ │ ├── pom.xml │ │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── repository │ │ │ │ ├── EventRepository.java │ │ │ │ ├── GroupRepository.java │ │ │ │ ├── MemberRepository.java │ │ │ │ └── impl │ │ │ │ ├── EventRepositoryImpl.java │ │ │ │ ├── GroupRepositoryImpl.java │ │ │ │ └── MemberRepositoryImpl.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ └── test │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── repository │ │ └── test │ │ └── EventRepositoryTest.java └── start │ ├── .gitignore │ ├── api-impl │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── api │ │ │ │ └── impl │ │ │ │ ├── CountryApi.java │ │ │ │ ├── MeetUpApi.java │ │ │ │ ├── client │ │ │ │ ├── EventServiceImpl.java │ │ │ │ ├── GroupServiceImpl.java │ │ │ │ └── MembersServiceImpl.java │ │ │ │ └── health │ │ │ │ └── MeetupHealthCheck.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ └── test │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── api │ │ └── impl │ │ └── test │ │ └── GroupServiceTest.java │ ├── api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── api │ │ ├── EventService.java │ │ ├── GroupService.java │ │ └── MembersService.java │ ├── application │ ├── .dockerignore │ ├── Dockerfile │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── app │ │ │ ├── HackDayApplication.java │ │ │ └── resources │ │ │ ├── GroupResource.java │ │ │ └── MemberResource.java │ │ ├── liberty │ │ └── config │ │ │ └── server.xml │ │ ├── resources │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ ├── security │ │ └── key.jks │ │ └── webapp │ │ ├── WEB-INF │ │ └── web.xml │ │ └── index.html │ ├── domain │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── domain │ │ └── model │ │ ├── Country.java │ │ ├── Event.java │ │ ├── Group.java │ │ └── Member.java │ ├── mongito │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── mongo │ │ │ │ └── MongoClientProducer.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ └── test │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── mongo │ │ └── test │ │ ├── JUG.java │ │ └── MongoClientProducerTest.java │ ├── pom.xml │ └── repository │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── repository │ │ │ ├── EventRepository.java │ │ │ ├── GroupRepository.java │ │ │ ├── MemberRepository.java │ │ │ └── impl │ │ │ ├── EventRepositoryImpl.java │ │ │ ├── GroupRepositoryImpl.java │ │ │ └── MemberRepositoryImpl.java │ └── resources │ │ └── META-INF │ │ ├── beans.xml │ │ └── microprofile-config.properties │ └── test │ └── java │ └── org │ └── ecjug │ └── hackday │ └── repository │ └── test │ └── EventRepositoryTest.java └── lab04 ├── finish ├── .gitignore ├── api-impl │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── api │ │ │ │ └── impl │ │ │ │ ├── CountryApi.java │ │ │ │ ├── MeetUpApi.java │ │ │ │ ├── MemberApi.java │ │ │ │ ├── client │ │ │ │ ├── EventServiceImpl.java │ │ │ │ ├── GroupServiceImpl.java │ │ │ │ └── MembersServiceImpl.java │ │ │ │ └── health │ │ │ │ └── MeetupHealthCheck.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ └── test │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── api │ │ └── impl │ │ └── test │ │ └── GroupServiceTest.java ├── api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── api │ │ ├── EventService.java │ │ ├── GroupService.java │ │ └── MembersService.java ├── application │ ├── .dockerignore │ ├── Dockerfile │ ├── docker-compose.yml │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── app │ │ │ ├── HackDayApplication.java │ │ │ └── resources │ │ │ └── GroupResource.java │ │ ├── liberty │ │ └── config │ │ │ └── server.xml │ │ ├── resources │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ ├── security │ │ └── key.jks │ │ └── webapp │ │ ├── WEB-INF │ │ └── web.xml │ │ └── index.html ├── domain │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── domain │ │ └── model │ │ ├── Country.java │ │ ├── Event.java │ │ ├── Group.java │ │ └── Member.java ├── member-application │ ├── Dockerfile │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ecjug │ │ │ └── member │ │ │ └── app │ │ │ ├── MemberApplication.java │ │ │ └── resource │ │ │ └── MemberResource.java │ │ ├── liberty │ │ └── config │ │ │ └── server.xml │ │ ├── resources │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ ├── security │ │ └── key.jks │ │ └── webapp │ │ ├── WEB-INF │ │ └── web.xml │ │ └── index.html ├── mongito │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── ecjug │ │ │ │ └── hackday │ │ │ │ └── mongo │ │ │ │ ├── MongoClientProducer.java │ │ │ │ └── health │ │ │ │ └── MongoHealthCheck.java │ │ └── resources │ │ │ └── META-INF │ │ │ ├── beans.xml │ │ │ └── microprofile-config.properties │ │ └── test │ │ └── java │ │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── mongo │ │ └── test │ │ ├── JUG.java │ │ └── MongoClientProducerTest.java ├── pom.xml └── repository │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── repository │ │ │ ├── EventRepository.java │ │ │ ├── GroupRepository.java │ │ │ ├── MemberRepository.java │ │ │ └── impl │ │ │ ├── EventRepositoryImpl.java │ │ │ ├── GroupRepositoryImpl.java │ │ │ └── MemberRepositoryImpl.java │ └── resources │ │ └── META-INF │ │ ├── beans.xml │ │ └── microprofile-config.properties │ └── test │ └── java │ └── org │ └── ecjug │ └── hackday │ └── repository │ └── test │ └── EventRepositoryTest.java └── start ├── .gitignore ├── api-impl ├── pom.xml └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── api │ │ │ └── impl │ │ │ ├── CountryApi.java │ │ │ ├── MeetUpApi.java │ │ │ ├── client │ │ │ ├── EventServiceImpl.java │ │ │ ├── GroupServiceImpl.java │ │ │ └── MembersServiceImpl.java │ │ │ └── health │ │ │ └── MeetupHealthCheck.java │ └── resources │ │ └── META-INF │ │ ├── beans.xml │ │ └── microprofile-config.properties │ └── test │ └── java │ └── org │ └── ecjug │ └── hackday │ └── api │ └── impl │ └── test │ └── GroupServiceTest.java ├── api ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── ecjug │ └── hackday │ └── api │ ├── EventService.java │ ├── GroupService.java │ └── MembersService.java ├── application ├── .dockerignore ├── Dockerfile ├── docker-compose.yml ├── pom.xml └── src │ └── main │ ├── java │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── app │ │ ├── HackDayApplication.java │ │ └── resources │ │ ├── GroupResource.java │ │ └── MemberResource.java │ ├── liberty │ └── config │ │ └── server.xml │ ├── resources │ └── META-INF │ │ ├── beans.xml │ │ └── microprofile-config.properties │ ├── security │ └── key.jks │ └── webapp │ ├── WEB-INF │ └── web.xml │ └── index.html ├── domain ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── ecjug │ └── hackday │ └── domain │ └── model │ ├── Country.java │ ├── Event.java │ ├── Group.java │ └── Member.java ├── member-application ├── Dockerfile ├── pom.xml └── src │ └── main │ ├── java │ └── org │ │ └── ecjug │ │ └── member │ │ └── app │ │ └── MemberApplication.java │ ├── liberty │ └── config │ │ └── server.xml │ ├── resources │ └── META-INF │ │ ├── beans.xml │ │ └── microprofile-config.properties │ ├── security │ └── key.jks │ └── webapp │ ├── WEB-INF │ └── web.xml │ └── index.html ├── mongito ├── pom.xml └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── ecjug │ │ │ └── hackday │ │ │ └── mongo │ │ │ ├── MongoClientProducer.java │ │ │ └── health │ │ │ └── MongoHealthCheck.java │ └── resources │ │ └── META-INF │ │ ├── beans.xml │ │ └── microprofile-config.properties │ └── test │ └── java │ └── org │ └── ecjug │ └── hackday │ └── mongo │ └── test │ ├── JUG.java │ └── MongoClientProducerTest.java ├── pom.xml └── repository ├── pom.xml └── src ├── main ├── java │ └── org │ │ └── ecjug │ │ └── hackday │ │ └── repository │ │ ├── EventRepository.java │ │ ├── GroupRepository.java │ │ ├── MemberRepository.java │ │ └── impl │ │ ├── EventRepositoryImpl.java │ │ ├── GroupRepositoryImpl.java │ │ └── MemberRepositoryImpl.java └── resources │ └── META-INF │ ├── beans.xml │ └── microprofile-config.properties └── test └── java └── org └── ecjug └── hackday └── repository └── test └── EventRepositoryTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.ear 17 | *.zip 18 | *.tar.gz 19 | *.rar 20 | 21 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 22 | hs_err_pid* 23 | -------------------------------------------------------------------------------- /images/launchPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/images/launchPage.png -------------------------------------------------------------------------------- /images/launchPage2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/images/launchPage2.png -------------------------------------------------------------------------------- /images/loginmetrics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/images/loginmetrics.png -------------------------------------------------------------------------------- /images/microprofile-que-aprenderemos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/images/microprofile-que-aprenderemos.png -------------------------------------------------------------------------------- /images/openapi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/images/openapi.png -------------------------------------------------------------------------------- /lab01/finish/src/main/java/org/ecjug/hackday/app/HackDayApplication.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | @ApplicationPath("/hackday") 7 | public class HackDayApplication extends Application { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /lab01/finish/src/main/java/org/ecjug/hackday/app/resources/GroupResource.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app.resources; 2 | 3 | import javax.enterprise.context.ApplicationScoped; 4 | import javax.json.Json; 5 | import javax.json.JsonObject; 6 | import javax.json.JsonObjectBuilder; 7 | import javax.ws.rs.GET; 8 | import javax.ws.rs.Path; 9 | import javax.ws.rs.Produces; 10 | import javax.ws.rs.core.MediaType; 11 | 12 | @ApplicationScoped 13 | @Path("/group") 14 | public class GroupResource { 15 | 16 | @GET 17 | @Path("/list") 18 | @Produces({MediaType.APPLICATION_JSON}) 19 | public JsonObject listGroups() { 20 | JsonObjectBuilder builder = Json.createObjectBuilder(); 21 | builder.add("ECJUG","Ecuador Java User Group"); 22 | builder.add("MEDJUG","Medellin Java User Group"); 23 | builder.add("BJUG","Barcelona Java User Group"); 24 | builder.add("MJUG","Madrid Java User Group"); 25 | builder.add("MalagaJUG","Malaga Java User Group"); 26 | 27 | return builder.build(); 28 | } 29 | } -------------------------------------------------------------------------------- /lab01/finish/src/main/liberty/config/server.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jaxrs-2.1 5 | jsonp-1.1 6 | 7 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lab01/finish/src/test/java/org/ecjug/hackday/app/rest/GroupRestTest.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app.rest; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | 5 | import javax.json.JsonObject; 6 | import javax.ws.rs.client.Client; 7 | import javax.ws.rs.client.ClientBuilder; 8 | import javax.ws.rs.client.WebTarget; 9 | import javax.ws.rs.core.Response; 10 | 11 | import org.apache.cxf.jaxrs.provider.jsrjsonp.JsrJsonpProvider; 12 | import org.junit.Test; 13 | 14 | public class GroupRestTest { 15 | 16 | @Test 17 | public void testGetProperties() { 18 | String url = "http://localhost:9080/application/"; 19 | 20 | Client client = ClientBuilder.newClient(); 21 | client.register(JsrJsonpProvider.class); 22 | 23 | WebTarget target = client.target(url + "hackday/group/list"); 24 | Response response = target.request().get(); 25 | 26 | assertEquals("Incorrect response code from " + url, Response.Status.OK.getStatusCode(), response.getStatus()); 27 | 28 | JsonObject obj = response.readEntity(JsonObject.class); 29 | 30 | assertEquals("Ecuador Java User Group", 31 | obj.getString("ECJUG")); 32 | response.close(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lab02/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/CountryApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import org.ecjug.hackday.domain.model.Country; 4 | import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; 5 | 6 | import javax.enterprise.context.Dependent; 7 | import javax.ws.rs.*; 8 | import javax.ws.rs.core.MediaType; 9 | 10 | @Dependent 11 | @RegisterRestClient 12 | @Produces({MediaType.APPLICATION_JSON}) 13 | @Consumes(MediaType.APPLICATION_JSON) 14 | public interface CountryApi { 15 | 16 | @GET 17 | @Path("/rest/v2/alpha/{code}") 18 | Country countryByCode(@PathParam("code") String code); 19 | } -------------------------------------------------------------------------------- /lab02/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/MeetUpApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.PathParam; 6 | import javax.ws.rs.QueryParam; 7 | import java.util.HashMap; 8 | import java.util.List; 9 | 10 | public interface MeetUpApi { 11 | 12 | @GET 13 | @Path("/find/groups/") 14 | List techGroups(@QueryParam("category") String category, @QueryParam("key") String key); 15 | 16 | @GET 17 | @Path("/{urlname}/members/") 18 | List members(@PathParam("urlname") String urlname); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /lab02/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/EventServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.EventService; 5 | import org.ecjug.hackday.domain.model.Event; 6 | import org.ecjug.hackday.repository.EventRepository; 7 | 8 | import javax.enterprise.context.ApplicationScoped; 9 | import javax.inject.Inject; 10 | import java.util.List; 11 | 12 | @Slf4j 13 | @ApplicationScoped 14 | public class EventServiceImpl implements EventService { 15 | 16 | @Inject 17 | private EventRepository eventRepository; 18 | 19 | @Override 20 | public Event add(Event event) { 21 | return eventRepository.addEvent(event); 22 | } 23 | 24 | @Override 25 | public List list() { 26 | return eventRepository.list(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lab02/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/MembersServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.MembersService; 5 | import org.ecjug.hackday.domain.model.Member; 6 | import org.ecjug.hackday.repository.MemberRepository; 7 | 8 | import javax.enterprise.context.ApplicationScoped; 9 | import javax.inject.Inject; 10 | import java.util.List; 11 | 12 | @Slf4j 13 | @ApplicationScoped 14 | public class MembersServiceImpl implements MembersService { 15 | 16 | @Inject 17 | private MemberRepository memberRepository; 18 | 19 | @Override 20 | public List list() { 21 | return memberRepository.list(); 22 | } 23 | 24 | @Override 25 | public Member add(Member member) { 26 | return memberRepository.add(member); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lab02/finish/api-impl/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab02/finish/api-impl/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | #Mongo 7 | mongo.port=27017 8 | mongo.ip=127.0.0.1 9 | mongo.database.name=mongito 10 | mongo.embedded=true 11 | -------------------------------------------------------------------------------- /lab02/finish/api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | api 13 | 14 | 15 | HackDay ::: API 16 | HackDay ::: API 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.pf4j 27 | pf4j 28 | provided 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /lab02/finish/api/src/main/java/org/ecjug/hackday/api/EventService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | 5 | import java.util.List; 6 | 7 | public interface EventService { 8 | 9 | Event add(Event event); 10 | 11 | List list(); 12 | } 13 | -------------------------------------------------------------------------------- /lab02/finish/api/src/main/java/org/ecjug/hackday/api/GroupService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | import org.ecjug.hackday.domain.model.Member; 5 | import org.pf4j.ExtensionPoint; 6 | 7 | import java.util.List; 8 | import java.util.Optional; 9 | 10 | public interface GroupService extends ExtensionPoint { 11 | 12 | Group add(Group group); 13 | 14 | List list(); 15 | 16 | List loadFromMeetUp(); 17 | 18 | void addMemberToGroup(String groupId, Member member); 19 | 20 | Optional byId(String ecjug); 21 | 22 | List loadMembersFromMeetUpGroup(Group group); 23 | } 24 | -------------------------------------------------------------------------------- /lab02/finish/api/src/main/java/org/ecjug/hackday/api/MembersService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | public interface MembersService { 8 | 9 | List list(); 10 | 11 | Member add(Member member); 12 | } 13 | -------------------------------------------------------------------------------- /lab02/finish/application/src/main/java/org/ecjug/hackday/app/HackDayApplication.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | @ApplicationPath("/hackday") 7 | public class HackDayApplication extends Application { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /lab02/finish/application/src/main/java/org/ecjug/hackday/app/resources/MemberResource.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app.resources; 2 | 3 | import org.ecjug.hackday.api.MembersService; 4 | import org.ecjug.hackday.domain.model.Member; 5 | 6 | import javax.enterprise.context.ApplicationScoped; 7 | import javax.inject.Inject; 8 | import javax.ws.rs.*; 9 | import javax.ws.rs.core.MediaType; 10 | import java.util.List; 11 | 12 | @ApplicationScoped 13 | @Produces({MediaType.APPLICATION_JSON}) 14 | @Consumes(MediaType.APPLICATION_JSON) 15 | @Path("/member") 16 | public class MemberResource { 17 | 18 | @Inject 19 | private MembersService membersService; 20 | 21 | @GET 22 | @Path("/list") 23 | public List listGroups() { 24 | return membersService.list(); 25 | } 26 | 27 | @POST 28 | @Path("/add") 29 | public Member addMember(Member member) { 30 | return membersService.add(member); 31 | } 32 | } -------------------------------------------------------------------------------- /lab02/finish/application/src/main/liberty/config/server.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jaxrs-2.1 5 | jsonp-1.1 6 | cdi-2.0 7 | mpConfig-1.2 8 | mpRestClient-1.1 9 | mpHealth-1.0 10 | mpMetrics-1.1 11 | mpFaultTolerance-1.0 12 | mpOpenAPI-1.0 13 | beanValidation-2.0 14 | 15 | 16 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lab02/finish/application/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab02/finish/application/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | #Mongo 7 | mongo.port=27017 8 | mongo.ip=127.0.0.1 9 | mongo.database.name=mongito 10 | mongo.embedded=true 11 | -------------------------------------------------------------------------------- /lab02/finish/application/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | Hack Day Project 6 | 7 | 8 | index.html 9 | 10 | -------------------------------------------------------------------------------- /lab02/finish/application/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Monolitos, Microlitos, Microservicios usando Java / Jakarta EE

4 | 5 |
6 |

Hack Day

7 |

8 | Hack-Days 2018 organizado por la Comunidad Hispana de grupos de usuarios de Java. 9 |

10 |
11 | 
12 | 
13 | 
14 |                                              _o######ooooooo-_
15 |                                             o#####o_o#####~~~~~~
16 |                                            ################o__o
17 |                                          _o###########~~~~~###~
18 |                                        o##############
19 |                                     _o###############~
20 |                                   _o#########~ooo~##~
21 |                                _o############# ##o::___
22 |                             _o#################oo:~~~~~
23 |                          _o#####################~
24 |                        _####~_oooooooo:~~######~
25 |                      _##### o###########_:~##~
26 |                     o#####_##################
27 |                    _#######_~#################_
28 |                    ##########o:~###############o                       ___/\            /\
29 |                  _##############o~##############_                  ___/ *   \          / /
30 |                o#############~~     ~~~~~~~######_                /          |________/ /
31 |            __o##########~::o_             o#######                |                    /
32 |       _oo##########~~::o#####            o###########o___          \____/\              \
33 |   o##########~~~~    ~~~##########       ~~~~#############o               |              |
34 |  o##########~~~~    ~~~##########       ~~~~#############o                |    _______   |
35 | #####~~~~~~                ~~~                                            |___/       \__|
36 | 
37 | 
38 |     
39 |
40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /lab02/finish/domain/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | domain 13 | 14 | 15 | HackDay ::: Domain 16 | HackDay ::: Domain 17 | 18 | 19 | 20 | org.projectlombok 21 | lombok 22 | provided 23 | 24 | 25 | 26 | org.mongodb 27 | bson 28 | 29 | 30 | 31 | com.fasterxml.jackson.core 32 | jackson-annotations 33 | provided 34 | 35 | 36 | 37 | javax 38 | javaee-api 39 | provided 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /lab02/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Country.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | 12 | @Data 13 | @NoArgsConstructor 14 | @JsonIgnoreProperties(ignoreUnknown = true) 15 | public class Country implements Serializable { 16 | 17 | @NotBlank 18 | private String name; 19 | private String alpha2Code; 20 | private String alpha3Code; 21 | private String capital; 22 | private String flag; 23 | private List timezones; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /lab02/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Event.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.bson.types.ObjectId; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import java.io.Serializable; 11 | import java.time.LocalDate; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class Event implements Serializable { 20 | 21 | private ObjectId id; 22 | @NotBlank 23 | private String title; 24 | @NotBlank 25 | private String description; 26 | @NotBlank 27 | private LocalDate date; 28 | 29 | private List memberList; 30 | 31 | public void addMember(Member member) { 32 | if (memberList == null) { 33 | memberList = new ArrayList<>(); 34 | } 35 | if (!memberList.contains(member)) { 36 | memberList.add(member); 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /lab02/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Group.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | import org.bson.types.ObjectId; 10 | 11 | import javax.validation.constraints.NotBlank; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | @JsonIgnoreProperties(ignoreUnknown = true) 20 | public class Group { 21 | 22 | @JsonIgnore 23 | private ObjectId id; 24 | @NotBlank 25 | private String name; 26 | private String description; 27 | private String link; 28 | @NotBlank 29 | private String urlname; 30 | @NotBlank 31 | private String country; 32 | private Country countryInformation; 33 | private List membersList; 34 | 35 | private String groupId; 36 | 37 | 38 | public void addMember(Member member) { 39 | if (membersList == null) { 40 | membersList = new ArrayList<>(); 41 | } 42 | if (!membersList.contains(member)) { 43 | membersList.add(member); 44 | } 45 | } 46 | 47 | public String getGroupId() { 48 | if (id != null) { 49 | this.groupId = id.toString(); 50 | } 51 | return this.groupId; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lab02/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Member.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.bson.types.ObjectId; 9 | 10 | import javax.validation.constraints.NotBlank; 11 | import java.io.Serializable; 12 | 13 | @Builder(toBuilder = true) 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public final class Member implements Serializable { 18 | 19 | @JsonIgnore 20 | private ObjectId id; 21 | @NotBlank 22 | private String name; 23 | private String country; 24 | private String city; 25 | private String comments; 26 | 27 | private String memberId; 28 | 29 | 30 | public String getMemberId() { 31 | if (id != null) { 32 | memberId = id.toString(); 33 | } 34 | return memberId; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lab02/finish/mongito/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab02/finish/mongito/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab02/finish/mongito/src/test/java/org/ecjug/hackday/mongo/test/JUG.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import lombok.*; 4 | import org.bson.types.ObjectId; 5 | 6 | 7 | @Builder(toBuilder = true) 8 | @ToString 9 | @Getter 10 | @Setter 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class JUG { 14 | 15 | private ObjectId id; 16 | private String jugName; 17 | private String country; 18 | private int members; 19 | 20 | } -------------------------------------------------------------------------------- /lab02/finish/mongito/src/test/java/org/ecjug/hackday/mongo/test/MongoClientProducerTest.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import com.kumuluz.ee.common.config.EeConfig; 4 | import com.kumuluz.ee.common.runtime.EeRuntime; 5 | import com.kumuluz.ee.common.runtime.EeRuntimeInternal; 6 | import com.kumuluz.ee.configuration.utils.ConfigurationImpl; 7 | import com.kumuluz.ee.configuration.utils.ConfigurationUtil; 8 | import com.mongodb.client.MongoCollection; 9 | import com.mongodb.client.MongoDatabase; 10 | import org.bson.Document; 11 | import org.jboss.weld.environment.se.Weld; 12 | import org.jboss.weld.junit4.WeldInitiator; 13 | import org.junit.BeforeClass; 14 | import org.junit.Rule; 15 | import org.junit.Test; 16 | 17 | import javax.inject.Inject; 18 | 19 | import static com.mongodb.client.model.Filters.eq; 20 | import static org.hamcrest.CoreMatchers.is; 21 | import static org.hamcrest.MatcherAssert.assertThat; 22 | 23 | public class MongoClientProducerTest { 24 | 25 | 26 | @Rule 27 | public WeldInitiator weld = WeldInitiator.from(new Weld()).inject(this).build(); 28 | 29 | @Inject 30 | private MongoDatabase database; 31 | 32 | 33 | @BeforeClass 34 | public static void config() { 35 | ConfigurationUtil.initialize(new ConfigurationImpl()); 36 | EeConfig eeConfig = new EeConfig.Builder().build(); 37 | EeConfig.initialize(eeConfig); 38 | EeRuntime.initialize(new EeRuntimeInternal()); 39 | } 40 | 41 | @Test 42 | public void shouldInsertDocumentTest() { 43 | System.setProperty("mongo.ip", "127.0.0.1"); 44 | MongoCollection collection = database.getCollection("testDocument"); 45 | Document doc = new Document("jugName", "EcuadorJUG") 46 | .append("country", "Ecuador") 47 | .append("membersList", 500); 48 | collection.insertOne(doc); 49 | 50 | Document jugDoc = collection.find(eq("jugName", "EcuadorJUG")).first(); 51 | assertThat(jugDoc.get("country"), is("Ecuador")); 52 | } 53 | 54 | @Test 55 | public void shouldInsertPojoTest() { 56 | System.setProperty("mongo.ip", "127.0.0.1"); 57 | MongoCollection jugCollection = database.getCollection("pojoTest", JUG.class); 58 | 59 | JUG jug = JUG.builder().jugName("EcuadorJUG").country("Ecuador").members(500).build(); 60 | jugCollection.insertOne(jug); 61 | JUG jugFromMongo = jugCollection.find(eq("jugName", "EcuadorJUG")).first(); 62 | 63 | assertThat(jugFromMongo.getCountry(), is("Ecuador")); 64 | 65 | } 66 | 67 | } -------------------------------------------------------------------------------- /lab02/finish/repository/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | repository 13 | 14 | HackDay ::: Repository 15 | HackDay ::: Repository 16 | 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.ecuadorjug 27 | mongito 28 | 29 | 30 | 31 | org.projectlombok 32 | lombok 33 | provided 34 | 35 | 36 | 37 | 38 | org.eclipse.microprofile 39 | microprofile 40 | provided 41 | pom 42 | 43 | 44 | 45 | 46 | org.jboss.weld 47 | weld-junit4 48 | test 49 | 50 | 51 | 52 | 53 | com.kumuluz.ee.config 54 | kumuluzee-config-mp 55 | test 56 | 57 | 58 | 59 | com.kumuluz.ee 60 | kumuluzee-common 61 | test 62 | 63 | 64 | 65 | org.slf4j 66 | slf4j-api 67 | 68 | 69 | 70 | org.slf4j 71 | slf4j-simple 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /lab02/finish/repository/src/main/java/org/ecjug/hackday/repository/EventRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Simple Repository for Event Model 9 | * 10 | * @author Kleber Ayala 11 | */ 12 | public interface EventRepository { 13 | 14 | Event addEvent(Event event); 15 | 16 | void updateEvent(Event event); 17 | 18 | List list(); 19 | 20 | List eventsByTitle(String title); 21 | 22 | List events(String title); 23 | 24 | Event eventById(String id); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /lab02/finish/repository/src/main/java/org/ecjug/hackday/repository/GroupRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | public interface GroupRepository { 9 | 10 | Group add(Group group); 11 | 12 | List list(); 13 | 14 | Optional byId(String groupId); 15 | 16 | void update(Group group); 17 | } 18 | -------------------------------------------------------------------------------- /lab02/finish/repository/src/main/java/org/ecjug/hackday/repository/MemberRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author Kleber Ayala 9 | */ 10 | public interface MemberRepository { 11 | 12 | Member add(Member member); 13 | 14 | List memberByName(String name); 15 | 16 | Member byId(String id); 17 | 18 | List list(); 19 | 20 | void update(Member member); 21 | } 22 | -------------------------------------------------------------------------------- /lab02/finish/repository/src/main/java/org/ecjug/hackday/repository/impl/EventRepositoryImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository.impl; 2 | 3 | import com.mongodb.client.MongoCollection; 4 | import com.mongodb.client.MongoCursor; 5 | import com.mongodb.client.MongoDatabase; 6 | import com.mongodb.client.model.Filters; 7 | import lombok.SneakyThrows; 8 | import org.bson.types.ObjectId; 9 | import org.ecjug.hackday.domain.model.Event; 10 | import org.ecjug.hackday.repository.EventRepository; 11 | 12 | import javax.enterprise.context.ApplicationScoped; 13 | import javax.inject.Inject; 14 | import java.util.ArrayList; 15 | import java.util.Date; 16 | import java.util.List; 17 | import java.util.Objects; 18 | 19 | import static com.mongodb.client.model.Filters.eq; 20 | 21 | 22 | @ApplicationScoped 23 | public class EventRepositoryImpl implements EventRepository { 24 | 25 | 26 | @Inject 27 | private MongoDatabase database; 28 | private MongoCollection collection; 29 | 30 | @Override 31 | public Event addEvent(Event event) { 32 | Objects.requireNonNull(event, "Event can't be null"); 33 | event.setId(new ObjectId(new Date())); 34 | dbCollection().insertOne(event); 35 | return event; 36 | } 37 | 38 | @Override 39 | @SneakyThrows 40 | public void updateEvent(Event event) { 41 | Objects.requireNonNull(event, "Event can't be null"); 42 | dbCollection().replaceOne(eq("_id", event.getId()), event); 43 | } 44 | 45 | @Override 46 | public List list() { 47 | List eventList = new ArrayList<>(); 48 | MongoCursor mongoCursor = dbCollection().find().iterator(); 49 | mongoCursor.forEachRemaining(eventList::add); 50 | return eventList; 51 | } 52 | 53 | @Override 54 | public List eventsByTitle(String title) { 55 | return filter("title", title); 56 | } 57 | 58 | @Override 59 | public List events(String description) { 60 | return filter("description", description); 61 | } 62 | 63 | @Override 64 | public Event eventById(String id) { 65 | return dbCollection().find(eq("_id", new ObjectId(id))).first(); 66 | } 67 | 68 | 69 | private List filter(final String fieldName, final String pattern) { 70 | return dbCollection().find(Filters.regex(fieldName, pattern)).into(new ArrayList<>()); 71 | } 72 | 73 | private MongoCollection dbCollection() { 74 | if (this.collection == null) { 75 | this.collection = this.database.getCollection("Event", Event.class); 76 | } 77 | return this.collection; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /lab02/finish/repository/src/main/java/org/ecjug/hackday/repository/impl/GroupRepositoryImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository.impl; 2 | 3 | import com.mongodb.client.MongoCollection; 4 | import com.mongodb.client.MongoCursor; 5 | import com.mongodb.client.MongoDatabase; 6 | import org.bson.types.ObjectId; 7 | import org.ecjug.hackday.domain.model.Group; 8 | import org.ecjug.hackday.repository.GroupRepository; 9 | 10 | import javax.enterprise.context.ApplicationScoped; 11 | import javax.inject.Inject; 12 | import java.util.*; 13 | 14 | import static com.mongodb.client.model.Filters.eq; 15 | 16 | @ApplicationScoped 17 | public class GroupRepositoryImpl implements GroupRepository { 18 | 19 | @Inject 20 | private MongoDatabase database; 21 | private MongoCollection collection; 22 | 23 | 24 | @Override 25 | public Group add(Group group) { 26 | Objects.requireNonNull(group, "Group can't be null"); 27 | group.setId(new ObjectId(new Date())); 28 | dbCollection().insertOne(group); 29 | return group; 30 | } 31 | 32 | @Override 33 | public List list() { 34 | List groupList = new ArrayList<>(); 35 | MongoCursor mongoCursor = dbCollection().find().iterator(); 36 | mongoCursor.forEachRemaining(groupList::add); 37 | return groupList; 38 | } 39 | 40 | @Override 41 | public Optional byId(String groupId) { 42 | return Optional.ofNullable(dbCollection().find(eq("_id", new ObjectId(groupId))).first()); 43 | } 44 | 45 | 46 | @Override 47 | public void update(Group group) { 48 | Objects.requireNonNull(group, "Group can't be null"); 49 | dbCollection().replaceOne(eq("_id", group.getId()), group); 50 | } 51 | 52 | private MongoCollection dbCollection() { 53 | if (this.collection == null) { 54 | this.collection = this.database.getCollection("Group", Group.class); 55 | } 56 | return this.collection; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lab02/finish/repository/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab02/finish/repository/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab02/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/CountryApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import org.ecjug.hackday.domain.model.Country; 4 | import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; 5 | 6 | import javax.enterprise.context.Dependent; 7 | import javax.ws.rs.*; 8 | import javax.ws.rs.core.MediaType; 9 | 10 | @Dependent 11 | @RegisterRestClient 12 | @Produces({MediaType.APPLICATION_JSON}) 13 | @Consumes(MediaType.APPLICATION_JSON) 14 | public interface CountryApi { 15 | 16 | @GET 17 | @Path("/rest/v2/alpha/{code}") 18 | Country countryByCode(@PathParam("code") String code); 19 | } -------------------------------------------------------------------------------- /lab02/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/MeetUpApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.PathParam; 6 | import javax.ws.rs.QueryParam; 7 | import java.util.HashMap; 8 | import java.util.List; 9 | 10 | public interface MeetUpApi { 11 | 12 | @GET 13 | @Path("/find/groups/") 14 | List techGroups(@QueryParam("category") String category, @QueryParam("key") String key); 15 | 16 | @GET 17 | @Path("/{urlname}/members/") 18 | List members(@PathParam("urlname") String urlname); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /lab02/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/EventServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.EventService; 5 | import org.ecjug.hackday.domain.model.Event; 6 | import org.ecjug.hackday.repository.EventRepository; 7 | 8 | import javax.enterprise.context.ApplicationScoped; 9 | import javax.inject.Inject; 10 | import java.util.List; 11 | 12 | @Slf4j 13 | @ApplicationScoped 14 | public class EventServiceImpl implements EventService { 15 | 16 | @Inject 17 | private EventRepository eventRepository; 18 | 19 | @Override 20 | public Event add(Event event) { 21 | return eventRepository.addEvent(event); 22 | } 23 | 24 | @Override 25 | public List list() { 26 | return eventRepository.list(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lab02/start/api-impl/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab02/start/api-impl/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | #Mongo 7 | mongo.port=27017 8 | mongo.ip=127.0.0.1 9 | mongo.database.name=mongito 10 | mongo.embedded=true 11 | -------------------------------------------------------------------------------- /lab02/start/api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | api 13 | 14 | 15 | HackDay ::: API 16 | HackDay ::: API 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.pf4j 27 | pf4j 28 | provided 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /lab02/start/api/src/main/java/org/ecjug/hackday/api/EventService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | 5 | import java.util.List; 6 | 7 | public interface EventService { 8 | 9 | Event add(Event event); 10 | 11 | List list(); 12 | } 13 | -------------------------------------------------------------------------------- /lab02/start/api/src/main/java/org/ecjug/hackday/api/GroupService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | import org.ecjug.hackday.domain.model.Member; 5 | import org.pf4j.ExtensionPoint; 6 | 7 | import java.util.List; 8 | import java.util.Optional; 9 | 10 | public interface GroupService extends ExtensionPoint { 11 | 12 | Group add(Group group); 13 | 14 | List list(); 15 | 16 | List loadFromMeetUp(); 17 | 18 | void addMemberToGroup(String groupId, Member member); 19 | 20 | Optional byId(String ecjug); 21 | 22 | List loadMembersFromMeetUpGroup(Group group); 23 | } 24 | -------------------------------------------------------------------------------- /lab02/start/api/src/main/java/org/ecjug/hackday/api/MembersService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | public interface MembersService { 8 | 9 | List list(); 10 | 11 | Member add(Member member); 12 | } 13 | -------------------------------------------------------------------------------- /lab02/start/application/src/main/java/org/ecjug/hackday/app/HackDayApplication.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | @ApplicationPath("/hackday") 7 | public class HackDayApplication extends Application { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /lab02/start/application/src/main/liberty/config/server.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jaxrs-2.1 5 | jsonp-1.1 6 | cdi-2.0 7 | mpConfig-1.2 8 | mpRestClient-1.1 9 | mpHealth-1.0 10 | mpMetrics-1.1 11 | mpFaultTolerance-1.0 12 | mpOpenAPI-1.0 13 | beanValidation-2.0 14 | 15 | 16 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lab02/start/application/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab02/start/application/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | #Mongo 7 | mongo.port=27017 8 | mongo.ip=127.0.0.1 9 | mongo.database.name=mongito 10 | mongo.embedded=true 11 | -------------------------------------------------------------------------------- /lab02/start/application/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | Hack Day Project 6 | 7 | 8 | index.html 9 | 10 | -------------------------------------------------------------------------------- /lab02/start/application/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Monolitos, Microlitos, Microservicios usando Java / Jakarta EE

4 | 5 |
6 |

Hack Day

7 |

8 | Hack-Days 2018 organizado por la Comunidad Hispana de grupos de usuarios de Java. 9 |

10 |
11 | 
12 | 
13 | 
14 |                                              _o######ooooooo-_
15 |                                             o#####o_o#####~~~~~~
16 |                                            ################o__o
17 |                                          _o###########~~~~~###~
18 |                                        o##############
19 |                                     _o###############~
20 |                                   _o#########~ooo~##~
21 |                                _o############# ##o::___
22 |                             _o#################oo:~~~~~
23 |                          _o#####################~
24 |                        _####~_oooooooo:~~######~
25 |                      _##### o###########_:~##~
26 |                     o#####_##################
27 |                    _#######_~#################_
28 |                    ##########o:~###############o                       ___/\            /\
29 |                  _##############o~##############_                  ___/ *   \          / /
30 |                o#############~~     ~~~~~~~######_                /          |________/ /
31 |            __o##########~::o_             o#######                |                    /
32 |       _oo##########~~::o#####            o###########o___          \____/\              \
33 |   o##########~~~~    ~~~##########       ~~~~#############o               |              |
34 |  o##########~~~~    ~~~##########       ~~~~#############o                |    _______   |
35 | #####~~~~~~                ~~~                                            |___/       \__|
36 | 
37 | 
38 |     
39 |
40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /lab02/start/domain/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | domain 13 | 14 | 15 | HackDay ::: Domain 16 | HackDay ::: Domain 17 | 18 | 19 | 20 | org.projectlombok 21 | lombok 22 | provided 23 | 24 | 25 | 26 | org.mongodb 27 | bson 28 | 29 | 30 | 31 | com.fasterxml.jackson.core 32 | jackson-annotations 33 | provided 34 | 35 | 36 | 37 | javax 38 | javaee-api 39 | provided 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /lab02/start/domain/src/main/java/org/ecjug/hackday/domain/model/Country.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | 12 | @Data 13 | @NoArgsConstructor 14 | @JsonIgnoreProperties(ignoreUnknown = true) 15 | public class Country implements Serializable { 16 | 17 | @NotBlank 18 | private String name; 19 | private String alpha2Code; 20 | private String alpha3Code; 21 | private String capital; 22 | private String flag; 23 | private List timezones; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /lab02/start/domain/src/main/java/org/ecjug/hackday/domain/model/Event.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.bson.types.ObjectId; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import java.io.Serializable; 11 | import java.time.LocalDate; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class Event implements Serializable { 20 | 21 | private ObjectId id; 22 | @NotBlank 23 | private String title; 24 | @NotBlank 25 | private String description; 26 | @NotBlank 27 | private LocalDate date; 28 | 29 | private List memberList; 30 | 31 | public void addMember(Member member) { 32 | if (memberList == null) { 33 | memberList = new ArrayList<>(); 34 | } 35 | if (!memberList.contains(member)) { 36 | memberList.add(member); 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /lab02/start/domain/src/main/java/org/ecjug/hackday/domain/model/Group.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | import org.bson.types.ObjectId; 10 | 11 | import javax.validation.constraints.NotBlank; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | @JsonIgnoreProperties(ignoreUnknown = true) 20 | public class Group { 21 | 22 | @JsonIgnore 23 | private ObjectId id; 24 | @NotBlank 25 | private String name; 26 | private String description; 27 | private String link; 28 | @NotBlank 29 | private String urlname; 30 | @NotBlank 31 | private String country; 32 | private Country countryInformation; 33 | private List membersList; 34 | 35 | private String groupId; 36 | 37 | 38 | public void addMember(Member member) { 39 | if (membersList == null) { 40 | membersList = new ArrayList<>(); 41 | } 42 | if (!membersList.contains(member)) { 43 | membersList.add(member); 44 | } 45 | } 46 | 47 | public String getGroupId() { 48 | if (id != null) { 49 | this.groupId = id.toString(); 50 | } 51 | return this.groupId; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lab02/start/mongito/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab02/start/mongito/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab02/start/mongito/src/test/java/org/ecjug/hackday/mongo/test/JUG.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import lombok.*; 4 | import org.bson.types.ObjectId; 5 | 6 | 7 | @Builder(toBuilder = true) 8 | @ToString 9 | @Getter 10 | @Setter 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class JUG { 14 | 15 | private ObjectId id; 16 | private String jugName; 17 | private String country; 18 | private int members; 19 | 20 | } -------------------------------------------------------------------------------- /lab02/start/mongito/src/test/java/org/ecjug/hackday/mongo/test/MongoClientProducerTest.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import com.kumuluz.ee.common.config.EeConfig; 4 | import com.kumuluz.ee.common.runtime.EeRuntime; 5 | import com.kumuluz.ee.common.runtime.EeRuntimeInternal; 6 | import com.kumuluz.ee.configuration.utils.ConfigurationImpl; 7 | import com.kumuluz.ee.configuration.utils.ConfigurationUtil; 8 | import com.mongodb.client.MongoCollection; 9 | import com.mongodb.client.MongoDatabase; 10 | import org.bson.Document; 11 | import org.jboss.weld.environment.se.Weld; 12 | import org.jboss.weld.junit4.WeldInitiator; 13 | import org.junit.BeforeClass; 14 | import org.junit.Rule; 15 | import org.junit.Test; 16 | 17 | import javax.inject.Inject; 18 | 19 | import static com.mongodb.client.model.Filters.eq; 20 | import static org.hamcrest.CoreMatchers.is; 21 | import static org.hamcrest.MatcherAssert.assertThat; 22 | 23 | public class MongoClientProducerTest { 24 | 25 | 26 | @Rule 27 | public WeldInitiator weld = WeldInitiator.from(new Weld()).inject(this).build(); 28 | 29 | @Inject 30 | private MongoDatabase database; 31 | 32 | 33 | @BeforeClass 34 | public static void config() { 35 | ConfigurationUtil.initialize(new ConfigurationImpl()); 36 | EeConfig eeConfig = new EeConfig.Builder().build(); 37 | EeConfig.initialize(eeConfig); 38 | EeRuntime.initialize(new EeRuntimeInternal()); 39 | } 40 | 41 | @Test 42 | public void shouldInsertDocumentTest() { 43 | System.setProperty("mongo.ip", "127.0.0.1"); 44 | MongoCollection collection = database.getCollection("testDocument"); 45 | Document doc = new Document("jugName", "EcuadorJUG") 46 | .append("country", "Ecuador") 47 | .append("membersList", 500); 48 | collection.insertOne(doc); 49 | 50 | Document jugDoc = collection.find(eq("jugName", "EcuadorJUG")).first(); 51 | assertThat(jugDoc.get("country"), is("Ecuador")); 52 | } 53 | 54 | @Test 55 | public void shouldInsertPojoTest() { 56 | System.setProperty("mongo.ip", "127.0.0.1"); 57 | MongoCollection jugCollection = database.getCollection("pojoTest", JUG.class); 58 | 59 | JUG jug = JUG.builder().jugName("EcuadorJUG").country("Ecuador").members(500).build(); 60 | jugCollection.insertOne(jug); 61 | JUG jugFromMongo = jugCollection.find(eq("jugName", "EcuadorJUG")).first(); 62 | 63 | assertThat(jugFromMongo.getCountry(), is("Ecuador")); 64 | 65 | } 66 | 67 | } -------------------------------------------------------------------------------- /lab02/start/repository/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | repository 13 | 14 | HackDay ::: Repository 15 | HackDay ::: Repository 16 | 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.ecuadorjug 27 | mongito 28 | 29 | 30 | 31 | org.projectlombok 32 | lombok 33 | provided 34 | 35 | 36 | 37 | 38 | org.eclipse.microprofile 39 | microprofile 40 | provided 41 | pom 42 | 43 | 44 | 45 | 46 | org.jboss.weld 47 | weld-junit4 48 | test 49 | 50 | 51 | 52 | 53 | com.kumuluz.ee.config 54 | kumuluzee-config-mp 55 | test 56 | 57 | 58 | 59 | com.kumuluz.ee 60 | kumuluzee-common 61 | test 62 | 63 | 64 | 65 | org.slf4j 66 | slf4j-api 67 | 68 | 69 | 70 | org.slf4j 71 | slf4j-simple 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /lab02/start/repository/src/main/java/org/ecjug/hackday/repository/EventRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * Simple Repository for Event Model 9 | * 10 | * @author Kleber Ayala 11 | */ 12 | public interface EventRepository { 13 | 14 | Event addEvent(Event event); 15 | 16 | void updateEvent(Event event); 17 | 18 | List list(); 19 | 20 | List eventsByTitle(String title); 21 | 22 | List events(String title); 23 | 24 | Event eventById(String id); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /lab02/start/repository/src/main/java/org/ecjug/hackday/repository/GroupRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | public interface GroupRepository { 9 | 10 | Group add(Group group); 11 | 12 | List list(); 13 | 14 | Optional byId(String groupId); 15 | 16 | void update(Group group); 17 | } 18 | -------------------------------------------------------------------------------- /lab02/start/repository/src/main/java/org/ecjug/hackday/repository/MemberRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author Kleber Ayala 9 | */ 10 | public interface MemberRepository { 11 | 12 | Member add(Member member); 13 | 14 | List memberByName(String name); 15 | 16 | Member byId(String id); 17 | 18 | List list(); 19 | } 20 | -------------------------------------------------------------------------------- /lab02/start/repository/src/main/java/org/ecjug/hackday/repository/impl/EventRepositoryImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository.impl; 2 | 3 | import com.mongodb.client.MongoCollection; 4 | import com.mongodb.client.MongoCursor; 5 | import com.mongodb.client.MongoDatabase; 6 | import com.mongodb.client.model.Filters; 7 | import lombok.SneakyThrows; 8 | import org.bson.types.ObjectId; 9 | import org.ecjug.hackday.domain.model.Event; 10 | import org.ecjug.hackday.repository.EventRepository; 11 | 12 | import javax.enterprise.context.ApplicationScoped; 13 | import javax.inject.Inject; 14 | import java.util.ArrayList; 15 | import java.util.Date; 16 | import java.util.List; 17 | import java.util.Objects; 18 | 19 | import static com.mongodb.client.model.Filters.eq; 20 | 21 | 22 | @ApplicationScoped 23 | public class EventRepositoryImpl implements EventRepository { 24 | 25 | 26 | @Inject 27 | private MongoDatabase database; 28 | private MongoCollection collection; 29 | 30 | @Override 31 | public Event addEvent(Event event) { 32 | Objects.requireNonNull(event, "Event can't be null"); 33 | event.setId(new ObjectId(new Date())); 34 | dbCollection().insertOne(event); 35 | return event; 36 | } 37 | 38 | @Override 39 | @SneakyThrows 40 | public void updateEvent(Event event) { 41 | Objects.requireNonNull(event, "Event can't be null"); 42 | dbCollection().replaceOne(eq("_id", event.getId()), event); 43 | } 44 | 45 | @Override 46 | public List list() { 47 | List eventList = new ArrayList<>(); 48 | MongoCursor mongoCursor = dbCollection().find().iterator(); 49 | mongoCursor.forEachRemaining(eventList::add); 50 | return eventList; 51 | } 52 | 53 | @Override 54 | public List eventsByTitle(String title) { 55 | return filter("title", title); 56 | } 57 | 58 | @Override 59 | public List events(String description) { 60 | return filter("description", description); 61 | } 62 | 63 | @Override 64 | public Event eventById(String id) { 65 | return dbCollection().find(eq("_id", new ObjectId(id))).first(); 66 | } 67 | 68 | 69 | private List filter(final String fieldName, final String pattern) { 70 | return dbCollection().find(Filters.regex(fieldName, pattern)).into(new ArrayList<>()); 71 | } 72 | 73 | private MongoCollection dbCollection() { 74 | if (this.collection == null) { 75 | this.collection = this.database.getCollection("Event", Event.class); 76 | } 77 | return this.collection; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /lab02/start/repository/src/main/java/org/ecjug/hackday/repository/impl/GroupRepositoryImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository.impl; 2 | 3 | import com.mongodb.client.MongoCollection; 4 | import com.mongodb.client.MongoCursor; 5 | import com.mongodb.client.MongoDatabase; 6 | import org.bson.types.ObjectId; 7 | import org.ecjug.hackday.domain.model.Group; 8 | import org.ecjug.hackday.repository.GroupRepository; 9 | 10 | import javax.enterprise.context.ApplicationScoped; 11 | import javax.inject.Inject; 12 | import java.util.*; 13 | 14 | import static com.mongodb.client.model.Filters.eq; 15 | 16 | @ApplicationScoped 17 | public class GroupRepositoryImpl implements GroupRepository { 18 | 19 | @Inject 20 | private MongoDatabase database; 21 | private MongoCollection collection; 22 | 23 | 24 | @Override 25 | public Group add(Group group) { 26 | Objects.requireNonNull(group, "Group can't be null"); 27 | group.setId(new ObjectId(new Date())); 28 | dbCollection().insertOne(group); 29 | return group; 30 | } 31 | 32 | @Override 33 | public List list() { 34 | List groupList = new ArrayList<>(); 35 | MongoCursor mongoCursor = dbCollection().find().iterator(); 36 | mongoCursor.forEachRemaining(groupList::add); 37 | return groupList; 38 | } 39 | 40 | @Override 41 | public Optional byId(String groupId) { 42 | return Optional.ofNullable(dbCollection().find(eq("_id", new ObjectId(groupId))).first()); 43 | } 44 | 45 | 46 | @Override 47 | public void update(Group group) { 48 | Objects.requireNonNull(group, "Group can't be null"); 49 | dbCollection().replaceOne(eq("_id", group.getId()), group); 50 | } 51 | 52 | private MongoCollection dbCollection() { 53 | if (this.collection == null) { 54 | this.collection = this.database.getCollection("Group", Group.class); 55 | } 56 | return this.collection; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lab02/start/repository/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab02/start/repository/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab03/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/CountryApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import org.ecjug.hackday.domain.model.Country; 4 | import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; 5 | 6 | import javax.enterprise.context.Dependent; 7 | import javax.ws.rs.*; 8 | import javax.ws.rs.core.MediaType; 9 | 10 | @Dependent 11 | @RegisterRestClient 12 | @Produces({MediaType.APPLICATION_JSON}) 13 | @Consumes(MediaType.APPLICATION_JSON) 14 | public interface CountryApi { 15 | 16 | @GET 17 | @Path("/rest/v2/alpha/{code}") 18 | Country countryByCode(@PathParam("code") String code); 19 | } -------------------------------------------------------------------------------- /lab03/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/MeetUpApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.PathParam; 6 | import javax.ws.rs.QueryParam; 7 | import java.util.HashMap; 8 | import java.util.List; 9 | 10 | public interface MeetUpApi { 11 | 12 | @GET 13 | @Path("/find/groups/") 14 | List techGroups(@QueryParam("category") String category, @QueryParam("key") String key); 15 | 16 | @GET 17 | @Path("/{urlname}/members/") 18 | List members(@PathParam("urlname") String urlname); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /lab03/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/EventServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.EventService; 5 | import org.ecjug.hackday.domain.model.Event; 6 | import org.ecjug.hackday.domain.model.Member; 7 | import org.ecjug.hackday.repository.EventRepository; 8 | import org.ecjug.hackday.repository.MemberRepository; 9 | 10 | import javax.enterprise.context.ApplicationScoped; 11 | import javax.inject.Inject; 12 | import java.util.List; 13 | 14 | @Slf4j 15 | @ApplicationScoped 16 | public class EventServiceImpl implements EventService { 17 | 18 | @Inject 19 | private EventRepository eventRepository; 20 | 21 | @Inject 22 | private MemberRepository memberRepository; 23 | 24 | @Override 25 | public Event add(Event event) { 26 | return eventRepository.addEvent(event); 27 | } 28 | 29 | @Override 30 | public List list() { 31 | return eventRepository.list(); 32 | } 33 | 34 | @Override 35 | public void addMemberToEvent(String eventId, Member member) { 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lab03/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/MembersServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.MembersService; 5 | import org.ecjug.hackday.domain.model.Member; 6 | import org.ecjug.hackday.repository.MemberRepository; 7 | 8 | import javax.enterprise.context.ApplicationScoped; 9 | import javax.inject.Inject; 10 | import java.util.List; 11 | 12 | @Slf4j 13 | @ApplicationScoped 14 | public class MembersServiceImpl implements MembersService { 15 | 16 | @Inject 17 | private MemberRepository memberRepository; 18 | 19 | @Override 20 | public List list() { 21 | return memberRepository.list(); 22 | } 23 | 24 | @Override 25 | public Member add(Member member) { 26 | return memberRepository.add(member); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lab03/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/health/MeetupHealthCheck.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.health; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.eclipse.microprofile.config.inject.ConfigProperty; 5 | import org.eclipse.microprofile.health.Health; 6 | import org.eclipse.microprofile.health.HealthCheck; 7 | import org.eclipse.microprofile.health.HealthCheckResponse; 8 | 9 | import javax.enterprise.context.ApplicationScoped; 10 | import javax.inject.Inject; 11 | import java.net.HttpURLConnection; 12 | import java.net.URL; 13 | 14 | @Health 15 | @ApplicationScoped 16 | @Slf4j 17 | public class MeetupHealthCheck implements HealthCheck { 18 | 19 | @Inject 20 | @ConfigProperty(name = "meetup.url", defaultValue = "https://api.meetup.com") 21 | private String meetUpApiUrl; 22 | 23 | 24 | @Override 25 | public HealthCheckResponse call() { 26 | try { 27 | HttpURLConnection connection = (HttpURLConnection) new URL(meetUpApiUrl).openConnection(); 28 | connection.setRequestMethod("HEAD"); 29 | 30 | if (connection.getResponseCode() == 200) { 31 | return HealthCheckResponse.named(MeetupHealthCheck.class.getSimpleName()).up().build(); 32 | } 33 | 34 | } catch (Exception exception) { 35 | log.error("Error checking health of" + meetUpApiUrl); 36 | } 37 | return HealthCheckResponse.named(MeetupHealthCheck.class.getSimpleName()).down().build(); 38 | } 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /lab03/finish/api-impl/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab03/finish/api-impl/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | #Mongo 7 | mongo.port=27017 8 | mongo.ip=127.0.0.1 9 | mongo.database.name=mongito 10 | mongo.embedded=true 11 | -------------------------------------------------------------------------------- /lab03/finish/api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | api 13 | 14 | 15 | HackDay ::: API 16 | HackDay ::: API 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.pf4j 27 | pf4j 28 | provided 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /lab03/finish/api/src/main/java/org/ecjug/hackday/api/EventService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | import org.ecjug.hackday.domain.model.Member; 5 | 6 | import java.util.List; 7 | 8 | public interface EventService { 9 | 10 | Event add(Event event); 11 | 12 | List list(); 13 | 14 | void addMemberToEvent(String eventId, Member member); 15 | } 16 | -------------------------------------------------------------------------------- /lab03/finish/api/src/main/java/org/ecjug/hackday/api/GroupService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | import org.ecjug.hackday.domain.model.Member; 5 | import org.pf4j.ExtensionPoint; 6 | 7 | import java.util.List; 8 | import java.util.Optional; 9 | 10 | public interface GroupService extends ExtensionPoint { 11 | 12 | Group add(Group group); 13 | 14 | List list(); 15 | 16 | List loadFromMeetUp(); 17 | 18 | void addMemberToGroup(String groupId, Member member); 19 | 20 | Optional byId(String ecjug); 21 | 22 | List loadMembersFromMeetUpGroup(Group group); 23 | } 24 | -------------------------------------------------------------------------------- /lab03/finish/api/src/main/java/org/ecjug/hackday/api/MembersService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | public interface MembersService { 8 | 9 | List list(); 10 | 11 | Member add(Member member); 12 | } 13 | -------------------------------------------------------------------------------- /lab03/finish/application/.dockerignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | ../docker/src/ 3 | pom.xml 4 | -------------------------------------------------------------------------------- /lab03/finish/application/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM open-liberty 2 | 3 | ENV JVM_ARGS="-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 -Dhttps.protocols=TLSv1.1,TLSv1.2" 4 | 5 | COPY target/liberty/wlp/usr/servers/defaultServer/ /opt/ol/wlp/usr/servers/defaultServer/ 6 | COPY src/main/security/ /opt/ol/wlp/usr/servers/defaultServer/resources/security/ 7 | 8 | RUN rm -f /opt/ol/wlp/usr/servers/defaultServer/apps/application.war.xml \ 9 | && rm -rf /opt/ol/wlp/output/defaultServer/resources/security \ 10 | && ln -s /opt/ol/wlp/usr/servers/defaultServer/resources/security/ /opt/ol/wlp/output/defaultServer/resources/ \ 11 | && ln -s /opt/ol/wlp/usr/servers /servers 12 | 13 | COPY target/application.war /opt/ol/wlp/usr/servers/defaultServer/apps/ 14 | 15 | 16 | ENTRYPOINT ["/opt/ol/wlp/bin/server", "run"] 17 | CMD ["defaultServer"] 18 | 19 | -------------------------------------------------------------------------------- /lab03/finish/application/src/main/java/org/ecjug/hackday/app/HackDayApplication.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | @ApplicationPath("/hackday") 7 | public class HackDayApplication extends Application { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /lab03/finish/application/src/main/java/org/ecjug/hackday/app/resources/MemberResource.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app.resources; 2 | 3 | import org.ecjug.hackday.api.MembersService; 4 | import org.ecjug.hackday.domain.model.Member; 5 | import org.eclipse.microprofile.metrics.annotation.Counted; 6 | import org.eclipse.microprofile.openapi.annotations.Operation; 7 | import org.eclipse.microprofile.openapi.annotations.media.Content; 8 | import org.eclipse.microprofile.openapi.annotations.media.Schema; 9 | import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; 10 | 11 | import javax.enterprise.context.ApplicationScoped; 12 | import javax.inject.Inject; 13 | import javax.ws.rs.*; 14 | import javax.ws.rs.core.MediaType; 15 | import java.util.List; 16 | 17 | @ApplicationScoped 18 | @Produces({MediaType.APPLICATION_JSON}) 19 | @Consumes(MediaType.APPLICATION_JSON) 20 | @Path("/member") 21 | public class MemberResource { 22 | 23 | @Inject 24 | private MembersService membersService; 25 | 26 | @GET 27 | @Path("/list") 28 | @Counted(monotonic = true) 29 | @Operation(summary = "List all Members") 30 | public List listMembers() { 31 | return membersService.list(); 32 | } 33 | 34 | @POST 35 | @Path("/add") 36 | @Counted(monotonic = true) 37 | @Operation(summary = "Creates a new Member") 38 | public Member addMember(@RequestBody(description = "Specify the values to create a new Member", 39 | content = @Content(mediaType = MediaType.APPLICATION_JSON, 40 | schema = @Schema(implementation = Member.class))) Member member) { 41 | return membersService.add(member); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lab03/finish/application/src/main/liberty/config/server.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jaxrs-2.1 5 | jsonp-1.1 6 | cdi-2.0 7 | mpConfig-1.2 8 | mpRestClient-1.1 9 | mpHealth-1.0 10 | mpMetrics-1.1 11 | mpFaultTolerance-1.0 12 | mpOpenAPI-1.0 13 | beanValidation-2.0 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lab03/finish/application/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab03/finish/application/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | #Mongo 7 | mongo.port=27017 8 | mongo.ip=127.0.0.1 9 | mongo.database.name=mongito 10 | mongo.embedded=true 11 | -------------------------------------------------------------------------------- /lab03/finish/application/src/main/security/key.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/lab03/finish/application/src/main/security/key.jks -------------------------------------------------------------------------------- /lab03/finish/application/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | Hack Day Project 6 | 7 | 8 | index.html 9 | 10 | -------------------------------------------------------------------------------- /lab03/finish/application/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Monolitos, Microlitos, Microservicios usando Java / Jakarta EE

4 | 5 |
6 |

Hack Day

7 |

8 | Hack-Days 2018 organizado por la Comunidad Hispana de grupos de usuarios de Java. 9 |

10 |
11 | 
12 | 
13 | 
14 |                                              _o######ooooooo-_
15 |                                             o#####o_o#####~~~~~~
16 |                                            ################o__o
17 |                                          _o###########~~~~~###~
18 |                                        o##############
19 |                                     _o###############~
20 |                                   _o#########~ooo~##~
21 |                                _o############# ##o::___
22 |                             _o#################oo:~~~~~
23 |                          _o#####################~
24 |                        _####~_oooooooo:~~######~
25 |                      _##### o###########_:~##~
26 |                     o#####_##################
27 |                    _#######_~#################_
28 |                    ##########o:~###############o                       ___/\            /\
29 |                  _##############o~##############_                  ___/ *   \          / /
30 |                o#############~~     ~~~~~~~######_                /          |________/ /
31 |            __o##########~::o_             o#######                |                    /
32 |       _oo##########~~::o#####            o###########o___          \____/\              \
33 |   o##########~~~~    ~~~##########       ~~~~#############o               |              |
34 |  o##########~~~~    ~~~##########       ~~~~#############o                |    _______   |
35 | #####~~~~~~                ~~~                                            |___/       \__|
36 | 
37 | 
38 |     
39 |
40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /lab03/finish/domain/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | domain 13 | 14 | 15 | HackDay ::: Domain 16 | HackDay ::: Domain 17 | 18 | 19 | 20 | org.projectlombok 21 | lombok 22 | provided 23 | 24 | 25 | 26 | org.mongodb 27 | bson 28 | 29 | 30 | 31 | com.fasterxml.jackson.core 32 | jackson-annotations 33 | provided 34 | 35 | 36 | 37 | javax 38 | javaee-api 39 | provided 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /lab03/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Country.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | 12 | @Data 13 | @NoArgsConstructor 14 | @JsonIgnoreProperties(ignoreUnknown = true) 15 | public class Country implements Serializable { 16 | 17 | @NotBlank 18 | private String name; 19 | private String alpha2Code; 20 | private String alpha3Code; 21 | private String capital; 22 | private String flag; 23 | private List timezones; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /lab03/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Event.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.bson.types.ObjectId; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import java.io.Serializable; 11 | import java.time.LocalDate; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class Event implements Serializable { 20 | 21 | private ObjectId id; 22 | @NotBlank 23 | private String title; 24 | @NotBlank 25 | private String description; 26 | @NotBlank 27 | private LocalDate date; 28 | 29 | private List memberList; 30 | 31 | public void addMember(Member member) { 32 | if (memberList == null) { 33 | memberList = new ArrayList<>(); 34 | } 35 | if (!memberList.contains(member)) { 36 | memberList.add(member); 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /lab03/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Group.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | import org.bson.types.ObjectId; 10 | 11 | import javax.validation.constraints.NotBlank; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | @JsonIgnoreProperties(ignoreUnknown = true) 20 | public class Group { 21 | 22 | @JsonIgnore 23 | private ObjectId id; 24 | @NotBlank 25 | private String name; 26 | private String description; 27 | private String link; 28 | @NotBlank 29 | private String urlname; 30 | @NotBlank 31 | private String country; 32 | private Country countryInformation; 33 | private List membersList; 34 | 35 | private String groupId; 36 | 37 | 38 | public void addMember(Member member) { 39 | if (membersList == null) { 40 | membersList = new ArrayList<>(); 41 | } 42 | if (!membersList.contains(member)) { 43 | membersList.add(member); 44 | } 45 | } 46 | 47 | public String getGroupId() { 48 | if (id != null) { 49 | this.groupId = id.toString(); 50 | } 51 | return this.groupId; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lab03/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Member.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.bson.types.ObjectId; 9 | 10 | import javax.validation.constraints.NotBlank; 11 | import java.io.Serializable; 12 | 13 | @Builder(toBuilder = true) 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public final class Member implements Serializable { 18 | 19 | @JsonIgnore 20 | private ObjectId id; 21 | @NotBlank 22 | private String name; 23 | private String country; 24 | private String city; 25 | private String comments; 26 | 27 | private String memberId; 28 | 29 | 30 | public String getMemberId() { 31 | if (id != null) { 32 | memberId = id.toString(); 33 | } 34 | return memberId; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lab03/finish/mongito/src/main/java/org/ecjug/hackday/mongo/health/MongoHealthCheck.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.health; 2 | 3 | import com.mongodb.MongoClient; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.eclipse.microprofile.health.Health; 6 | import org.eclipse.microprofile.health.HealthCheck; 7 | import org.eclipse.microprofile.health.HealthCheckResponse; 8 | 9 | import javax.enterprise.context.ApplicationScoped; 10 | import javax.inject.Inject; 11 | 12 | @Health 13 | @ApplicationScoped 14 | @Slf4j 15 | public class MongoHealthCheck implements HealthCheck { 16 | 17 | @Inject 18 | private MongoClient mongoClient; 19 | 20 | @Override 21 | public HealthCheckResponse call() { 22 | log.info("Health check for mongo database "); 23 | 24 | HealthCheckResponse healthCheckResponse = null; 25 | if (mongoClient != null) { 26 | log.info("Mongo database active!"); 27 | healthCheckResponse = HealthCheckResponse.named(MongoHealthCheck.class.getSimpleName()).up().build(); 28 | } else { 29 | log.error("Mongo database is not active!"); 30 | healthCheckResponse = HealthCheckResponse.named(MongoHealthCheck.class.getSimpleName()).down().build(); 31 | } 32 | return healthCheckResponse; 33 | } 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /lab03/finish/mongito/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab03/finish/mongito/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab03/finish/mongito/src/test/java/org/ecjug/hackday/mongo/test/JUG.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import lombok.*; 4 | import org.bson.types.ObjectId; 5 | 6 | 7 | @Builder(toBuilder = true) 8 | @ToString 9 | @Getter 10 | @Setter 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class JUG { 14 | 15 | private ObjectId id; 16 | private String jugName; 17 | private String country; 18 | private int members; 19 | 20 | } -------------------------------------------------------------------------------- /lab03/finish/mongito/src/test/java/org/ecjug/hackday/mongo/test/MongoClientProducerTest.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import com.kumuluz.ee.common.config.EeConfig; 4 | import com.kumuluz.ee.common.runtime.EeRuntime; 5 | import com.kumuluz.ee.common.runtime.EeRuntimeInternal; 6 | import com.kumuluz.ee.configuration.utils.ConfigurationImpl; 7 | import com.kumuluz.ee.configuration.utils.ConfigurationUtil; 8 | import com.mongodb.client.MongoCollection; 9 | import com.mongodb.client.MongoDatabase; 10 | import org.bson.Document; 11 | import org.jboss.weld.environment.se.Weld; 12 | import org.jboss.weld.junit4.WeldInitiator; 13 | import org.junit.BeforeClass; 14 | import org.junit.Rule; 15 | import org.junit.Test; 16 | 17 | import javax.inject.Inject; 18 | 19 | import static com.mongodb.client.model.Filters.eq; 20 | import static org.hamcrest.CoreMatchers.is; 21 | import static org.hamcrest.MatcherAssert.assertThat; 22 | 23 | public class MongoClientProducerTest { 24 | 25 | 26 | @Rule 27 | public WeldInitiator weld = WeldInitiator.from(new Weld()).inject(this).build(); 28 | 29 | @Inject 30 | private MongoDatabase database; 31 | 32 | 33 | @BeforeClass 34 | public static void config() { 35 | ConfigurationUtil.initialize(new ConfigurationImpl()); 36 | EeConfig eeConfig = new EeConfig.Builder().build(); 37 | EeConfig.initialize(eeConfig); 38 | EeRuntime.initialize(new EeRuntimeInternal()); 39 | } 40 | 41 | @Test 42 | public void shouldInsertDocumentTest() { 43 | System.setProperty("mongo.ip", "127.0.0.1"); 44 | MongoCollection collection = database.getCollection("testDocument"); 45 | Document doc = new Document("jugName", "EcuadorJUG") 46 | .append("country", "Ecuador") 47 | .append("membersList", 500); 48 | collection.insertOne(doc); 49 | 50 | Document jugDoc = collection.find(eq("jugName", "EcuadorJUG")).first(); 51 | assertThat(jugDoc.get("country"), is("Ecuador")); 52 | } 53 | 54 | @Test 55 | public void shouldInsertPojoTest() { 56 | System.setProperty("mongo.ip", "127.0.0.1"); 57 | MongoCollection jugCollection = database.getCollection("pojoTest", JUG.class); 58 | 59 | JUG jug = JUG.builder().jugName("EcuadorJUG").country("Ecuador").members(500).build(); 60 | jugCollection.insertOne(jug); 61 | JUG jugFromMongo = jugCollection.find(eq("jugName", "EcuadorJUG")).first(); 62 | 63 | assertThat(jugFromMongo.getCountry(), is("Ecuador")); 64 | 65 | } 66 | 67 | } -------------------------------------------------------------------------------- /lab03/finish/repository/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | repository 13 | 14 | HackDay ::: Repository 15 | HackDay ::: Repository 16 | 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.ecuadorjug 27 | mongito 28 | 29 | 30 | 31 | org.projectlombok 32 | lombok 33 | provided 34 | 35 | 36 | 37 | 38 | org.eclipse.microprofile 39 | microprofile 40 | provided 41 | pom 42 | 43 | 44 | 45 | 46 | org.jboss.weld 47 | weld-junit4 48 | test 49 | 50 | 51 | 52 | 53 | com.kumuluz.ee.config 54 | kumuluzee-config-mp 55 | test 56 | 57 | 58 | 59 | com.kumuluz.ee 60 | kumuluzee-common 61 | test 62 | 63 | 64 | 65 | org.slf4j 66 | slf4j-api 67 | 68 | 69 | 70 | org.slf4j 71 | slf4j-simple 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /lab03/finish/repository/src/main/java/org/ecjug/hackday/repository/EventRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | 5 | import java.util.List; 6 | 7 | public interface EventRepository { 8 | 9 | Event addEvent(Event event); 10 | 11 | void updateEvent(Event event); 12 | 13 | List list(); 14 | 15 | List eventsByTitle(String title); 16 | 17 | List events(String title); 18 | 19 | Event eventById(String id); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /lab03/finish/repository/src/main/java/org/ecjug/hackday/repository/GroupRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | public interface GroupRepository { 9 | 10 | Group add(Group group); 11 | 12 | List list(); 13 | 14 | Optional byId(String groupId); 15 | 16 | void update(Group group); 17 | 18 | Optional byUrlname(String urlname); 19 | } 20 | -------------------------------------------------------------------------------- /lab03/finish/repository/src/main/java/org/ecjug/hackday/repository/MemberRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | public interface MemberRepository { 8 | 9 | Member add(Member member); 10 | 11 | List memberByName(String name); 12 | 13 | Member byId(String id); 14 | 15 | List list(); 16 | 17 | void update(Member member); 18 | } 19 | -------------------------------------------------------------------------------- /lab03/finish/repository/src/main/java/org/ecjug/hackday/repository/impl/EventRepositoryImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository.impl; 2 | 3 | 4 | import com.mongodb.client.MongoCollection; 5 | import com.mongodb.client.MongoCursor; 6 | import com.mongodb.client.MongoDatabase; 7 | import com.mongodb.client.model.Filters; 8 | import lombok.SneakyThrows; 9 | import org.bson.types.ObjectId; 10 | import org.ecjug.hackday.domain.model.Event; 11 | import org.ecjug.hackday.repository.EventRepository; 12 | 13 | import javax.enterprise.context.ApplicationScoped; 14 | import javax.inject.Inject; 15 | import java.util.ArrayList; 16 | import java.util.Date; 17 | import java.util.List; 18 | import java.util.Objects; 19 | 20 | import static com.mongodb.client.model.Filters.eq; 21 | 22 | 23 | @ApplicationScoped 24 | public class EventRepositoryImpl implements EventRepository { 25 | 26 | 27 | @Inject 28 | private MongoDatabase database; 29 | private MongoCollection collection; 30 | 31 | @Override 32 | public Event addEvent(Event event) { 33 | Objects.requireNonNull(event, "Event can't be null"); 34 | event.setId(new ObjectId(new Date())); 35 | dbCollection().insertOne(event); 36 | return event; 37 | } 38 | 39 | @Override 40 | @SneakyThrows 41 | public void updateEvent(Event event) { 42 | Objects.requireNonNull(event, "Event can't be null"); 43 | dbCollection().replaceOne(eq("_id", event.getId()), event); 44 | } 45 | 46 | @Override 47 | public List list() { 48 | List eventList = new ArrayList<>(); 49 | MongoCursor mongoCursor = dbCollection().find().iterator(); 50 | mongoCursor.forEachRemaining(eventList::add); 51 | return eventList; 52 | } 53 | 54 | @Override 55 | public List eventsByTitle(String title) { 56 | return filter("title", title); 57 | } 58 | 59 | @Override 60 | public List events(String description) { 61 | return filter("description", description); 62 | } 63 | 64 | @Override 65 | public Event eventById(String id) { 66 | return dbCollection().find(eq("_id", new ObjectId(id))).first(); 67 | } 68 | 69 | 70 | private List filter(final String fieldName, final String pattern) { 71 | return dbCollection().find(Filters.regex(fieldName, pattern)).into(new ArrayList<>()); 72 | } 73 | 74 | private MongoCollection dbCollection() { 75 | if (this.collection == null) { 76 | this.collection = this.database.getCollection("Event", Event.class); 77 | } 78 | return this.collection; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /lab03/finish/repository/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab03/finish/repository/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab03/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/CountryApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import org.ecjug.hackday.domain.model.Country; 4 | import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; 5 | 6 | import javax.enterprise.context.Dependent; 7 | import javax.ws.rs.*; 8 | import javax.ws.rs.core.MediaType; 9 | 10 | @Dependent 11 | @RegisterRestClient 12 | @Produces({MediaType.APPLICATION_JSON}) 13 | @Consumes(MediaType.APPLICATION_JSON) 14 | public interface CountryApi { 15 | 16 | @GET 17 | @Path("/rest/v2/alpha/{code}") 18 | Country countryByCode(@PathParam("code") String code); 19 | } -------------------------------------------------------------------------------- /lab03/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/MeetUpApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.PathParam; 6 | import javax.ws.rs.QueryParam; 7 | import java.util.HashMap; 8 | import java.util.List; 9 | 10 | public interface MeetUpApi { 11 | 12 | @GET 13 | @Path("/find/groups/") 14 | List techGroups(@QueryParam("category") String category, @QueryParam("key") String key); 15 | 16 | @GET 17 | @Path("/{urlname}/members/") 18 | List members(@PathParam("urlname") String urlname); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /lab03/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/EventServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.EventService; 5 | import org.ecjug.hackday.domain.model.Event; 6 | import org.ecjug.hackday.domain.model.Member; 7 | import org.ecjug.hackday.repository.EventRepository; 8 | import org.ecjug.hackday.repository.MemberRepository; 9 | 10 | import javax.enterprise.context.ApplicationScoped; 11 | import javax.inject.Inject; 12 | import java.util.List; 13 | 14 | @Slf4j 15 | @ApplicationScoped 16 | public class EventServiceImpl implements EventService { 17 | 18 | @Inject 19 | private EventRepository eventRepository; 20 | 21 | @Inject 22 | private MemberRepository memberRepository; 23 | 24 | @Override 25 | public Event add(Event event) { 26 | return eventRepository.addEvent(event); 27 | } 28 | 29 | @Override 30 | public List list() { 31 | return eventRepository.list(); 32 | } 33 | 34 | @Override 35 | public void addMemberToEvent(String eventId, Member member) { 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lab03/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/MembersServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.MembersService; 5 | import org.ecjug.hackday.domain.model.Member; 6 | import org.ecjug.hackday.repository.MemberRepository; 7 | 8 | import javax.enterprise.context.ApplicationScoped; 9 | import javax.inject.Inject; 10 | import java.util.List; 11 | 12 | @Slf4j 13 | @ApplicationScoped 14 | public class MembersServiceImpl implements MembersService { 15 | 16 | @Inject 17 | private MemberRepository memberRepository; 18 | 19 | @Override 20 | public List list() { 21 | return memberRepository.list(); 22 | } 23 | 24 | @Override 25 | public Member add(Member member) { 26 | return memberRepository.add(member); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lab03/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/health/MeetupHealthCheck.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.health; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.eclipse.microprofile.config.inject.ConfigProperty; 5 | import org.eclipse.microprofile.health.Health; 6 | import org.eclipse.microprofile.health.HealthCheck; 7 | import org.eclipse.microprofile.health.HealthCheckResponse; 8 | 9 | import javax.enterprise.context.ApplicationScoped; 10 | import javax.inject.Inject; 11 | import java.net.HttpURLConnection; 12 | import java.net.URL; 13 | 14 | @Health 15 | @ApplicationScoped 16 | @Slf4j 17 | public class MeetupHealthCheck implements HealthCheck { 18 | 19 | @Inject 20 | @ConfigProperty(name = "meetup.url", defaultValue = "https://api.meetup.com") 21 | private String meetUpApiUrl; 22 | 23 | 24 | @Override 25 | public HealthCheckResponse call() { 26 | try { 27 | HttpURLConnection connection = (HttpURLConnection) new URL(meetUpApiUrl).openConnection(); 28 | connection.setRequestMethod("HEAD"); 29 | 30 | if (connection.getResponseCode() == 200) { 31 | return HealthCheckResponse.named(MeetupHealthCheck.class.getSimpleName()).up().build(); 32 | } 33 | 34 | } catch (Exception exception) { 35 | log.error("Error checking health of" + meetUpApiUrl); 36 | } 37 | return HealthCheckResponse.named(MeetupHealthCheck.class.getSimpleName()).down().build(); 38 | } 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /lab03/start/api-impl/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab03/start/api-impl/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | #Mongo 7 | mongo.port=27017 8 | mongo.ip=127.0.0.1 9 | mongo.database.name=mongito 10 | mongo.embedded=true 11 | -------------------------------------------------------------------------------- /lab03/start/api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | api 13 | 14 | 15 | HackDay ::: API 16 | HackDay ::: API 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.pf4j 27 | pf4j 28 | provided 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /lab03/start/api/src/main/java/org/ecjug/hackday/api/EventService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | import org.ecjug.hackday.domain.model.Member; 5 | 6 | import java.util.List; 7 | 8 | public interface EventService { 9 | 10 | Event add(Event event); 11 | 12 | List list(); 13 | 14 | void addMemberToEvent(String eventId, Member member); 15 | } 16 | -------------------------------------------------------------------------------- /lab03/start/api/src/main/java/org/ecjug/hackday/api/GroupService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | import org.ecjug.hackday.domain.model.Member; 5 | import org.pf4j.ExtensionPoint; 6 | 7 | import java.util.List; 8 | import java.util.Optional; 9 | 10 | public interface GroupService extends ExtensionPoint { 11 | 12 | Group add(Group group); 13 | 14 | List list(); 15 | 16 | List loadFromMeetUp(); 17 | 18 | void addMemberToGroup(String groupId, Member member); 19 | 20 | Optional byId(String ecjug); 21 | 22 | List loadMembersFromMeetUpGroup(Group group); 23 | } 24 | -------------------------------------------------------------------------------- /lab03/start/api/src/main/java/org/ecjug/hackday/api/MembersService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | public interface MembersService { 8 | 9 | List list(); 10 | 11 | Member add(Member member); 12 | } 13 | -------------------------------------------------------------------------------- /lab03/start/application/.dockerignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | ../docker/src/ 3 | pom.xml 4 | -------------------------------------------------------------------------------- /lab03/start/application/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM open-liberty 2 | 3 | ENV JVM_ARGS="-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 -Dhttps.protocols=TLSv1.1,TLSv1.2" 4 | 5 | COPY target/liberty/wlp/usr/servers/defaultServer/ /opt/ol/wlp/usr/servers/defaultServer/ 6 | COPY src/main/security/ /opt/ol/wlp/usr/servers/defaultServer/resources/security/ 7 | 8 | RUN rm -f /opt/ol/wlp/usr/servers/defaultServer/apps/application.war.xml \ 9 | && rm -rf /opt/ol/wlp/output/defaultServer/resources/security \ 10 | && ln -s /opt/ol/wlp/usr/servers/defaultServer/resources/security/ /opt/ol/wlp/output/defaultServer/resources/ \ 11 | && ln -s /opt/ol/wlp/usr/servers /servers 12 | 13 | COPY target/application.war /opt/ol/wlp/usr/servers/defaultServer/apps/ 14 | 15 | 16 | ENTRYPOINT ["/opt/ol/wlp/bin/server", "run"] 17 | CMD ["defaultServer"] 18 | 19 | -------------------------------------------------------------------------------- /lab03/start/application/src/main/java/org/ecjug/hackday/app/HackDayApplication.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | @ApplicationPath("/hackday") 7 | public class HackDayApplication extends Application { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /lab03/start/application/src/main/java/org/ecjug/hackday/app/resources/MemberResource.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app.resources; 2 | 3 | import org.ecjug.hackday.api.MembersService; 4 | import org.ecjug.hackday.domain.model.Member; 5 | import org.eclipse.microprofile.metrics.annotation.Counted; 6 | import org.eclipse.microprofile.openapi.annotations.Operation; 7 | import org.eclipse.microprofile.openapi.annotations.media.Content; 8 | import org.eclipse.microprofile.openapi.annotations.media.Schema; 9 | import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; 10 | 11 | import javax.enterprise.context.ApplicationScoped; 12 | import javax.inject.Inject; 13 | import javax.ws.rs.*; 14 | import javax.ws.rs.core.MediaType; 15 | import java.util.List; 16 | 17 | @ApplicationScoped 18 | @Produces({MediaType.APPLICATION_JSON}) 19 | @Consumes(MediaType.APPLICATION_JSON) 20 | @Path("/member") 21 | public class MemberResource { 22 | 23 | @Inject 24 | private MembersService membersService; 25 | 26 | @GET 27 | @Path("/list") 28 | public List listMembers() { 29 | return membersService.list(); 30 | } 31 | 32 | @POST 33 | @Path("/add") 34 | public Member addMember(Member member) { 35 | return membersService.add(member); 36 | } 37 | } -------------------------------------------------------------------------------- /lab03/start/application/src/main/liberty/config/server.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jaxrs-2.1 5 | jsonp-1.1 6 | cdi-2.0 7 | mpConfig-1.2 8 | mpRestClient-1.1 9 | mpHealth-1.0 10 | mpMetrics-1.1 11 | mpFaultTolerance-1.0 12 | mpOpenAPI-1.0 13 | beanValidation-2.0 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lab03/start/application/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab03/start/application/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | #Mongo 7 | mongo.port=27017 8 | mongo.ip=127.0.0.1 9 | mongo.database.name=mongito 10 | mongo.embedded=true 11 | -------------------------------------------------------------------------------- /lab03/start/application/src/main/security/key.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/lab03/start/application/src/main/security/key.jks -------------------------------------------------------------------------------- /lab03/start/application/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | Hack Day Project 6 | 7 | 8 | index.html 9 | 10 | -------------------------------------------------------------------------------- /lab03/start/application/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Monolitos, Microlitos, Microservicios usando Java / Jakarta EE

4 | 5 |
6 |

Hack Day

7 |

8 | Hack-Days 2018 organizado por la Comunidad Hispana de grupos de usuarios de Java. 9 |

10 |
11 | 
12 | 
13 | 
14 |                                              _o######ooooooo-_
15 |                                             o#####o_o#####~~~~~~
16 |                                            ################o__o
17 |                                          _o###########~~~~~###~
18 |                                        o##############
19 |                                     _o###############~
20 |                                   _o#########~ooo~##~
21 |                                _o############# ##o::___
22 |                             _o#################oo:~~~~~
23 |                          _o#####################~
24 |                        _####~_oooooooo:~~######~
25 |                      _##### o###########_:~##~
26 |                     o#####_##################
27 |                    _#######_~#################_
28 |                    ##########o:~###############o                       ___/\            /\
29 |                  _##############o~##############_                  ___/ *   \          / /
30 |                o#############~~     ~~~~~~~######_                /          |________/ /
31 |            __o##########~::o_             o#######                |                    /
32 |       _oo##########~~::o#####            o###########o___          \____/\              \
33 |   o##########~~~~    ~~~##########       ~~~~#############o               |              |
34 |  o##########~~~~    ~~~##########       ~~~~#############o                |    _______   |
35 | #####~~~~~~                ~~~                                            |___/       \__|
36 | 
37 | 
38 |     
39 |
40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /lab03/start/domain/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | domain 13 | 14 | 15 | HackDay ::: Domain 16 | HackDay ::: Domain 17 | 18 | 19 | 20 | org.projectlombok 21 | lombok 22 | provided 23 | 24 | 25 | 26 | org.mongodb 27 | bson 28 | 29 | 30 | 31 | com.fasterxml.jackson.core 32 | jackson-annotations 33 | provided 34 | 35 | 36 | 37 | javax 38 | javaee-api 39 | provided 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /lab03/start/domain/src/main/java/org/ecjug/hackday/domain/model/Country.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | 12 | @Data 13 | @NoArgsConstructor 14 | @JsonIgnoreProperties(ignoreUnknown = true) 15 | public class Country implements Serializable { 16 | 17 | @NotBlank 18 | private String name; 19 | private String alpha2Code; 20 | private String alpha3Code; 21 | private String capital; 22 | private String flag; 23 | private List timezones; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /lab03/start/domain/src/main/java/org/ecjug/hackday/domain/model/Event.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.bson.types.ObjectId; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import java.io.Serializable; 11 | import java.time.LocalDate; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class Event implements Serializable { 20 | 21 | private ObjectId id; 22 | @NotBlank 23 | private String title; 24 | @NotBlank 25 | private String description; 26 | @NotBlank 27 | private LocalDate date; 28 | 29 | private List memberList; 30 | 31 | public void addMember(Member member) { 32 | if (memberList == null) { 33 | memberList = new ArrayList<>(); 34 | } 35 | if (!memberList.contains(member)) { 36 | memberList.add(member); 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /lab03/start/domain/src/main/java/org/ecjug/hackday/domain/model/Group.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | import org.bson.types.ObjectId; 10 | 11 | import javax.validation.constraints.NotBlank; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | @JsonIgnoreProperties(ignoreUnknown = true) 20 | public class Group { 21 | 22 | @JsonIgnore 23 | private ObjectId id; 24 | @NotBlank 25 | private String name; 26 | private String description; 27 | private String link; 28 | @NotBlank 29 | private String urlname; 30 | @NotBlank 31 | private String country; 32 | private Country countryInformation; 33 | private List membersList; 34 | 35 | private String groupId; 36 | 37 | 38 | public void addMember(Member member) { 39 | if (membersList == null) { 40 | membersList = new ArrayList<>(); 41 | } 42 | if (!membersList.contains(member)) { 43 | membersList.add(member); 44 | } 45 | } 46 | 47 | public String getGroupId() { 48 | if (id != null) { 49 | this.groupId = id.toString(); 50 | } 51 | return this.groupId; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lab03/start/domain/src/main/java/org/ecjug/hackday/domain/model/Member.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.bson.types.ObjectId; 9 | 10 | import javax.validation.constraints.NotBlank; 11 | import java.io.Serializable; 12 | 13 | @Builder(toBuilder = true) 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public final class Member implements Serializable { 18 | 19 | @JsonIgnore 20 | private ObjectId id; 21 | @NotBlank 22 | private String name; 23 | private String country; 24 | private String city; 25 | private String comments; 26 | 27 | private String memberId; 28 | 29 | 30 | public String getMemberId() { 31 | if (id != null) { 32 | memberId = id.toString(); 33 | } 34 | return memberId; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lab03/start/mongito/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab03/start/mongito/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab03/start/mongito/src/test/java/org/ecjug/hackday/mongo/test/JUG.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import lombok.*; 4 | import org.bson.types.ObjectId; 5 | 6 | 7 | @Builder(toBuilder = true) 8 | @ToString 9 | @Getter 10 | @Setter 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class JUG { 14 | 15 | private ObjectId id; 16 | private String jugName; 17 | private String country; 18 | private int members; 19 | 20 | } -------------------------------------------------------------------------------- /lab03/start/mongito/src/test/java/org/ecjug/hackday/mongo/test/MongoClientProducerTest.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import com.kumuluz.ee.common.config.EeConfig; 4 | import com.kumuluz.ee.common.runtime.EeRuntime; 5 | import com.kumuluz.ee.common.runtime.EeRuntimeInternal; 6 | import com.kumuluz.ee.configuration.utils.ConfigurationImpl; 7 | import com.kumuluz.ee.configuration.utils.ConfigurationUtil; 8 | import com.mongodb.client.MongoCollection; 9 | import com.mongodb.client.MongoDatabase; 10 | import org.bson.Document; 11 | import org.jboss.weld.environment.se.Weld; 12 | import org.jboss.weld.junit4.WeldInitiator; 13 | import org.junit.BeforeClass; 14 | import org.junit.Rule; 15 | import org.junit.Test; 16 | 17 | import javax.inject.Inject; 18 | 19 | import static com.mongodb.client.model.Filters.eq; 20 | import static org.hamcrest.CoreMatchers.is; 21 | import static org.hamcrest.MatcherAssert.assertThat; 22 | 23 | public class MongoClientProducerTest { 24 | 25 | 26 | @Rule 27 | public WeldInitiator weld = WeldInitiator.from(new Weld()).inject(this).build(); 28 | 29 | @Inject 30 | private MongoDatabase database; 31 | 32 | 33 | @BeforeClass 34 | public static void config() { 35 | ConfigurationUtil.initialize(new ConfigurationImpl()); 36 | EeConfig eeConfig = new EeConfig.Builder().build(); 37 | EeConfig.initialize(eeConfig); 38 | EeRuntime.initialize(new EeRuntimeInternal()); 39 | } 40 | 41 | @Test 42 | public void shouldInsertDocumentTest() { 43 | System.setProperty("mongo.ip", "127.0.0.1"); 44 | MongoCollection collection = database.getCollection("testDocument"); 45 | Document doc = new Document("jugName", "EcuadorJUG") 46 | .append("country", "Ecuador") 47 | .append("membersList", 500); 48 | collection.insertOne(doc); 49 | 50 | Document jugDoc = collection.find(eq("jugName", "EcuadorJUG")).first(); 51 | assertThat(jugDoc.get("country"), is("Ecuador")); 52 | } 53 | 54 | @Test 55 | public void shouldInsertPojoTest() { 56 | System.setProperty("mongo.ip", "127.0.0.1"); 57 | MongoCollection jugCollection = database.getCollection("pojoTest", JUG.class); 58 | 59 | JUG jug = JUG.builder().jugName("EcuadorJUG").country("Ecuador").members(500).build(); 60 | jugCollection.insertOne(jug); 61 | JUG jugFromMongo = jugCollection.find(eq("jugName", "EcuadorJUG")).first(); 62 | 63 | assertThat(jugFromMongo.getCountry(), is("Ecuador")); 64 | 65 | } 66 | 67 | } -------------------------------------------------------------------------------- /lab03/start/repository/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | repository 13 | 14 | HackDay ::: Repository 15 | HackDay ::: Repository 16 | 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.ecuadorjug 27 | mongito 28 | 29 | 30 | 31 | org.projectlombok 32 | lombok 33 | provided 34 | 35 | 36 | 37 | 38 | org.eclipse.microprofile 39 | microprofile 40 | provided 41 | pom 42 | 43 | 44 | 45 | 46 | org.jboss.weld 47 | weld-junit4 48 | test 49 | 50 | 51 | 52 | 53 | com.kumuluz.ee.config 54 | kumuluzee-config-mp 55 | test 56 | 57 | 58 | 59 | com.kumuluz.ee 60 | kumuluzee-common 61 | test 62 | 63 | 64 | 65 | org.slf4j 66 | slf4j-api 67 | 68 | 69 | 70 | org.slf4j 71 | slf4j-simple 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /lab03/start/repository/src/main/java/org/ecjug/hackday/repository/EventRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | 5 | import java.util.List; 6 | 7 | public interface EventRepository { 8 | 9 | Event addEvent(Event event); 10 | 11 | void updateEvent(Event event); 12 | 13 | List list(); 14 | 15 | List eventsByTitle(String title); 16 | 17 | List events(String title); 18 | 19 | Event eventById(String id); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /lab03/start/repository/src/main/java/org/ecjug/hackday/repository/GroupRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | public interface GroupRepository { 9 | 10 | Group add(Group group); 11 | 12 | List list(); 13 | 14 | Optional byId(String groupId); 15 | 16 | void update(Group group); 17 | 18 | Optional byUrlname(String urlname); 19 | } 20 | -------------------------------------------------------------------------------- /lab03/start/repository/src/main/java/org/ecjug/hackday/repository/MemberRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | public interface MemberRepository { 8 | 9 | Member add(Member member); 10 | 11 | List memberByName(String name); 12 | 13 | Member byId(String id); 14 | 15 | List list(); 16 | 17 | void update(Member member); 18 | } 19 | -------------------------------------------------------------------------------- /lab03/start/repository/src/main/java/org/ecjug/hackday/repository/impl/EventRepositoryImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository.impl; 2 | 3 | 4 | import com.mongodb.client.MongoCollection; 5 | import com.mongodb.client.MongoCursor; 6 | import com.mongodb.client.MongoDatabase; 7 | import com.mongodb.client.model.Filters; 8 | import lombok.SneakyThrows; 9 | import org.bson.types.ObjectId; 10 | import org.ecjug.hackday.domain.model.Event; 11 | import org.ecjug.hackday.repository.EventRepository; 12 | 13 | import javax.enterprise.context.ApplicationScoped; 14 | import javax.inject.Inject; 15 | import java.util.ArrayList; 16 | import java.util.Date; 17 | import java.util.List; 18 | import java.util.Objects; 19 | 20 | import static com.mongodb.client.model.Filters.eq; 21 | 22 | 23 | @ApplicationScoped 24 | public class EventRepositoryImpl implements EventRepository { 25 | 26 | 27 | @Inject 28 | private MongoDatabase database; 29 | private MongoCollection collection; 30 | 31 | @Override 32 | public Event addEvent(Event event) { 33 | Objects.requireNonNull(event, "Event can't be null"); 34 | event.setId(new ObjectId(new Date())); 35 | dbCollection().insertOne(event); 36 | return event; 37 | } 38 | 39 | @Override 40 | @SneakyThrows 41 | public void updateEvent(Event event) { 42 | Objects.requireNonNull(event, "Event can't be null"); 43 | dbCollection().replaceOne(eq("_id", event.getId()), event); 44 | } 45 | 46 | @Override 47 | public List list() { 48 | List eventList = new ArrayList<>(); 49 | MongoCursor mongoCursor = dbCollection().find().iterator(); 50 | mongoCursor.forEachRemaining(eventList::add); 51 | return eventList; 52 | } 53 | 54 | @Override 55 | public List eventsByTitle(String title) { 56 | return filter("title", title); 57 | } 58 | 59 | @Override 60 | public List events(String description) { 61 | return filter("description", description); 62 | } 63 | 64 | @Override 65 | public Event eventById(String id) { 66 | return dbCollection().find(eq("_id", new ObjectId(id))).first(); 67 | } 68 | 69 | 70 | private List filter(final String fieldName, final String pattern) { 71 | return dbCollection().find(Filters.regex(fieldName, pattern)).into(new ArrayList<>()); 72 | } 73 | 74 | private MongoCollection dbCollection() { 75 | if (this.collection == null) { 76 | this.collection = this.database.getCollection("Event", Event.class); 77 | } 78 | return this.collection; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /lab03/start/repository/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab03/start/repository/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab04/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/CountryApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import org.ecjug.hackday.domain.model.Country; 4 | import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; 5 | 6 | import javax.enterprise.context.Dependent; 7 | import javax.ws.rs.*; 8 | import javax.ws.rs.core.MediaType; 9 | 10 | @Dependent 11 | @RegisterRestClient 12 | @Produces({MediaType.APPLICATION_JSON}) 13 | @Consumes(MediaType.APPLICATION_JSON) 14 | public interface CountryApi { 15 | 16 | @GET 17 | @Path("/rest/v2/alpha/{code}") 18 | Country countryByCode(@PathParam("code") String code); 19 | } -------------------------------------------------------------------------------- /lab04/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/MeetUpApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.PathParam; 6 | import javax.ws.rs.QueryParam; 7 | import java.util.HashMap; 8 | import java.util.List; 9 | 10 | /** 11 | * @author Kleber Ayala 12 | */ 13 | 14 | public interface MeetUpApi { 15 | 16 | @GET 17 | @Path("/find/groups/") 18 | List techGroups(@QueryParam("category") String category, @QueryParam("key") String key); 19 | 20 | @GET 21 | @Path("/{urlname}/members/") 22 | List members(@PathParam("urlname") String urlname); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /lab04/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/MemberApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; 5 | 6 | import javax.enterprise.context.Dependent; 7 | import javax.ws.rs.Consumes; 8 | import javax.ws.rs.POST; 9 | import javax.ws.rs.Path; 10 | import javax.ws.rs.Produces; 11 | import javax.ws.rs.core.MediaType; 12 | 13 | /** 14 | * @author Kleber Ayala 15 | */ 16 | @Dependent 17 | @RegisterRestClient 18 | @Produces({MediaType.APPLICATION_JSON}) 19 | @Consumes(MediaType.APPLICATION_JSON) 20 | public interface MemberApi { 21 | 22 | @POST 23 | @Path("/member/add/") 24 | Member add(Member member); 25 | } 26 | -------------------------------------------------------------------------------- /lab04/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/EventServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.EventService; 5 | import org.ecjug.hackday.domain.model.Event; 6 | import org.ecjug.hackday.domain.model.Member; 7 | import org.ecjug.hackday.repository.EventRepository; 8 | import org.ecjug.hackday.repository.MemberRepository; 9 | 10 | import javax.enterprise.context.ApplicationScoped; 11 | import javax.inject.Inject; 12 | import java.util.List; 13 | 14 | @Slf4j 15 | @ApplicationScoped 16 | public class EventServiceImpl implements EventService { 17 | 18 | @Inject 19 | private EventRepository eventRepository; 20 | 21 | @Inject 22 | private MemberRepository memberRepository; 23 | 24 | @Override 25 | public Event add(Event event) { 26 | return eventRepository.addEvent(event); 27 | } 28 | 29 | @Override 30 | public List list() { 31 | return eventRepository.list(); 32 | } 33 | 34 | @Override 35 | public void addMemberToEvent(String eventId, Member member) { 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lab04/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/MembersServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.MembersService; 5 | import org.ecjug.hackday.domain.model.Member; 6 | import org.ecjug.hackday.repository.MemberRepository; 7 | 8 | import javax.enterprise.context.ApplicationScoped; 9 | import javax.inject.Inject; 10 | import java.util.List; 11 | 12 | /** 13 | * @author Kleber Ayala 14 | */ 15 | @Slf4j 16 | @ApplicationScoped 17 | public class MembersServiceImpl implements MembersService { 18 | 19 | @Inject 20 | private MemberRepository memberRepository; 21 | 22 | @Override 23 | public List list() { 24 | return memberRepository.list(); 25 | } 26 | 27 | @Override 28 | public Member add(Member member) { 29 | return memberRepository.add(member); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lab04/finish/api-impl/src/main/java/org/ecjug/hackday/api/impl/health/MeetupHealthCheck.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.health; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.eclipse.microprofile.config.inject.ConfigProperty; 5 | import org.eclipse.microprofile.health.Health; 6 | import org.eclipse.microprofile.health.HealthCheck; 7 | import org.eclipse.microprofile.health.HealthCheckResponse; 8 | 9 | import javax.enterprise.context.ApplicationScoped; 10 | import javax.inject.Inject; 11 | import java.net.HttpURLConnection; 12 | import java.net.URL; 13 | 14 | /** 15 | * @author Kleber Ayala 16 | */ 17 | @Health 18 | @ApplicationScoped 19 | @Slf4j 20 | public class MeetupHealthCheck implements HealthCheck { 21 | 22 | @Inject 23 | @ConfigProperty(name = "meetup.url", defaultValue = "https://api.meetup.com") 24 | private String meetUpApiUrl; 25 | 26 | 27 | @Override 28 | public HealthCheckResponse call() { 29 | try { 30 | HttpURLConnection connection = (HttpURLConnection) new URL(meetUpApiUrl).openConnection(); 31 | connection.setRequestMethod("HEAD"); 32 | 33 | if (connection.getResponseCode() == 200) { 34 | return HealthCheckResponse.named(MeetupHealthCheck.class.getSimpleName()).up().build(); 35 | } 36 | 37 | } catch (Exception exception) { 38 | log.error("Error checking health of" + meetUpApiUrl); 39 | } 40 | return HealthCheckResponse.named(MeetupHealthCheck.class.getSimpleName()).down().build(); 41 | } 42 | 43 | 44 | } 45 | -------------------------------------------------------------------------------- /lab04/finish/api-impl/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab04/finish/api-impl/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | org.ecjug.hackday.api.impl.MemberApi/mp-rest/url=http://members-app:9081 7 | #Mongo 8 | mongo.port=27017 9 | mongo.ip=127.0.0.1 10 | mongo.database.name=mongito 11 | mongo.embedded=true 12 | -------------------------------------------------------------------------------- /lab04/finish/api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | api 13 | 14 | 15 | HackDay ::: API 16 | HackDay ::: API 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.pf4j 27 | pf4j 28 | provided 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /lab04/finish/api/src/main/java/org/ecjug/hackday/api/EventService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | import org.ecjug.hackday.domain.model.Member; 5 | 6 | import java.util.List; 7 | 8 | public interface EventService { 9 | 10 | Event add(Event event); 11 | 12 | List list(); 13 | 14 | void addMemberToEvent(String eventId, Member member); 15 | } 16 | -------------------------------------------------------------------------------- /lab04/finish/api/src/main/java/org/ecjug/hackday/api/GroupService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | import org.ecjug.hackday.domain.model.Member; 5 | import org.pf4j.ExtensionPoint; 6 | 7 | import java.util.List; 8 | import java.util.Optional; 9 | 10 | public interface GroupService extends ExtensionPoint { 11 | 12 | Group add(Group group); 13 | 14 | List list(); 15 | 16 | List loadFromMeetUp(); 17 | 18 | void addMemberToGroup(String groupId, Member member); 19 | 20 | Optional byId(String ecjug); 21 | 22 | List loadMembersFromMeetUpGroup(Group group); 23 | } 24 | -------------------------------------------------------------------------------- /lab04/finish/api/src/main/java/org/ecjug/hackday/api/MembersService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | public interface MembersService { 8 | 9 | List list(); 10 | 11 | Member add(Member member); 12 | } 13 | -------------------------------------------------------------------------------- /lab04/finish/application/.dockerignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | ../docker/src/ 3 | pom.xml 4 | -------------------------------------------------------------------------------- /lab04/finish/application/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM open-liberty 2 | 3 | 4 | 5 | COPY target/liberty/wlp/usr/servers/defaultServer/ /opt/ol/wlp/usr/servers/defaultServer/ 6 | 7 | COPY src/main/security/ /opt/ol/wlp/usr/servers/defaultServer/resources/security/ 8 | 9 | RUN rm -f /opt/ol/wlp/usr/servers/defaultServer/apps/application.war.xml 10 | COPY target/application.war /opt/ol/wlp/usr/servers/defaultServer/apps/ 11 | 12 | RUN ln -s /opt/ol/wlp/usr/servers /servers 13 | 14 | 15 | 16 | ENTRYPOINT ["/opt/ol/wlp/bin/server", "run"] 17 | CMD ["defaultServer"] 18 | 19 | -------------------------------------------------------------------------------- /lab04/finish/application/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | services: 3 | 4 | members-app: 5 | image: member-application:1.0.0-SNAPSHOT 6 | ports: 7 | - "9081:9081" 8 | - "9444:9444" 9 | 10 | hack-day-app: 11 | depends_on: 12 | - members-app 13 | image: application:1.0.0-SNAPSHOT 14 | ports: 15 | - "9080:9080" 16 | - "9443:9443" -------------------------------------------------------------------------------- /lab04/finish/application/src/main/java/org/ecjug/hackday/app/HackDayApplication.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | @ApplicationPath("/hackday") 7 | public class HackDayApplication extends Application { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /lab04/finish/application/src/main/liberty/config/server.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jaxrs-2.1 5 | jsonp-1.1 6 | cdi-2.0 7 | mpConfig-1.2 8 | mpRestClient-1.1 9 | mpHealth-1.0 10 | mpMetrics-1.1 11 | mpFaultTolerance-1.0 12 | mpOpenAPI-1.0 13 | beanValidation-2.0 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lab04/finish/application/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab04/finish/application/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | org.ecjug.hackday.api.impl.MemberApi/mp-rest/url=http://members-app:9081 7 | #Mongo 8 | mongo.port=27017 9 | mongo.ip=127.0.0.1 10 | mongo.database.name=mongito 11 | mongo.embedded=true 12 | -------------------------------------------------------------------------------- /lab04/finish/application/src/main/security/key.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/lab04/finish/application/src/main/security/key.jks -------------------------------------------------------------------------------- /lab04/finish/application/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | Hack Day Project 6 | 7 | 8 | index.html 9 | 10 | -------------------------------------------------------------------------------- /lab04/finish/application/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Monolitos, Microlitos, Microservicios usando Java / Jakarta EE

4 | 5 |
6 |

Hack Day

7 |

8 | Hack-Days 2018 organizado por la Comunidad Hispana de grupos de usuarios de Java. 9 |

10 |
11 | 
12 | 
13 | 
14 |                                              _o######ooooooo-_
15 |                                             o#####o_o#####~~~~~~
16 |                                            ################o__o
17 |                                          _o###########~~~~~###~
18 |                                        o##############
19 |                                     _o###############~
20 |                                   _o#########~ooo~##~
21 |                                _o############# ##o::___
22 |                             _o#################oo:~~~~~
23 |                          _o#####################~
24 |                        _####~_oooooooo:~~######~
25 |                      _##### o###########_:~##~
26 |                     o#####_##################
27 |                    _#######_~#################_
28 |                    ##########o:~###############o                       ___/\            /\
29 |                  _##############o~##############_                  ___/ *   \          / /
30 |                o#############~~     ~~~~~~~######_                /          |________/ /
31 |            __o##########~::o_             o#######                |                    /
32 |       _oo##########~~::o#####            o###########o___          \____/\              \
33 |   o##########~~~~    ~~~##########       ~~~~#############o               |              |
34 |  o##########~~~~    ~~~##########       ~~~~#############o                |    _______   |
35 | #####~~~~~~                ~~~                                            |___/       \__|
36 | 
37 | 
38 |     
39 |
40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /lab04/finish/domain/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | domain 13 | 14 | 15 | HackDay ::: Domain 16 | HackDay ::: Domain 17 | 18 | 19 | 20 | org.projectlombok 21 | lombok 22 | provided 23 | 24 | 25 | 26 | org.mongodb 27 | bson 28 | 29 | 30 | 31 | com.fasterxml.jackson.core 32 | jackson-annotations 33 | provided 34 | 35 | 36 | 37 | javax 38 | javaee-api 39 | provided 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /lab04/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Country.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | 12 | @Data 13 | @NoArgsConstructor 14 | @JsonIgnoreProperties(ignoreUnknown = true) 15 | public class Country implements Serializable { 16 | 17 | @NotBlank 18 | private String name; 19 | private String alpha2Code; 20 | private String alpha3Code; 21 | private String capital; 22 | private String flag; 23 | private List timezones; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /lab04/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Event.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.bson.types.ObjectId; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import java.io.Serializable; 11 | import java.time.LocalDate; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class Event implements Serializable { 20 | 21 | private ObjectId id; 22 | @NotBlank 23 | private String title; 24 | @NotBlank 25 | private String description; 26 | @NotBlank 27 | private LocalDate date; 28 | 29 | private List memberList; 30 | 31 | public void addMember(Member member) { 32 | if (memberList == null) { 33 | memberList = new ArrayList<>(); 34 | } 35 | if (!memberList.contains(member)) { 36 | memberList.add(member); 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /lab04/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Group.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | import org.bson.types.ObjectId; 10 | 11 | import javax.validation.constraints.NotBlank; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | @JsonIgnoreProperties(ignoreUnknown = true) 20 | public class Group { 21 | 22 | @JsonIgnore 23 | private ObjectId id; 24 | @NotBlank 25 | private String name; 26 | private String description; 27 | private String link; 28 | @NotBlank 29 | private String urlname; 30 | @NotBlank 31 | private String country; 32 | private Country countryInformation; 33 | private List membersList; 34 | 35 | private String groupId; 36 | 37 | 38 | public void addMember(Member member) { 39 | if (membersList == null) { 40 | membersList = new ArrayList<>(); 41 | } 42 | if (!membersList.contains(member)) { 43 | membersList.add(member); 44 | } 45 | } 46 | 47 | public String getGroupId() { 48 | if (id != null) { 49 | this.groupId = id.toString(); 50 | } 51 | return this.groupId; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lab04/finish/domain/src/main/java/org/ecjug/hackday/domain/model/Member.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.bson.types.ObjectId; 9 | 10 | import javax.validation.constraints.NotBlank; 11 | import java.io.Serializable; 12 | 13 | @Builder(toBuilder = true) 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public final class Member implements Serializable { 18 | 19 | @JsonIgnore 20 | private ObjectId id; 21 | @NotBlank 22 | private String name; 23 | private String country; 24 | private String city; 25 | private String comments; 26 | 27 | private String memberId; 28 | 29 | 30 | public String getMemberId() { 31 | if (id != null) { 32 | memberId = id.toString(); 33 | } 34 | return memberId; 35 | } 36 | 37 | 38 | } 39 | -------------------------------------------------------------------------------- /lab04/finish/member-application/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM open-liberty 2 | 3 | 4 | 5 | COPY target/liberty/wlp/usr/servers/defaultServer/ /opt/ol/wlp/usr/servers/defaultServer/ 6 | 7 | COPY src/main/security/ /opt/ol/wlp/usr/servers/defaultServer/resources/security/ 8 | 9 | RUN rm -f /opt/ol/wlp/usr/servers/defaultServer/apps/member-application.war.xml 10 | COPY target/member-application.war /opt/ol/wlp/usr/servers/defaultServer/apps/ 11 | 12 | RUN ln -s /opt/ol/wlp/usr/servers /servers 13 | 14 | 15 | 16 | ENTRYPOINT ["/opt/ol/wlp/bin/server", "run"] 17 | CMD ["defaultServer"] 18 | 19 | -------------------------------------------------------------------------------- /lab04/finish/member-application/src/main/java/org/ecjug/member/app/MemberApplication.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.member.app; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | /** 7 | * @author Kleber Ayala 8 | */ 9 | @ApplicationPath("/member") 10 | public class MemberApplication extends Application { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /lab04/finish/member-application/src/main/java/org/ecjug/member/app/resource/MemberResource.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.member.app.resource; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | import org.ecjug.hackday.repository.MemberRepository; 5 | import org.eclipse.microprofile.metrics.annotation.Counted; 6 | import org.eclipse.microprofile.openapi.annotations.Operation; 7 | import org.eclipse.microprofile.openapi.annotations.media.Content; 8 | import org.eclipse.microprofile.openapi.annotations.media.Schema; 9 | import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; 10 | 11 | import javax.enterprise.context.ApplicationScoped; 12 | import javax.inject.Inject; 13 | import javax.ws.rs.*; 14 | import javax.ws.rs.core.MediaType; 15 | import java.util.List; 16 | 17 | @ApplicationScoped 18 | @Produces({MediaType.APPLICATION_JSON}) 19 | @Consumes(MediaType.APPLICATION_JSON) 20 | @Path("/") 21 | public class MemberResource { 22 | 23 | @Inject 24 | private MemberRepository memberRepository; 25 | 26 | @GET 27 | @Path("/list") 28 | @Counted(monotonic = true) 29 | @Operation(summary = "List all Members") 30 | public List listMembers() { 31 | return memberRepository.list(); 32 | } 33 | 34 | @POST 35 | @Path("/add") 36 | @Counted(monotonic = true) 37 | @Operation(summary = "Creates a new Member") 38 | public Member addMember(@RequestBody(description = "Specify the values to create a new Member", 39 | content = @Content(mediaType = MediaType.APPLICATION_JSON, 40 | schema = @Schema(implementation = Member.class))) Member member) { 41 | return memberRepository.add(member); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lab04/finish/member-application/src/main/liberty/config/server.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jaxrs-2.1 5 | jsonp-1.1 6 | cdi-2.0 7 | mpConfig-1.2 8 | mpRestClient-1.1 9 | mpHealth-1.0 10 | mpMetrics-1.1 11 | mpFaultTolerance-1.0 12 | mpOpenAPI-1.0 13 | beanValidation-2.0 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lab04/finish/member-application/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab04/finish/member-application/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #Mongo 2 | mongo.port=27017 3 | mongo.ip=127.0.0.1 4 | mongo.database.name=mongito 5 | mongo.embedded=true 6 | -------------------------------------------------------------------------------- /lab04/finish/member-application/src/main/security/key.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/lab04/finish/member-application/src/main/security/key.jks -------------------------------------------------------------------------------- /lab04/finish/member-application/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | Hack Day Project 6 | 7 | 8 | index.html 9 | 10 | -------------------------------------------------------------------------------- /lab04/finish/member-application/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Monolitos, Microlitos, Microservicios usando Java / Jakarta EE

4 | 5 |
6 |

Hack Day

7 |

8 | Hack-Days 2018 organizado por la Comunidad Hispana de grupos de usuarios de Java. 9 |

10 |

11 | Members App 12 |

13 | 14 |
15 | 
16 |                               /^--^\     /^--^\     /^--^\
17 |                               \____/     \____/     \____/
18 |                              /      \   /      \   /      \
19 |                             |        | |        | |        |
20 |                              \__  __/   \__  __/   \__  __/
21 |         |^|^|^|^|^|^|^|^|^|^|^|^\ \^|^|^|^/ /^|^|^|^|^\ \^|^|^|^|^|^|^|^|^|^|^|^|
22 |         | | | | | | | | | | | | |\ \| | |/ /| | | | | | \ \ | | | | | | | | | | |
23 |         ########################/ /######\ \###########/ /#######################
24 |         | | | | | | | | | | | | \/| | | | \/| | | | | |\/ | | | | | | | | | | | |
25 |         |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
26 | 
27 | 
28 |     
29 |
30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /lab04/finish/mongito/src/main/java/org/ecjug/hackday/mongo/health/MongoHealthCheck.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.health; 2 | 3 | import com.mongodb.MongoClient; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.eclipse.microprofile.health.Health; 6 | import org.eclipse.microprofile.health.HealthCheck; 7 | import org.eclipse.microprofile.health.HealthCheckResponse; 8 | 9 | import javax.enterprise.context.ApplicationScoped; 10 | import javax.inject.Inject; 11 | 12 | @Health 13 | @ApplicationScoped 14 | @Slf4j 15 | public class MongoHealthCheck implements HealthCheck { 16 | 17 | @Inject 18 | private MongoClient mongoClient; 19 | 20 | @Override 21 | public HealthCheckResponse call() { 22 | log.info("Health check for mongo database "); 23 | 24 | HealthCheckResponse healthCheckResponse = null; 25 | if (mongoClient != null) { 26 | log.info("Mongo database active!"); 27 | healthCheckResponse = HealthCheckResponse.named(MongoHealthCheck.class.getSimpleName()).up().build(); 28 | } else { 29 | log.error("Mongo database is not active!"); 30 | healthCheckResponse = HealthCheckResponse.named(MongoHealthCheck.class.getSimpleName()).down().build(); 31 | } 32 | return healthCheckResponse; 33 | } 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /lab04/finish/mongito/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab04/finish/mongito/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab04/finish/mongito/src/test/java/org/ecjug/hackday/mongo/test/JUG.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import lombok.*; 4 | import org.bson.types.ObjectId; 5 | 6 | 7 | @Builder(toBuilder = true) 8 | @ToString 9 | @Getter 10 | @Setter 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class JUG { 14 | 15 | private ObjectId id; 16 | private String jugName; 17 | private String country; 18 | private int members; 19 | 20 | } -------------------------------------------------------------------------------- /lab04/finish/mongito/src/test/java/org/ecjug/hackday/mongo/test/MongoClientProducerTest.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import com.kumuluz.ee.common.config.EeConfig; 4 | import com.kumuluz.ee.common.runtime.EeRuntime; 5 | import com.kumuluz.ee.common.runtime.EeRuntimeInternal; 6 | import com.kumuluz.ee.configuration.utils.ConfigurationImpl; 7 | import com.kumuluz.ee.configuration.utils.ConfigurationUtil; 8 | import com.mongodb.client.MongoCollection; 9 | import com.mongodb.client.MongoDatabase; 10 | import org.bson.Document; 11 | import org.jboss.weld.environment.se.Weld; 12 | import org.jboss.weld.junit4.WeldInitiator; 13 | import org.junit.BeforeClass; 14 | import org.junit.Rule; 15 | import org.junit.Test; 16 | 17 | import javax.inject.Inject; 18 | 19 | import static com.mongodb.client.model.Filters.eq; 20 | import static org.hamcrest.CoreMatchers.is; 21 | import static org.hamcrest.MatcherAssert.assertThat; 22 | 23 | public class MongoClientProducerTest { 24 | 25 | 26 | @Rule 27 | public WeldInitiator weld = WeldInitiator.from(new Weld()).inject(this).build(); 28 | 29 | @Inject 30 | private MongoDatabase database; 31 | 32 | 33 | @BeforeClass 34 | public static void config() { 35 | ConfigurationUtil.initialize(new ConfigurationImpl()); 36 | EeConfig eeConfig = new EeConfig.Builder().build(); 37 | EeConfig.initialize(eeConfig); 38 | EeRuntime.initialize(new EeRuntimeInternal()); 39 | } 40 | 41 | @Test 42 | public void shouldInsertDocumentTest() { 43 | System.setProperty("mongo.ip", "127.0.0.1"); 44 | MongoCollection collection = database.getCollection("testDocument"); 45 | Document doc = new Document("jugName", "EcuadorJUG") 46 | .append("country", "Ecuador") 47 | .append("membersList", 500); 48 | collection.insertOne(doc); 49 | 50 | Document jugDoc = collection.find(eq("jugName", "EcuadorJUG")).first(); 51 | assertThat(jugDoc.get("country"), is("Ecuador")); 52 | } 53 | 54 | @Test 55 | public void shouldInsertPojoTest() { 56 | System.setProperty("mongo.ip", "127.0.0.1"); 57 | MongoCollection jugCollection = database.getCollection("pojoTest", JUG.class); 58 | 59 | JUG jug = JUG.builder().jugName("EcuadorJUG").country("Ecuador").members(500).build(); 60 | jugCollection.insertOne(jug); 61 | JUG jugFromMongo = jugCollection.find(eq("jugName", "EcuadorJUG")).first(); 62 | 63 | assertThat(jugFromMongo.getCountry(), is("Ecuador")); 64 | 65 | } 66 | 67 | } -------------------------------------------------------------------------------- /lab04/finish/repository/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | repository 13 | 14 | HackDay ::: Repository 15 | HackDay ::: Repository 16 | 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.ecuadorjug 27 | mongito 28 | 29 | 30 | 31 | org.projectlombok 32 | lombok 33 | provided 34 | 35 | 36 | 37 | 38 | org.eclipse.microprofile 39 | microprofile 40 | provided 41 | pom 42 | 43 | 44 | 45 | 46 | org.jboss.weld 47 | weld-junit4 48 | test 49 | 50 | 51 | 52 | 53 | com.kumuluz.ee.config 54 | kumuluzee-config-mp 55 | test 56 | 57 | 58 | 59 | com.kumuluz.ee 60 | kumuluzee-common 61 | test 62 | 63 | 64 | 65 | org.slf4j 66 | slf4j-api 67 | 68 | 69 | 70 | org.slf4j 71 | slf4j-simple 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /lab04/finish/repository/src/main/java/org/ecjug/hackday/repository/EventRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | 5 | import java.util.List; 6 | 7 | public interface EventRepository { 8 | 9 | Event addEvent(Event event); 10 | 11 | void updateEvent(Event event); 12 | 13 | List list(); 14 | 15 | List eventsByTitle(String title); 16 | 17 | List events(String title); 18 | 19 | Event eventById(String id); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /lab04/finish/repository/src/main/java/org/ecjug/hackday/repository/GroupRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | public interface GroupRepository { 9 | 10 | Group add(Group group); 11 | 12 | List list(); 13 | 14 | Optional byId(String groupId); 15 | 16 | void update(Group group); 17 | 18 | Optional byUrlname(String urlname); 19 | } 20 | -------------------------------------------------------------------------------- /lab04/finish/repository/src/main/java/org/ecjug/hackday/repository/MemberRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | public interface MemberRepository { 8 | 9 | Member add(Member member); 10 | 11 | List memberByName(String name); 12 | 13 | Member byId(String id); 14 | 15 | List list(); 16 | 17 | void update(Member member); 18 | } 19 | -------------------------------------------------------------------------------- /lab04/finish/repository/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab04/finish/repository/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab04/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/CountryApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import org.ecjug.hackday.domain.model.Country; 4 | import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; 5 | 6 | import javax.enterprise.context.Dependent; 7 | import javax.ws.rs.*; 8 | import javax.ws.rs.core.MediaType; 9 | 10 | @Dependent 11 | @RegisterRestClient 12 | @Produces({MediaType.APPLICATION_JSON}) 13 | @Consumes(MediaType.APPLICATION_JSON) 14 | public interface CountryApi { 15 | 16 | @GET 17 | @Path("/rest/v2/alpha/{code}") 18 | Country countryByCode(@PathParam("code") String code); 19 | } -------------------------------------------------------------------------------- /lab04/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/MeetUpApi.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl; 2 | 3 | import javax.ws.rs.GET; 4 | import javax.ws.rs.Path; 5 | import javax.ws.rs.PathParam; 6 | import javax.ws.rs.QueryParam; 7 | import java.util.HashMap; 8 | import java.util.List; 9 | 10 | public interface MeetUpApi { 11 | 12 | @GET 13 | @Path("/find/groups/") 14 | List techGroups(@QueryParam("category") String category, @QueryParam("key") String key); 15 | 16 | @GET 17 | @Path("/{urlname}/members/") 18 | List members(@PathParam("urlname") String urlname); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /lab04/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/EventServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.EventService; 5 | import org.ecjug.hackday.domain.model.Event; 6 | import org.ecjug.hackday.domain.model.Member; 7 | import org.ecjug.hackday.repository.EventRepository; 8 | import org.ecjug.hackday.repository.MemberRepository; 9 | 10 | import javax.enterprise.context.ApplicationScoped; 11 | import javax.inject.Inject; 12 | import java.util.List; 13 | 14 | @Slf4j 15 | @ApplicationScoped 16 | public class EventServiceImpl implements EventService { 17 | 18 | @Inject 19 | private EventRepository eventRepository; 20 | 21 | @Inject 22 | private MemberRepository memberRepository; 23 | 24 | @Override 25 | public Event add(Event event) { 26 | return eventRepository.addEvent(event); 27 | } 28 | 29 | @Override 30 | public List list() { 31 | return eventRepository.list(); 32 | } 33 | 34 | @Override 35 | public void addMemberToEvent(String eventId, Member member) { 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lab04/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/client/MembersServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.client; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.ecjug.hackday.api.MembersService; 5 | import org.ecjug.hackday.domain.model.Member; 6 | import org.ecjug.hackday.repository.MemberRepository; 7 | 8 | import javax.enterprise.context.ApplicationScoped; 9 | import javax.inject.Inject; 10 | import java.util.List; 11 | 12 | @Slf4j 13 | @ApplicationScoped 14 | public class MembersServiceImpl implements MembersService { 15 | 16 | @Inject 17 | private MemberRepository memberRepository; 18 | 19 | @Override 20 | public List list() { 21 | return memberRepository.list(); 22 | } 23 | 24 | @Override 25 | public Member add(Member member) { 26 | return memberRepository.add(member); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lab04/start/api-impl/src/main/java/org/ecjug/hackday/api/impl/health/MeetupHealthCheck.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api.impl.health; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.eclipse.microprofile.config.inject.ConfigProperty; 5 | import org.eclipse.microprofile.health.Health; 6 | import org.eclipse.microprofile.health.HealthCheck; 7 | import org.eclipse.microprofile.health.HealthCheckResponse; 8 | 9 | import javax.enterprise.context.ApplicationScoped; 10 | import javax.inject.Inject; 11 | import java.net.HttpURLConnection; 12 | import java.net.URL; 13 | 14 | @Health 15 | @ApplicationScoped 16 | @Slf4j 17 | public class MeetupHealthCheck implements HealthCheck { 18 | 19 | @Inject 20 | @ConfigProperty(name = "meetup.url", defaultValue = "https://api.meetup.com") 21 | private String meetUpApiUrl; 22 | 23 | 24 | @Override 25 | public HealthCheckResponse call() { 26 | try { 27 | HttpURLConnection connection = (HttpURLConnection) new URL(meetUpApiUrl).openConnection(); 28 | connection.setRequestMethod("HEAD"); 29 | 30 | if (connection.getResponseCode() == 200) { 31 | return HealthCheckResponse.named(MeetupHealthCheck.class.getSimpleName()).up().build(); 32 | } 33 | 34 | } catch (Exception exception) { 35 | log.error("Error checking health of" + meetUpApiUrl); 36 | } 37 | return HealthCheckResponse.named(MeetupHealthCheck.class.getSimpleName()).down().build(); 38 | } 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /lab04/start/api-impl/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab04/start/api-impl/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | org.ecjug.hackday.api.impl.MemberApi/mp-rest/url=http://members-app:9081 7 | #Mongo 8 | mongo.port=27017 9 | mongo.ip=127.0.0.1 10 | mongo.database.name=mongito 11 | mongo.embedded=true 12 | -------------------------------------------------------------------------------- /lab04/start/api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | api 13 | 14 | 15 | HackDay ::: API 16 | HackDay ::: API 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.pf4j 27 | pf4j 28 | provided 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /lab04/start/api/src/main/java/org/ecjug/hackday/api/EventService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | import org.ecjug.hackday.domain.model.Member; 5 | 6 | import java.util.List; 7 | 8 | public interface EventService { 9 | 10 | Event add(Event event); 11 | 12 | List list(); 13 | 14 | void addMemberToEvent(String eventId, Member member); 15 | } 16 | -------------------------------------------------------------------------------- /lab04/start/api/src/main/java/org/ecjug/hackday/api/GroupService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | import org.ecjug.hackday.domain.model.Member; 5 | import org.pf4j.ExtensionPoint; 6 | 7 | import java.util.List; 8 | import java.util.Optional; 9 | 10 | public interface GroupService extends ExtensionPoint { 11 | 12 | Group add(Group group); 13 | 14 | List list(); 15 | 16 | List loadFromMeetUp(); 17 | 18 | void addMemberToGroup(String groupId, Member member); 19 | 20 | Optional byId(String ecjug); 21 | 22 | List loadMembersFromMeetUpGroup(Group group); 23 | } 24 | -------------------------------------------------------------------------------- /lab04/start/api/src/main/java/org/ecjug/hackday/api/MembersService.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.api; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | public interface MembersService { 8 | 9 | List list(); 10 | 11 | Member add(Member member); 12 | } 13 | -------------------------------------------------------------------------------- /lab04/start/application/.dockerignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | ../docker/src/ 3 | pom.xml 4 | -------------------------------------------------------------------------------- /lab04/start/application/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM open-liberty 2 | 3 | 4 | 5 | COPY target/liberty/wlp/usr/servers/defaultServer/ /opt/ol/wlp/usr/servers/defaultServer/ 6 | 7 | COPY src/main/security/ /opt/ol/wlp/usr/servers/defaultServer/resources/security/ 8 | 9 | RUN rm -f /opt/ol/wlp/usr/servers/defaultServer/apps/application.war.xml 10 | COPY target/application.war /opt/ol/wlp/usr/servers/defaultServer/apps/ 11 | 12 | RUN ln -s /opt/ol/wlp/usr/servers /servers 13 | 14 | 15 | 16 | ENTRYPOINT ["/opt/ol/wlp/bin/server", "run"] 17 | CMD ["defaultServer"] 18 | 19 | -------------------------------------------------------------------------------- /lab04/start/application/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | services: 3 | 4 | members-app: 5 | image: member-application:1.0.0-SNAPSHOT 6 | ports: 7 | - "9081:9081" 8 | - "9444:9444" 9 | 10 | hack-day-app: 11 | depends_on: 12 | - members-app 13 | image: application:1.0.0-SNAPSHOT 14 | ports: 15 | - "9080:9080" 16 | - "9443:9443" -------------------------------------------------------------------------------- /lab04/start/application/src/main/java/org/ecjug/hackday/app/HackDayApplication.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | @ApplicationPath("/hackday") 7 | public class HackDayApplication extends Application { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /lab04/start/application/src/main/java/org/ecjug/hackday/app/resources/MemberResource.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.app.resources; 2 | 3 | import org.ecjug.hackday.api.MembersService; 4 | import org.ecjug.hackday.domain.model.Member; 5 | import org.eclipse.microprofile.metrics.annotation.Counted; 6 | import org.eclipse.microprofile.openapi.annotations.Operation; 7 | import org.eclipse.microprofile.openapi.annotations.media.Content; 8 | import org.eclipse.microprofile.openapi.annotations.media.Schema; 9 | import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; 10 | 11 | import javax.enterprise.context.ApplicationScoped; 12 | import javax.inject.Inject; 13 | import javax.ws.rs.*; 14 | import javax.ws.rs.core.MediaType; 15 | import java.util.List; 16 | 17 | @ApplicationScoped 18 | @Produces({MediaType.APPLICATION_JSON}) 19 | @Consumes(MediaType.APPLICATION_JSON) 20 | @Path("/member") 21 | public class MemberResource { 22 | 23 | @Inject 24 | private MembersService membersService; 25 | 26 | @GET 27 | @Path("/list") 28 | @Counted(monotonic = true) 29 | @Operation(summary = "List all Members") 30 | public List listMembers() { 31 | return membersService.list(); 32 | } 33 | 34 | @POST 35 | @Path("/add") 36 | @Counted(monotonic = true) 37 | @Operation(summary = "Creates a new Member") 38 | public Member addMember(@RequestBody(description = "Specify the values to create a new Member", 39 | content = @Content(mediaType = MediaType.APPLICATION_JSON, 40 | schema = @Schema(implementation = Member.class))) Member member) { 41 | return membersService.add(member); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lab04/start/application/src/main/liberty/config/server.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jaxrs-2.1 5 | jsonp-1.1 6 | cdi-2.0 7 | mpConfig-1.2 8 | mpRestClient-1.1 9 | mpHealth-1.0 10 | mpMetrics-1.1 11 | mpFaultTolerance-1.0 12 | mpOpenAPI-1.0 13 | beanValidation-2.0 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lab04/start/application/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab04/start/application/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #MeetUp Api Keu 2 | meetup.key=6459183e486f17154f74e5115191d1b 3 | meetup.url=https://api.meetup.com 4 | #Country API 5 | org.ecjug.hackday.api.impl.CountryApi/mp-rest/url=https://restcountries.eu 6 | org.ecjug.hackday.api.impl.MemberApi/mp-rest/url=http://members-app:9081 7 | #Mongo 8 | mongo.port=27017 9 | mongo.ip=127.0.0.1 10 | mongo.database.name=mongito 11 | mongo.embedded=true 12 | -------------------------------------------------------------------------------- /lab04/start/application/src/main/security/key.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/lab04/start/application/src/main/security/key.jks -------------------------------------------------------------------------------- /lab04/start/application/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | Hack Day Project 6 | 7 | 8 | index.html 9 | 10 | -------------------------------------------------------------------------------- /lab04/start/application/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Monolitos, Microlitos, Microservicios usando Java / Jakarta EE

4 | 5 |
6 |

Hack Day

7 |

8 | Hack-Days 2018 organizado por la Comunidad Hispana de grupos de usuarios de Java. 9 |

10 |
11 | 
12 | 
13 | 
14 |                                              _o######ooooooo-_
15 |                                             o#####o_o#####~~~~~~
16 |                                            ################o__o
17 |                                          _o###########~~~~~###~
18 |                                        o##############
19 |                                     _o###############~
20 |                                   _o#########~ooo~##~
21 |                                _o############# ##o::___
22 |                             _o#################oo:~~~~~
23 |                          _o#####################~
24 |                        _####~_oooooooo:~~######~
25 |                      _##### o###########_:~##~
26 |                     o#####_##################
27 |                    _#######_~#################_
28 |                    ##########o:~###############o                       ___/\            /\
29 |                  _##############o~##############_                  ___/ *   \          / /
30 |                o#############~~     ~~~~~~~######_                /          |________/ /
31 |            __o##########~::o_             o#######                |                    /
32 |       _oo##########~~::o#####            o###########o___          \____/\              \
33 |   o##########~~~~    ~~~##########       ~~~~#############o               |              |
34 |  o##########~~~~    ~~~##########       ~~~~#############o                |    _______   |
35 | #####~~~~~~                ~~~                                            |___/       \__|
36 | 
37 | 
38 |     
39 |
40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /lab04/start/domain/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | domain 13 | 14 | 15 | HackDay ::: Domain 16 | HackDay ::: Domain 17 | 18 | 19 | 20 | org.projectlombok 21 | lombok 22 | provided 23 | 24 | 25 | 26 | org.mongodb 27 | bson 28 | 29 | 30 | 31 | com.fasterxml.jackson.core 32 | jackson-annotations 33 | provided 34 | 35 | 36 | 37 | javax 38 | javaee-api 39 | provided 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /lab04/start/domain/src/main/java/org/ecjug/hackday/domain/model/Country.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | 12 | @Data 13 | @NoArgsConstructor 14 | @JsonIgnoreProperties(ignoreUnknown = true) 15 | public class Country implements Serializable { 16 | 17 | @NotBlank 18 | private String name; 19 | private String alpha2Code; 20 | private String alpha3Code; 21 | private String capital; 22 | private String flag; 23 | private List timezones; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /lab04/start/domain/src/main/java/org/ecjug/hackday/domain/model/Event.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.bson.types.ObjectId; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import java.io.Serializable; 11 | import java.time.LocalDate; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class Event implements Serializable { 20 | 21 | private ObjectId id; 22 | @NotBlank 23 | private String title; 24 | @NotBlank 25 | private String description; 26 | @NotBlank 27 | private LocalDate date; 28 | 29 | private List memberList; 30 | 31 | public void addMember(Member member) { 32 | if (memberList == null) { 33 | memberList = new ArrayList<>(); 34 | } 35 | if (!memberList.contains(member)) { 36 | memberList.add(member); 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /lab04/start/domain/src/main/java/org/ecjug/hackday/domain/model/Group.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | import org.bson.types.ObjectId; 10 | 11 | import javax.validation.constraints.NotBlank; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | @Builder(toBuilder = true) 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | @JsonIgnoreProperties(ignoreUnknown = true) 20 | public class Group { 21 | 22 | @JsonIgnore 23 | private ObjectId id; 24 | @NotBlank 25 | private String name; 26 | private String description; 27 | private String link; 28 | @NotBlank 29 | private String urlname; 30 | @NotBlank 31 | private String country; 32 | private Country countryInformation; 33 | private List membersList; 34 | 35 | private String groupId; 36 | 37 | 38 | public void addMember(Member member) { 39 | if (membersList == null) { 40 | membersList = new ArrayList<>(); 41 | } 42 | if (!membersList.contains(member)) { 43 | membersList.add(member); 44 | } 45 | } 46 | 47 | public String getGroupId() { 48 | if (id != null) { 49 | this.groupId = id.toString(); 50 | } 51 | return this.groupId; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lab04/start/domain/src/main/java/org/ecjug/hackday/domain/model/Member.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.domain.model; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.bson.types.ObjectId; 9 | 10 | import javax.validation.constraints.NotBlank; 11 | import java.io.Serializable; 12 | 13 | @Builder(toBuilder = true) 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public final class Member implements Serializable { 18 | 19 | @JsonIgnore 20 | private ObjectId id; 21 | @NotBlank 22 | private String name; 23 | private String country; 24 | private String city; 25 | private String comments; 26 | 27 | private String memberId; 28 | 29 | 30 | public String getMemberId() { 31 | if (id != null) { 32 | memberId = id.toString(); 33 | } 34 | return memberId; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lab04/start/member-application/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM open-liberty 2 | 3 | 4 | 5 | COPY target/liberty/wlp/usr/servers/defaultServer/ /opt/ol/wlp/usr/servers/defaultServer/ 6 | 7 | COPY src/main/security/ /opt/ol/wlp/usr/servers/defaultServer/resources/security/ 8 | 9 | RUN rm -f /opt/ol/wlp/usr/servers/defaultServer/apps/member-application.war.xml 10 | COPY target/member-application.war /opt/ol/wlp/usr/servers/defaultServer/apps/ 11 | 12 | RUN ln -s /opt/ol/wlp/usr/servers /servers 13 | 14 | 15 | 16 | ENTRYPOINT ["/opt/ol/wlp/bin/server", "run"] 17 | CMD ["defaultServer"] 18 | 19 | -------------------------------------------------------------------------------- /lab04/start/member-application/src/main/java/org/ecjug/member/app/MemberApplication.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.member.app; 2 | 3 | import javax.ws.rs.ApplicationPath; 4 | import javax.ws.rs.core.Application; 5 | 6 | /** 7 | * @author Kleber Ayala 8 | */ 9 | @ApplicationPath("/member") 10 | public class MemberApplication extends Application { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /lab04/start/member-application/src/main/liberty/config/server.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jaxrs-2.1 5 | jsonp-1.1 6 | cdi-2.0 7 | mpConfig-1.2 8 | mpRestClient-1.1 9 | mpHealth-1.0 10 | mpMetrics-1.1 11 | mpFaultTolerance-1.0 12 | mpOpenAPI-1.0 13 | beanValidation-2.0 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lab04/start/member-application/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab04/start/member-application/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | #Mongo 2 | mongo.port=27017 3 | mongo.ip=127.0.0.1 4 | mongo.database.name=mongito 5 | mongo.embedded=true 6 | -------------------------------------------------------------------------------- /lab04/start/member-application/src/main/security/key.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lasalazarr/guide-monolithic-to-microservices/4bc1d719b6c277f50de8cc5dc8a2af0bb7307737/lab04/start/member-application/src/main/security/key.jks -------------------------------------------------------------------------------- /lab04/start/member-application/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | Hack Day Project 6 | 7 | 8 | index.html 9 | 10 | -------------------------------------------------------------------------------- /lab04/start/member-application/src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Monolitos, Microlitos, Microservicios usando Java / Jakarta EE

4 | 5 |
6 |

Hack Day

7 |

8 | Hack-Days 2018 organizado por la Comunidad Hispana de grupos de usuarios de Java. 9 |

10 |

11 | Members App 12 |

13 | 14 |
15 | 
16 |                               /^--^\     /^--^\     /^--^\
17 |                               \____/     \____/     \____/
18 |                              /      \   /      \   /      \
19 |                             |        | |        | |        |
20 |                              \__  __/   \__  __/   \__  __/
21 |         |^|^|^|^|^|^|^|^|^|^|^|^\ \^|^|^|^/ /^|^|^|^|^\ \^|^|^|^|^|^|^|^|^|^|^|^|
22 |         | | | | | | | | | | | | |\ \| | |/ /| | | | | | \ \ | | | | | | | | | | |
23 |         ########################/ /######\ \###########/ /#######################
24 |         | | | | | | | | | | | | \/| | | | \/| | | | | |\/ | | | | | | | | | | | |
25 |         |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
26 | 
27 | 
28 |     
29 |
30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /lab04/start/mongito/src/main/java/org/ecjug/hackday/mongo/health/MongoHealthCheck.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.health; 2 | 3 | import com.mongodb.MongoClient; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.eclipse.microprofile.health.Health; 6 | import org.eclipse.microprofile.health.HealthCheck; 7 | import org.eclipse.microprofile.health.HealthCheckResponse; 8 | 9 | import javax.enterprise.context.ApplicationScoped; 10 | import javax.inject.Inject; 11 | 12 | @Health 13 | @ApplicationScoped 14 | @Slf4j 15 | public class MongoHealthCheck implements HealthCheck { 16 | 17 | @Inject 18 | private MongoClient mongoClient; 19 | 20 | @Override 21 | public HealthCheckResponse call() { 22 | log.info("Health check for mongo database "); 23 | 24 | HealthCheckResponse healthCheckResponse = null; 25 | if (mongoClient != null) { 26 | log.info("Mongo database active!"); 27 | healthCheckResponse = HealthCheckResponse.named(MongoHealthCheck.class.getSimpleName()).up().build(); 28 | } else { 29 | log.error("Mongo database is not active!"); 30 | healthCheckResponse = HealthCheckResponse.named(MongoHealthCheck.class.getSimpleName()).down().build(); 31 | } 32 | return healthCheckResponse; 33 | } 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /lab04/start/mongito/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab04/start/mongito/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true -------------------------------------------------------------------------------- /lab04/start/mongito/src/test/java/org/ecjug/hackday/mongo/test/JUG.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import lombok.*; 4 | import org.bson.types.ObjectId; 5 | 6 | 7 | @Builder(toBuilder = true) 8 | @ToString 9 | @Getter 10 | @Setter 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class JUG { 14 | 15 | private ObjectId id; 16 | private String jugName; 17 | private String country; 18 | private int members; 19 | 20 | } -------------------------------------------------------------------------------- /lab04/start/mongito/src/test/java/org/ecjug/hackday/mongo/test/MongoClientProducerTest.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.mongo.test; 2 | 3 | import com.kumuluz.ee.common.config.EeConfig; 4 | import com.kumuluz.ee.common.runtime.EeRuntime; 5 | import com.kumuluz.ee.common.runtime.EeRuntimeInternal; 6 | import com.kumuluz.ee.configuration.utils.ConfigurationImpl; 7 | import com.kumuluz.ee.configuration.utils.ConfigurationUtil; 8 | import com.mongodb.client.MongoCollection; 9 | import com.mongodb.client.MongoDatabase; 10 | import org.bson.Document; 11 | import org.jboss.weld.environment.se.Weld; 12 | import org.jboss.weld.junit4.WeldInitiator; 13 | import org.junit.BeforeClass; 14 | import org.junit.Rule; 15 | import org.junit.Test; 16 | 17 | import javax.inject.Inject; 18 | 19 | import static com.mongodb.client.model.Filters.eq; 20 | import static org.hamcrest.CoreMatchers.is; 21 | import static org.hamcrest.MatcherAssert.assertThat; 22 | 23 | public class MongoClientProducerTest { 24 | 25 | 26 | @Rule 27 | public WeldInitiator weld = WeldInitiator.from(new Weld()).inject(this).build(); 28 | 29 | @Inject 30 | private MongoDatabase database; 31 | 32 | 33 | @BeforeClass 34 | public static void config() { 35 | ConfigurationUtil.initialize(new ConfigurationImpl()); 36 | EeConfig eeConfig = new EeConfig.Builder().build(); 37 | EeConfig.initialize(eeConfig); 38 | EeRuntime.initialize(new EeRuntimeInternal()); 39 | } 40 | 41 | @Test 42 | public void shouldInsertDocumentTest() { 43 | System.setProperty("mongo.ip", "127.0.0.1"); 44 | MongoCollection collection = database.getCollection("testDocument"); 45 | Document doc = new Document("jugName", "EcuadorJUG") 46 | .append("country", "Ecuador") 47 | .append("membersList", 500); 48 | collection.insertOne(doc); 49 | 50 | Document jugDoc = collection.find(eq("jugName", "EcuadorJUG")).first(); 51 | assertThat(jugDoc.get("country"), is("Ecuador")); 52 | } 53 | 54 | @Test 55 | public void shouldInsertPojoTest() { 56 | System.setProperty("mongo.ip", "127.0.0.1"); 57 | MongoCollection jugCollection = database.getCollection("pojoTest", JUG.class); 58 | 59 | JUG jug = JUG.builder().jugName("EcuadorJUG").country("Ecuador").members(500).build(); 60 | jugCollection.insertOne(jug); 61 | JUG jugFromMongo = jugCollection.find(eq("jugName", "EcuadorJUG")).first(); 62 | 63 | assertThat(jugFromMongo.getCountry(), is("Ecuador")); 64 | 65 | } 66 | 67 | } -------------------------------------------------------------------------------- /lab04/start/repository/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | workshop05 7 | org.ecuadorjug 8 | 1.0.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | repository 13 | 14 | HackDay ::: Repository 15 | HackDay ::: Repository 16 | 17 | 18 | 19 | 20 | 21 | org.ecuadorjug 22 | domain 23 | 24 | 25 | 26 | org.ecuadorjug 27 | mongito 28 | 29 | 30 | 31 | org.projectlombok 32 | lombok 33 | provided 34 | 35 | 36 | 37 | 38 | org.eclipse.microprofile 39 | microprofile 40 | provided 41 | pom 42 | 43 | 44 | 45 | 46 | org.jboss.weld 47 | weld-junit4 48 | test 49 | 50 | 51 | 52 | 53 | com.kumuluz.ee.config 54 | kumuluzee-config-mp 55 | test 56 | 57 | 58 | 59 | com.kumuluz.ee 60 | kumuluzee-common 61 | test 62 | 63 | 64 | 65 | org.slf4j 66 | slf4j-api 67 | 68 | 69 | 70 | org.slf4j 71 | slf4j-simple 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /lab04/start/repository/src/main/java/org/ecjug/hackday/repository/EventRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Event; 4 | 5 | import java.util.List; 6 | 7 | public interface EventRepository { 8 | 9 | Event addEvent(Event event); 10 | 11 | void updateEvent(Event event); 12 | 13 | List list(); 14 | 15 | List eventsByTitle(String title); 16 | 17 | List events(String title); 18 | 19 | Event eventById(String id); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /lab04/start/repository/src/main/java/org/ecjug/hackday/repository/GroupRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Group; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | public interface GroupRepository { 9 | 10 | Group add(Group group); 11 | 12 | List list(); 13 | 14 | Optional byId(String groupId); 15 | 16 | void update(Group group); 17 | 18 | Optional byUrlname(String urlname); 19 | } 20 | -------------------------------------------------------------------------------- /lab04/start/repository/src/main/java/org/ecjug/hackday/repository/MemberRepository.java: -------------------------------------------------------------------------------- 1 | package org.ecjug.hackday.repository; 2 | 3 | import org.ecjug.hackday.domain.model.Member; 4 | 5 | import java.util.List; 6 | 7 | public interface MemberRepository { 8 | 9 | Member add(Member member); 10 | 11 | List memberByName(String name); 12 | 13 | Member byId(String id); 14 | 15 | List list(); 16 | 17 | void update(Member member); 18 | } 19 | -------------------------------------------------------------------------------- /lab04/start/repository/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /lab04/start/repository/src/main/resources/META-INF/microprofile-config.properties: -------------------------------------------------------------------------------- 1 | mongo.port=27017 2 | mongo.ip=127.0.0.1 3 | mongo.database.name=mongito 4 | mongo.embedded=true --------------------------------------------------------------------------------