-
-
Project 5 Video Demo Link: https://youtu.be/4kcXqH405kc
-
Instruction of deployment: https://github.com/uci-jherold2-fall24-cs122b/2024-fall-cs-122b-team-101
-
● Jacky: Running on Docker container, set up Kubernetes (K8s) cluster on AWS, deploy Fabflix to K8s cluster on AWS, JMeter testing
● Kristen: Running on Docker container, set up Kubernetes (K8s) cluster on AWS, video demonstration
-
-
Include the filename/path of all code/configuration files in GitHub of using JDBC Connection Pooling.
● src/AddMovieServlet.java
● src/AddStarServlet.java
● src/AutocompleteServlet.java
● src/ConfirmationServlet.java
● src/DashboardLoginServlet.java
● src/LoginServlet.java
● src/MainServlet.java
● src/MetadataServlet.java
● src/MovieListServlet.java
● src/PaymentServlet.java
● src/ShoppingCartServlet.java
● src/SingleMovieServlet.java
● src/SingleStarServlet.java
● WebContent/META-INF/context.xml -
JDBC Connection Pooling is utilized in these servlets by initially defining a DataSource instance by allocating a set of connections from context.xml. When a connection is retrieved, an already-created connection is taken from the pool. The close() method is used after each servlet completes operations using the connection, which returns it to the pool for future usage. As a result, establishing and closing connections has a reduced resource cost and an improved time-efficiency.
-
A database connection can be distributed from the pool and established to either the Master or Slave moviedb databases. Establishing and freeing connections both yield a reduced resource cost and an improved time efficiency.
-
-
-
Include the filename/path of all code/configuration files in GitHub of routing queries to Master/Slave SQL.
● src/AddMovieServlet.java
● src/AddStarServlet.java
● src/ConfirmationServlet.java
● src/UpdateEmployeeSecurePassword.java
● src/UpdateUserSecurePassword.java
● WebContent/META-INF/context.xml -
Any write requests were routed to Master, while read requests were routed to either the Master or Slave.
-
K8s Cluster | Throughput (minute) |
---|---|
Case 1: 1 Control Plane + 3 Worker nodes + 1 master MySQL pod + 1 slave MySQL pod + 2 Fabflix pods | 15230.19 |
Case 2: 1 Control Plane + 4 Worker nodes + 1 master MySQL pod + 1 slave MySQL pod + 3 Fabflix pods | 14562.488 |
Project 1 Video Link
Project 2 Video Link
Project 3 Video Link
Project 4 Video Link
Project 5 Video Link
● Jacky: repository setup, Movie List Page, Single Movie Page, Single Star Page
● Kristen: AWS instance setup, web application deployment on AWS instance, Single Star Page, video demonstration
● Jacky: Login Page, Main Page, extend Movie List Page, extend Single Movie/Star Page, update jump functionality, Shopping Cart Page UI, Payment Page, Confirmation Page UI
● Kristen: Shopping Cart Page functionality, Add-to-Cart feature on Movie List/Single Movie Page, Confirmation Page functionality, video demonstration
● Jacky: reCAPTCHA, PreparedStatement, add customers/employees encrypted password verification, Metadata Page, Add Star/Movie Page, add_movie stored procedure, domain registration
● Kristen: Add HTTPS, moviedb customers/employees password encryption, SAX XML parser, video demonstration
● Jacky: full-text search, autocomplete, JDBC connection pooling
● Kristen: full-text search bug fix, MySQL Master-Slave Replication, scaling with cluster of MySQL/Tomcat, load balancer, video demonstration
● Jacky: Running on Docker container, set up Kubernetes (K8s) cluster on AWS, deploy Fabflix to K8s cluster on AWS, JMeter testing
● Kristen: Running on Docker container, set up Kubernetes (K8s) cluster on AWS, video demonstration
Substring matching is used in conjunction with the LIKE SQL predicate in MovieListServlet.java to
fetch records from moviedb with m.title, m.director, and s.name that have the retrieved parameters
title, director, and name at any position, respectively. Next, these query excerpts are appended to
the StringBuilder object, queryBuilder, which contains an incomplete SQL query.
The following .java files contain a PreparedStatement:
● ConfirmationServlet
● DashboardLoginServlet
● LoginServlet
● MainServlet
● MovieListServlet
● PaymentServlet
● ShoppingCartServlet
● SingleMovieServlet
● SingleStarServlet
● LoadFromFile
● UpdateDatabase
To maximize the efficiency of our SAX XML parser, we integrated the following:
- Writing parsed movie attributes into .txt files during parsing, which contain stars, stars_in_movies, movies, genres, and genres_into_movies. The .txt files are efficiently loaded into temporary SQL tables.
- Temporary tables to store parsed data from .txt files, which are then inserted into moviedb tables. Next, the temporary tables are dropped to eliminate residual data and possible duplicate insertions.
We found that these techniques vastly decreased the runtime of our SAX XML parser, as well as the time it took to load the .txt file data into our moviedb database.