SlideShare a Scribd company logo
1 of 74
Download to read offline
Java SE 9 modules
An introduction
Stephen Colebourne - @jodastephen
Engineering Lead, OpenGamma
April 2017
Topics
● Introduction
● Issues and Requirements
● Module basics
● Module info
● Calling code
● Reflection
● Migration
● Summary
Modules - Project Jigsaw
https://www.flickr.com/photos/distillated/4019168958/
Modules
● JPMS - Java Platform Module System
● Main feature of Java SE 9
● Developed as Project Jigsaw
● Originally targetted at Java SE 7
○ first JSR was in 2005, 12 years ago
● Still incomplete even though very late in 9 development
● Planned release date of July 27th 2017
○ just over 100 days!
Goals
● Scale Java SE to small devices
● Improve security and maintainability
● Better application performance
● Easier to construct & maintain libraries/applications
JDK too big
● Java SE 8 has 210 packages
● Many are not needed by all applications
○ CORBA, Swing, AWT, XML
● Need to split JDK into smaller units, aka modules
Modularised JDK
● 24 modules in Java SE 9
● Every application gets java.base
○ packages java.lang, io, math, net, nio, util, security, text, time
● Separate modules for
○ logging
○ sql
○ xml
○ desktop (AWT/Swing)
○ prefs
○ rmi
Multi-module Javadoc
Deprecated modules
● 6 modules are deprecated for removal
○ java.activation
○ java.corba
○ java.transaction
○ java.xml.bind
○ java.xml.ws
○ java.xml.ws.annotation
● Mass deletion from the JDK!
● Not in Java 9 by default!
Module graph
Out of date, but gives general idea!
Official process
● JEP
○ 200: The Modular JDK
○ 201: Modular Source Code
○ 220: Modular Run-Time Images
○ 260: Encapsulate Most Internal APIs
○ 261: Module System
○ 282: jlink: The Java Linker
● JSR
○ JSR 376: Java Platform Module System
Issues to Requirements
https://www.flickr.com/photos/distillated/4019168958/
Classpath
● Classes are loaded on demand
● Classpath specifies where to find bytecode
○ java -classpath lib/aaa.jar;lib/bbb.jar
● Boot classpath loads the JDK - rt.jar
● Extension classpath loads standard extensions
● User classpath loads user code
○ Defaults to current directory
○ Typically specified using -classpath or -cp
○ Can be jar files or directories
ClassLoader
● Every class is loaded by one class loader
● Most class loaders delegate to a parent
● One class loader for each of the three classpaths
ClassLoader
● Get class from ClassLoader
● Look in parent first
● Searching can be slow
Application
ClassLoader
Extension
ClassLoader
Boot
ClassLoader
MyFoo.class
String.class
Questions
● What happens if class not found on classpath?
● What happens if class appears twice on classpath?
● Does order matter in the classpath?
● What happens if same class is loaded by two different
class loaders?
Classpath
Once on the classpath
● A can call B and vice versa
● A can call C and vice versa
● B can call C and vice versa
Jar files meaningless
A.class
B.class
C.class
Requirement 1
● Reliable configuration
○ replace classpath with graph of dependencies
○ know what is needed to run the application
● When application starts
○ check everything present
○ check no duplicates
○ potentially perform lookup optimisations
Packages are all we have
● Applications & libraries need to be multi-package
● More things public than desirable
● Often see packages with "impl" or "internal" in name
● Clear sign of a missing language feature
Example
● Jackson JSON/XML serialization
○ com.fasterxml.jackson.databind
○ com.fasterxml.jackson.databind.deser
○ com.fasterxml.jackson.databind.deser.impl
○ com.fasterxml.jackson.databind.jsontype
○ com.fasterxml.jackson.databind.jsontype.impl
○ com.fasterxml.jackson.databind.ser
○ com.fasterxml.jackson.databind.ser.impl
○ com.fasterxml.jackson.databind.ser.std
○ com.fasterxml.jackson.databind.type
○ com.fasterxml.jackson.databind.util
Example
● You were never supposed to use code in:
○ sun.misc.*
○ jdk.internal.*
○ etc.
Requirement 2
● Strong encapsulation
○ module can declare an API to other modules
○ packages not on the API are hidden
● Use this to enhance security
○ non-public elements cannot be accessed
JPMS basics
https://www.flickr.com/photos/distillated/4019168958/
What is a module?
● Named
● Set of packages (classes/interfaces)
● Module metadata (module-info.class)
● Typically packaged as a .jar file
● Enforced by the JVM
○ JVM understands classes, interfaces, packages, and now modules
Without modules
opengamma-util.jar
com.opengamma.util
com.opengamma.util.math
com.opengamma.util.impl
Without modules
opengamma-util.jar
com.opengamma.util
com.opengamma.util.math
com.opengamma.util.impl
If this .jar file is on classpath, any
public type/method from any
package can be used
With modules
opengamma-util.jar
com.opengamma.util
com.opengamma.util.math
module-info.class
com.opengamma.util.impl
With modules
opengamma.util
com.opengamma.util
com.opengamma.util.math
module-info.class
com.opengamma.util.impl
module opengamma.util {
exports com.opengamma.util;
exports com.opengamma.util.math;
}
With modules
opengamma.util
com.opengamma.util
com.opengamma.util.math
module-info.class
com.opengamma.util.impl
module opengamma.util {
exports com.opengamma.util;
exports com.opengamma.util.math;
}
Non-exported packages cannot be
seen outside the module
How is it enforced
● Modulepath as well as classpath
● Jar must have a module-info.class
● Module rules enforced when jar on modulepath
● Rules not enforced when jar on classpath
● JVM determines and validates module graph
○ checked at startup
○ advanced use cases can alter parts of the graph at runtime
Modular JDK
● JDK modules always run in module mode
● Classpath sees whole JDK
● Modules specify which JDK modules they need
● Changes JDK structure
○ no more rt.jar
○ packaged as .jmod files
○ no more boot classpath
○ no more extension classpath
JPMS module-info
https://www.flickr.com/photos/distillated/4019168958/
Creating a module
● Two basic questions
● What modules does it depend on?
○ depends on java.base by default
● What packages does it export?
○ nothing exported by default
Module metadata
module opengamma.util {
// other modules this module depends on
requires google.guava;
requires joda.beans;
// packages this module exports to other modules
exports com.opengamma.util;
}
Module graph
opengamma.util
joda.beansgoogle.guava
Dependencies
● org.joda.beans depends on org.joda.convert
module joda.beans {
// other modules this module depends on
requires joda.convert;
// packages this module exports to other modules
exports org.joda.beans;
}
Module graph
opengamma.util
joda.beansgoogle.guava
joda.convert
Transitive dependencies
● But, Joda-Beans exposes types from Joda-Convert
● Express concept using "requires transitive"
module joda.beans {
// other modules this module depends on
requires transitive joda.convert;
// packages this module exports to other modules
exports org.joda.beans;
}
Module graph
opengamma.util
joda.beansgoogle.guava
joda.convert
Optional dependencies
● But org.joda.convert has optional dependency
● If Guava exists at runtime, Joda-Convert adapts
module joda.convert {
// other modules this module depends on
requires static google.guava;
// packages this module exports to other modules
exports org.joda.convert;
}
Module graph
opengamma.util
joda.beans
google.guava
joda.convert
Checks
● Module path contains a set of modules
● One module is the root
● Other modules are resolved to form a graph
● System ensures all necessary modules are available
● System ensures no module found twice
● System ensures same package not in two modules
● System ensures graph has no cycles
Modulepath
● A coherent modulepath is your problem
● Versions, and their selection, not part of JPMS
○ do not put version in module name
● Typically will be done by Maven or Gradle
● Just like the classpath is assembled today
Open to debate as to how much this achieves
the reliable configuration requirement
Services
● SQL drivers, XML parsers, etc.
● Can be specified in module-info
● Module that contains the service implementation:
○ provides com.foo.XmlParser with com.foo.MyXmlParser
● Module that uses the service:
○ uses com.foo.XmlParser
Calling code in another module
https://www.flickr.com/photos/distillated/4019168958/
Hiding packages
● Given two packages
○ org.joda.beans
○ org.joda.beans.impl
● It is possible to completely hide the internal package
○ export org.joda.beans
○ do not export org.joda.beans.impl
Hiding a package
opengamma.util
joda.beansgoogle.guava
org.joda.beans
org.joda.beans.impl
com.opengamma.util
com.google.guava
joda.convert
org.joda.convert
Access
● Only exported packages are visible to other modules
● All other packages are private to the module
● "public" no longer means "public"
● Other modules can only see and use code if:
○ public
○ package is exported by target module
○ package is readable from this module
● Combination referred to as "accessibility"
Access
opengamma.util
joda.beansgoogle.guava
org.joda.beans
org.joda.beans.impl
com.opengamma.util
com.google.guava
joda.convert
org.joda.convert
JVM only allow public method to be
used if readable (downward arrows)
and package is exported (dark blue)
Access
org.joda.beans
org.joda.beans.impl
com.opengamma.util
com.google.guava
JVM prevents calls along dotted lines
Targetted exports
● Package can be exported to a specific module:
○ exports org.joda.beans.impl to joda.special
● Effectively a kind of "friend" access
● Usually suggests poor package structure
Lockdown
● Ability to lockdown packages is powerful
● However, it only works on the modulepath
● Paranoid code could refuse to work on classpath
Reflection
https://www.flickr.com/photos/distillated/4019168958/
Reflection
● Powerful mechanism to access code
● Access package and private scope
○ use setAccessible()
● Vital to frameworks, particularly for bean creation
Reflection in 9
● Can access public elements of exported packages
● Cannot access package/private types/members
● Cannot access non-exported packages
● Much stronger barrier than previously
○ setAccessible() does not help
Reflection
module joda.beans {
// other modules this module depends on
requires transitive joda.convert;
// packages this module exports to other modules
exports org.joda.beans;
opens org.joda.beans.impl;
}
● Modules can selectively allow reflection
● Use "opens", also enables setAccessible()
Reflection
open module joda.beans {
// other modules this module depends on
requires transitive joda.convert;
// packages this module exports to other modules
exports org.joda.beans;
}
● Modules can open all packages if desired
Reflection on the JDK
● JDK is fully modular
● JDK does not have "open" packages
● Thus, cannot reflect on non-public JDK
● Big security boost
● Breaks many existing libraries
● Can use command line flags to force JDK open
○ useful in the short term until the libraries are fixed
Reflecting on modules
● Module information is available to reflection
○ new Module class and getModule() method
○ allows the JVM module graph to be accessed
● See also the ModuleLayer concept
○ intended for advanced use cases
Migration
https://www.flickr.com/photos/distillated/4019168958/
Migration
● Take existing code and migrate it
● New rules make this tricky in some cases
○ eg. SLF4J will need major rework
Use classpath
● Most existing code will run on Java SE 9 classpath
● If it uses internal JDK API, fix or use a flag:
○ --add-exports, --add-opens, --permit-illegal-access
● If it uses removed JDK module, fix or use a flag:
○ --add-modules java.xml.bind
Migration
● Classpath mapped to the "unnamed module"
● Unnamed module reads all other modules
● Cannot access non-exported packages
● Most existing code should run fine in unnamed module
● Named modules cannot access the unnamed module
Classpath
classpath
Foo.jar Bar.jar
unnamed
Classpath
java.se
modulepath
classpath
Foo.jar Bar.jar
unnamed
Classpath
java.se
modulepath
classpath
Foo.jar Bar.jar
joda.beans
joda.convert
Migration
● Additional "automatic module" concept
● Jars without module-info on modulepath
● Exports all packages in jar
● Reads the all other modules, including unnamed
● Used to handle libraries that have not yet modularized
WARNING! There are serious concerns about
using automatic modules in open source projects.
Maven Central will likely ban projects that depend
on an automatic module.
unnamed
Classpath
java.se
modulepath
classpath
Foo.jar Bar.jar
joda.beans
joda-convert.jar
Module naming
● No agreement on module names yet
● Please wait until clear convention agreed
● Might be like package names
○ org.joda.convert
● Might be shorter, but this will lead to clashes
○ joda.convert
WARNING! There are still serious naming concerns
from the open source community.
Modules and Maven
● Maven creates a tree of dependencies
● Often enforced by IDEs
● Not enforced at runtime
● Likely that each pom.xml will be a JPMS module
○ unclear whether module-info.java will be hand written
○ or derived from pom.xml (I suspect hand written, with IDE help)
● JPMS does not handle versions
● JPMS does not select jar files from Maven repo
Modules and OSGi
● OSGi is a module system based on the classpath
● It still works fine on the classpath
● Dynamic loading, lifecycle etc. not part of JPMS
● JPMS is not ClassLoader based
○ all classes in a module have the same ClassLoader
○ same ClassLoader may be used by many modules
Summary
https://www.flickr.com/photos/distillated/4019168958/
Summary
● Modules are a new JVM concept, exposed in Java
○ don't confuse with Maven, OSGi, JBoss modules
● Moving to modules is non-trivial
○ no reflection on JDK internals without command line flag
○ parts of the JDK removed by default and need command line flag
● Reflection is being restricted
○ command line flags allow this to be broken
● Don't rush to modularize!
○ wait for open source to do so first
Summary
● Project Jigsaw:
○ http://openjdk.java.net/projects/jigsaw/
○ Time to test Java SE 9 for bugs is NOW!
● Stephen Colebourne:
○ @jodastephen - feedback & questions
○ http://blog.joda.org
● OpenGamma
○ Strata - open source market risk analytics
○ Cloud-based metrics for derivatives trading and clearing

More Related Content

What's hot

Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 
Exception Handling In Java
Exception Handling In JavaException Handling In Java
Exception Handling In Javaparag
 
java Servlet technology
java Servlet technologyjava Servlet technology
java Servlet technologyTanmoy Barman
 
collection framework in java
collection framework in javacollection framework in java
collection framework in javaMANOJ KUMAR
 
Java Hibernate Programming with Architecture Diagram and Example
Java Hibernate Programming with Architecture Diagram and ExampleJava Hibernate Programming with Architecture Diagram and Example
Java Hibernate Programming with Architecture Diagram and Examplekamal kotecha
 
Hibernate ppt
Hibernate pptHibernate ppt
Hibernate pptAneega
 
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Christian Schneider
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Kris Mok
 
Lambda Expressions in Java 8
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8icarter09
 
Hibernate architecture
Hibernate architectureHibernate architecture
Hibernate architectureAnurag
 

What's hot (20)

Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
Exception Handling In Java
Exception Handling In JavaException Handling In Java
Exception Handling In Java
 
java Servlet technology
java Servlet technologyjava Servlet technology
java Servlet technology
 
Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
 
Java security
Java securityJava security
Java security
 
Introduction to java 8 stream api
Introduction to java 8 stream apiIntroduction to java 8 stream api
Introduction to java 8 stream api
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
collection framework in java
collection framework in javacollection framework in java
collection framework in java
 
Java exception-handling
Java exception-handlingJava exception-handling
Java exception-handling
 
Java Hibernate Programming with Architecture Diagram and Example
Java Hibernate Programming with Architecture Diagram and ExampleJava Hibernate Programming with Architecture Diagram and Example
Java Hibernate Programming with Architecture Diagram and Example
 
JPA and Hibernate
JPA and HibernateJPA and Hibernate
JPA and Hibernate
 
Optional in Java 8
Optional in Java 8Optional in Java 8
Optional in Java 8
 
Hibernate ppt
Hibernate pptHibernate ppt
Hibernate ppt
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
 
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 
Lambda Expressions in Java 8
Lambda Expressions in Java 8Lambda Expressions in Java 8
Lambda Expressions in Java 8
 
Hibernate architecture
Hibernate architectureHibernate architecture
Hibernate architecture
 
Java Collections
Java  Collections Java  Collections
Java Collections
 
Spring Core
Spring CoreSpring Core
Spring Core
 

Viewers also liked

Java9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadDavid Gómez García
 
Java 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Java 9 Modules: The Duke Yet Lives That OSGi Shall DeposeJava 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Java 9 Modules: The Duke Yet Lives That OSGi Shall DeposeNikita Lipsky
 
Working With Concurrency In Java 8
Working With Concurrency In Java 8Working With Concurrency In Java 8
Working With Concurrency In Java 8Heartin Jacob
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.David Gómez García
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsNewCircle Training
 
The do's and don'ts with java 9 (Devoxx 2017)
The do's and don'ts with java 9 (Devoxx 2017)The do's and don'ts with java 9 (Devoxx 2017)
The do's and don'ts with java 9 (Devoxx 2017)Robert Scholte
 
Real World Java 9
Real World Java 9Real World Java 9
Real World Java 9Trisha Gee
 

Viewers also liked (10)

Java 9, JShell, and Modularity
Java 9, JShell, and ModularityJava 9, JShell, and Modularity
Java 9, JShell, and Modularity
 
Java9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidadJava9 Beyond Modularity - Java 9 más allá de la modularidad
Java9 Beyond Modularity - Java 9 más allá de la modularidad
 
Java 8 Streams
Java 8 StreamsJava 8 Streams
Java 8 Streams
 
Java 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Java 9 Modules: The Duke Yet Lives That OSGi Shall DeposeJava 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Java 9 Modules: The Duke Yet Lives That OSGi Shall Depose
 
Working With Concurrency In Java 8
Working With Concurrency In Java 8Working With Concurrency In Java 8
Working With Concurrency In Java 8
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & Streams
 
Parallel streams in java 8
Parallel streams in java 8Parallel streams in java 8
Parallel streams in java 8
 
The do's and don'ts with java 9 (Devoxx 2017)
The do's and don'ts with java 9 (Devoxx 2017)The do's and don'ts with java 9 (Devoxx 2017)
The do's and don'ts with java 9 (Devoxx 2017)
 
Real World Java 9
Real World Java 9Real World Java 9
Real World Java 9
 

Similar to Java SE 9 modules (JPMS) - an introduction

Java SE 9 modules - an introduction (July 2018)
Java SE 9 modules - an introduction (July 2018)Java SE 9 modules - an introduction (July 2018)
Java SE 9 modules - an introduction (July 2018)Stephen Colebourne
 
As7 jbug j_boss_modules_yang yong
As7 jbug j_boss_modules_yang yongAs7 jbug j_boss_modules_yang yong
As7 jbug j_boss_modules_yang yongjbossug
 
Java Platform Module System
Java Platform Module SystemJava Platform Module System
Java Platform Module SystemVignesh Ramesh
 
Java 9 - Part 2: Jigsaw Modules
Java 9 - Part 2: Jigsaw ModulesJava 9 - Part 2: Jigsaw Modules
Java 9 - Part 2: Jigsaw ModulesSimone Bordet
 
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Mihail Stoynov
 
Prepare for JDK 9
Prepare for JDK 9Prepare for JDK 9
Prepare for JDK 9haochenglee
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules uploadRyan Cuprak
 
What we can expect from Java 9 by Ivan Krylov
What we can expect from Java 9 by Ivan KrylovWhat we can expect from Java 9 by Ivan Krylov
What we can expect from Java 9 by Ivan KrylovJ On The Beach
 
Java 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgradeJava 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgradeSimone Bordet
 
Jigsaw - Javaforum 2015Q4
Jigsaw - Javaforum 2015Q4Jigsaw - Javaforum 2015Q4
Jigsaw - Javaforum 2015Q4Rikard Thulin
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master BuilderPhilip Norton
 
Java 9 New Features
Java 9 New FeaturesJava 9 New Features
Java 9 New FeaturesAli BAKAN
 
Puppet managed loadays
Puppet managed loadaysPuppet managed loadays
Puppet managed loadaysYankee Nemoy
 
QConSP 2018 - Java Module System
QConSP 2018 - Java Module SystemQConSP 2018 - Java Module System
QConSP 2018 - Java Module SystemLeonardo Zanivan
 
Drupal Coding Standards - do and don't
Drupal Coding Standards - do and don'tDrupal Coding Standards - do and don't
Drupal Coding Standards - do and don'tArunkumar Kupppuswamy
 
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)Martin Toshev
 

Similar to Java SE 9 modules (JPMS) - an introduction (20)

Java SE 9 modules - an introduction (July 2018)
Java SE 9 modules - an introduction (July 2018)Java SE 9 modules - an introduction (July 2018)
Java SE 9 modules - an introduction (July 2018)
 
As7 jbug j_boss_modules_yang yong
As7 jbug j_boss_modules_yang yongAs7 jbug j_boss_modules_yang yong
As7 jbug j_boss_modules_yang yong
 
Java Platform Module System
Java Platform Module SystemJava Platform Module System
Java Platform Module System
 
Java 9 - Part 2: Jigsaw Modules
Java 9 - Part 2: Jigsaw ModulesJava 9 - Part 2: Jigsaw Modules
Java 9 - Part 2: Jigsaw Modules
 
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
 
Java 9 Features
Java 9 FeaturesJava 9 Features
Java 9 Features
 
Java 9 preview
Java 9 previewJava 9 preview
Java 9 preview
 
Prepare for JDK 9
Prepare for JDK 9Prepare for JDK 9
Prepare for JDK 9
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
 
What we can expect from Java 9 by Ivan Krylov
What we can expect from Java 9 by Ivan KrylovWhat we can expect from Java 9 by Ivan Krylov
What we can expect from Java 9 by Ivan Krylov
 
Java 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgradeJava 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgrade
 
Jigsaw - Javaforum 2015Q4
Jigsaw - Javaforum 2015Q4Jigsaw - Javaforum 2015Q4
Jigsaw - Javaforum 2015Q4
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master Builder
 
Java 9 New Features
Java 9 New FeaturesJava 9 New Features
Java 9 New Features
 
Java 9 Jigsaw HackDay
Java 9 Jigsaw HackDayJava 9 Jigsaw HackDay
Java 9 Jigsaw HackDay
 
Puppet managed loadays
Puppet managed loadaysPuppet managed loadays
Puppet managed loadays
 
QConSP 2018 - Java Module System
QConSP 2018 - Java Module SystemQConSP 2018 - Java Module System
QConSP 2018 - Java Module System
 
Drupal Coding Standards - do and don't
Drupal Coding Standards - do and don'tDrupal Coding Standards - do and don't
Drupal Coding Standards - do and don't
 
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
 
Java 9
Java 9Java 9
Java 9
 

Recently uploaded

React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noidabntitsolutionsrishis
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfIdiosysTechnologies1
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 

Recently uploaded (20)

React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in NoidaBuds n Tech IT Solutions: Top-Notch Web Services in Noida
Buds n Tech IT Solutions: Top-Notch Web Services in Noida
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdf
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 

Java SE 9 modules (JPMS) - an introduction