5. Agenda
- Session 1: Introduction
- What is meant by Modularisation in Java 9?
- Session 2: JLink
- Lunch break: lunch + 10/15 minute optional jigsaw session
- Session 3: Migrating non-modular app to Java 9 or JShell
- Feedback
- Contribution
- Resources
6. How to share your (live) feedback with us?
Discussion/technical corner, share your thoughts, code snippets,
issues, feedback with us while you code away...
http://bit.ly/J9HackDay-AJUG-feedback
We have left a few
issues for you to find,
investigate, solve, report
to us or the OpenJDK /
JDK9 team
7. Setup
Is everyone setup, and ready to go?
http://bit.ly/J9HackDay-repo
You have this link via email / meetup message!
Read through till the end of the README.md
9. What is meant by Modularisation in Java 9?
JDK
module java.base
package java.io
class Console
...
package java.lang
class String
...
module java.logging
package java.util.logging
class FileHandler
class LogManager
...
module java.sql
package java.sql
class Connection
class SqlData
...
Java, the language: split into modules
modules...
packages...
classes...
10. What is meant by Modularisation in Java 9?
java.base
java.sql
other
modules...
java.logging
Java, the language: dependency graph
java.xml
implicit implicit
explicit
(requires)
explicit
(requires)
implicit
JDK
11. What is meant by Modularisation in Java 9?
Java, the language: dependency graph
java.base
java.sql
other
modules...
java.logging java.xml
implicit implicit
explicit
(requires)
explicit
(requires)
implicit
JDK
Our Java
applications
explicit
(requires)
explicit
implicit
12. What is meant by Modularisation in Java 9?
Pre-Java 9
Java 9/Jigsaw
src/main/java
package a.b.c
class p
class q
package m.n.o
class s
class t
src/main/java
module a.b.c
package a.b.c
class p
class q
module m.n.o
package m.n.o
class s
class t
Structure of
a typical
Java app.
containing
packages...
Create your own
modules
containing
packages, classes...
13. What is meant by Modularisation in Java 9?
Typical package structure Modules contain packages
Credits to Paul Bakker & Sander Mak
package books.api.entities
classes
package bookstore.api.service
What is looks like from the file system?
14. What is meant by Modularisation in Java 9?
Typical package structure Modules contain packages
Credits to Paul Bakker & Sander Mak
contains module
visibility
(readability) &
dependency info
module books.api contains
package books.api.entities
package books.api.service
modules
What is looks like from the file system?
15. What is meant by Modularisation in Java 9?
module com.abc {
requires com.abc.pqr;
requires transitive com.xyz.abc;
exports com.abc.def.alpha;
exports com.abc.pqr.beta to
com.ijk.mno,
com.lmn.stu;
uses java.network.Driver;
provides java.sql.Driver with com.mno.def.Driver;
}
module
definition
defines dependencies of module, to modules
com.abc.pqr & com.xyz.abc
transitive keyword defines
implicit dependency
module name
How is module dependencies are defined in Java 9?
module-info.java
16. What is meant by Modularisation in Java 9?
module com.abc {
requires com.abc.pqr;
requires transitive com.xyz.abc;
exports com.abc.def.alpha;
exports com.abc.pqr.beta to
com.ijk.mno,
com.lmn.stu;
uses java.network.Driver;
provides java.sql.Driver with com.mno.def.Driver;
}
module
definition
make all & only public types in specified
packages available to other modules
How is module dependencies are defined in Java 9?
module name
… or make available
to specified modules
module-info.java
17. What is meant by Modularisation in Java 9?
module com.abc {
requires com.abc.pqr;
requires transitive com.xyz.abc;
exports com.abc.def.alpha;
exports com.abc.pqr.beta to
com.ijk.mno,
com.lmn.stu;
uses java.network.Driver;
provides java.sql.Driver with com.mno.def.Driver;
}
module-info.java
module
definition
this module publishes
a service provider
this module uses a service provider
published by another module
module name
How is module dependencies are defined in Java 9?
18. Link to all the exercises!
http://bit.ly/J9Hackday-exercises
21. Lunch break
60 minutes
Short 10/15 minutes covering intro/background/fundamentals (talk while having a bite of food and drink)
22. What is meant by Modularisation in Java 9?
A bit of fundamentals and background before we get to the answer
23. What is meant by Modularisation in Java 9?
modularisation
Pre-Java 9 Java 9
Anomalies
OpenJDK& JDK
24. What is meant by Modularisation in Java 9?
How we perceive the JDK/JRE from a developer’s / end-user’s perspective?
JDK or
JRE
IBM
Other
vendors
Oracle download
Create
Client
Apps
distribute
Client
Apps +
bundle
JRE
25. What is meant by Modularisation in Java 9?
How the maintainers of Java perceive it?
Distribute
built apps
+ bundle
JDK
IBM
Other
vendors
Oracle build downloadOpenJDK JDK
26. What is meant by Modularisation in Java 9?
Modularisation of OpenJDK sources (JEP 201 and related JEPs)
Binary
compatible
JDK
re-organise rebuild
OpenJDK
source
Refactored
OpenJDK
source
Repository
JDK
re-organise
Improved layout of
source folders in
the JDK repository
27. What is meant by Modularisation in Java 9?
Modularisation of Runtime Images (JEP 220 and related JEPs)
Binary
compatible
JDK
re-organise rebuild
Runtime
JDK
Optimised
(modular)
JDK
Runtime
Traditional
Runtime JDK
Image
re-organise
A more compact
Runtime JDK Image
28. What is meant by Modularisation in Java 9?
Modularisation of Java Packages and Application Packaging (JEP 275 and related JEPs)
Modular Java 9
application +
custom JDK
compiles creates
Modularised
JDK Runtime
Modular
Java 9
source
JLink Smaller JDK footprint
Java 9
applicationcompiles creates
Modularised
JDK Runtime
Non-modular
Java 9 source
Binary compatible
creates
29. What is meant by Modularisation in Java 9?
JSR 376: Java Platform Module System played the primary role
http://openjdk.java.net/projects/jigsaw/spec/
30. What is meant by Modularisation in Java 9?
JEPs that lead to all the new features in Java 9 (including
Jigsaw):
- 200: The Modular JDK
- 201: Modular Source Code
- 220: Modular Run-Time Images (depends on JEP 162)
- 260: Encapsulate Most Internal APIs (no dependencies)
- 261: Module System (dependens on JEP 220, related to JEP 238)
- 282: jlink: The Java Linker (replaces implementation of JEP 220)
- 275: Modular Java Application Packaging
- 222: jshell: The Java Shell (Read-Eval-Print Loop)
- 193: Variable Handles
- 110: HTTP 2 Client
- 238: Multi-Release JAR Files
- 158: Unified JVM Logging
- G1 related JEPs (3)
- JEPs related to a number of security improvements
- JEPs related to a number of platform improvements
- >>> Many, many more JEPs, see the Java 9 JEPs list for further details <<<
31. What is meant by Modularisation in Java 9?
JDK 9& Jigsaw feature distribution
...
Other
JDK 9
features
Jigsaw
...
...
...
... ... ... ...
...
...
...
...
...
...
...
...
33. It’s been worked on for about a decade:
- Reliable Configuration
- define module dependencies
- resolve classpath issues
- Strong Encapsulation
- define or hiding away what’s not intended or necessary
for public access
- JDK internal APIs (sun.misc.unsafe, security,
etc…)
- within APIs of our own applications
Why Modularisation in Java 9?
34. Other side effects and benefits:
- Decluttering of code bases (loose coupling & high cohesion)
- OpenJDK sources
- JDK sources
- Our Java App sources (post migration and refactoring)
- Customised runtime JDK (smaller footprint)
- Highly desirable for IoT, arduino/embedded devices,
etc…
- Improve distribution and runtime performance
- Any more?
Why Modularisation in Java 9?
37. module
- named (via module-info.java)
- self-describing collection of code and data
- declares which other modules it requires
- exports one or more packages to other
modules
Important Java 9 Concepts & Terminologies
38. modular JAR
- like any other JAR file
- contains module-info.class in its root
directory
Important Java 9 Concepts & Terminologies
39. accessibility
(accessibility of types between modules)
- type must be public
- module exports the package containing
the type
- module depending on it declares it as
required (requires)
Important Java 9 Concepts & Terminologies
40. implied readability
(direct & implied readability)
Important Java 9 Concepts & Terminologies
readsmodule A
requires B
module B
exports ...
readsmodule A
requires B
module B
exports …
requires C
reads module C
exports ...
module A indirectly reads module C
module A
directly reads
module B
41. automatic module
- any (non-modular) JAR file placed on the MODULEPATH
- module name is derived from the jar name
- can have no module name if compiler fails to derive from the jar name
- does not contain the module descriptor file module-info.java
- exports everything
- reads all modules including unnamed modules
- not open for reflective access (unless directives are used)
Important Java 9 Concepts & Terminologies
42. named module
- modular JAR file placed on the MODULEPATH
- module name is derived from the module-info.java
descriptor file
- exports only packages that are declared exports
- reads only modules declared as requires
- not open for deep reflective access (unless directives are
used)
Important Java 9 Concepts & Terminologies
43. unnamed module
- any (non-modular) JAR file placed on the CLASSPATH
- module name is not derived from the jar name
- does not contain module-info.java descriptor file
- exports everything
- reads all modules except cannot read unnamed modules
- open for deep reflective access (for backward
compatibility)
Important Java 9 Concepts & Terminologies
44. automatic v/s unnamed modules
- they are the same, except
- automatic module: any (non-modular) JAR file placed
on the MODULEPATH
- unnamed module: any (non-modular) JAR file placed on
the CLASSPATH
- automatic modules get their names from the jar,
unnamed modules as the name states, is not named
Important Java 9 Concepts & Terminologies
45. open module
- a module declared for deep reflective access by other
modules (to help migration)
- declared in the module-info.java
Important Java 9 Concepts & Terminologies
open module foo.bar {
exports com.foo.bar;
requires hibernate.core;
requires hibernate.entitymanager;
}
open module
46. open package
- a package declared for deep reflective access by other
modules (to help migration)
- declared in the module-info.java
Important Java 9 Concepts & Terminologies
module foo.bar {
exports com.foo.bar;
opens com.foo.bar.model;
requires hibernate.core;
requires hibernate.entitymanager;
}
open package
47. split packages
- Two or more modules containing the same package
results
- strictly checked for Java 9 modules (named)
- not checked for unnamed modules
- causes the package to become invisible
Important Java 9 Concepts & Terminologies
48. Not everything can be covered but let’s find out about these topics:
- difference between classpath and module path
- kill switch (remove Jigsaw restrictions):
- java --permit-illegal-access …
- Jlink CLI option: --launcher
- maven, ant or gradle integrations
- and many more topics…
- checkout the resources on http://bit.ly/Java-9-Resources
So many things to cover!
51. Session 2: Introduction: JLink
Create a package
distributable, that
runs on any platform,
but needs a platform
specific JDK
JDK (javac)
Your App
packages
& classes
Your App
package
(distributable)
JVM, the
Platform
Java, the
language
(packages &
classes)
Any JRE/JDK
compiles
creates
Pre-Java 9
depends on (needs), to run
52. Session 2: Introduction: JLink
JDK
modules
JLink
JVM, the
Platform
Java, the
language (JDK
modules)
Your App
modules
Create standalone
distributable (smaller
footprint), that runs
on a specific platform
Your App
modules
JDK compiles
creates
Java 9