Virginia Tech

Course Information
Course Description
 

Doing things “in the cloud” has become ubiquitous, and cloud has become a rich new environment for the use of technology anywhere and anytime to solve problems, connect people, and improve lives. Software paradigm has been shifting from “Software-as-a-Product (SaaP)” to “Software-as-a-Service (SaaS)” provided “in the cloud”. The SaaS software paradigm comes with capabilities and technical challenges for cloud software development, as compared to mobile and stand-alone software development. Distributed multitiered software architecting, design, and programming for the cloud platform require different strategies specifically motivated by this paradigm. This course gives students the opportunity to learn how to develop software for this important computing context. It also gives them a rich context in which to practice and reinforce the fundamental concepts of object-oriented software design and implementation taught in previous courses.

The course introduces the fundamentals, design patterns, interfaces, frameworks, and technologies underlying cloud software development. It teaches hands-on how to develop distributed multitiered enterprise software applications that run on a server computer and used by a user with a web browser over the Internet on a network-connected computer such as desktop, laptop or handheld computer (tablet, smartphone, or mobile device).

The course focuses on the Java platform Jakarta Enterprise Edition (Jakarta EE). It teaches Jakarta EE technologies such as Jakarta Faces (JF), Expression Language (EL), Contexts and Dependency Injection (CDI), Enterprise Beans (EB), PrimeFaces library of user interface components for JF, Jakarta Persistence, and RESTful Web Services as depicted in the client-server architecture poster below.

The course employs the “Learning by Examples” pedagogy. In each class meeting, students develop a cloud software application with hands-on, step-by-step, and hypertext-based instructions. Students work in a team to develop a cloud software application in their semester project to solve a complex problem as their crowning achievement in the course.

The course employs:

Java platform Jakarta Enterprise Edition (Jakarta EE) Open Source / Free
Intelligent Java Integrated Development Environment Advanced (IntelliJ IDEA) Ultimate Edition Free for Educational Use
WildFly Java platform Jakarta Enterprise Edition Application Server Open Source / Free
MySQL Relational Database Management System Open Source / Free
PrimeFaces Library of User Interface Components for Jakarta Faces Open Source / Free
Amazon EC2 Virtual Private Server running Amazon Linux On-Demand Pricing
Open Java Development Kit (OpenJDK) Open Source / Free

Students obtain an Amazon Elastic Compute Cloud (Amazon EC2) server computer virtualized instance running Amazon Linux operating system as their Virtual Private Server for deploying their cloud software applications developed in the course.

Learning Objectives
  Having successfully completed this course, students will be able to:
  1. Develop distributed multitiered enterprise software applications that run on a server computer and used by a user with a web browser over the Internet on a laptop, desktop, tablet, or smartphone computer.
  2. Identify and discuss the constraints and capabilities of cloud software applications.
  3. Articulate and evaluate architecture and design trade-offs among cloud, mobile and stand-alone software applications.
  4. Describe how different architectures, design strategies, interfaces, and frameworks affect the overall cloud software quality characteristics such as performance, scalability, and security.
  5. Create cloud software-based solutions to complex problems using the Java platform Jakarta Enterprise Edition (Jakarta EE).
  6. Work on a cloud software development project with the title of Cloud Software Engineer.
Prerequisites
 
  • CS Major or CS Minor
  • A grade of C or better in CS2114: Software Design and Data Structures
Materials
 

Each student is required to bring a Mac, Windows or Linux laptop computer to each class meeting for hands-on learning of cloud software development. The laptop computer must be running IntelliJ IDEA Ultimate, WildFly Application Server, and MySQL which are used for cloud software development in the course. A powerful laptop connected to a large monitor or a desktop with large monitor is recommended for improved productivity.