© Copyright Azul Systems 2016
© Copyright Azul Systems 2015
@speakjava azul.com
Project Jigsaw in JDK 9:
Modularity Comes To Java
Simon Ritter
Deputy CTO, Azul Systems
1
InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/jigsaw-jdk-9
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Presented at QCon London
www.qconlondon.com
© Copyright Azul Systems 2016
Agenda
§ API structure changes
§ Introduction to Jigsaw
§ Developing code with modules
§ Application migration
§ Resources
2
© Copyright Azul Systems 2016
API Structure Changes
© Copyright Azul Systems 2016
API Classification
§ Supported, intended for public use
– JCP specified: java.*, javax.*
– JDK specific: some com.sun.*, some jdk.*
§ Unsupported, not intended for public use
– Mostly sun.*
– Most infamous is sun.misc.Unsafe
4
© Copyright Azul Systems 2016
General Java Compatability Policy
§ If an application uses only supported APIs on version N of
Java it should work on version N+1, even without
recompilation
§ Supported APIs can be removed, but only with advanced
notice
§ To date 23 classes, 18 interfaces and 379 methods have
been deprecated
– None have been removed
5
© Copyright Azul Systems 2016
JDK 9: Incompatible Changes
§ Encapsulate most JDK internal APIs
§ Remove a small number of supported APIs
– 6 in total, all add/remove PropertyChangeListener
– Already flagged in JSR 337 (Java SE 8), JEP 162
§ Change the binary structure of the JRE and JDK
§ New version string format
§ A single underscore will no longer be allowed as an
identifier in source code
6
© Copyright Azul Systems 2016
Removed In JDK 9
§ Endorsed standard API override mechanism
§ Extension mechanism
§ No longer required now we have a module system
7
© Copyright Azul Systems 2016
Binary Structure Of JDK/JRE
§ Potentially disruptive change
– Details in JEP 220
– Blurs the distinction between JRE and JDK
§ Implemented since late 2014
– Allow people to get used to new organisation
8
© Copyright Azul Systems 2016
JDK Structure
bin
Pre-JDK 9 JDK 9
lib
tools.jar
jre
bin
rt.jar
lib
libconfbin
jre directory
tools.jar
rt.jar
© Copyright Azul Systems 2016
Most Popular Unsupported APIs
1.  sun.misc.BASE64Encoder
2.  sun.misc.Unsafe
3.  sun.misc.BASE64Decoder
10
Oracle dataset based on internal application code
© Copyright Azul Systems 2016
JDK Internal API Classification
§ Non-critical
– Little or no use outside the JDK
– Used only for convenience (alternatives exist)
§ Critical
– Functionality that would be difficult, if not impossible to
implement outside the JDK
11
© Copyright Azul Systems 2016
JEP 260 Proposal
§ Encapsulate all non-critical JDK-internal APIs
§ Encapsulate all critical JDK-internal APIs, for which
supported replacements exist in JDK 8
§ Do not encapsulate other critical JDK-internal APIs
– Deprecate these in JDK 9
– Plan to encapsulate or remove them in JDK 10
– Provide command-line option to access encapsulated
critical APIs
12
© Copyright Azul Systems 2016
JEP 260 Accessible Critical APIs
§ sun.misc.Unsafe
§ sun.misc.Signal
§ sun.misc.SignalHandler
§ sun.misc.Cleaner
§ sun.reflect.Reflection.getCallerClass
§ sun.reflect.ReflectionFactory
13
© Copyright Azul Systems 2016
Reviewing Your Own Code
§ jdeps tool
– Introduced in JDK 8, improved in JDK 9
– Maven jdeps plugin
jdeps	–jdkinternals	path/myapp.jar	
14
path/myapp.jar	->	/opt/jdk1.8.0/jre/lib/rt.jar	
			<unnamed>	(myapp.jar)	
						->	java.awt																																												
						->	java.awt.event																																						
						->	java.beans																																										
						->	java.io	
						...
© Copyright Azul Systems 2016
Introduction To Jigsaw And
Modules
© Copyright Azul Systems 2016
Goals For Project Jigsaw
§  Make Java SE more scalable and flexible
§  Improve security, maintainability and performance
§  Simplify construction, deployment and maintenance of
large scale applications
16
© Copyright Azul Systems 2016
Modularity Specifications
§ Java Platform Module System
– JSR 376: Targeted for JDK 9 (no promises)
§ Java SE 9: New JSR will cover modularisation of APIs
§ OpenJDK Project Jigsaw
§ Reference implementation for JSR 376
§ JEP 200: The modular JDK
§ JEP 201: Modular source code
§ JEP 220: Modular run-time images
§ JEP 260: Encapsulate most internal APIs
§ JEP 261: Module system
17
© Copyright Azul Systems 2016
Module Fundamentals
§ Module is a grouping of code
– For Java this is a collection of packages
§ The module can contain other things
– Native code
– Resources
– Configuration data
18
com.azul.zoop
com.azul.zoop.alpha.Name
com.azul.zoop.alpha.Position
com.azul.zoop.beta.Animal
com.azul.zoop.beta.Zoo
© Copyright Azul Systems 2016
Module Declaration
19
module	com.azul.zoop	{	
}	
module-info.java	
com/azul/zoop/alpha/Name.java	
com/azul/zoop/alpha/Position.java	
com/azul/zoop/beta/Animal.java	
com/azul/zoop/beta/Zoo.java
© Copyright Azul Systems 2016
Module Dependencies
module	com.azul.zoop	{	
		requires	com.azul.zeta;	
}	 com.azul.zoop
com.azul.zeta
© Copyright Azul Systems 2016
Module Dependencies
module	com.azul.app	{	
		requires	com.azul.zoop	
		requires	java.sql	
}	
com.azul.app
com.azul.zoop java.sql
© Copyright Azul Systems 2016
Module Dependency Graph
com.azul.app
java.base
java.sqlcom.azul.zoop
com.azul.zeta
java.xml java.logging
© Copyright Azul Systems 2016
Readability v. Dependency
com.azul.app
java.sql
java.logging
module	java.sql	{	
		requires	public	java.logging;	
}	
Driver	d	=	…	
Logger	l	=	d.getParentLogger();	
l.log(“azul’);
© Copyright Azul Systems 2016
Module Readability Graph
com.azul.app
java.base
java.sqlcom.azul.zoop
com.azul.zeta
java.xml java.logging
© Copyright Azul Systems 2016
Package Visibility
module	com.azul.zoop	{	
		exports	com.azul.zoop.alpha;		
		exports	com.azul.zoop.beta;	
}	
com.azul.zoop
com.azul.zoop.alpha	
com.azul.zoop.beta com.azul.zoop.theta
© Copyright Azul Systems 2016
Accessibility
§ For a package to be visible
– The package must be exported by the containing module
– The containing module must be read by the using module
§ Public types from those packages can then be used
com.azul.zoopcom.azul.app
reads
© Copyright Azul Systems 2016
Java Accessibility (pre-JDK 9)
public	
protected	
<package>	
private
© Copyright Azul Systems 2016
Java Accessibility (JDK 9)
public	to	everyone	
public,	but	only	to	specific	modules	
public	only	within	a	module		
protected	
<package>	
private	
public ≠ accessible (fundamental change to Java)
© Copyright Azul Systems 2016
JDK Platform Modules
29
© Copyright Azul Systems 2016
Developing Code With
Modules
© Copyright Azul Systems 2016
Compilation
31
$	javac	–d	mods		
		src/zeta/module-info.java		
		src/zeta/com/azul/zeta/Vehicle.java	
mods/zeta/module-info.class	
mods/zeta/com/azul/zeta/Vehicle.class	
src/zeta/module-info.java	
src/zeta/com/azul/zeta/Vehicle.java
© Copyright Azul Systems 2016
Module Path
$	javac	–modulepath	dir1:dir2:dir3
© Copyright Azul Systems 2016
Compilation With Module Path
33
$	javac	–modulepath	mods	–d	mods		
		src/zoop/module-info.java		
		src/zoop/com/azul/zoop/alpha/Name.java	
mods/zoop/module-info.class	
mods/zoop/com/azul/zoop/alpha/Name.class	
src/zoop/module-info.java	
src/zoop/com/azul/zoop/alpha/Name.java
© Copyright Azul Systems 2016
Application Execution
§ -modulepath can be abbreviated to -mp
$	java	–mp	mods	–m	com.azul.app/com.azul.app.Main	
	
Azul	application	initialised!		
module name main class
© Copyright Azul Systems 2016
Module Diagnostics
$	java	–Xdiag:resolver	–mp	mods	–m	com.azul.zoop/com.azul.zoop.Main
© Copyright Azul Systems 2016
Packaging With Modular Jars
mods/zoop/module-info.class	
mods/zoop/com/azul/app/Main.class	
$	jar	--create	--file	myLib/app.jar		
				--main-class	com.azul.zoop.Main		
				-C	mods	.	
module-info.class	
com/azul/zoop/Main.class
app.jar
© Copyright Azul Systems 2016
Jar Files & Module Information
$	jar	--file	myLib/app.jar	–p	
Name:	
		com.azul.zoop	
Requires:	
		com.azul.zeta	
		java.base	[MANDATED]	
		java.sql	
Main	class:	
		com.azul.zoop.Main
© Copyright Azul Systems 2016
Application Execution (JAR)
$	java	–mp	myLib:mods	–m	com.azul.zoop.Main	
	
Azul	application	initialised!
© Copyright Azul Systems 2016
Linking
Modular run-time
image
…confbin
jlink
$	jlink	--modulepath	$JDKMODS		
		--addmods	java.base	–output	myimage	
	
$	myimage/bin/java	–listmods	
java.base@9.0
© Copyright Azul Systems 2016
Linking An Application
$	jlink	--modulepath	$JDKMODS:$MYMODS		
		--addmods	com.azul.app	–output	myimage	
	
$	myimage/bin/java	–listmods	
java.base@9.0	
java.logging@9.0	
java.sql@9.0	
java.xml@9.0	
com.azul.app@1.0	
com.azul.zoop@1.0	
com.azul.zeta@1.0	
Version numbering for
information purposes
only
© Copyright Azul Systems 2016
Application Migration
© Copyright Azul Systems 2016
Typical Application (JDK 8)
jar
jar
jar
JDK
jar
jarjar
jar jar
jar
jar
jar
jar
© Copyright Azul Systems 2016
Typical Application (JDK 9)
jar
jar
jar
module
java.base
module
java.desktop
module
java.datatransfer
module
java.xml
jar
jarjar
jar jar
jar
jar
jar
jar
© Copyright Azul Systems 2016
Sample Application
myapp.jar
lwjgl.jar
mylib.jar
gluegen-rt.jar jogl-all.jar
module
java.base
module
java.desktop
module
java.datatransfer
module
java.xml
© Copyright Azul Systems 2016
Run Application With Classpath
$	java	–classpath		
		lib/myapp.jar:		
		lib/mylib.jar:		
		lib/liblwjgl.jar:		
		lib/gluegen-rt.jar:		
		lib/jogl-all.jar:		
		myapp.Main
© Copyright Azul Systems 2016
Sample Application
module
myapp.jar
lwjgl.jar
module
mylib.jar
gluegen-rt.jar jogl-all.jar
module
java.base
module
java.desktop
module
java.datatransfer
module
java.xml
© Copyright Azul Systems 2016
Application module-info.java
module	myapp	{	
		requires	mylib;	
		requires	java.base;	
		requires	java.sql;	
		requires	lwjgl;							????	
		requires	gluegen-rt;		????	
		requires	jogl-all;				????	
}
© Copyright Azul Systems 2016
Sample Application
module
myapp.jar
module
lwjgl.jar
module
mylib.jar
module
gluegen-rt.jar
module
jogl-all.jar
module
java.base
module
java.desktop
module
java.datatransfer
module
java.xml
© Copyright Azul Systems 2016
Automatic Modules
§ Real modules
§ Reuse an existing JAR without change
§ Module name derived from JAR file name
§ Exports all its packages
– No selectivity
§ Requires all modules accessible from the module path
49
© Copyright Azul Systems 2016
Sample Application
module
myapp.jar
module
lwjgl.jar
module
mylib.jar
module
gluegen-rt.jar
module
jogl-all.jar
module
java.base
module
java.desktop
module
java.datatransfer
module
java.xml
© Copyright Azul Systems 2016
Run Application With Modules
$	java	–classpath		
		lib/myapp.jar:		
		lib/mylib.jar:		
		lib/liblwjgl.jar:		
		lib/gluegen-rt.jar:		
		lib/jogl-all.jar:		
		myapp.Main	
	
$	java	–mp	mylib:lib	–m	myapp
© Copyright Azul Systems 2016
Summary & Further Information
© Copyright Azul Systems 2016
Summary
§ Modularisation is a big change for Java
– JVM/JRE rather than language/APIs
§ Potentially disruptive changes to exposure of non-public APIs
– Is it safe?
§ Developing modular code will require some learning
– Not a huge change, though
53
© Copyright Azul Systems 2016
Zulu.org
§ Azul binary distribution of OpenJDK source code
§ Passed all TCK tests
§ Completely FREE!
– Pay us if you’d like enterprise level support
§ Just announced: Embedded Zulu support for ARM 32-bit
– Intel already supported
– “Requires no licensing fee”
54
© Copyright Azul Systems 2016
Further Information
§ openjdk.java.net
§ openjdk.java.net/jeps
§ openjdk.java.net/projects/jigsaw
§ jcp.org
55
© Copyright Azul Systems 2016
© Copyright Azul Systems 2015
@speakjava azul.com
Questions
Simon Ritter
Deputy CTO, Azul Systems
56
Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations/
jigsaw-jdk-9

Project Jigsaw in JDK 9: Modularity Comes To Java

  • 1.
    © Copyright AzulSystems 2016 © Copyright Azul Systems 2015 @speakjava azul.com Project Jigsaw in JDK 9: Modularity Comes To Java Simon Ritter Deputy CTO, Azul Systems 1
  • 2.
    InfoQ.com: News &Community Site • 750,000 unique visitors/month • Published in 4 languages (English, Chinese, Japanese and Brazilian Portuguese) • Post content from our QCon conferences • News 15-20 / week • Articles 3-4 / week • Presentations (videos) 12-15 / week • Interviews 2-3 / week • Books 1 / month Watch the video with slide synchronization on InfoQ.com! http://www.infoq.com/presentations /jigsaw-jdk-9
  • 3.
    Purpose of QCon -to empower software development by facilitating the spread of knowledge and innovation Strategy - practitioner-driven conference designed for YOU: influencers of change and innovation in your teams - speakers and topics driving the evolution and innovation - connecting and catalyzing the influencers and innovators Highlights - attended by more than 12,000 delegates since 2007 - held in 9 cities worldwide Presented at QCon London www.qconlondon.com
  • 4.
    © Copyright AzulSystems 2016 Agenda § API structure changes § Introduction to Jigsaw § Developing code with modules § Application migration § Resources 2
  • 5.
    © Copyright AzulSystems 2016 API Structure Changes
  • 6.
    © Copyright AzulSystems 2016 API Classification § Supported, intended for public use – JCP specified: java.*, javax.* – JDK specific: some com.sun.*, some jdk.* § Unsupported, not intended for public use – Mostly sun.* – Most infamous is sun.misc.Unsafe 4
  • 7.
    © Copyright AzulSystems 2016 General Java Compatability Policy § If an application uses only supported APIs on version N of Java it should work on version N+1, even without recompilation § Supported APIs can be removed, but only with advanced notice § To date 23 classes, 18 interfaces and 379 methods have been deprecated – None have been removed 5
  • 8.
    © Copyright AzulSystems 2016 JDK 9: Incompatible Changes § Encapsulate most JDK internal APIs § Remove a small number of supported APIs – 6 in total, all add/remove PropertyChangeListener – Already flagged in JSR 337 (Java SE 8), JEP 162 § Change the binary structure of the JRE and JDK § New version string format § A single underscore will no longer be allowed as an identifier in source code 6
  • 9.
    © Copyright AzulSystems 2016 Removed In JDK 9 § Endorsed standard API override mechanism § Extension mechanism § No longer required now we have a module system 7
  • 10.
    © Copyright AzulSystems 2016 Binary Structure Of JDK/JRE § Potentially disruptive change – Details in JEP 220 – Blurs the distinction between JRE and JDK § Implemented since late 2014 – Allow people to get used to new organisation 8
  • 11.
    © Copyright AzulSystems 2016 JDK Structure bin Pre-JDK 9 JDK 9 lib tools.jar jre bin rt.jar lib libconfbin jre directory tools.jar rt.jar
  • 12.
    © Copyright AzulSystems 2016 Most Popular Unsupported APIs 1.  sun.misc.BASE64Encoder 2.  sun.misc.Unsafe 3.  sun.misc.BASE64Decoder 10 Oracle dataset based on internal application code
  • 13.
    © Copyright AzulSystems 2016 JDK Internal API Classification § Non-critical – Little or no use outside the JDK – Used only for convenience (alternatives exist) § Critical – Functionality that would be difficult, if not impossible to implement outside the JDK 11
  • 14.
    © Copyright AzulSystems 2016 JEP 260 Proposal § Encapsulate all non-critical JDK-internal APIs § Encapsulate all critical JDK-internal APIs, for which supported replacements exist in JDK 8 § Do not encapsulate other critical JDK-internal APIs – Deprecate these in JDK 9 – Plan to encapsulate or remove them in JDK 10 – Provide command-line option to access encapsulated critical APIs 12
  • 15.
    © Copyright AzulSystems 2016 JEP 260 Accessible Critical APIs § sun.misc.Unsafe § sun.misc.Signal § sun.misc.SignalHandler § sun.misc.Cleaner § sun.reflect.Reflection.getCallerClass § sun.reflect.ReflectionFactory 13
  • 16.
    © Copyright AzulSystems 2016 Reviewing Your Own Code § jdeps tool – Introduced in JDK 8, improved in JDK 9 – Maven jdeps plugin jdeps –jdkinternals path/myapp.jar 14 path/myapp.jar -> /opt/jdk1.8.0/jre/lib/rt.jar <unnamed> (myapp.jar) -> java.awt -> java.awt.event -> java.beans -> java.io ...
  • 17.
    © Copyright AzulSystems 2016 Introduction To Jigsaw And Modules
  • 18.
    © Copyright AzulSystems 2016 Goals For Project Jigsaw §  Make Java SE more scalable and flexible §  Improve security, maintainability and performance §  Simplify construction, deployment and maintenance of large scale applications 16
  • 19.
    © Copyright AzulSystems 2016 Modularity Specifications § Java Platform Module System – JSR 376: Targeted for JDK 9 (no promises) § Java SE 9: New JSR will cover modularisation of APIs § OpenJDK Project Jigsaw § Reference implementation for JSR 376 § JEP 200: The modular JDK § JEP 201: Modular source code § JEP 220: Modular run-time images § JEP 260: Encapsulate most internal APIs § JEP 261: Module system 17
  • 20.
    © Copyright AzulSystems 2016 Module Fundamentals § Module is a grouping of code – For Java this is a collection of packages § The module can contain other things – Native code – Resources – Configuration data 18 com.azul.zoop com.azul.zoop.alpha.Name com.azul.zoop.alpha.Position com.azul.zoop.beta.Animal com.azul.zoop.beta.Zoo
  • 21.
    © Copyright AzulSystems 2016 Module Declaration 19 module com.azul.zoop { } module-info.java com/azul/zoop/alpha/Name.java com/azul/zoop/alpha/Position.java com/azul/zoop/beta/Animal.java com/azul/zoop/beta/Zoo.java
  • 22.
    © Copyright AzulSystems 2016 Module Dependencies module com.azul.zoop { requires com.azul.zeta; } com.azul.zoop com.azul.zeta
  • 23.
    © Copyright AzulSystems 2016 Module Dependencies module com.azul.app { requires com.azul.zoop requires java.sql } com.azul.app com.azul.zoop java.sql
  • 24.
    © Copyright AzulSystems 2016 Module Dependency Graph com.azul.app java.base java.sqlcom.azul.zoop com.azul.zeta java.xml java.logging
  • 25.
    © Copyright AzulSystems 2016 Readability v. Dependency com.azul.app java.sql java.logging module java.sql { requires public java.logging; } Driver d = … Logger l = d.getParentLogger(); l.log(“azul’);
  • 26.
    © Copyright AzulSystems 2016 Module Readability Graph com.azul.app java.base java.sqlcom.azul.zoop com.azul.zeta java.xml java.logging
  • 27.
    © Copyright AzulSystems 2016 Package Visibility module com.azul.zoop { exports com.azul.zoop.alpha; exports com.azul.zoop.beta; } com.azul.zoop com.azul.zoop.alpha com.azul.zoop.beta com.azul.zoop.theta
  • 28.
    © Copyright AzulSystems 2016 Accessibility § For a package to be visible – The package must be exported by the containing module – The containing module must be read by the using module § Public types from those packages can then be used com.azul.zoopcom.azul.app reads
  • 29.
    © Copyright AzulSystems 2016 Java Accessibility (pre-JDK 9) public protected <package> private
  • 30.
    © Copyright AzulSystems 2016 Java Accessibility (JDK 9) public to everyone public, but only to specific modules public only within a module protected <package> private public ≠ accessible (fundamental change to Java)
  • 31.
    © Copyright AzulSystems 2016 JDK Platform Modules 29
  • 32.
    © Copyright AzulSystems 2016 Developing Code With Modules
  • 33.
    © Copyright AzulSystems 2016 Compilation 31 $ javac –d mods src/zeta/module-info.java src/zeta/com/azul/zeta/Vehicle.java mods/zeta/module-info.class mods/zeta/com/azul/zeta/Vehicle.class src/zeta/module-info.java src/zeta/com/azul/zeta/Vehicle.java
  • 34.
    © Copyright AzulSystems 2016 Module Path $ javac –modulepath dir1:dir2:dir3
  • 35.
    © Copyright AzulSystems 2016 Compilation With Module Path 33 $ javac –modulepath mods –d mods src/zoop/module-info.java src/zoop/com/azul/zoop/alpha/Name.java mods/zoop/module-info.class mods/zoop/com/azul/zoop/alpha/Name.class src/zoop/module-info.java src/zoop/com/azul/zoop/alpha/Name.java
  • 36.
    © Copyright AzulSystems 2016 Application Execution § -modulepath can be abbreviated to -mp $ java –mp mods –m com.azul.app/com.azul.app.Main Azul application initialised! module name main class
  • 37.
    © Copyright AzulSystems 2016 Module Diagnostics $ java –Xdiag:resolver –mp mods –m com.azul.zoop/com.azul.zoop.Main
  • 38.
    © Copyright AzulSystems 2016 Packaging With Modular Jars mods/zoop/module-info.class mods/zoop/com/azul/app/Main.class $ jar --create --file myLib/app.jar --main-class com.azul.zoop.Main -C mods . module-info.class com/azul/zoop/Main.class app.jar
  • 39.
    © Copyright AzulSystems 2016 Jar Files & Module Information $ jar --file myLib/app.jar –p Name: com.azul.zoop Requires: com.azul.zeta java.base [MANDATED] java.sql Main class: com.azul.zoop.Main
  • 40.
    © Copyright AzulSystems 2016 Application Execution (JAR) $ java –mp myLib:mods –m com.azul.zoop.Main Azul application initialised!
  • 41.
    © Copyright AzulSystems 2016 Linking Modular run-time image …confbin jlink $ jlink --modulepath $JDKMODS --addmods java.base –output myimage $ myimage/bin/java –listmods java.base@9.0
  • 42.
    © Copyright AzulSystems 2016 Linking An Application $ jlink --modulepath $JDKMODS:$MYMODS --addmods com.azul.app –output myimage $ myimage/bin/java –listmods java.base@9.0 java.logging@9.0 java.sql@9.0 java.xml@9.0 com.azul.app@1.0 com.azul.zoop@1.0 com.azul.zeta@1.0 Version numbering for information purposes only
  • 43.
    © Copyright AzulSystems 2016 Application Migration
  • 44.
    © Copyright AzulSystems 2016 Typical Application (JDK 8) jar jar jar JDK jar jarjar jar jar jar jar jar jar
  • 45.
    © Copyright AzulSystems 2016 Typical Application (JDK 9) jar jar jar module java.base module java.desktop module java.datatransfer module java.xml jar jarjar jar jar jar jar jar jar
  • 46.
    © Copyright AzulSystems 2016 Sample Application myapp.jar lwjgl.jar mylib.jar gluegen-rt.jar jogl-all.jar module java.base module java.desktop module java.datatransfer module java.xml
  • 47.
    © Copyright AzulSystems 2016 Run Application With Classpath $ java –classpath lib/myapp.jar: lib/mylib.jar: lib/liblwjgl.jar: lib/gluegen-rt.jar: lib/jogl-all.jar: myapp.Main
  • 48.
    © Copyright AzulSystems 2016 Sample Application module myapp.jar lwjgl.jar module mylib.jar gluegen-rt.jar jogl-all.jar module java.base module java.desktop module java.datatransfer module java.xml
  • 49.
    © Copyright AzulSystems 2016 Application module-info.java module myapp { requires mylib; requires java.base; requires java.sql; requires lwjgl; ???? requires gluegen-rt; ???? requires jogl-all; ???? }
  • 50.
    © Copyright AzulSystems 2016 Sample Application module myapp.jar module lwjgl.jar module mylib.jar module gluegen-rt.jar module jogl-all.jar module java.base module java.desktop module java.datatransfer module java.xml
  • 51.
    © Copyright AzulSystems 2016 Automatic Modules § Real modules § Reuse an existing JAR without change § Module name derived from JAR file name § Exports all its packages – No selectivity § Requires all modules accessible from the module path 49
  • 52.
    © Copyright AzulSystems 2016 Sample Application module myapp.jar module lwjgl.jar module mylib.jar module gluegen-rt.jar module jogl-all.jar module java.base module java.desktop module java.datatransfer module java.xml
  • 53.
    © Copyright AzulSystems 2016 Run Application With Modules $ java –classpath lib/myapp.jar: lib/mylib.jar: lib/liblwjgl.jar: lib/gluegen-rt.jar: lib/jogl-all.jar: myapp.Main $ java –mp mylib:lib –m myapp
  • 54.
    © Copyright AzulSystems 2016 Summary & Further Information
  • 55.
    © Copyright AzulSystems 2016 Summary § Modularisation is a big change for Java – JVM/JRE rather than language/APIs § Potentially disruptive changes to exposure of non-public APIs – Is it safe? § Developing modular code will require some learning – Not a huge change, though 53
  • 56.
    © Copyright AzulSystems 2016 Zulu.org § Azul binary distribution of OpenJDK source code § Passed all TCK tests § Completely FREE! – Pay us if you’d like enterprise level support § Just announced: Embedded Zulu support for ARM 32-bit – Intel already supported – “Requires no licensing fee” 54
  • 57.
    © Copyright AzulSystems 2016 Further Information § openjdk.java.net § openjdk.java.net/jeps § openjdk.java.net/projects/jigsaw § jcp.org 55
  • 58.
    © Copyright AzulSystems 2016 © Copyright Azul Systems 2015 @speakjava azul.com Questions Simon Ritter Deputy CTO, Azul Systems 56
  • 59.
    Watch the videowith slide synchronization on InfoQ.com! http://www.infoq.com/presentations/ jigsaw-jdk-9