Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Modularization With Project Jigsaw in JDK 9

5,580 views

Published on

An introduction to the changes that will be happening in JDK 9 to bring modularity to both the JDK itself and Java applications that use it.

Published in: Software
  • Be the first to comment

Modularization With Project Jigsaw in JDK 9

  1. 1. © Copyright Azul Systems 2016 © Copyright Azul Systems 2015 @speakjava Modularization with Project Jigsaw in JDK 9 Simon Ritter Deputy CTO, Azul Systems 1
  2. 2. © Copyright Azul Systems 2016 Agenda  JDK 9 API structure overview  Introduction to Jigsaw and modules  Developing code with modules  Summary and further information 2
  3. 3. © Copyright Azul Systems 2016 JDK 9 API Structure Overview 3
  4. 4. © Copyright Azul Systems 2016 Goals For Project Jigsaw  Make Java SE more scalable and flexible  Improve security, maintainability and performance  Simplify construction, deployment and maintenance of large scale applications  See how long you can keep a project going for 4
  5. 5. © Copyright Azul Systems 2016 API Classification  Supported, intended for public use – JCP specified: java.*, javax.* – JDK specific: some com.sun.*, some jdk.*  Unsupported, not intended for public use – Mostly sun.* – Most infamous is sun.misc.Unsafe 5
  6. 6. © Copyright Azul Systems 2016 General Java Compatability Policy  If an application uses only supported APIs on version N of Java it should work on version N+1, even without recompilation  Supported APIs can be removed, but only with advanced notice  To date 23 classes, 18 interfaces and 379 methods have been deprecated –None have been removed 6
  7. 7. © Copyright Azul Systems 2016 JDK 9: Incompatible Changes  Encapsulate most JDK internal APIs  Remove a small number of supported APIs – 6 in total, all add/remove PropertyChangeListener  Change the binary structure of the JRE and JDK  Remove the endorsed-standards override and extension mechanism  New version string format  A single underscore will no longer be allowed as an identifier in source code 7
  8. 8. © Copyright Azul Systems 2016 Most Popular Unsupported APIs 1. sun.misc.BASE64Encoder 2. sun.misc.Unsafe 3. sun.misc.BASE64Decoder 8 Oracle dataset based on internal application code
  9. 9. © Copyright Azul Systems 2016 JDK Internal API Classification  Non-critical – Little or no use outside the JDK – Used only for convenience (alternatives exist)  Critical – Functionality that would be difficult, if not impossible to implement outside the JDK 9
  10. 10. © Copyright Azul Systems 2016 JEP 260 Proposal 1. Encapsulate all non-critical JDK-internal APIs 2. Encapsulate all critical JDK-internal APIs, for which supported replacements exist in JDK 8 3. Do not encapsulate other critical JDK-internal APIs – Deprecate these in JDK 9 – Plan to encapsulate or remove them in JDK 10 – Provide command-line option to access encapsulated critical APIs 10
  11. 11. © Copyright Azul Systems 2016 Binary Structure Of JDK/JRE  Potentially disruptive change – Details in JEP 220 – Blurs the distinction between JRE and JDK  Implemented since late 2014 – Allow people to get used to new organisation 11
  12. 12. © Copyright Azul Systems 2016 JDK Structure bin Pre-JDK 9 JDK 9 lib tools.jar jre bin rt.jar lib libconfbin jre directory tools.jar rt.jar
  13. 13. © Copyright Azul Systems 2016 Introduction to Jigsaw and Modules 13
  14. 14. © Copyright Azul Systems 2016 Module Fundamentals  Module is a grouping of code – For Java this is a collection of packages  The module can contain other things – Native code – Resources – Configuration data 14 com.azul.zoop com.azul.zoop.alpha.Name com.azul.zoop.alpha.Position com.azul.zoop.beta.Animal com.azul.zoop.beta.Zoo
  15. 15. © Copyright Azul Systems 2016 Module Declaration 15 module com.azul.zoop { } module-info.java com/azul/zoop/alpha/Name.java com/azul/zoop/alpha/Position.java com/azul/zoop/beta/Animal.java com/azul/zoop/beta/Zoo.java
  16. 16. © Copyright Azul Systems 2016 Module Dependencies module com.azul.zoop { requires com.azul.zeta; } com.azul.zoop com.azul.zeta
  17. 17. © Copyright Azul Systems 2016 Module Dependencies module com.azul.app { requires com.azul.zoop; requires java.sql; } com.azul.app com.azul.zoop java.sql
  18. 18. © Copyright Azul Systems 2016 Module Dependency Graph com.azul.app java.base java.sqlcom.azul.zoop com.azul.zeta java.xml java.logging
  19. 19. © Copyright Azul Systems 2016 Package Visibility module com.azul.zoop { exports com.azul.zoop.alpha; exports com.azul.zoop.beta; } com.azul.zoop com.azul.zoop.alpha com.azul.zoop.beta com.azul.zoop.theta
  20. 20. © Copyright Azul Systems 2016 Accessibility  For a package to be visible – The package must be exported by the containing module – The containing module must be read by the using module  Public types from those packages can then be used com.azul.zoopcom.azul.app reads
  21. 21. © Copyright Azul Systems 2016 Readability v. Dependency com.azul.app java.sql java.logging module java.sql { requires public java.logging; } Driver d = … Logger l = d.getParentLogger(); l.log(“azul’);
  22. 22. © Copyright Azul Systems 2016 Module Readability Graph com.azul.app java.base java.sqlcom.azul.zoop com.azul.zeta java.xml java.logging
  23. 23. © Copyright Azul Systems 2016 Java Accessibility (pre-JDK 9) public protected <package> private
  24. 24. © Copyright Azul Systems 2016 Java Accessibility (JDK 9) public to everyone public, but only to specific modules public only within a module protected <package> private public ≠ accessible (fundamental change to Java)
  25. 25. © Copyright Azul Systems 2016 JDK Platform Modules 25
  26. 26. © Copyright Azul Systems 2016 Developing Code With Modules 26
  27. 27. © Copyright Azul Systems 2016 Compilation 27 $ javac –d mods src/zeta/module-info.java src/zeta/com/azul/zeta/Vehicle.java mods/zeta/mod-info.class mods/zeta/com/azul/zeta/Vehicle.class src/zeta/mod-info.java src/zeta/com/azul/zeta/Vehicle.java
  28. 28. © Copyright Azul Systems 2016 Module Path $ javac –modulepath dir1:dir2:dir3
  29. 29. © Copyright Azul Systems 2016 Compilation With Module Path 29 $ javac –modulepath mlib –d mods src/zoop/module-info.java src/zoop/com/azul/zoop/alpha/Name.java mods/zoop/mod-info.class mods/zoop/com/azul/zoop/alpha/Name.class src/zoop/mod-info.java src/zoop/com/azul/zoop/alpha/Name.java
  30. 30. © Copyright Azul Systems 2016 Application Execution  -modulepath can be abbreviated to -mp $ java –modulepath mods –m com.azul.app/com.azul.app.Main Azul application initialised! module name main class
  31. 31. © Copyright Azul Systems 2016 Packaging With Modular Jars mods/app/mod-info.class mods/app/com/azul/app/Main.class $ jar --create --file mlib/app.jar --main-class com.azul.app.Main -C mods . module-info.class com/azul/zoop/Main.class app.jar
  32. 32. © Copyright Azul Systems 2016 Jar Files & Module Information $ jar --file mlib/app.jar –p Name: com.azul.app Requires: com.azul.zoop java.base [MANDATED] java.sql Main class: com.azul.app.Main
  33. 33. © Copyright Azul Systems 2016 Application Execution (JAR) $ java –mp mlib:mods –m com.azul.app.Main Azul application initialised!
  34. 34. © Copyright Azul Systems 2016 Linking Modular run-time image …confbin jlink $ jlink --modulepath $JDKMODS --addmods java.base –output myimage $ myimage/bin/java –listmods java.base@9.0
  35. 35. © Copyright Azul Systems 2016 Linking An Application $ jlink --modulepath $JDKMODS:$MYMODS --addmods com.azul.app –output myimage $ myimage/bin/java –listmods java.base@9.0 java.logging@9.0 java.sql@9.0 java.xml@9.0 com.azul.app@1.0 com.azul.zoop@1.0 com.azul.zeta@1.0
  36. 36. © Copyright Azul Systems 2016 Summary & Further Information 36
  37. 37. © Copyright Azul Systems 2016 Summary  Modularisation is a big change for Java – JVM/JRE rather than language/APIs – Public access isn’t necessarily the same  Flexibility to define what is exported  New linking capability to generate runtime image  More to learn about converting existing code  Will make all applications simpler to deploy and manage 37
  38. 38. © Copyright Azul Systems 2016 Further Information  openjdk.java.net  openjdk.java.net/jeps – 200, 201, 220, 260, 261  openjdk.java.net/projects/jigsaw  jcp.org – JSR 376  www.zulu.org (OpenJDK supported builds JDK 6, 7, 8, 9)  www.azul.com (Zing JVM for low latency) 38
  39. 39. © Copyright Azul Systems 2016 © Copyright Azul Systems 2015 @speakjava Modularization with Project Jigsaw in JDK 9 Simon Ritter Deputy CTO, Azul Systems 39

×