Back to About

Cloud Software Applications

Multi-Tier Cloud Software Architecture

CS 3754 Cloud Software Development | Virginia Tech | Fall 2025

JavaJakarta EEPrimeFacesJPA/HibernateMySQLAWS EC2WildFlyREST APIs

Overview

A portfolio of 10 enterprise-style web applications built during CS 3754 Cloud Software Development at Virginia Tech. Each application demonstrates full-stack development using the Jakarta EE (formerly Java EE) ecosystem, following the MVC architecture pattern.

The applications integrate with various public REST APIs to provide real-world data, while implementing core enterprise patterns including dependency injection, JPA persistence, and session management. All applications are deployed on AWS EC2 running WildFly application server.

Technical Highlights

MVC Architecture

Clean separation of concerns with @Named controllers, @Stateless facades (DAOs), and @Entity beans for data modeling.

JPA/Hibernate Persistence

Object-relational mapping with JPQL queries, entity relationships, and transaction management.

REST API Integration

Each app consumes external APIs using JAX-RS client, handling JSON parsing and error states.

AWS EC2 Deployment

Production deployment on WildFly application server with MySQL database backend.

Jakarta EE Application Structure

src/main/java/
├── controllers/          # @Named CDI beans (JSF backing)
│   ├── GameController.java
│   └── ...Controller.java
├── EntityBeans/          # @Entity JPA models
│   ├── Game.java
│   └── ...Entity.java
├── FacadeBeans/          # @Stateless DAOs
│   ├── GameFacade.java
│   └── ...Facade.java
└── pojo/                 # Plain Java objects
    └── ApiResponse.java

src/main/webapp/
├── WEB-INF/
│   ├── faces-config.xml
│   └── web.xml
├── resources/
│   └── css/
└── views/                # XHTML pages
    ├── List.xhtml
    └── View.xhtml
Controller Layer

@Named @SessionScoped beans handle user interactions, form submissions, and view navigation. Injected facades provide data access.

Facade Layer

@Stateless session beans extend AbstractFacade for CRUD operations. EntityManager handles persistence context and transactions.

Entity Layer

@Entity beans map to database tables with JPA annotations. Relationships use @OneToMany, @ManyToOne with lazy/eager fetching.

View Layer

PrimeFaces XHTML templates with JSF EL expressions. DataTables for lists, Dialogs for details, and Chart components for visualization.

Each application integrates with external REST APIs to provide real-world data. Learning to consume, parse, and handle errors from third-party APIs was a core skill developed in this course.

Baseball
Baseball Savant API, MLB Stats API
Countries
REST Countries API
Movies
OMDb API
Flags
REST Countries API
Cats
The Cat API
Books
Google Books API
Cocktails
TheCocktailDB API
Businesses
Yelp Fusion API
NationalParks
National Park Service API

Enterprise Java Development

  • Dependency injection with CDI annotations (@Inject, @Named, @SessionScoped)
  • JPA entity lifecycle management and JPQL query optimization
  • JSF component lifecycle and PrimeFaces component library
  • Application server deployment and configuration (WildFly)

Multi-Tier Cloud Software Architecture

  • REST API consumption with JSON parsing and error handling
  • Database schema design and MySQL administration
  • Session management and user authentication flows
  • AWS EC2 instance setup and application deployment

Why This Matters

While Jakarta EE isn't the stack I use today, it was the perfect starting point for learning modern development practices. The structured, convention-heavy nature of Java EE made concepts like dependency injection, ORM, and MVC architecture click before I moved to more flexible frameworks like FastAPI and Next.js. This course also gave me hands-on AWS deployment experience and solidified my understanding of multi-tier cloud application development.

Acknowledgment

Special thanks to Dr. Osman Balci for teaching CS 3754 and empowering me to deploy web applications for the first time.