View the Maven site report for this project.
##Table of Contents
- Overview
- Technologies
- REST API
- Continuous Integration
- Software Quality
- Maven Site Reports
- Deployment
- git workflow
I use this project as a playground to learn new skills and demonstrate my Java and web development skills.
Technologies and libraries used in this project:
- Dozer Java bean mapping
- DbUnit and an embedded H2 database is used for integration tests
- Jackson JSON processor
- JAXB Java Architecture for XML Binding (JAXB)
- Jersey JAX-RS implementation
- Jetty servlet container is used for API integration tests
- JPA & Hibernate JPA provider
- JUnit, Mockito and Hamcrest matchers are used for testing
- Maven
- Multi-module project
- Dependency and plugin management
- Maven profiles
- Maven site reports
- Spring technologies
- Spring IOC dependency injection
- Spring Security Authentication
- Spring Data - JPA If you are not familiar with Spring Data, you might like to take a look at the Spring Data Example Showcase on Github. The project compares a a typical data access implementation with JPA 2 with a less boilerplate Spring Data version.
- Spring RestTemplate for API integration tests
- Spring profiles to select embedded vs external database
- Swagger API documentation
There are two UI's for this project
- Google Web Toolkit (GWT)
- MVP Framework (Activities and Places framework)
- Views, ClientFactory
- UiBinder
- RestyGWT
- Struts MVC
- Actions
- Tiles
- Interceptors
- Struts JSP tags
- OpenId Authentication
- JSP
The web services are modeled after the RESTful API best practices chronicled in the apigee blog. The API has the following functionality:
- Each JAX-RS resource supports CRUD using the relevant HTTP methods (@POST, @GET, @PUT, @DELETE)
- Partial updates
- API Versioning
- Sorting and Pagination
- Counts
- Authentication using Basic Auth
- Custom JSON formatted exceptions
- JSON request/responses payloads
Github commits to this project trigger a CI build on Travis CI.
Check out the current build status
The Maven site report for this project is published to Github Pages Reports generated for this project include:
- JavaDocs
- Surefire Report
- Failsafe Report
- Github issues
- Cobertura Test Coverage
- Findbugs Report
- REST API Docs
You can view the Maven site report for the FlashCards app here.
The project wars (API, GWT UI, Stuts UI) can be deployed to any servlet container.
The simplest way to see the application in action is to:
- Clone the Flashcards git repository (or Fork then Clone)
- run 'mvn install' from the project root
- from the FlashCards_WebServices directory run 'mvn jetty:run'
Once Jetty has completed startup, you can browse the GWT UI, Struts UI, or interact directly with the API using the Swagger UI or using a REST client of your choice
- GWT UI: http://localhost:8080/gwt/
- Struts UI: http://localhost:8080/struts/
- Swagger UI: http://localhost:8080/apidocs/
- API: http://localhost:8080/api/