0
JAVA 8 MODULES, JIGSAW       AND OSGi     Neil Bartlett with Tim Ellison
MOTIVATION
WHY MODULARISE THE JDK?• The   JRE is monolithic• Download time and start-up time are directly affected by number of types...
OSGi• If   only Java had a module system that could help with that!• As    we all know, OSGi will not be used for JDK modu...
JIGSAW MOTIVATION• JRElibraries evolved organically and haphazardly over 13+ years• Many   cyclic dependencies• Many   wei...
Good news, everyone! OSGi supports split packages, using Require-        Bundle.
SINGLE CLASSLOADER• Yeah   but there’s the single classloader assumption...• Many    parts of the JRE assume a single boot...
OSGi supports shared  classloaders, using      Fragments.
DEPENDENCY DIRECTION• Yeah, but          the dependency goes in the “wrong” direction (fragment depends on host).• Jigsaw ...
OSGi R4.3 supports  that too using genericrequirements/capabilities.
REUSE• Yeahbut the fragment still depends on the host and cannot be used by other hosts.
...
Pretty sure we could havesupported this, if only you   had talked to us.
REFACTORING• Usual and best solution: move classes to the correct, most logical place• Obviously   impossible in the JRE.•...
JIGSAW
MODULES• Module    declared in module-info.java (module-info.class)• All   new keywords are “scoped”        module B @ 1.0...
REQUIRES• Modules   require other modules by name (and optionally, version)     module B @ 1.0 {        require A @ [2.0,3...
LOCAL• Requirements    can be marked “local”• Target   module is loaded in same classloader      module B @ 1.0 {         ...
EXPORTS• Modules   list their exports, at package and type level• May   include re-exported contents of required modules  ...
FRIENDS• Modules   can control which other modules require them• Compare   with “friend” classes in C++• N.B. permit   cla...
PROVIDES• Modules    can logically “provide” other modules names• Compare    with “virtual packages” in Debian• Supports  ...
ENTRY POINT• Modules   can have a single entry-point class• Compare    with Main-Class header in Jar manifests.     module...
VERSIONS• Modules   will be versioned• Requirements   use exact version or a range• No   version semantics beyond ordering
COMPARISONS
LIFECYCLE• Resolver solves dependencies in the face of multiple valid alternatives• OSGi resolver finds best fit for current...
METADATA• Tools   required to inspect module-info.class• OSGi    uses kind-of readable MANIFEST.MF
COMPARISON• Whole-module    dependencies and split packages are the biggest differences• Jigsaw       will suffer all the ...
INTEROP
INTEROP• Both    are here to stay... try to get the best of both worlds!• OSGi     is established and will continue to be ...
JAVA 8 REQUIREMENTS• “It must be demonstrated by prototype to be feasible to  modify an OSGi micro-kernel such that OSGi b...
PROJECT PENROSE• OpenJDK-hosted       project to work on Jigsaw/OSGi interop• Project   lead is Tim Ellison
LEVELS0              Tolerate1             Understand2               Exploit3+            Cooperate
LEVEL 0: TOLERATE• Ensure that OSGi frameworks continue to run unmodified on Jigsaw-enabled runtime.• Creating         modu...
LEVEL 1: UNDERSTAND• Teach   OSGi to read Jigsaw module info • Mapping Jigsaw metadata into OSGi concepts e.g. requires = ...
LEVEL 2: EXPLOIT• OSGi   implementation exploits Jigsaw modularity• E.g. use   Jigsaw publication repositories.
LEVEL 3+: COOPERATE•Ablend of OSGi and Jigsaw cross-delegation on modulephases.
ACHIEVEMENT 1• Passed   the OSGi tests on a Jigsaw-enabled runtime • Equinox    3.7, the OSGi Reference Implementation. • ...
ACHIEVEMENT 2• Run   a Java application as either OSGi or Jigsaw modules • Took   a Java 2D demo • Brokeinto multiple func...
GOAL 1• Map   Jigsaw module metadata to OSGi equivalents• Discussion: how   to interpret Jigsaw directives
GOAL 2• Modify   OSGi (Equinox) to use Jigsaw reification APIs • Load    a 3rd-party module from the Jigsaw repository • Re...
TIMELINE• Java   8: summer 2013? Code freeze early 2013.• Jigsaw   seems to be basically “done”, with little recent activi...
GET INVOLVED• Penrose   home & mailing list: • http://openjdk.java.net/projects/penrose/• Hg   repository: • http://hg.ope...
Java 8 modules, Jigsaw and OSGi - Neil Bartlett
Upcoming SlideShare
Loading in...5
×

Java 8 modules, Jigsaw and OSGi - Neil Bartlett

13,223

Published on

Presentation by Neil Bartlett (Paremus) from OSGi DevCon 2012 BOF (22 March, 2012)

Video recording of the presentation is available at http://youtu.be/QJaSW5dW5c0

Abstract: The idea of integrating a module system into the core Java runtime has been proposed and discussed for many years, and in Java SE 8 it may finally be happening. How will this affect OSGi developers and users? This talk will describe the main differences between OSGi and Jigsaw, the prototype OpenJDK module system. Pros and cons of each in different environments will be discussed. Finally, opportunities and challenges for interoperability: from the perspective of both application developers (who may need to integrate modules from both kinds) and from library module developers (who may need to target both module systems).

0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
13,223
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
188
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide

Transcript of "Java 8 modules, Jigsaw and OSGi - Neil Bartlett"

  1. 1. JAVA 8 MODULES, JIGSAW AND OSGi Neil Bartlett with Tim Ellison
  2. 2. MOTIVATION
  3. 3. WHY MODULARISE THE JDK?• The JRE is monolithic• Download time and start-up time are directly affected by number of types available at runtime• Start-uptime includes a linear search through the class path to find system and application code • Oracle 1.7 Windows boot classpath nearly 20k classes • rt.jar index alone is approx 1Mb
  4. 4. OSGi• If only Java had a module system that could help with that!• As we all know, OSGi will not be used for JDK modularity
  5. 5. JIGSAW MOTIVATION• JRElibraries evolved organically and haphazardly over 13+ years• Many cyclic dependencies• Many weird/unexpected dependencies• E.g.: java.util is an incoherent mess• Splitting packages is unavoidable
  6. 6. Good news, everyone! OSGi supports split packages, using Require- Bundle.
  7. 7. SINGLE CLASSLOADER• Yeah but there’s the single classloader assumption...• Many parts of the JRE assume a single boot classloader• Package-private (“default”) accessibility requires whole packages in single classloader• Need to split packages across modules but not across classloaders• Break the one-to-one mapping of modules to classloaders
  8. 8. OSGi supports shared classloaders, using Fragments.
  9. 9. DEPENDENCY DIRECTION• Yeah, but the dependency goes in the “wrong” direction (fragment depends on host).• Jigsaw wants the “host” to depend on the “fragment”: host shouldn’t resolve if fragment unavailable.
  10. 10. OSGi R4.3 supports that too using genericrequirements/capabilities.
  11. 11. REUSE• Yeahbut the fragment still depends on the host and cannot be used by other hosts.
  12. 12. ...
  13. 13. Pretty sure we could havesupported this, if only you had talked to us.
  14. 14. REFACTORING• Usual and best solution: move classes to the correct, most logical place• Obviously impossible in the JRE.•9 million Java developers (Sun estimate, 2009) and billions of apps depend on this library.
  15. 15. JIGSAW
  16. 16. MODULES• Module declared in module-info.java (module-info.class)• All new keywords are “scoped” module B @ 1.0 { ... }
  17. 17. REQUIRES• Modules require other modules by name (and optionally, version) module B @ 1.0 { require A @ [2.0,3.0); }
  18. 18. LOCAL• Requirements can be marked “local”• Target module is loaded in same classloader module B @ 1.0 { require local A @ [2.0,3.0); }
  19. 19. EXPORTS• Modules list their exports, at package and type level• May include re-exported contents of required modules module B @ 1.0 { require A @ [2.0,3.0); export org.foo.ClassFoo; export org.bar.*; }
  20. 20. FRIENDS• Modules can control which other modules require them• Compare with “friend” classes in C++• N.B. permit clause is not versioned. module A @ 2.0 { permit B; }
  21. 21. PROVIDES• Modules can logically “provide” other modules names• Compare with “virtual packages” in Debian• Supports substitution, but not refactoring (splits or joins) module com.ibm.stax @ 1.0 { provide jdk.stax @ 2.0; }
  22. 22. ENTRY POINT• Modules can have a single entry-point class• Compare with Main-Class header in Jar manifests. module A @ 2.0 { permit B; class org.foo.Main; }
  23. 23. VERSIONS• Modules will be versioned• Requirements use exact version or a range• No version semantics beyond ordering
  24. 24. COMPARISONS
  25. 25. LIFECYCLE• Resolver solves dependencies in the face of multiple valid alternatives• OSGi resolver finds best fit for currently installed bundles at runtime• Jigsaw resolves during build and installation• Jigsaw has no dynamics, no module lifecycle
  26. 26. METADATA• Tools required to inspect module-info.class• OSGi uses kind-of readable MANIFEST.MF
  27. 27. COMPARISON• Whole-module dependencies and split packages are the biggest differences• Jigsaw will suffer all the same problems seen in OSGi with Require-Bundle (e.g. Eclipse Core Runtime refactoring mess)• While Jigsaw will technically achieve JDK modularity it will increase developer maintenance burden
  28. 28. INTEROP
  29. 29. INTEROP• Both are here to stay... try to get the best of both worlds!• OSGi is established and will continue to be used widely• Jigsaw is underway and a key component of Java 8• It need not be a zero-sum game
  30. 30. JAVA 8 REQUIREMENTS• “It must be demonstrated by prototype to be feasible to modify an OSGi micro-kernel such that OSGi bundles running in that kernel can depend upon Java modules. The kernel must be able to load Java modules directly and resolve them using its own resolver, except for core system modules. Core system modules can only be loaded using the module system’s reification API.”• http://openjdk.java.net/projects/jigsaw/doc/draft-java-module- system-requirements-12
  31. 31. PROJECT PENROSE• OpenJDK-hosted project to work on Jigsaw/OSGi interop• Project lead is Tim Ellison
  32. 32. LEVELS0 Tolerate1 Understand2 Exploit3+ Cooperate
  33. 33. LEVEL 0: TOLERATE• Ensure that OSGi frameworks continue to run unmodified on Jigsaw-enabled runtime.• Creating modules/bundles that have both Jigsaw and OSGi metadata on the same JAR.
  34. 34. LEVEL 1: UNDERSTAND• Teach OSGi to read Jigsaw module info • Mapping Jigsaw metadata into OSGi concepts e.g. requires = Require-Bundle, exports = Export-Package.• Resolve Jigsaw modules using the OSGi resolver.
  35. 35. LEVEL 2: EXPLOIT• OSGi implementation exploits Jigsaw modularity• E.g. use Jigsaw publication repositories.
  36. 36. LEVEL 3+: COOPERATE•Ablend of OSGi and Jigsaw cross-delegation on modulephases.
  37. 37. ACHIEVEMENT 1• Passed the OSGi tests on a Jigsaw-enabled runtime • Equinox 3.7, the OSGi Reference Implementation. • OSGi R4.3 Compliance Tests
  38. 38. ACHIEVEMENT 2• Run a Java application as either OSGi or Jigsaw modules • Took a Java 2D demo • Brokeinto multiple functional units, run demo as either OSGi bundles or Jigsaw modules
  39. 39. GOAL 1• Map Jigsaw module metadata to OSGi equivalents• Discussion: how to interpret Jigsaw directives
  40. 40. GOAL 2• Modify OSGi (Equinox) to use Jigsaw reification APIs • Load a 3rd-party module from the Jigsaw repository • Resolve it using the OSGi resolver
  41. 41. TIMELINE• Java 8: summer 2013? Code freeze early 2013.• Jigsaw seems to be basically “done”, with little recent activity• No JSR yet, or perhaps ever.• If we need changes in Jigsaw, we need to push them soon.
  42. 42. GET INVOLVED• Penrose home & mailing list: • http://openjdk.java.net/projects/penrose/• Hg repository: • http://hg.openjdk.java.net/penrose/jigsaw/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×