SlideShare a Scribd company logo
Java SE 9 modules
An introduction
Stephen Colebourne - @jodastephen
Engineering Lead, OpenGamma
May 2018
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
● Should be referred to as "Java modules"
○ JPMS - Java Platform Module System is not supposed to be used
● Main feature of Java SE 9
○ released on 21st September 2017
● Developed as Project Jigsaw
● Originally targetted at Java SE 7
○ first JSR was in 2005, 12 years to complete
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
● 26 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
● 7 modules deprecated for removal
○ java.se.ee
○ 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, not in 11 at all!
Module graph
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
Module 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
com.opengamma.util
com.opengamma.util
com.opengamma.util.math
module-info.class
com.opengamma.util.impl
module com.opengamma.util {
exports com.opengamma.util;
exports com.opengamma.util.math;
}
With modules
com.opengamma.util
com.opengamma.util
com.opengamma.util.math
module-info.class
com.opengamma.util.impl
module com.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
○ EE app servers still use 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
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 com.opengamma.util {
// other modules this module depends on
requires com.google.common; // guava
requires org.joda.beans;
// packages this module exports to other modules
exports com.opengamma.util;
}
Module graph
com.opengamma.util
org.joda.beanscom.google.common
Dependencies
● org.joda.beans depends on org.joda.convert
module org.joda.beans {
// other modules this module depends on
requires org.joda.convert;
// packages this module exports to other modules
exports org.joda.beans;
}
Module graph
com.opengamma.util
org.joda.beanscom.google.common
org.joda.convert
Transitive dependencies
● But, Joda-Beans exposes types from Joda-Convert
● Express concept using "requires transitive"
module org.joda.beans {
// other modules this module depends on
requires transitive org.joda.convert;
// packages this module exports to other modules
exports org.joda.beans;
}
Module graph
com.opengamma.util
org.joda.beanscom.google.common
org.joda.convert
Optional dependencies
● But org.joda.convert has optional dependency
● If Guava exists at runtime, Joda-Convert adapts
module org.joda.convert {
// other modules this module depends on
requires static com.google.common;
// packages this module exports to other modules
exports org.joda.convert;
}
Module graph
com.opengamma.util
org.joda.beans
com.google.common
org.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 Java
○ 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.bar.MyXmlParser
● Module that uses the service:
○ uses com.foo.XmlParser
Services
● WARNING!
● Services must be specified twice if published
● Once for classpath - META-INF/services
● Once for modulepath - module-info.java
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
com.opengamma.util
org.joda.beanscom.google.common
org.joda.beans
org.joda.beans.impl
com.opengamma.util
com.google.common.io
org.joda.convert
org.joda.convert
com.google.common.collect
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
com.opengamma.util
org.joda.beanscom.google.common
org.joda.beans
org.joda.beans.impl
com.opengamma.util
org.joda.convert
org.joda.convert
JVM only allows a public method to be
used if Readable (via 1 down arrow)
and Package is Exported (dark blue)
com.google.common.io
com.google.common.collect
Access
org.joda.beans
org.joda.beans.impl
com.opengamma.util
com.google.common.io
JVM prevents calls along dotted lines
Targetted exports
● Package can be exported to a specific module:
○ exports org.joda.beans.impl to org.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
○ but wouldn't work with all EE app servers…
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 org.joda.beans {
// other modules this module depends on
requires transitive org.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 org.joda.beans {
// other modules this module depends on
requires transitive org.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
○ logging frameworks tend to use packages creatively
○ performance hacks using reflection
○ service loader dual config
○ encapsulated resources
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, --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
● Warning when using non-exported packages
○ this was going to be no access
● 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
org.joda.beans
org.joda.convert
Migration
● Additional concept - automatic module
● Jars without module-info on modulepath
● Exports all packages in jar
● Reads all other modules, including unnamed
● Used to handle libraries that have not yet modularized
unnamed
Classpath
java.se
modulepath
classpath
Foo.jar Bar.jar
org.joda.beans
joda-convert.jar
Module naming
● Module names should follow package names
● Given these package names:
○ org.joda.convert
○ org.joda.convert.foo
○ org.joda.convert.bar
● The module name should be the root package:
○ org.joda.convert
● This ensures clean ownership of the namespace
Names of automatic modules
● Automatic modules get a name is two ways:
● MANIFEST.MF file
○ "Automatic-Module-Name: org.joda.convert"
● Filename
○ joda-convert.jar → joda.convert
● Note two different names!!!
Names of automatic modules
● Automatic modules get a name in two ways:
● MANIFEST.MF file
○ "Automatic-Module-Name: org.joda.convert"
● Filename
○ joda-convert.jar → joda.convert
● Note two different names!!!
Do NOT release jar files to Maven Central
where name is derived from filename
BAD
GOOD
http://blog.joda.org/2017/04/java-se-9-jpms-module-naming.html
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 module
○ unclear whether module-info.java will be hand written
○ or derived from pom.xml (I suspect hand written, with IDE help)
● Modules do not have versions
● Java does not select jar files from Maven repo
Modules are not Artifacts
Build/deploy world view JVM/code world view
● Artifacts (jar files)
● Versions
● Groups
● Organizations
org.joda : joda-convert : 1.2
● Maven
● Gradle
● Ant
● Modules
● Packages
● Types (classes/interfaces)
● Members (methods/fields)
org.joda.convert
● javac
● Java
● jar
Modules are not Artifacts
Build/deploy world view JVM/code world view
org.joda : joda-convert : 1.0
org.joda : joda-convert : 1.1
org.joda : joda-convert : 1.2
com.foobar : joda-convert : 1.2-patched
org.joda.convert
→ Selection →
Something must select which artifact
to use as the module
∴ Modules not named after artifacts
http://blog.joda.org/2017/04/java-se-9-jpms-modules-are-not-artifacts.html
Modules and OSGi
● OSGi is a module system based on the classpath
● It still works fine on the classpath
● OSGi has dynamic loading/lifecyle etc
● OSGi is ClassLoader based
● OSGi do not think Java modules work for applications
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/
○ Java SE 9 is out, lets see what it can do! (now replaced by Java 10)
● Stephen Colebourne:
○ @jodastephen - feedback & questions
○ http://blog.joda.org
● OpenGamma
○ Strata - open source market risk analytics
○ Cloud-hosted analytics for the derivatives market

More Related Content

What's hot

Java introduction
Java introductionJava introduction
Java introduction
The icfai university jaipur
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
Professional Guru
 
New Features Of JDK 7
New Features Of JDK 7New Features Of JDK 7
New Features Of JDK 7
Deniz Oguz
 
Java 9
Java 9Java 9
Java 9
Netesh Kumar
 
Core Java Introduction | Basics
Core Java Introduction  | BasicsCore Java Introduction  | Basics
Core Java Introduction | Basics
Hùng Nguyễn Huy
 
Core Java Certification
Core Java CertificationCore Java Certification
Core Java Certification
Vskills
 
Core Java introduction | Basics | free course
Core Java introduction | Basics | free course Core Java introduction | Basics | free course
Core Java introduction | Basics | free course
Kernel Training
 
Core Java
Core JavaCore Java
Core Java
Prakash Dimmita
 
Basics of Java
Basics of JavaBasics of Java
Basics of Java
Sherihan Anver
 
J2EE vs JavaEE
J2EE vs JavaEEJ2EE vs JavaEE
J2EE vs JavaEEeanimou
 
Core Java Tutorial
Core Java TutorialCore Java Tutorial
Core Java Tutorial
eMexo Technologies
 
Java history, versions, types of errors and exception, quiz
Java history, versions, types of errors and exception, quiz Java history, versions, types of errors and exception, quiz
Java history, versions, types of errors and exception, quiz
SAurabh PRajapati
 
Unit of competency
Unit of competencyUnit of competency
Unit of competency
loidasacueza
 
Java Course 15: Ant, Scripting, Spring, Hibernate
Java Course 15: Ant, Scripting, Spring, HibernateJava Course 15: Ant, Scripting, Spring, Hibernate
Java Course 15: Ant, Scripting, Spring, Hibernate
Anton Keks
 
Session 11 - OOP's with Java - Packaging and Access Modifiers
Session 11 - OOP's with Java - Packaging and Access ModifiersSession 11 - OOP's with Java - Packaging and Access Modifiers
Session 11 - OOP's with Java - Packaging and Access Modifiers
PawanMM
 
Spring boot
Spring bootSpring boot
OOP with Java - Part 3
OOP with Java - Part 3OOP with Java - Part 3
OOP with Java - Part 3
Hitesh-Java
 
The Art of Metaprogramming in Java
The Art of Metaprogramming in Java  The Art of Metaprogramming in Java
The Art of Metaprogramming in Java
Abdelmonaim Remani
 
Core java
Core javaCore java
Core java
kasaragaddaslide
 

What's hot (20)

Java introduction
Java introductionJava introduction
Java introduction
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
 
New Features Of JDK 7
New Features Of JDK 7New Features Of JDK 7
New Features Of JDK 7
 
Java 9
Java 9Java 9
Java 9
 
Core Java Introduction | Basics
Core Java Introduction  | BasicsCore Java Introduction  | Basics
Core Java Introduction | Basics
 
Core Java Certification
Core Java CertificationCore Java Certification
Core Java Certification
 
Core Java introduction | Basics | free course
Core Java introduction | Basics | free course Core Java introduction | Basics | free course
Core Java introduction | Basics | free course
 
Core Java
Core JavaCore Java
Core Java
 
Basics of Java
Basics of JavaBasics of Java
Basics of Java
 
J2EE vs JavaEE
J2EE vs JavaEEJ2EE vs JavaEE
J2EE vs JavaEE
 
Core Java Tutorial
Core Java TutorialCore Java Tutorial
Core Java Tutorial
 
Java history, versions, types of errors and exception, quiz
Java history, versions, types of errors and exception, quiz Java history, versions, types of errors and exception, quiz
Java history, versions, types of errors and exception, quiz
 
Unit of competency
Unit of competencyUnit of competency
Unit of competency
 
Invoke dynamics
Invoke dynamicsInvoke dynamics
Invoke dynamics
 
Java Course 15: Ant, Scripting, Spring, Hibernate
Java Course 15: Ant, Scripting, Spring, HibernateJava Course 15: Ant, Scripting, Spring, Hibernate
Java Course 15: Ant, Scripting, Spring, Hibernate
 
Session 11 - OOP's with Java - Packaging and Access Modifiers
Session 11 - OOP's with Java - Packaging and Access ModifiersSession 11 - OOP's with Java - Packaging and Access Modifiers
Session 11 - OOP's with Java - Packaging and Access Modifiers
 
Spring boot
Spring bootSpring boot
Spring boot
 
OOP with Java - Part 3
OOP with Java - Part 3OOP with Java - Part 3
OOP with Java - Part 3
 
The Art of Metaprogramming in Java
The Art of Metaprogramming in Java  The Art of Metaprogramming in Java
The Art of Metaprogramming in Java
 
Core java
Core javaCore java
Core java
 

Similar to Java SE 9 modules - an introduction (July 2018)

Java Platform Module System
Java Platform Module SystemJava Platform Module System
Java Platform Module System
Vignesh Ramesh
 
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 9 Features
Java 9 FeaturesJava 9 Features
Java 9 Features
NexThoughts Technologies
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
Ryan Cuprak
 
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
 
Java 9 preview
Java 9 previewJava 9 preview
Java 9 preview
Ivan Krylov
 
Java 9 - Part 2: Jigsaw Modules
Java 9 - Part 2: Jigsaw ModulesJava 9 - Part 2: Jigsaw Modules
Java 9 - Part 2: Jigsaw Modules
Simone Bordet
 
Prepare for JDK 9
Prepare for JDK 9Prepare for JDK 9
Prepare for JDK 9
haochenglee
 
QConSP 2018 - Java Module System
QConSP 2018 - Java Module SystemQConSP 2018 - Java Module System
QConSP 2018 - Java Module System
Leonardo Zanivan
 
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
J On The Beach
 
JavaOne 2016: Life after Modularity
JavaOne 2016: Life after ModularityJavaOne 2016: Life after Modularity
JavaOne 2016: Life after Modularity
DanHeidinga
 
Java modules
Java modulesJava modules
Java modules
Rory Preddy
 
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 Builder
Philip Norton
 
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
Simone Bordet
 
Java 9 New Features
Java 9 New FeaturesJava 9 New Features
Java 9 New Features
Ali BAKAN
 
Java 9 / Jigsaw - AJUG/VJUG session
Java 9 / Jigsaw - AJUG/VJUG  sessionJava 9 / Jigsaw - AJUG/VJUG  session
Java 9 / Jigsaw - AJUG/VJUG session
Mani Sarkar
 
Java 9: Deep Dive into Modularity and Dealing with Migration Issues
Java 9: Deep Dive into Modularity and Dealing with Migration IssuesJava 9: Deep Dive into Modularity and Dealing with Migration Issues
Java 9: Deep Dive into Modularity and Dealing with Migration Issues
GlobalLogic Ukraine
 
Java 9
Java 9Java 9
How to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applicationsHow to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applications
takezoe
 

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

Java Platform Module System
Java Platform Module SystemJava Platform Module System
Java Platform Module System
 
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 9 Features
Java 9 FeaturesJava 9 Features
Java 9 Features
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
 
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 preview
Java 9 previewJava 9 preview
Java 9 preview
 
Java 9 - Part 2: Jigsaw Modules
Java 9 - Part 2: Jigsaw ModulesJava 9 - Part 2: Jigsaw Modules
Java 9 - Part 2: Jigsaw Modules
 
Prepare for JDK 9
Prepare for JDK 9Prepare for JDK 9
Prepare for JDK 9
 
QConSP 2018 - Java Module System
QConSP 2018 - Java Module SystemQConSP 2018 - Java Module System
QConSP 2018 - Java Module System
 
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
 
JavaOne 2016: Life after Modularity
JavaOne 2016: Life after ModularityJavaOne 2016: Life after Modularity
JavaOne 2016: Life after Modularity
 
Java modules
Java modulesJava modules
Java modules
 
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/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
 
Java 9 New Features
Java 9 New FeaturesJava 9 New Features
Java 9 New Features
 
Java 9 / Jigsaw - AJUG/VJUG session
Java 9 / Jigsaw - AJUG/VJUG  sessionJava 9 / Jigsaw - AJUG/VJUG  session
Java 9 / Jigsaw - AJUG/VJUG session
 
Java 9: Deep Dive into Modularity and Dealing with Migration Issues
Java 9: Deep Dive into Modularity and Dealing with Migration IssuesJava 9: Deep Dive into Modularity and Dealing with Migration Issues
Java 9: Deep Dive into Modularity and Dealing with Migration Issues
 
Java 9
Java 9Java 9
Java 9
 
How to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applicationsHow to keep maintainability of long life Scala applications
How to keep maintainability of long life Scala applications
 

Recently uploaded

Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Jay Das
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Globus
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
vrstrong314
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
Srikant77
 

Recently uploaded (20)

Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
 

Java SE 9 modules - an introduction (July 2018)