Home - scottcarnold/pmdb GitHub Wiki
PMDB - Personal Movie Database
PMDB provides a way to create a lists of movies which can be tagged with any number of attributes. Those lists can be searched, shared with other users, and associated and populated from movies listed on the Internet Movie Database (IMDb). Theses lists can be imported and exported from and to MS Excel files, and if so desired, stored by PMDB on the Amazon Web Services (AWS) cloud. Whether you are out, unsure if that movie on sale is already in your movie cabinet, or want a friend to be able to see what movies you have, the Personal Movie Database provides you web based mobile friendly access to your movies (assuming you keep your movie collection list up to date).
PMDB is still a work in progress. Some features may still be under development. This is noted below in the lists of what this project demonstrates and does not demonstrate. You can also check out the project page to see what features are still in the works, or to add new issues or features you think the project needs.
This project is not affiliated with the Internet Movie Database (IMDb) nor the Open Movie Database (OMDb).
PMDB Architecture Versions
There will soon be two versions of the PMDB application (with a third in planning). To the user, all versions provide the same basic functionality with the same back end data. The difference is in the architecture of the application. The initial version of the application, as described throughout this document, is a strictly Spring MVC architecture. The second version will utilize a Single Page Application (SPA) built with Angular with back end services provided by REST services written with Spring Boot. The third and final planned version will reuse the front-end UI from the second, but will break the back end services into containerized microservices with Spring Cloud and Spring Boot.
CI, JavaDocs and Reports
CI artifacts: https://travis-ci.com/github/scottcarnold/pmdb
Build repository: https://packagecloud.io/scottcarnold/pmdb
JavaDocs, reports, and other site information: https://scottcarnold.github.io/pmdb/
Compatibility Issues of Interest: Compatibility-Issues
Screenshots
Home page where you can view, sort, and search one of your movie collections:
IMDB Search page where you can find and add movies to your movie collection:
Manage Collections page, where you can see what movie collections you have access to and share your collections with others:
What This Project Demonstrates
- Integration of multiple popular frameworks and techniques into one functioning application (full stack)
- Spring MVC
- Spring security with role based authorization
- i18n support (but not implementation)
- configuration of view resolver with Thymeleaf
- extension of Thymeleaf with dialects to support Thymeleaf hierarchical layout and spring security enhancements
- configuration of message converter to support JSON responses for AJAX requests with Jackson
- configuration for document uploads
- integration of AWS DynamoDB using spring-data-dynamodb for JPA-style repositories
- utilization of JNDI for data source retrieval
- integration of transaction manager for database transactions
- utilization of PropertySourcesPlaceholderConfigurer for resolving properties
- integration of Bootstrap and other front end styling and scripting for the user interface.
- Spring forms validation
- Web application configuration through JavaConfig
- Utilization of Java 8+ techniques including lambda expressions and streams API
- Utilization of REST web services client with Jersey
- Continuous Integration with Travis (https://travis-ci.com/github/scottcarnold/pmdb). This may be further expanded, but the initial setup is complete.
What This Project Does Not Demonstrate...Yet...
- i18n implementation: While the application has the necessary configuration for internationalization, it does not yet have the implementation.
- Spring domain object security. The movie collections sharing of this application currently handles collection sharing within the service layer, but is an ideal candidate to integrate Spring domain object security.
What This Project Does Not Demonstrate
- Apache POI. Yes, this project does use Apache POI, but it was included to make the application more useful to the end user, not in an attempt to demonstrate anything by it.
- Spring Boot. I intentionally did not want some of the auto-configuration that comes with Spring Boot while I was developing the first version of this application. I wanted to experience the majority of the configuration and application server setup. Spring Boot would be a fine choice otherwise, especially if containerizing an application and/or developing microservices. Spring Boot will be used in the second and third versions of the PMDB architecture.
- JavaScript frameworks like Angular, Vue, and React. It wasn't the focus of the Spring MVC version of the project. Look to the second and third versions of the PMDB architecture to see an Angular front end to PMDB.
The Test Backend
The Test environment currently utilizes either a WebLogic 12c or Payara 5 application server and a MySQL database. The data source and connection pool are configured through the application server, and SSL is configured with a self-signed certificate. AWS cloud storage utilizes a free-tier AWS account on a test profile set up with a limited privilege user.
Environments should be configured with 2 system properties to define what the name of the environment is and where the properties file for it is:
- pmdb.environment -- set to name for the environment (e.g. dev or test)
- pmdb.properties.location -- set to the location of the external properties file; include path separator at end
An example properties file is included in the root of the project.