A Deep Dive into The Java Platform Module System (JPMS)
Learn the tools for creating modular, space-optimized, and extensible software in Java.
As software engineers, our goal is to write code that is easy to understand, maintain, extensible, and secure. These goals are even more important when building large, complex software comprising several inter-dependent components. Fundamental design principles like Information Hiding helped accomplish many of these goals. However, prior to Java 9, some of these goals could still be compromised due to the limitations in the underlying features such as packages & access modifiers, which could not always provide the needed encapsulation. Moreover, there were other configuration issues due to inherent limitations in JAR files and the ever-growing size of JDK. To address all the issues, another layer of abstraction was needed; and in Java 9, this abstraction was provided in the form of modules through The Java Platform Module System (JPMS).
This course will give you an in-depth understanding of JPMS and how it enables creating strongly encapsulated, modular software. We will start off by reviewing the problems that JPMS addresses thus clearly understanding the purpose it serves. We then understand the anatomy of a module and how to create it from both command line as well as from Eclipse. We will look at how modular and non-modular code can interoperate. We will next learn how to create custom runtime images (JREs) or in other words smaller distributables. This is one of the most exciting features of JPMS and something every developer must learn. Finally, we will look at how we can create services, a crucial feature of modular programming. We will learn how services can be added without redeploying our application.
Every concept is very clearly explained with well thought out & realistic examples, nice illustrations and perfect demonstrations. With over 5 hours of high-quality video lectures, the course is self-paced with life-time access. You get a certificate upon course completion.
Promo video explaining need for modular software and what the course offers.
Chapter Introduction & Agenda
Motivation: Stronger Encapsulation
Motivation: Ease of Understanding
Motivation: Smaller Distributables
Motivation: Reliable Configuration
Anatomy of a Module
Demo: Creating Downloader & Indexer Modules
Interoperability: Pre-Java 9 Code on Java 9 & Later
Module Path & Module Resolution
Demo: Creating Modular JARs
Demo: Achieving Reliable Configuration with Modules
Demo: Creating Modules from within Eclipse
Demo: Creating Modular JAR from within Eclipse
Unnamed Modules: Using Modular Code
Unnamed Modules: Using Modular Code from Command Line
Minor Correction in Previous Lecture
Automatic Modules: Using Non-Modular Code
Demo: Automatic Modules
Note on Auto-Suggest Option in Previous Lecture
Chapter Summary
Custom Runtime Images: Introduction
Demo: Custom Runtime Image with Platform Modules
Minor Note on Previous Lecture
Custom Runtime Image with few Application Modules: A First Look
jdeps: Java Dependency Analysis Tool
Converting Automatic Module into Explicit Module
Custom Runtime Image with Application Modules
Important Note on Executing App Module in Previous Lecture
Custom JRE: Conclusion
Services - Introduction
Incorporating Services into our Application
Demo: Services Implementation Set-up
Demo: Implementing Service
Demo: Implementing Service Provider
Demo: Implementing Consumer
Demo: Executing Service + Runtime Module Resolution Discussion
Demo: Creating Custom Runtime Image with Service
Demo: Extensibility in Action - Adding a new Service
Summing up the Course in under 200 words!
Dheeru Mundluru is the instructor for this program. A passionate software engineer & educator, Dheeru has around 15 years of experience developing innovative software for start-ups in Silicon Valley and elsewhere. He holds a Ph.D. in Computer Science from University of Louisiana at Lafayette (USA). He is an experienced online instructor with over half-a-dozen years of teaching experience with over 100k students globally. He has also been rated as one of the top instructors on Udemy. His engineering expertise includes developing complex Web data integration & mining software with Java as the main programming tool. Coming from start-up world, he also has extensive end-to-end experience in developing Web applications using technologies such as Spring, Hibernate, MySQL, and Solr.
Writing well-crafted code that follows the best design practices is of utmost importance to him. He brings the same level of passion and completeness to his teaching.