Skip to main content
Redhat Developers  Logo
  • Products

    Featured

    • Red Hat Enterprise Linux
      Red Hat Enterprise Linux Icon
    • Red Hat OpenShift AI
      Red Hat OpenShift AI
    • Red Hat Enterprise Linux AI
      Linux icon inside of a brain
    • Image mode for Red Hat Enterprise Linux
      RHEL image mode
    • Red Hat OpenShift
      Openshift icon
    • Red Hat Ansible Automation Platform
      Ansible icon
    • Red Hat Developer Hub
      Developer Hub
    • View All Red Hat Products
    • Linux

      • Red Hat Enterprise Linux
      • Image mode for Red Hat Enterprise Linux
      • Red Hat Universal Base Images (UBI)
    • Java runtimes & frameworks

      • JBoss Enterprise Application Platform
      • Red Hat build of OpenJDK
    • Kubernetes

      • Red Hat OpenShift
      • Microsoft Azure Red Hat OpenShift
      • Red Hat OpenShift Virtualization
      • Red Hat OpenShift Lightspeed
    • Integration & App Connectivity

      • Red Hat Build of Apache Camel
      • Red Hat Service Interconnect
      • Red Hat Connectivity Link
    • AI/ML

      • Red Hat OpenShift AI
      • Red Hat Enterprise Linux AI
    • Automation

      • Red Hat Ansible Automation Platform
      • Red Hat Ansible Lightspeed
    • Developer tools

      • Red Hat Trusted Software Supply Chain
      • Podman Desktop
      • Red Hat OpenShift Dev Spaces
    • Developer Sandbox

      Developer Sandbox
      Try Red Hat products and technologies without setup or configuration fees for 30 days with this shared Openshift and Kubernetes cluster.
    • Try at no cost
  • Technologies

    Featured

    • AI/ML
      AI/ML Icon
    • Linux
      Linux Icon
    • Kubernetes
      Cloud icon
    • Automation
      Automation Icon showing arrows moving in a circle around a gear
    • View All Technologies
    • Programming Languages & Frameworks

      • Java
      • Python
      • JavaScript
    • System Design & Architecture

      • Red Hat architecture and design patterns
      • Microservices
      • Event-Driven Architecture
      • Databases
    • Developer Productivity

      • Developer productivity
      • Developer Tools
      • GitOps
    • Secure Development & Architectures

      • Security
      • Secure coding
    • Platform Engineering

      • DevOps
      • DevSecOps
      • Ansible automation for applications and services
    • Automated Data Processing

      • AI/ML
      • Data Science
      • Apache Kafka on Kubernetes
      • View All Technologies
    • Start exploring in the Developer Sandbox for free

      sandbox graphic
      Try Red Hat's products and technologies without setup or configuration.
    • Try at no cost
  • Learn

    Featured

    • Kubernetes & Cloud Native
      Openshift icon
    • Linux
      Rhel icon
    • Automation
      Ansible cloud icon
    • Java
      Java icon
    • AI/ML
      AI/ML Icon
    • View All Learning Resources

    E-Books

    • GitOps Cookbook
    • Podman in Action
    • Kubernetes Operators
    • The Path to GitOps
    • View All E-books

    Cheat Sheets

    • Linux Commands
    • Bash Commands
    • Git
    • systemd Commands
    • View All Cheat Sheets

    Documentation

    • API Catalog
    • Product Documentation
    • Legacy Documentation
    • Red Hat Learning

      Learning image
      Boost your technical skills to expert-level with the help of interactive lessons offered by various Red Hat Learning programs.
    • Explore Red Hat Learning
  • Developer Sandbox

    Developer Sandbox

    • Access Red Hat’s products and technologies without setup or configuration, and start developing quicker than ever before with our new, no-cost sandbox environments.
    • Explore Developer Sandbox

    Featured Developer Sandbox activities

    • Get started with your Developer Sandbox
    • OpenShift virtualization and application modernization using the Developer Sandbox
    • Explore all Developer Sandbox activities

    Ready to start developing apps?

    • Try at no cost
  • Blog
  • Events
  • Videos

DevNation Live Blog: Java 9 modularity in action

June 28, 2016
Salem Elrahal
Related topics:
Java

Share:

    Common to all solid architecture design is the notion of encapsulation, hiding the internals of a component and exposing a strict contract for consumers. This allows implementation changes to happen while giving strong guarantees about the behavior of other components. At DevNation 2016 Sander Mak and Paul Bakker from Luminis Technologies presented on the upcoming modularity features in Java 9 provided by the Jigsaw JSR which will introduce native mechanisms for enforcing strong encapsulation and service abstraction in the Java language. Java modules are a way of grouping java files and defining what services they provide and consume.

    You might think "Hey, Java class files are typically distributed in JAR files, doesn't that count for modularity?" or maybe even "What about OSGi? Isn't that modularity for the JVM.". Although JAR files look like modules during compile time they get clumped together during runtime and there are no "fences" between the classes to hide implementation details. OSGi is a great modular framework but suffers from narrow adoption and adding modularity to the JDK will provide those same encapsulation benefits to many libraries and applications. Furthermore part of the Java 9 specification is targeting modularizing the JDK itself, which cannot be done with OSGi (a framework built on top of the JVM).

    Stronger encapsulation means hiding whole packages that are implementation specific from consumers of your API and these principles apply to the JDK as well as other libraries. Currently implementation specific code (like classes from the packages com.sun.* and jdk.internal.* from the JDK) ideally should not be used but that doesn't stop developers. Those fortunate developers among us tasked with maintaining existing legacy systems might at this point question these fundamental changes and how they will impact existing code which could be using JDK internals. For now, the modularity refactoring in Java 9 will include exposing the internal unsafe classes to maintain backwards compatibility but will be provided with tooling to help migrate your legacy code. Automatic modules is one of these tools that will take your existing code and partially migrate it to modules. A plain JAR on the module path is an Automatic Module which will export everything and reads all other modules.

    Theory is great, lets talk details. Say we are using a module that exposes some Java interfaces, like a good encapsulated library, how do we get a reference to an Implementation of the interface? Including the concrete type directly will necessitate a compile time visibility to the implementation which is the exact type of dependency we are trying to avoid with modularity. Enter the ServiceRegistry. The Java modules system utilizes a services loader which has been around for quite a while but is getting a face-lift for new usage in Java 9. Using just a reference to the interface a Java class can look up implementations via the ServiceLoader and then call any methods.

    Iterator serviceImplentations = ServiceLoader.load(MyService.class);
    

    The service loader will obey your Module metadata, so your module must be explicit about needing an implementation of the MyService interface:

    module myApp {
     requires thirdPartyAPI;
     uses com.api.MyService
    }
    

    Likewise, part of the benefit of modularity lying in the requirement to enumerate your exposed services, your app will need to include a dependency on a module that provides an implementation:

    module ThirdPartyProvider {
     requires thirdPartyAPI;
     provides com.api.MyService with myProvider.MyServiceImpl
    }
    

    Now, the service loader will be able to find the concrete implementation and you can actually Get Stuff Done. Modularization as a first class feature within the JVM, how cool! Look for all these features and more coming in Java 9!

    Recent Posts

    • How to build a Model-as-a-Service platform

    • How Quarkus works with OpenTelemetry on OpenShift

    • Our top 10 articles of 2025 (so far)

    • The benefits of auto-merging GitHub and GitLab repositories

    • Supercharging AI isolation: microVMs with RamaLama & libkrun

    Red Hat Developers logo LinkedIn YouTube Twitter Facebook

    Products

    • Red Hat Enterprise Linux
    • Red Hat OpenShift
    • Red Hat Ansible Automation Platform

    Build

    • Developer Sandbox
    • Developer Tools
    • Interactive Tutorials
    • API Catalog

    Quicklinks

    • Learning Resources
    • E-books
    • Cheat Sheets
    • Blog
    • Events
    • Newsletter

    Communicate

    • About us
    • Contact sales
    • Find a partner
    • Report a website issue
    • Site Status Dashboard
    • Report a security problem

    RED HAT DEVELOPER

    Build here. Go anywhere.

    We serve the builders. The problem solvers who create careers with code.

    Join us if you’re a developer, software engineer, web designer, front-end designer, UX designer, computer scientist, architect, tester, product manager, project manager or team lead.

    Sign me up

    Red Hat legal and privacy links

    • About Red Hat
    • Jobs
    • Events
    • Locations
    • Contact Red Hat
    • Red Hat Blog
    • Inclusion at Red Hat
    • Cool Stuff Store
    • Red Hat Summit
    © 2025 Red Hat

    Red Hat legal and privacy links

    • Privacy statement
    • Terms of use
    • All policies and guidelines
    • Digital accessibility

    Report a website issue