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.

Java 9 / Jigsaw - AJUG/VJUG session

646 views

Published on

Java 9 / Jigsaw hands-on session at the Hackthetower - hosted by AJUG/VJUG

AJUG = Atlanta JUG

Published in: Software
  • Be the first to comment

Java 9 / Jigsaw - AJUG/VJUG session

  1. 1. Java 9 / Jigsaw Modularisation & more
  2. 2. Presenters Simon Maple @sjmaple Mani Sarkar @theNeomatrix369
  3. 3. Hosts - Atlanta JUG Pratik Patel @prpatel Vince May @vincentmayers
  4. 4. Our guest Heather VanCura @heathervc
  5. 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. 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. 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
  8. 8. Session 1: Introduction: Java 9 modularisation 15 minutes
  9. 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. 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. 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. 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. 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. 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. 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. 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. 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. 18. Link to all the exercises! http://bit.ly/J9Hackday-exercises
  19. 19. Session 1: Hands-on: Java 9 modularisation 60 minutes http://bit.ly/J9HackDay-session-1-jigsaw-intro (http://bit.ly/J9HackDay-repo)
  20. 20. Session 1: feedback 15 minutes http://bit.ly/J9HackDay-AJUG-feedback
  21. 21. Lunch break 60 minutes Short 10/15 minutes covering intro/background/fundamentals (talk while having a bite of food and drink)
  22. 22. What is meant by Modularisation in Java 9? A bit of fundamentals and background before we get to the answer
  23. 23. What is meant by Modularisation in Java 9? modularisation Pre-Java 9 Java 9 Anomalies OpenJDK& JDK
  24. 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. 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. 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. 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. 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. 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. 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. 31. What is meant by Modularisation in Java 9? JDK 9& Jigsaw feature distribution ... Other JDK 9 features Jigsaw ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
  32. 32. Why Modularisation in Java 9? But, why?
  33. 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. 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?
  35. 35. Why Modularisation in Java 9? Important Java 9 concepts & terminologies
  36. 36. Concepts & terminologies - module - modular JAR - accessibility - implied readability - automatic module - unnamed module - open module - open package - split packages Important Java 9 Concepts & Terminologies Credits: Oleg Tsal-Tsalko & Nicolai Parlog
  37. 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. 38. modular JAR - like any other JAR file - contains module-info.class in its root directory Important Java 9 Concepts & Terminologies
  39. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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!
  49. 49. https://github.com/accso/java9-jigsaw-depvis Visualise your dependencies!
  50. 50. Session 2: Introduction: JLink 10 minutes
  51. 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. 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
  53. 53. Session 2: Hands-on: JLink 40 minutes http://bit.ly/J9HackDay-session-2-jlink (http://bit.ly/J9HackDay-repo)
  54. 54. Session 2: feedback 10 minutes http://bit.ly/J9HackDay-AJUG-feedback
  55. 55. Session 3: Introduction: Migration or JShell 15 minutes
  56. 56. Session 3: Introduction: Migration or JShell
  57. 57. Session 3 hands-on: Migration or JShell 60 minutes http://bit.ly/J9HackDay-session-3-jshell (http://bit.ly/J9HackDay-repo)
  58. 58. Session 3 & overall: feedback 15-30 minutes http://bit.ly/J9HackDay-AJUG-feedback
  59. 59. Contribute Don’t like something or like something a lot, want to contribute to make things better? http://bit.ly/AdoptOpenJDK-contribute
  60. 60. Feedback We value your feedback, make Java better with your constructive feedback http://bit.ly/AdoptOpenJDK-feedback
  61. 61. Resources Want to know about the other features of Java 9: http://bit.ly/Java-9-Resources
  62. 62. Thank you to all Thank you for your continued support 9 @atlantajug @virtualJug @adoptopenjdk @openjdk @jcp_org @java

×