SlideShare a Scribd company logo
Modularity of the Java Platform
Martin Toshev
Who am I
Software engineer @ EPAM Bulgaria
BG JUG governance board member (http://jug.bg)
OpenJDK contributor
Agenda
Modularity 101
Modularity on top of the platform: OSGi
Modularity of the platform: Jigsaw
OSGi and Jigsaw interoperability: Penrose
Modularity 101
Modularity 101
Standard Java libraries are modules - Hibernate,
log4j and any library you can basically think of …
Build systems like Maven provide transparent
management of modules
Modularity 101
• Benefits of modularization:
– smaller modules are typically tested easier than a
monolithic application
– allows for easier evolution of the system - modules
evolve independently
Modularity 101
• Benefits of modularization:
– development of the system can be split easier between
teams/developers
– increased maintainability of separate modules
Modularity 101
The dependency mechanism used by the JDK
introduces a number of problems that modular
systems aim to solve:
–The "JAR hell" problem caused by shortcomings of the
classloading process
Modularity 101
The dependency mechanism used by the JDK
introduces a number of problems that modular
systems aim to solve:
–The lack of dynamicity in managing dependent modules
–The lack of loose coupling between modules
Modularity 101
Module systems aim to solve the mentioned
problems and typically provide:
• module management
• module deployment
• versioning
• dependency management
• module repositories
• configuration management
Modularity on top of the platform: OSGi
Modularity on top of the platform: OSGi
OSGi (Open Service Gateway iniatiave) provides a
specification for module systems implemented in
Java
It is introduced as JSR 8 and JSR 291 to the Java
platform
Modularity on top of the platform: OSGi
Q: So what is an OSGi runtime ?
Modularity on top of the platform: OSGi
Q: So what is an OSGi runtime ?
A: An OSGi runtime (module system) makes use of the Java
classloading mechanism in order to implement a container for
modular units (bundles) and is based on the OSGi spec - a series
of standards by the OSGi Alliance. Many application servers are
implemented using OSGi as a basis - it is also used in systems
from a diversity of areas
Modularity on top of the platform: OSGi
Q: So what is an OSGi runtime ?
A: An OSGi bundle is a just a JAR file that contains source code,
bundle metadata and resources. A bundle may provide various
services and components to the OSGi runtime. An OSGi runtime
allows for bundles to be installed, started, stopped, updated and
uninstalled without requiring a reboot
Modularity on top of the platform: OSGi
Q: So what is an OSGi runtime ?
A: The OSGi Core spec defines a layered architecture that
determines what is supported by the runtime – each layer
defines a particular functionality supported by the runtime and
the bundles
OSGi logical units:
 bundles
 services
 services registry
 life-cycle
 modules
 security
 execution environment
OSGi logical layers:
Modularity on top of the platform: OSGi
Q: So what is an OSGi runtime ?
A: Bundles may export packages for use by other bundles or
import packages exported by other bundles - this dependency
mechanism is referred to as wire protocol and is provided by the
Module layer of OSGi.
Modularity on top of the platform: OSGi
Q: So what is an OSGi runtime ?
A: Bundles may publish services to the runtime and use already
published services from the runtime – this dependency
mechanism is provided by the Service layer of OSGI.
Modularity on top of the platform: OSGi
Q: So what is an OSGi runtime ?
A: The MANIFEST.MF file of the bundle’s JAR file describes the
metadata of the bundle
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Sample
Bundle-SymbolicName: com.sample
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: ua.org.javaday.seminar.demo.Activator
Bundle-Vendor: javaday.org.ua
Require-Bundle: org.java.jigsaw.core,
org.java.jigsaw.extensions
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Service-Component: OSGI-INF/service.xml
Import-Package: ua.org.javaday.seminar.jigsaw.shared;version="1.0.0“
Export-Package: ua.org.javaday.seminar.demo.utils
Modularity on top of the platform: OSGi
Q: So what is an OSGi runtime ?
A: The runtime may implement extensions based on the OSGi
Compendium spec that extends the OSGi Core spec. These could
be:  remote services
 log service
 HTTP service
 device access service
 configuration admin
 metatype service
 preferences service
 user admin
 wire admin
 DMT admin service
 IO connector service
 provisioning service
 UPnP device service
 configuration admin
 declarative services
 event admin service
 deployment admin
 XML parser service
 monitoring service
 others
Modularity on top of the platform: OSGi
• OSGi continues to evolve …
Live Demo
Modularity on top of the platform: OSGi
Modularity of the platform: Jigsaw
Modularity of the platform:
Jigsaw
When speaking of modularity we should also
consider the entire runtime (rt.jar) and the JDK core
libraries …
… and built-in support for improved "OSGi-like"
modules in the Java platform
Modularity of the platform:
Jigsaw
The JDK is monolithic …
Modularity of the platform:
Jigsaw
• JDK 8 compact profiles provide smaller versions …
(javac -profile <profile_name> or
make profiles for an OpenJDK build)
compact 1 compact 2 compact 3
Modularity of the platform:
Jigsaw
The aim of project Jigsaw is to provide a module
system for the Java platform
Although deferred to JDK 9 some additional effort
such as Compact Profiles and removed/ deprecated
inter-library dependencies have been introduced in
JDK8 as an intermediate solution
Modularity of the platform:
Jigsaw
Modularization of the Java platform is a significant
change that impacts the entire ecosystem - may
even break existing projects
Modularity of the platform:
Jigsaw
Draft 3 of Jigsaw requirements states that
applications using only standard APIs must remain
compatible
Draft 3 of Jigsaw requirements also mentions that
some JDK-specific APIs must remain compatible but
no concrete JDK APIs are listed yet
Modularity of the platform:
Jigsaw
Q: So what is exactly project Jigsaw ?
Modularity of the platform:
Jigsaw
Q: So what is exactly project Jigsaw ?
A: Project Jigsaw provides the basis for JSR 376: Java Platform
Module System. Currently work on Jigsaw is being done for:
JEP 200 - define JDK modules (in a modules.xml file in the JDK repo)
JEP 201 - reorganize JDK sources into modules and modify JDK build
JEP 220 - restructure JRE/JDK images to accommodate modules
Modularity of the platform:
Jigsaw
Q: So what is exactly project Jigsaw ?
A: Structure of JDK sources as defined by JEP 201:
old
src/{share,$OS}/{classes,native}/$PACKAGE/*.{java,c,h,cpp,hpp}
•new
src/$MODULE/{share,$OS}/classes/$PACKAGE/*.java
native/include/*.{h,hpp}
$LIBRARY/*.{c,cpp} conf/*
Modularity of the platform:
Jigsaw
Q: So what is exactly project Jigsaw ?
A: In the early exploratory phase of project Jigsaw there was a
proof-of-concept implementation with JDK8 early-access builds
(now dropped).
Modularity of the platform:
Jigsaw
Q: So what was exactly the exploratory phase of Jigsaw ?
A: Jigsaw POC provided a modularized version of JDK along with
additional tools and language support for creating Jigsaw
modules. JDK8 early-access builds provided two types of JDK:
JDK modules image - all components are preinstalled as
modules
JDK base image + jmod packages - base JDK installation along
with additional Jigsaw modules of the JDK that can be installed
on-demand using the jmod tool
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module ?
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module ?
A: A collection of Java classes, native libraries and other
resources along with metadata that provides name and version
of the module and dependencies on other modules
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module ?
A: Jigsaw resolves modules during build and installation.
Jigsaw has no dynamics, no module lifecycle. The module system
assumes the existence of a foundational module named
java.base
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: Module can use ("require") other modules and additionally
specify version or version ranges for the module dependency -
modules are loaded with different module classloaders
module ua.org.javaday.A @ 1.0 {
requires ua.org.javaday.B @ [2.0, 3.0);
}
module ua.org.javaday.A {
requires ua.org.javaday.B @ >= 1.0;
requires ua.org.javaday.C @ < 2.0;
}
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: Module versions are compared using a similar approach as the
one used for Debian package versions … The intent is to be able
to package a module as an OS-specific package (not applicable
for Windows/Mac OS)
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: Modules can also "require" optional modules - meaning that
compilation succeeds even if the required module is missing
module ua.org.javaday.A {
requires optional jdk-corba@8-ea;
}
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: Modules can also "require" local modules - meaning that the
local module is a kind of a "mixin" - it is loaded in the same
classloader as the requiring module
module ua.org.javaday.A @ 1.0 {
requires local ua.org.javaday.B @ [2.0, 3.0);
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: A module may export packages and classes
module ua.org.javaday.A @ 1.0 {
requires ua.org.javaday.B @ [2.0, 3.0);
exports ua.org.javaday.A.seminar.Sample;
exports ua.org.javaday.A.seminar.samples.*;
}
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: Modules can explicitly specify which other modules can
"require" them
module ua.org.javaday.A @ 2.0 {
exports ua.org.javaday.A.seminar;
permits ua.org.javaday.B;
}
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: Modules can logically provide other module names (aliases):
module ua.org.javaday.A @ 1.0 {
provides ua.org.javaday.First @ 2.0;
}
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: Modules can have a single entry point
the main() method ua.org.javaday.A.Main is called when invoking:
java -m ua.org.javaday.A
module ua.org.javaday.A @ 1.0 {
permits ua.org.javaday.B;
class ua.org.javaday.A.Main;
}
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: Modules can define multiple views
the main() method ua.org.javaday.A.Main is called when invoking:
java -m ua.org.javaday.A
module ua.org.javaday.A {
exports ua.org.javaday.A.seminar;
view ua.org.javaday.internal.view {
permits ua.org.javaday.B
}
}
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: A module can declare that it provides a service
module ua.org.javaday.A {
provides service ua.org.javaday.A.external.TestService
with ua.org.javaday.A.external.TestServiceImpl;
}
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: A module can require a service
module ua.org.javaday.B {
requires service ua.org.javaday.A.external.TestService
}
Modularity of the platform:
Jigsaw
Q: What is a Jigsaw module in terms of the exploratory phase ?
A: A service can also be required optionally
module ua.org.javaday.B {
requires optional service ua.org.javaday.A.TestService;
}
Modularity of the platform:
Jigsaw
Q: So why not adopt OSGi (at least the module layer) for
modularization of the Java platform ?
Modularity of the platform:
Jigsaw
Q: So why not adopt OSGi (at least the module layer) for
modularization of the Java platform ?
A: As chief architect of the Java platform Mark Reinhold states:
The OSGI module layer is not operative at compile time - it
addresses modularity only during packaging, deployment and
execution. It is also strictly build on top of the platform so it
cannot be used to modularize it.
Modularity of the platform:
Jigsaw
Q: So why not adopt OSGi (at least the module layer) for
modularization of the Java platform ?
A: However - according to Peter Kriens (former technical director
at the OSGi Alliance and one of the key drivers behind the OSGi
spec) Jigsaw is not typically needed an will introduce burden to
the platform and modules can be introduced much easier:
The only thing we need to add to the existing system is
versioning information on the package and record this version in
the class file
Live Demo
Modularity of the platform: Jigsaw
OSGi and Jigsaw interoperability: Penrose
OSGi and Jigsaw interoperability: Penrose
When speaking of JDK modules we should consider
interoperability with existing module systems such
as OSGi
The purpose of project Penrose is to explore
interoperability between OSGi and Jigsaw
OSGi and Jigsaw interoperability: Penrose
Penrose is still in early stage of development …
Current work on project Penrose is deprecated due
to the dropped proof-of-concept version of Jigsaw …
OSGi and Jigsaw interoperability: Penrose
Penrose goals:
–ensuring OSGi frameworks run unmodified in a Jigsaw-
enabled runtime
–create modules/bundles that have both OSGi and
Jigsaw metadata in them
–Jigsaw metadata can be extended with OSGi concepts
–extend OSGi to read Jigsaw metadata
OSGi and Jigsaw interoperability: Penrose
Penrose goals:
–mapping Jigsaw metadata to OSGi metadata
–resolve Jigsaw modules in an OSGi runtime
–enhance OSGi to use Jigsaw APIs
–more cross delegation between the two systems …
Summary
Q: Project Jigsaw - when ?
Summary
Q: Project Jigsaw - when ?
A: Maybe when the Armagedon comes …
… or maybe in 2016 …
Summary
Q: Projects Jigsaw/Penrose - when ?
A: Unless you …
… discuss:
http://mail.openjdk.java.net/mailman/listinfo/jigsaw-dev
… and code:
http://hg.openjdk.java.net/jigsaw
Q&A
Thank you
References
OSGi Alliance
http://www.osgi.org/Main/HomePage
Jigsaw Project
http://openjdk.java.net/projects/jigsaw/
Penrose Project
http://openjdk.java.net/projects/penrose/
References
Modularity - what is it ?
http://www.infoq.com/articles/modular-java-what-is-it/
Java modularity - why ?
http://java.dzone.com/articles/java-modularity-2-why
Java JAR hell problem
http://en.wikipedia.org/wiki/Java_Classloader#JAR_hell
References
Project Jigsaw: Phase Two
http://mreinhold.org/blog/jigsaw-phase-two
Project Jigsaw: Goals & Requirements Draft 3
http://openjdk.java.net/projects/jigsaw/goals-reqs/03
JSR 376: Java Platform Module System
https://www.jcp.org/en/jsr/proposalDetails?id=376
References
Project Jigsaw: Exploratory Phase
http://openjdk.java.net/projects/jigsaw/exploratory-
phase
References
Java Module System Requirements
http://openjdk.java.net/projects/jigsaw/doc/draft-java-
module-system-requirements-12
Project Jigsaw: The Big Picture
http://cr.openjdk.java.net/~mr/jigsaw/notes/jigsaw-big-
picture-01
Java 8 Modules Jigsaw and OSGi
http://www.slideshare.net/mfrancis/java-8-modules-
jigsaw-and-osgi-neil-bartlett
References
Project Jigsaw: Late for the train
http://mreinhold.org/blog/late-for-the-train-qa
Unbearable lightness of Jigsaw
http://blog.osgi.org/2011/05/unbearable-lightness-of-
jigsaw.html
Netbeans discussion on Jigsaw
http://wiki.netbeans.org/Jigsaw
References
Java Modularity - OSGi and Project Jigsaw
http://techdistrict.kirkk.com/2009/06/12/java-
modularity-osgi-and-project-jigsaw/
The Modular Java Platform & Project Jigsaw
http://www.jfokus.se/jfokus14/preso/Jigsaw.pdf
JAX 2013: A Project Jigsaw primer
http://jaxenter.com/a-project-jigsaw-primer-50029.html
References
JavaOne 2013: The Modular Java Platform and Project
Jigsaw
http://parleys.com/play/52549d02e4b0a43ac12124be/a
bout
OpenJDK Penrose JavaOne 2012
http://www.slideshare.net/bosschaert/open-jdk-
penrose-javaone-2012

More Related Content

PPTX
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
PPTX
Modular Java
PPTX
Java 9 Modularity and Project Jigsaw
PDF
Java modularity: life after Java 9
PDF
JDK-9: Modules and Java Linker
PPTX
Java modularization
PPTX
Intro to OSGi
PDF
Open Services Gateway Initiative (OSGI)
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Modular Java
Java 9 Modularity and Project Jigsaw
Java modularity: life after Java 9
JDK-9: Modules and Java Linker
Java modularization
Intro to OSGi
Open Services Gateway Initiative (OSGI)

What's hot (20)

PDF
Intro To OSGi
KEY
Modularization in java 8
PDF
Java SE 9 modules (JPMS) - an introduction
PDF
Java 9 preview
PPSX
Java9 and the impact on Maven Projects (JFall 2016)
PDF
OSGi Presentation
PDF
Using the OSGi Application Model on Mobile Devices with CLDC JVM - Dimitar Va...
PDF
OpenJDK Penrose Presentation (JavaOne 2012)
PDF
Apache DeltaSpike
KEY
OSGi in 5 minutes
PPTX
Java Modularity with OSGi
PDF
MyFaces CODI and JBoss Seam3 become Apache DeltaSpike
PPSX
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
PDF
Jax london 2011
PDF
Make JSF more type-safe with CDI and MyFaces CODI
PDF
Desiging for Modularity with Java 9
PDF
MyFaces CODI Conversations
PDF
Benefits of OSGi in Practise
PDF
OSGi-enabled Java EE Applications using GlassFish at JCertif 2011
PDF
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
Intro To OSGi
Modularization in java 8
Java SE 9 modules (JPMS) - an introduction
Java 9 preview
Java9 and the impact on Maven Projects (JFall 2016)
OSGi Presentation
Using the OSGi Application Model on Mobile Devices with CLDC JVM - Dimitar Va...
OpenJDK Penrose Presentation (JavaOne 2012)
Apache DeltaSpike
OSGi in 5 minutes
Java Modularity with OSGi
MyFaces CODI and JBoss Seam3 become Apache DeltaSpike
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Jax london 2011
Make JSF more type-safe with CDI and MyFaces CODI
Desiging for Modularity with Java 9
MyFaces CODI Conversations
Benefits of OSGi in Practise
OSGi-enabled Java EE Applications using GlassFish at JCertif 2011
OSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
Ad

Viewers also liked (17)

PPTX
Security Аrchitecture of Тhe Java Platform
PPTX
Writing Stored Procedures with Oracle Database 12c
PPTX
Writing Stored Procedures in Oracle RDBMS
PPTX
Writing Java Stored Procedures in Oracle 12c
PPTX
RxJS vs RxJava: Intro
PPTX
Spring RabbitMQ
PDF
KDB database (EPAM tech talks, Sofia, April, 2015)
PPTX
Security Architecture of the Java platform
PDF
Eclipse plug in development
PPTX
JVM++: The Graal VM
PPTX
Security Architecture of the Java Platform (BG OUG, Plovdiv, 13.06.2015)
PPTX
The RabbitMQ Message Broker
PPTX
Oracle Database 12c Attack Vectors
PPTX
Is An Agile Standard Possible For Java?
PDF
Real World Java 9 (QCon London)
PPTX
Spring RabbitMQ
PPTX
New Features in JDK 8
Security Аrchitecture of Тhe Java Platform
Writing Stored Procedures with Oracle Database 12c
Writing Stored Procedures in Oracle RDBMS
Writing Java Stored Procedures in Oracle 12c
RxJS vs RxJava: Intro
Spring RabbitMQ
KDB database (EPAM tech talks, Sofia, April, 2015)
Security Architecture of the Java platform
Eclipse plug in development
JVM++: The Graal VM
Security Architecture of the Java Platform (BG OUG, Plovdiv, 13.06.2015)
The RabbitMQ Message Broker
Oracle Database 12c Attack Vectors
Is An Agile Standard Possible For Java?
Real World Java 9 (QCon London)
Spring RabbitMQ
New Features in JDK 8
Ad

Similar to Modularity of The Java Platform Javaday (http://javaday.org.ua/) (20)

PDF
Java 9 / Jigsaw - AJUG/VJUG session
ODP
Frankenstein's IDE: NetBeans and OSGi
PPT
Osgi Webinar
PPT
OSGi For Java Infrastructures [5th IndicThreads Conference On Java 2010, Pune...
PDF
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
PDF
OSGi & Java EE: A hybrid approach to Enterprise Java Application Development,...
PPT
Part 8 - Enforcing modularity of JasForge using OSGI and Futures Evolutions
PDF
CodeCamp Iasi 10 march 2012 - SolvingThePuzzle
PDF
OSGi user forum dc metro v1
PDF
OSGi User Forum US DC Metro
PPTX
PDF
Java 9 / Jigsaw - LJC / VJUG session (hackday session)
PPTX
PPSX
Java 9 and the impact on Maven Projects (JavaOne 2016)
PPTX
Osgi platform
PPTX
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
PPT
Java8 - Under the hood
PPTX
Java 9: Deep Dive into Modularity and Dealing with Migration Issues
PDF
OSGi introduction
PPTX
Introduction to OSGi - Part-1
Java 9 / Jigsaw - AJUG/VJUG session
Frankenstein's IDE: NetBeans and OSGi
Osgi Webinar
OSGi For Java Infrastructures [5th IndicThreads Conference On Java 2010, Pune...
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
OSGi & Java EE: A hybrid approach to Enterprise Java Application Development,...
Part 8 - Enforcing modularity of JasForge using OSGI and Futures Evolutions
CodeCamp Iasi 10 march 2012 - SolvingThePuzzle
OSGi user forum dc metro v1
OSGi User Forum US DC Metro
Java 9 / Jigsaw - LJC / VJUG session (hackday session)
Java 9 and the impact on Maven Projects (JavaOne 2016)
Osgi platform
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Java8 - Under the hood
Java 9: Deep Dive into Modularity and Dealing with Migration Issues
OSGi introduction
Introduction to OSGi - Part-1

More from Martin Toshev (10)

PPTX
Building highly scalable data pipelines with Apache Spark
PPTX
Big data processing with Apache Spark and Oracle Database
PPT
Jdk 10 sneak peek
PPT
Semantic Technology In Oracle Database 12c
PPTX
Practical security In a modular world
PPT
Java 9 Security Enhancements in Practice
PPTX
Java 9 sneak peek
PDF
Concurrency Utilities in Java 8
PPTX
java2days 2014: Attacking JavaEE Application Servers
PPTX
Security Architecture of the Java Platform (http://www.javaday.bg event - 14....
Building highly scalable data pipelines with Apache Spark
Big data processing with Apache Spark and Oracle Database
Jdk 10 sneak peek
Semantic Technology In Oracle Database 12c
Practical security In a modular world
Java 9 Security Enhancements in Practice
Java 9 sneak peek
Concurrency Utilities in Java 8
java2days 2014: Attacking JavaEE Application Servers
Security Architecture of the Java Platform (http://www.javaday.bg event - 14....

Recently uploaded (20)

PPTX
CYBER-CRIMES AND SECURITY A guide to understanding
PPTX
KTU 2019 -S7-MCN 401 MODULE 2-VINAY.pptx
PPTX
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
DOCX
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
PPTX
Internet of Things (IOT) - A guide to understanding
PPTX
bas. eng. economics group 4 presentation 1.pptx
PDF
Digital Logic Computer Design lecture notes
PPTX
Engineering Ethics, Safety and Environment [Autosaved] (1).pptx
PPTX
Recipes for Real Time Voice AI WebRTC, SLMs and Open Source Software.pptx
PPT
Mechanical Engineering MATERIALS Selection
PDF
SM_6th-Sem__Cse_Internet-of-Things.pdf IOT
PDF
Structs to JSON How Go Powers REST APIs.pdf
PDF
Well-logging-methods_new................
PPTX
MET 305 2019 SCHEME MODULE 2 COMPLETE.pptx
PPTX
Lecture Notes Electrical Wiring System Components
PPTX
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
PDF
The CXO Playbook 2025 – Future-Ready Strategies for C-Suite Leaders Cerebrai...
PDF
Arduino robotics embedded978-1-4302-3184-4.pdf
PDF
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
PDF
Model Code of Practice - Construction Work - 21102022 .pdf
CYBER-CRIMES AND SECURITY A guide to understanding
KTU 2019 -S7-MCN 401 MODULE 2-VINAY.pptx
MCN 401 KTU-2019-PPE KITS-MODULE 2.pptx
ASol_English-Language-Literature-Set-1-27-02-2023-converted.docx
Internet of Things (IOT) - A guide to understanding
bas. eng. economics group 4 presentation 1.pptx
Digital Logic Computer Design lecture notes
Engineering Ethics, Safety and Environment [Autosaved] (1).pptx
Recipes for Real Time Voice AI WebRTC, SLMs and Open Source Software.pptx
Mechanical Engineering MATERIALS Selection
SM_6th-Sem__Cse_Internet-of-Things.pdf IOT
Structs to JSON How Go Powers REST APIs.pdf
Well-logging-methods_new................
MET 305 2019 SCHEME MODULE 2 COMPLETE.pptx
Lecture Notes Electrical Wiring System Components
FINAL REVIEW FOR COPD DIANOSIS FOR PULMONARY DISEASE.pptx
The CXO Playbook 2025 – Future-Ready Strategies for C-Suite Leaders Cerebrai...
Arduino robotics embedded978-1-4302-3184-4.pdf
PRIZ Academy - 9 Windows Thinking Where to Invest Today to Win Tomorrow.pdf
Model Code of Practice - Construction Work - 21102022 .pdf

Modularity of The Java Platform Javaday (http://javaday.org.ua/)

  • 1. Modularity of the Java Platform Martin Toshev
  • 2. Who am I Software engineer @ EPAM Bulgaria BG JUG governance board member (http://jug.bg) OpenJDK contributor
  • 3. Agenda Modularity 101 Modularity on top of the platform: OSGi Modularity of the platform: Jigsaw OSGi and Jigsaw interoperability: Penrose
  • 5. Modularity 101 Standard Java libraries are modules - Hibernate, log4j and any library you can basically think of … Build systems like Maven provide transparent management of modules
  • 6. Modularity 101 • Benefits of modularization: – smaller modules are typically tested easier than a monolithic application – allows for easier evolution of the system - modules evolve independently
  • 7. Modularity 101 • Benefits of modularization: – development of the system can be split easier between teams/developers – increased maintainability of separate modules
  • 8. Modularity 101 The dependency mechanism used by the JDK introduces a number of problems that modular systems aim to solve: –The "JAR hell" problem caused by shortcomings of the classloading process
  • 9. Modularity 101 The dependency mechanism used by the JDK introduces a number of problems that modular systems aim to solve: –The lack of dynamicity in managing dependent modules –The lack of loose coupling between modules
  • 10. Modularity 101 Module systems aim to solve the mentioned problems and typically provide: • module management • module deployment • versioning • dependency management • module repositories • configuration management
  • 11. Modularity on top of the platform: OSGi
  • 12. Modularity on top of the platform: OSGi OSGi (Open Service Gateway iniatiave) provides a specification for module systems implemented in Java It is introduced as JSR 8 and JSR 291 to the Java platform
  • 13. Modularity on top of the platform: OSGi Q: So what is an OSGi runtime ?
  • 14. Modularity on top of the platform: OSGi Q: So what is an OSGi runtime ? A: An OSGi runtime (module system) makes use of the Java classloading mechanism in order to implement a container for modular units (bundles) and is based on the OSGi spec - a series of standards by the OSGi Alliance. Many application servers are implemented using OSGi as a basis - it is also used in systems from a diversity of areas
  • 15. Modularity on top of the platform: OSGi Q: So what is an OSGi runtime ? A: An OSGi bundle is a just a JAR file that contains source code, bundle metadata and resources. A bundle may provide various services and components to the OSGi runtime. An OSGi runtime allows for bundles to be installed, started, stopped, updated and uninstalled without requiring a reboot
  • 16. Modularity on top of the platform: OSGi Q: So what is an OSGi runtime ? A: The OSGi Core spec defines a layered architecture that determines what is supported by the runtime – each layer defines a particular functionality supported by the runtime and the bundles OSGi logical units:  bundles  services  services registry  life-cycle  modules  security  execution environment OSGi logical layers:
  • 17. Modularity on top of the platform: OSGi Q: So what is an OSGi runtime ? A: Bundles may export packages for use by other bundles or import packages exported by other bundles - this dependency mechanism is referred to as wire protocol and is provided by the Module layer of OSGi.
  • 18. Modularity on top of the platform: OSGi Q: So what is an OSGi runtime ? A: Bundles may publish services to the runtime and use already published services from the runtime – this dependency mechanism is provided by the Service layer of OSGI.
  • 19. Modularity on top of the platform: OSGi Q: So what is an OSGi runtime ? A: The MANIFEST.MF file of the bundle’s JAR file describes the metadata of the bundle Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Sample Bundle-SymbolicName: com.sample Bundle-Version: 1.0.0.qualifier Bundle-Activator: ua.org.javaday.seminar.demo.Activator Bundle-Vendor: javaday.org.ua Require-Bundle: org.java.jigsaw.core, org.java.jigsaw.extensions Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Service-Component: OSGI-INF/service.xml Import-Package: ua.org.javaday.seminar.jigsaw.shared;version="1.0.0“ Export-Package: ua.org.javaday.seminar.demo.utils
  • 20. Modularity on top of the platform: OSGi Q: So what is an OSGi runtime ? A: The runtime may implement extensions based on the OSGi Compendium spec that extends the OSGi Core spec. These could be:  remote services  log service  HTTP service  device access service  configuration admin  metatype service  preferences service  user admin  wire admin  DMT admin service  IO connector service  provisioning service  UPnP device service  configuration admin  declarative services  event admin service  deployment admin  XML parser service  monitoring service  others
  • 21. Modularity on top of the platform: OSGi • OSGi continues to evolve …
  • 22. Live Demo Modularity on top of the platform: OSGi
  • 23. Modularity of the platform: Jigsaw
  • 24. Modularity of the platform: Jigsaw When speaking of modularity we should also consider the entire runtime (rt.jar) and the JDK core libraries … … and built-in support for improved "OSGi-like" modules in the Java platform
  • 25. Modularity of the platform: Jigsaw The JDK is monolithic …
  • 26. Modularity of the platform: Jigsaw • JDK 8 compact profiles provide smaller versions … (javac -profile <profile_name> or make profiles for an OpenJDK build) compact 1 compact 2 compact 3
  • 27. Modularity of the platform: Jigsaw The aim of project Jigsaw is to provide a module system for the Java platform Although deferred to JDK 9 some additional effort such as Compact Profiles and removed/ deprecated inter-library dependencies have been introduced in JDK8 as an intermediate solution
  • 28. Modularity of the platform: Jigsaw Modularization of the Java platform is a significant change that impacts the entire ecosystem - may even break existing projects
  • 29. Modularity of the platform: Jigsaw Draft 3 of Jigsaw requirements states that applications using only standard APIs must remain compatible Draft 3 of Jigsaw requirements also mentions that some JDK-specific APIs must remain compatible but no concrete JDK APIs are listed yet
  • 30. Modularity of the platform: Jigsaw Q: So what is exactly project Jigsaw ?
  • 31. Modularity of the platform: Jigsaw Q: So what is exactly project Jigsaw ? A: Project Jigsaw provides the basis for JSR 376: Java Platform Module System. Currently work on Jigsaw is being done for: JEP 200 - define JDK modules (in a modules.xml file in the JDK repo) JEP 201 - reorganize JDK sources into modules and modify JDK build JEP 220 - restructure JRE/JDK images to accommodate modules
  • 32. Modularity of the platform: Jigsaw Q: So what is exactly project Jigsaw ? A: Structure of JDK sources as defined by JEP 201: old src/{share,$OS}/{classes,native}/$PACKAGE/*.{java,c,h,cpp,hpp} •new src/$MODULE/{share,$OS}/classes/$PACKAGE/*.java native/include/*.{h,hpp} $LIBRARY/*.{c,cpp} conf/*
  • 33. Modularity of the platform: Jigsaw Q: So what is exactly project Jigsaw ? A: In the early exploratory phase of project Jigsaw there was a proof-of-concept implementation with JDK8 early-access builds (now dropped).
  • 34. Modularity of the platform: Jigsaw Q: So what was exactly the exploratory phase of Jigsaw ? A: Jigsaw POC provided a modularized version of JDK along with additional tools and language support for creating Jigsaw modules. JDK8 early-access builds provided two types of JDK: JDK modules image - all components are preinstalled as modules JDK base image + jmod packages - base JDK installation along with additional Jigsaw modules of the JDK that can be installed on-demand using the jmod tool
  • 35. Modularity of the platform: Jigsaw Q: What is a Jigsaw module ?
  • 36. Modularity of the platform: Jigsaw Q: What is a Jigsaw module ? A: A collection of Java classes, native libraries and other resources along with metadata that provides name and version of the module and dependencies on other modules
  • 37. Modularity of the platform: Jigsaw Q: What is a Jigsaw module ? A: Jigsaw resolves modules during build and installation. Jigsaw has no dynamics, no module lifecycle. The module system assumes the existence of a foundational module named java.base
  • 38. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: Module can use ("require") other modules and additionally specify version or version ranges for the module dependency - modules are loaded with different module classloaders module ua.org.javaday.A @ 1.0 { requires ua.org.javaday.B @ [2.0, 3.0); } module ua.org.javaday.A { requires ua.org.javaday.B @ >= 1.0; requires ua.org.javaday.C @ < 2.0; }
  • 39. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: Module versions are compared using a similar approach as the one used for Debian package versions … The intent is to be able to package a module as an OS-specific package (not applicable for Windows/Mac OS)
  • 40. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: Modules can also "require" optional modules - meaning that compilation succeeds even if the required module is missing module ua.org.javaday.A { requires optional jdk-corba@8-ea; }
  • 41. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: Modules can also "require" local modules - meaning that the local module is a kind of a "mixin" - it is loaded in the same classloader as the requiring module module ua.org.javaday.A @ 1.0 { requires local ua.org.javaday.B @ [2.0, 3.0);
  • 42. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: A module may export packages and classes module ua.org.javaday.A @ 1.0 { requires ua.org.javaday.B @ [2.0, 3.0); exports ua.org.javaday.A.seminar.Sample; exports ua.org.javaday.A.seminar.samples.*; }
  • 43. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: Modules can explicitly specify which other modules can "require" them module ua.org.javaday.A @ 2.0 { exports ua.org.javaday.A.seminar; permits ua.org.javaday.B; }
  • 44. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: Modules can logically provide other module names (aliases): module ua.org.javaday.A @ 1.0 { provides ua.org.javaday.First @ 2.0; }
  • 45. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: Modules can have a single entry point the main() method ua.org.javaday.A.Main is called when invoking: java -m ua.org.javaday.A module ua.org.javaday.A @ 1.0 { permits ua.org.javaday.B; class ua.org.javaday.A.Main; }
  • 46. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: Modules can define multiple views the main() method ua.org.javaday.A.Main is called when invoking: java -m ua.org.javaday.A module ua.org.javaday.A { exports ua.org.javaday.A.seminar; view ua.org.javaday.internal.view { permits ua.org.javaday.B } }
  • 47. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: A module can declare that it provides a service module ua.org.javaday.A { provides service ua.org.javaday.A.external.TestService with ua.org.javaday.A.external.TestServiceImpl; }
  • 48. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: A module can require a service module ua.org.javaday.B { requires service ua.org.javaday.A.external.TestService }
  • 49. Modularity of the platform: Jigsaw Q: What is a Jigsaw module in terms of the exploratory phase ? A: A service can also be required optionally module ua.org.javaday.B { requires optional service ua.org.javaday.A.TestService; }
  • 50. Modularity of the platform: Jigsaw Q: So why not adopt OSGi (at least the module layer) for modularization of the Java platform ?
  • 51. Modularity of the platform: Jigsaw Q: So why not adopt OSGi (at least the module layer) for modularization of the Java platform ? A: As chief architect of the Java platform Mark Reinhold states: The OSGI module layer is not operative at compile time - it addresses modularity only during packaging, deployment and execution. It is also strictly build on top of the platform so it cannot be used to modularize it.
  • 52. Modularity of the platform: Jigsaw Q: So why not adopt OSGi (at least the module layer) for modularization of the Java platform ? A: However - according to Peter Kriens (former technical director at the OSGi Alliance and one of the key drivers behind the OSGi spec) Jigsaw is not typically needed an will introduce burden to the platform and modules can be introduced much easier: The only thing we need to add to the existing system is versioning information on the package and record this version in the class file
  • 53. Live Demo Modularity of the platform: Jigsaw
  • 54. OSGi and Jigsaw interoperability: Penrose
  • 55. OSGi and Jigsaw interoperability: Penrose When speaking of JDK modules we should consider interoperability with existing module systems such as OSGi The purpose of project Penrose is to explore interoperability between OSGi and Jigsaw
  • 56. OSGi and Jigsaw interoperability: Penrose Penrose is still in early stage of development … Current work on project Penrose is deprecated due to the dropped proof-of-concept version of Jigsaw …
  • 57. OSGi and Jigsaw interoperability: Penrose Penrose goals: –ensuring OSGi frameworks run unmodified in a Jigsaw- enabled runtime –create modules/bundles that have both OSGi and Jigsaw metadata in them –Jigsaw metadata can be extended with OSGi concepts –extend OSGi to read Jigsaw metadata
  • 58. OSGi and Jigsaw interoperability: Penrose Penrose goals: –mapping Jigsaw metadata to OSGi metadata –resolve Jigsaw modules in an OSGi runtime –enhance OSGi to use Jigsaw APIs –more cross delegation between the two systems …
  • 60. Summary Q: Project Jigsaw - when ? A: Maybe when the Armagedon comes … … or maybe in 2016 …
  • 61. Summary Q: Projects Jigsaw/Penrose - when ? A: Unless you … … discuss: http://mail.openjdk.java.net/mailman/listinfo/jigsaw-dev … and code: http://hg.openjdk.java.net/jigsaw
  • 64. References Modularity - what is it ? http://www.infoq.com/articles/modular-java-what-is-it/ Java modularity - why ? http://java.dzone.com/articles/java-modularity-2-why Java JAR hell problem http://en.wikipedia.org/wiki/Java_Classloader#JAR_hell
  • 65. References Project Jigsaw: Phase Two http://mreinhold.org/blog/jigsaw-phase-two Project Jigsaw: Goals & Requirements Draft 3 http://openjdk.java.net/projects/jigsaw/goals-reqs/03 JSR 376: Java Platform Module System https://www.jcp.org/en/jsr/proposalDetails?id=376
  • 66. References Project Jigsaw: Exploratory Phase http://openjdk.java.net/projects/jigsaw/exploratory- phase
  • 67. References Java Module System Requirements http://openjdk.java.net/projects/jigsaw/doc/draft-java- module-system-requirements-12 Project Jigsaw: The Big Picture http://cr.openjdk.java.net/~mr/jigsaw/notes/jigsaw-big- picture-01 Java 8 Modules Jigsaw and OSGi http://www.slideshare.net/mfrancis/java-8-modules- jigsaw-and-osgi-neil-bartlett
  • 68. References Project Jigsaw: Late for the train http://mreinhold.org/blog/late-for-the-train-qa Unbearable lightness of Jigsaw http://blog.osgi.org/2011/05/unbearable-lightness-of- jigsaw.html Netbeans discussion on Jigsaw http://wiki.netbeans.org/Jigsaw
  • 69. References Java Modularity - OSGi and Project Jigsaw http://techdistrict.kirkk.com/2009/06/12/java- modularity-osgi-and-project-jigsaw/ The Modular Java Platform & Project Jigsaw http://www.jfokus.se/jfokus14/preso/Jigsaw.pdf JAX 2013: A Project Jigsaw primer http://jaxenter.com/a-project-jigsaw-primer-50029.html
  • 70. References JavaOne 2013: The Modular Java Platform and Project Jigsaw http://parleys.com/play/52549d02e4b0a43ac12124be/a bout OpenJDK Penrose JavaOne 2012 http://www.slideshare.net/bosschaert/open-jdk- penrose-javaone-2012

Editor's Notes

  • #2: .
  • #6: Some people argue that Java libraries are not modules since they do not provide encapsulation (such as classes and packages).
  • #7: Evolution of modules in the default classloading mechanism supported by the Java platform may cause the so called "JAR hell" problem when conflicting versions of the same library are present on the classpath or required by different libraries. In order to evolve libraries in a compatible way using the default classloading mechanism on must design libraries with backward/forward compatibility in mind.
  • #8: Evolution of modules in the default classloading mechanism supported by the Java platform may cause the so called "JAR hell" problem when conflicting versions of the same library are present on the classpath or required by different libraries. In order to evolve libraries in a compatible way using the default classloading mechanism on must design libraries with backward/forward compatibility in mind.
  • #42: multiple packages with the same name can be defined in different modules in that manner (and they are merged when modules are loaded) the optional modules may be explicitly required to "permit" the requiring module in the future
  • #43: multiple packages with the same name can be defined in different modules in that manner (and they are merged when modules are loaded) the optional modules may be explicitly required to "permit" the requiring module in the future
  • #44: multiple packages with the same name can be defined in different modules in that manner (and they are merged when modules are loaded) the optional modules may be explicitly required to "permit" the requiring module in the future
  • #45: multiple packages with the same name can be defined in different modules in that manner (and they are merged when modules are loaded) the optional modules may be explicitly required to "permit" the requiring module in the future
  • #46: multiple packages with the same name can be defined in different modules in that manner (and they are merged when modules are loaded) the optional modules may be explicitly required to "permit" the requiring module in the future
  • #47: multiple packages with the same name can be defined in different modules in that manner (and they are merged when modules are loaded) the optional modules may be explicitly required to "permit" the requiring module in the future
  • #48: multiple packages with the same name can be defined in different modules in that manner (and they are merged when modules are loaded) the optional modules may be explicitly required to "permit" the requiring module in the future
  • #49: The module can use an enhanced version of java.util.ServiceLoader to load the service
  • #50: The module can use an enhanced version of java.util.ServiceLoader to load the service
  • #53: The only benefit in Jigsaw according to Peter Kriens: The only reason I can think of is that is easier for the module system providers to program. In the Jigsaw model traversing the dependencies is as easy as taking the module name + version, combining it with a repository URL, doing some string juggling and using the result as a URL to your module.