1. Course Description

1.2. Course Goal

The goal of this course is to master the design and development challenges of a single application instance to be deployed in an enterprise-ready Java application framework. This course provides the bedrock for materializing broader architectural solutions within the body of a single instance.

Course Topic External Relationships

jhu784 topic relationships

1.3. Description

This comprehensive course explores core application aspects for developing, configuring, securing, deploying, and testing a Java-based service using a layered set of modern frameworks and libraries that can be used to develop full services and microservices to be deployed within a container. The emphasis of this course is on the center of the application (e.g., Spring, Spring Boot, Spring Data, and Spring Security) and will lay the foundation for other aspects (e.g., API, SQL and NoSQL data tiers, distributed services) covered in related courses.

Students will learn thru lecture, examples, and hands-on experience in building multi-tier enterprise services using a configurable set of server-side technologies.

Students will learn to:

  • Implement flexibly configured components and integrate them into different applications using inversion of control, injection, and numerous configuration and auto-configuration techniques

  • Implement unit and integration tests to demonstrate and verify the capabilities of their applications using JUnit

  • Implement basic API access to service logic using using modern RESTful approaches that include JSON and XML

  • Implement basic data access tiers to relational and NoSQL (Mongo) databases using the Spring Data framework

  • Implement security mechanisms to control access to deployed applications using the Spring Security framework

Using modern development tools students will design and implement several significant programming projects using the above-mentioned technologies and deploy them to an environment that they will manage.

The course is continually updated and currently based on Java 17, Spring 5.x, and Spring Boot 2.x.

1.4. Student Background

  • Prerequisite: 605.481 Distributed Development on the World Wide Web or equivalent

  • Strong Java programming skills are assumed

  • Familiarity with Maven and IDEs is helpful

  • Familiarity with Docker (as a user) can be helpful in setting up a local development environment quickly

1.5. Student Commitment

  • Students should be prepared to spend between 6-10 hours a week outside of class. Time spent can be made efficient by proactively keeping up with class topics and actively collaborating with the instructor and other students in the course.

1.6. Course Text(s)

The course uses no mandatory text. The course comes with many examples, course notes for each topic, and references to other free Internet resources.

1.7. Required Software

Students are required to establish a local development environment.

  1. Software you will need to load onto your local development environment:

    1. Git Client

    2. Java JDK 17

    3. Maven 3 (>= 3.6.3)

    4. IDE (IntelliJ IDEA Community Edition or Pro or Eclipse/STS)

      • The instructor will be using IntelliJ IDEA CE in class, but Eclipse/STS is also a good IDE option. It is best to use what you are already comfortable using.

    5. JHU VPN (Open Pulse Secure) — workarounds available

  2. Software you will ideally load onto your local development environment:

    1. Docker

      • Docker can be used to automate software installation and setup and implement deployment and integration testing techniques. Several pre-defined images, ready to launch, will be made available in class.

    2. curl or something similar

    3. Postman API Client or something similar

  3. Software you will need to install if you do not have Docker

    1. MongoDB

  4. High visibility software you will use that will get downloaded and automatically used through Maven.

    1. JUnit

    2. SLF/Logback

    3. a relational database (H2 Database Engine) and JPA persistence provider (Hibernate)

    4. application framework (Spring Boot 2.x, Spring 5.x).

1.8. Course Structure

The course materials consist of a large set of examples that you will download, build, and work with locally. The course also provides a set of detailed course notes for each lecture and an associated assignment active at all times during the semester. Topics and assignments have been grouped into application development, service/API tier, data tier, and async processing. Each group consists of multiple topics that span multiple weeks.

The examples are available in a Gitlab public repository. The course notes are available in HTML and PDF format for download. All content or links to content is published on the course public website. To help you locate and focus on current content and not be overwhelmed with the entire semester, examples and links to content are activated as the semester progresses. A list of "What is new" and "Student TODOs" is published weekly before class to help you keep up to date and locate relevant material.

1.9. Grading

  • 100 >= A >= 90 > B >= 80 > C >= 70 > F

Assessment

% of Semester Grade

Class/Newsgroup Participation

10% (9pm EST, Wed weekly cut-off)

Assignment 0: Application Build

5% (##)

Assignment 1: Application Config

20%

Assignment 2: Web API

15%

Assignment 3: Security

15%

Assignment 4: Deployment

10%

Assignment 5: Database

25%

Do not host your course assignments in a public Internet repository.

Course assignments should not be posted in a public Internet repository. If using an Internet repository, only the instructor should have access.

  • Assignments will be done individually and most are graded 100 though 0, based on posted project grading criteria.

    • ## Assignment 0 will be graded on a done (100)/not-done(0) basis and must be turned in on-time in order to qualify for a REDO. The intent of this requirement is to promote early activity with development and early exchange of questions/answers and artifacts between students and instructor.

  • Class/newsgroup participation will be based on instructor judgment whether the student has made a contribution to class to either the classroom or newsgroup on a consistent weekly basis. A newsgroup contribution may be a well-formed technical observation/lesson learned, a well formed question that leads to a well formed follow up from another student, or a well formed answer/follow-up to another student’s question. Well formed submissions are those that clearly summarize the topic in the subject, and clearly describe the objective, environment, and conditions in the body. The instructor will be the judge of whether a newsgroup contribution meets the minimum requirements for the week. The intent of this requirement is to promote active and open collaboration between class members.

    • Weekly cut-off for newsgroup contributions is each Wed @9pm EST

1.10. Grading Policy

  • Late assignments will be deducted 10pts/week late, starting after the due date/time, with one exception. A student may submit a single project up to 4 days late without receiving approval and still receive complete credit. Students taking advantage of the "free first pass" should still submit an e-mail to the instructor and grader(s) notifying them of their intent.

  • Class attendance is strongly recommended, but not mandatory. The student is responsible for obtaining any written or oral information covered during their absence. Each session will be recorded — minus error. A link to the recording will be posted on Canvas.

1.11. Academic Integrity

Collaboration of ideas and approaches are strongly encouraged. You may use partial solutions provided by others as a part of your project submission. However, the bulk usage of another students implementation or project will result in a 0 for the project. There is a difference between sharing ideas/code snippets and turning in someone else’s work as your own. When in doubt, document your sources.

Do not host your course assignments in a public Internet repository.

1.12. Instructor Availability

I am available at least 20min before class, breaks, and most times after class for extra discussion. I monitor/respond to e-mails and the newsgroup discussions and hold ad-hoc office hours via Zoom in the evening and early morning hours.

1.13. Communication Policy

I provide detailed answers to assignment and technical questions through the course newsgroup. You can get individual, non-technical questions answered via email but please direct all technical and assignment questions to the newsgroup. If you have a question or make a discovery — it is likely pertinent to most of the class and you are the first to identify.

I typically respond to all e-mails and newsgroup posts in the evening and early morning hours. Rarely will a response take longer than 24 hours. It is very common for me to ask for a copy of your broken project so that I can provide more analysis and precise feedback. This is commonly transmitted either as an e-mail attachment, a link to a branch in a private repository, or an early submission in Canvas.

1.14. Office Hours

Students needing further assistance are welcome to schedule a web meeting using Zoom Conferencing. Most conference times will be between 8 and 10pm EST and 6am to 5pm EST weekends.

2. Course Assignments

2.1. General Requirements

  • Assignments must be submitted to Canvas with source code in a standard archive file. "target" directories with binaries are not needed and add unnecessary size.

  • All assignments must be submitted with a README that points out how the project meets the assignment requirements.

  • All assignments must be written to build and run in the grader’s environment in a portable manner using Maven 3. This will be clearly spelled out during the course and you may submit partial assignments early to get build portability feedback (not early content grading feedback).

  • Test Cases must be written using JUnit 5 and run within the Maven surefire and failsafe environments.

  • The course repository will have an assignment-support and assignment-starter set of modules.

    • The assignment-support modules are to be referenced as a dependency and not cloned into student submissions.

    • The assignment-starter modules are skeletal examples of work to be performed in the submitted assignment.

2.2. Submission Guidelines

You should test your application prior to submission by

  1. Verify that your project does not require a pre-populated database. All setup must come through automated test setup.

    This will make sure you are not depending on any residue schema or data in your database.

  2. Run maven clean and archive your project from the root without pre-build target directory files.

    This will help assure you are only submitting source files and are including all necessary source files within the scope of the assignment.

  3. Move your localRepository (or set your settings.xml#localRepository value to a new location — do not delete your primary localRepository)

    This will hide any old module SNAPSHOTs that are no longer built by the source (e.g., GAV was changed in source but not sibling dependency).

  4. Explode the archive in a new location and run mvn clean install from the root of your project.

    This will make sure you do not have dependencies on older versions of your modules or manually installed artifacts. This, of course, will download all project dependencies and help verify that the project will build in other environments. This will also simulate what the grader will see when they initially work with your project.

  5. Make sure the README documents all information required to demonstrate or navigate your application and point out issues that would be important for the evaluator to know (e.g., "the instructor said…​")

3. Syllabus

Table 1. Core Development
# Date Lectures Assignments/Notes

1

Aug31

Course Introduction

  • Devenv Setup doc

Spring/Spring Boot Introduction

  • Assignment 0
    App Build doc
    Due: Tue Sep06, 6am

2

Sep07

Spring Boot Configuration

  • Assignment 1a
    App Config doc
    Due: Wed Sep28, 6am

3

Sep14

Logging slides doc pdf

  • Assignment 1b
    Logging doc
    Due: Wed Sep28, 6am

4

Sep21

Testing slides doc pdf

  • Assignment 1c
    Testing doc
    Due: Wed Sep28, 6am

Table 2. Service and API Tiers
# Date Lectures Assignments/Notes

4

Sep21 (Cont)

API

  • Assignment 2
    API doc
    Due: Sun Oct16, 6am

5

Sep28

API (Cont)

6

Oct05

  • Data/Content Marshalling doc pdf

  • API Documentation doc pdf

7

Oct12

Spring Security

  • Spring Security Introduction doc pdf

  • Authentication doc pdf

  • Assignment 3a
    Security doc
    Due: Sun Nov06, 6am

8

Oct19

  • User Details doc pdf

  • Authorization/Access Control doc pdf

  • [JSON Web Tokens doc pdf ] * optional topic

  • Enabling HTTPS/TLS doc pdf

  • Assignment 3b
    Authorization doc

  • Assignment 3c
    HTTPS doc
    Due: Sun Nov06, 6am

9

Oct26

AOP and Method Proxies doc pdf

  • Assignment 3d
    AOP doc
    Due: Sun Nov06, 6am

Table 3. Data Tier
# Date Lectures Assignments/Notes

10

Nov02

Containers and Deployments

  • Assignment 4
    Deployment doc
    Due: Sun Nov20, 6am

11

Nov09

JPA Mapping

  • Assignment 5a
    Spring Data JPA doc
    Due: Sun, Dec11, 6am

12

Nov16

  • Spring Data JPA Repository doc pdf

MongoDB NoSQL Mapping

  • Assignment 5b
    Spring Data Mongo doc
    Due: Sun Dec11, 6am

Nov23

Thanksgiving

no class

13

Nov30

  • Assignment 5c
    Spring Data End-to-End doc
    Due: Sun Dec11, 6am

14

Dec07

Heroku Database Deployments doc pdf

Validation doc pdf

Table 4. Other Topics

Integration Test Topics

  • Integration Unit Tests doc pdf

  • Docker Compose IT doc pdf

  • Testcontainers with JUnit doc pdf

  • [Testcontainers with Spock] * optional topic doc pdf