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.

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

636 views

Published on

are

Published in: Engineering
  • Be the first to comment

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

  1. 1. Modularity of the Java Platform Martin Toshev
  2. 2. Who am I Software engineer @ EPAM Bulgaria BG JUG governance board member (http://jug.bg) OpenJDK contributor
  3. 3. Agenda Modularity 101 Modularity on top of the platform: OSGi Modularity of the platform: Jigsaw OSGi and Jigsaw interoperability: Penrose
  4. 4. Modularity 101
  5. 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. 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. 7. Modularity 101 • Benefits of modularization: – development of the system can be split easier between teams/developers – increased maintainability of separate modules
  8. 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. 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. 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. 11. Modularity on top of the platform: OSGi
  12. 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. 13. Modularity on top of the platform: OSGi Q: So what is an OSGi runtime ?
  14. 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. 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. 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. 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. 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. 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. 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. 21. Modularity on top of the platform: OSGi • OSGi continues to evolve …
  22. 22. Live Demo Modularity on top of the platform: OSGi
  23. 23. Modularity of the platform: Jigsaw
  24. 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. 25. Modularity of the platform: Jigsaw The JDK is monolithic …
  26. 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. 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. 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. 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. 30. Modularity of the platform: Jigsaw Q: So what is exactly project Jigsaw ?
  31. 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. 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. 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. 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. 35. Modularity of the platform: Jigsaw Q: What is a Jigsaw module ?
  36. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 50. Modularity of the platform: Jigsaw Q: So why not adopt OSGi (at least the module layer) for modularization of the Java platform ?
  51. 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. 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. 53. Live Demo Modularity of the platform: Jigsaw
  54. 54. OSGi and Jigsaw interoperability: Penrose
  55. 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. 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. 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. 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 …
  59. 59. Summary Q: Project Jigsaw - when ?
  60. 60. Summary Q: Project Jigsaw - when ? A: Maybe when the Armagedon comes … … or maybe in 2016 …
  61. 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
  62. 62. Q&A Thank you
  63. 63. 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/
  64. 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. 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. 66. References Project Jigsaw: Exploratory Phase http://openjdk.java.net/projects/jigsaw/exploratory- phase
  67. 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. 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. 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. 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

×