SlideShare ist ein Scribd-Unternehmen logo
1 von 59
© 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

Más contenido relacionado

Was ist angesagt?

Java 9 Module System Introduction
Java 9 Module System IntroductionJava 9 Module System Introduction
Java 9 Module System IntroductionDan Stine
 
Java 8 in Anger, Devoxx France
Java 8 in Anger, Devoxx FranceJava 8 in Anger, Devoxx France
Java 8 in Anger, Devoxx FranceTrisha Gee
 
2015 Java update and roadmap, JUG sevilla
2015  Java update and roadmap, JUG sevilla2015  Java update and roadmap, JUG sevilla
2015 Java update and roadmap, JUG sevillaTrisha Gee
 
What's Coming in Java EE 8
What's Coming in Java EE 8What's Coming in Java EE 8
What's Coming in Java EE 8PT.JUG
 
Scala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuScala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuHavoc Pennington
 
Tweet4Beer (atualizada): Torneira de Chopp Controlada por Java, JavaFX, IoT ...
Tweet4Beer (atualizada): Torneira de Chopp Controlada por Java, JavaFX, IoT ...Tweet4Beer (atualizada): Torneira de Chopp Controlada por Java, JavaFX, IoT ...
Tweet4Beer (atualizada): Torneira de Chopp Controlada por Java, JavaFX, IoT ...Marco Antonio Maciel
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Ryan Cuprak
 
It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15
It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15
It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15Wolfgang Weigend
 
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
 
Java 8 in Anger (JavaOne)
Java 8 in Anger (JavaOne)Java 8 in Anger (JavaOne)
Java 8 in Anger (JavaOne)Trisha Gee
 
Oracle cloud data interface
Oracle cloud data interfaceOracle cloud data interface
Oracle cloud data interfaceOracle Korea
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014Ryan Cuprak
 
Expect the unexpected: Anticipate and prepare for failures in microservices b...
Expect the unexpected: Anticipate and prepare for failures in microservices b...Expect the unexpected: Anticipate and prepare for failures in microservices b...
Expect the unexpected: Anticipate and prepare for failures in microservices b...Bhakti Mehta
 
Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Roberto Cortez
 
Spring boot microservice metrics monitoring
Spring boot   microservice metrics monitoringSpring boot   microservice metrics monitoring
Spring boot microservice metrics monitoringOracle Korea
 
ADBA (Asynchronous Database Access)
ADBA (Asynchronous Database Access)ADBA (Asynchronous Database Access)
ADBA (Asynchronous Database Access)Logico
 
JDBC Next: A New Asynchronous API for Connecting to a Database
JDBC Next: A New Asynchronous API for Connecting to a Database JDBC Next: A New Asynchronous API for Connecting to a Database
JDBC Next: A New Asynchronous API for Connecting to a Database Yolande Poirier
 

Was ist angesagt? (20)

Java 9 Module System Introduction
Java 9 Module System IntroductionJava 9 Module System Introduction
Java 9 Module System Introduction
 
Java 8 in Anger, Devoxx France
Java 8 in Anger, Devoxx FranceJava 8 in Anger, Devoxx France
Java 8 in Anger, Devoxx France
 
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
 
2015 Java update and roadmap, JUG sevilla
2015  Java update and roadmap, JUG sevilla2015  Java update and roadmap, JUG sevilla
2015 Java update and roadmap, JUG sevilla
 
What's Coming in Java EE 8
What's Coming in Java EE 8What's Coming in Java EE 8
What's Coming in Java EE 8
 
Scala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuScala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on Heroku
 
Tweet4Beer (atualizada): Torneira de Chopp Controlada por Java, JavaFX, IoT ...
Tweet4Beer (atualizada): Torneira de Chopp Controlada por Java, JavaFX, IoT ...Tweet4Beer (atualizada): Torneira de Chopp Controlada por Java, JavaFX, IoT ...
Tweet4Beer (atualizada): Torneira de Chopp Controlada por Java, JavaFX, IoT ...
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)
 
It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15
It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15
It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15
 
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 modules
Java modulesJava modules
Java modules
 
Java Desktop 2019
Java Desktop 2019Java Desktop 2019
Java Desktop 2019
 
Java 8 in Anger (JavaOne)
Java 8 in Anger (JavaOne)Java 8 in Anger (JavaOne)
Java 8 in Anger (JavaOne)
 
Oracle cloud data interface
Oracle cloud data interfaceOracle cloud data interface
Oracle cloud data interface
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014
 
Expect the unexpected: Anticipate and prepare for failures in microservices b...
Expect the unexpected: Anticipate and prepare for failures in microservices b...Expect the unexpected: Anticipate and prepare for failures in microservices b...
Expect the unexpected: Anticipate and prepare for failures in microservices b...
 
Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7
 
Spring boot microservice metrics monitoring
Spring boot   microservice metrics monitoringSpring boot   microservice metrics monitoring
Spring boot microservice metrics monitoring
 
ADBA (Asynchronous Database Access)
ADBA (Asynchronous Database Access)ADBA (Asynchronous Database Access)
ADBA (Asynchronous Database Access)
 
JDBC Next: A New Asynchronous API for Connecting to a Database
JDBC Next: A New Asynchronous API for Connecting to a Database JDBC Next: A New Asynchronous API for Connecting to a Database
JDBC Next: A New Asynchronous API for Connecting to a Database
 

Ähnlich wie Project Jigsaw in JDK 9: Modularity Comes To Java

Project Jigsaw in JDK9
Project Jigsaw in JDK9Project Jigsaw in JDK9
Project Jigsaw in JDK9Simon Ritter
 
Modularization With Project Jigsaw in JDK 9
Modularization With Project Jigsaw in JDK 9Modularization With Project Jigsaw in JDK 9
Modularization With Project Jigsaw in JDK 9Simon Ritter
 
JDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerJDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerSimon Ritter
 
JDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerJDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerSimon Ritter
 
Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller
Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller
Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller Patroklos Papapetrou (Pat)
 
Voxxed Days Thessaloniki 2016 - Keynote - JDK 9 : Big Changes To Make Java Sm...
Voxxed Days Thessaloniki 2016 - Keynote - JDK 9 : Big Changes To Make Java Sm...Voxxed Days Thessaloniki 2016 - Keynote - JDK 9 : Big Changes To Make Java Sm...
Voxxed Days Thessaloniki 2016 - Keynote - JDK 9 : Big Changes To Make Java Sm...Voxxed Days Thessaloniki
 
JDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKJDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKWolfgang Weigend
 
JDK 9 and JDK 10 Deep Dive
JDK 9 and JDK 10 Deep DiveJDK 9 and JDK 10 Deep Dive
JDK 9 and JDK 10 Deep DiveSimon Ritter
 
Serverless Java - Challenges and Triumphs
Serverless Java - Challenges and TriumphsServerless Java - Challenges and Triumphs
Serverless Java - Challenges and TriumphsDavid Delabassee
 
Java Community News - September 2015
Java Community News - September 2015Java Community News - September 2015
Java Community News - September 2015Yolande Poirier
 
Serverless Java: JJUG CCC 2019
Serverless Java: JJUG CCC 2019Serverless Java: JJUG CCC 2019
Serverless Java: JJUG CCC 2019Shaun Smith
 
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, NokiaHistory and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokiamfrancis
 
Hybrid mobile development with Oracle JET
Hybrid mobile development with Oracle JETHybrid mobile development with Oracle JET
Hybrid mobile development with Oracle JETRohit Dhamija
 
Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl Jeff Smith
 
Serverless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsDavid Delabassee
 
JavaOne - 10 Tips for Java EE 7 with PrimeFaces
JavaOne - 10 Tips for Java EE 7 with PrimeFacesJavaOne - 10 Tips for Java EE 7 with PrimeFaces
JavaOne - 10 Tips for Java EE 7 with PrimeFacesMert Çalışkan
 
Oracle Developer Cloud - 소개 (신기능 포함)
Oracle Developer Cloud - 소개 (신기능 포함)Oracle Developer Cloud - 소개 (신기능 포함)
Oracle Developer Cloud - 소개 (신기능 포함)Mee Nam Lee
 

Ähnlich wie Project Jigsaw in JDK 9: Modularity Comes To Java (20)

Project Jigsaw in JDK9
Project Jigsaw in JDK9Project Jigsaw in JDK9
Project Jigsaw in JDK9
 
Modularization With Project Jigsaw in JDK 9
Modularization With Project Jigsaw in JDK 9Modularization With Project Jigsaw in JDK 9
Modularization With Project Jigsaw in JDK 9
 
JDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerJDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java Smaller
 
JDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerJDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java Smaller
 
Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller
Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller
Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller
 
Voxxed Days Thessaloniki 2016 - Keynote - JDK 9 : Big Changes To Make Java Sm...
Voxxed Days Thessaloniki 2016 - Keynote - JDK 9 : Big Changes To Make Java Sm...Voxxed Days Thessaloniki 2016 - Keynote - JDK 9 : Big Changes To Make Java Sm...
Voxxed Days Thessaloniki 2016 - Keynote - JDK 9 : Big Changes To Make Java Sm...
 
JDK 9 Deep Dive
JDK 9 Deep DiveJDK 9 Deep Dive
JDK 9 Deep Dive
 
JDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKJDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDK
 
JDK 9 and JDK 10 Deep Dive
JDK 9 and JDK 10 Deep DiveJDK 9 and JDK 10 Deep Dive
JDK 9 and JDK 10 Deep Dive
 
JDK 10 Java Module System
JDK 10 Java Module SystemJDK 10 Java Module System
JDK 10 Java Module System
 
Serverless Java - Challenges and Triumphs
Serverless Java - Challenges and TriumphsServerless Java - Challenges and Triumphs
Serverless Java - Challenges and Triumphs
 
Java Community News - September 2015
Java Community News - September 2015Java Community News - September 2015
Java Community News - September 2015
 
Serverless Java: JJUG CCC 2019
Serverless Java: JJUG CCC 2019Serverless Java: JJUG CCC 2019
Serverless Java: JJUG CCC 2019
 
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, NokiaHistory and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
History and Future of the Downloadable Mobile Marketplace - Jon Bostrom, Nokia
 
Hybrid mobile development with Oracle JET
Hybrid mobile development with Oracle JETHybrid mobile development with Oracle JET
Hybrid mobile development with Oracle JET
 
Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl
 
Serverless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & Triumphs
 
JavaOne - 10 Tips for Java EE 7 with PrimeFaces
JavaOne - 10 Tips for Java EE 7 with PrimeFacesJavaOne - 10 Tips for Java EE 7 with PrimeFaces
JavaOne - 10 Tips for Java EE 7 with PrimeFaces
 
JDK versions and OpenJDK
JDK versions and OpenJDKJDK versions and OpenJDK
JDK versions and OpenJDK
 
Oracle Developer Cloud - 소개 (신기능 포함)
Oracle Developer Cloud - 소개 (신기능 포함)Oracle Developer Cloud - 소개 (신기능 포함)
Oracle Developer Cloud - 소개 (신기능 포함)
 

Mehr von C4Media

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileC4Media
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020C4Media
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No KeeperC4Media
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like OwnersC4Media
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaC4Media
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideC4Media
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDC4Media
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine LearningC4Media
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at SpeedC4Media
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsC4Media
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsC4Media
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerC4Media
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleC4Media
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeC4Media
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereC4Media
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing ForC4Media
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data EngineeringC4Media
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreC4Media
 

Mehr von C4Media (20)

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy Mobile
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like Owners
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate Guide
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CD
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine Learning
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep Systems
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.js
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly Compiler
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix Scale
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's Edge
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home Everywhere
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing For
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data Engineering
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
 

Último

Graphene Quantum Dots-Based Composites for Biomedical Applications
Graphene Quantum Dots-Based Composites for  Biomedical ApplicationsGraphene Quantum Dots-Based Composites for  Biomedical Applications
Graphene Quantum Dots-Based Composites for Biomedical Applicationsnooralam814309
 
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptxEmil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptxNeo4j
 
Planetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl
 
March Patch Tuesday
March Patch TuesdayMarch Patch Tuesday
March Patch TuesdayIvanti
 
How to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptxHow to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptxKaustubhBhavsar6
 
Top 10 Squarespace Development Companies
Top 10 Squarespace Development CompaniesTop 10 Squarespace Development Companies
Top 10 Squarespace Development CompaniesTopCSSGallery
 
2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdfThe Good Food Institute
 
UiPath Studio Web workshop Series - Day 3
UiPath Studio Web workshop Series - Day 3UiPath Studio Web workshop Series - Day 3
UiPath Studio Web workshop Series - Day 3DianaGray10
 
UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2DianaGray10
 
UiPath Studio Web workshop series - Day 1
UiPath Studio Web workshop series  - Day 1UiPath Studio Web workshop series  - Day 1
UiPath Studio Web workshop series - Day 1DianaGray10
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightSafe Software
 
Patch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 updatePatch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 updateadam112203
 
.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptx.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptxHansamali Gamage
 
Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...DianaGray10
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInThousandEyes
 
The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)IES VE
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)codyslingerland1
 
Stobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through TokenizationStobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through TokenizationStobox
 
Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.IPLOOK Networks
 

Último (20)

Graphene Quantum Dots-Based Composites for Biomedical Applications
Graphene Quantum Dots-Based Composites for  Biomedical ApplicationsGraphene Quantum Dots-Based Composites for  Biomedical Applications
Graphene Quantum Dots-Based Composites for Biomedical Applications
 
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptxEmil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
Emil Eifrem at GraphSummit Copenhagen 2024 - The Art of the Possible.pptx
 
Planetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile Brochure
 
March Patch Tuesday
March Patch TuesdayMarch Patch Tuesday
March Patch Tuesday
 
How to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptxHow to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptx
 
Top 10 Squarespace Development Companies
Top 10 Squarespace Development CompaniesTop 10 Squarespace Development Companies
Top 10 Squarespace Development Companies
 
2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf2024.03.12 Cost drivers of cultivated meat production.pdf
2024.03.12 Cost drivers of cultivated meat production.pdf
 
UiPath Studio Web workshop Series - Day 3
UiPath Studio Web workshop Series - Day 3UiPath Studio Web workshop Series - Day 3
UiPath Studio Web workshop Series - Day 3
 
UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2UiPath Studio Web workshop series - Day 2
UiPath Studio Web workshop series - Day 2
 
UiPath Studio Web workshop series - Day 1
UiPath Studio Web workshop series  - Day 1UiPath Studio Web workshop series  - Day 1
UiPath Studio Web workshop series - Day 1
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
Patch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 updatePatch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 update
 
.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptx.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptx
 
Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...Explore the UiPath Community and ways you can benefit on your journey to auto...
Explore the UiPath Community and ways you can benefit on your journey to auto...
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
 
The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)The Importance of Indoor Air Quality (English)
The Importance of Indoor Air Quality (English)
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)
 
SheDev 2024
SheDev 2024SheDev 2024
SheDev 2024
 
Stobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through TokenizationStobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
 
Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.
 

Project Jigsaw in JDK 9: Modularity Comes To Java

  • 1. © 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
  • 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 Azul Systems 2016 Agenda § API structure changes § Introduction to Jigsaw § Developing code with modules § Application migration § Resources 2
  • 5. © Copyright Azul Systems 2016 API Structure Changes
  • 6. © 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
  • 7. © 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
  • 8. © 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
  • 9. © 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
  • 10. © 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
  • 11. © 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
  • 12. © 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
  • 13. © 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
  • 14. © 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
  • 15. © 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
  • 16. © 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 ...
  • 17. © Copyright Azul Systems 2016 Introduction To Jigsaw And Modules
  • 18. © 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
  • 19. © 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
  • 20. © 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
  • 21. © 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
  • 22. © Copyright Azul Systems 2016 Module Dependencies module com.azul.zoop { requires com.azul.zeta; } com.azul.zoop com.azul.zeta
  • 23. © 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
  • 24. © Copyright Azul Systems 2016 Module Dependency Graph com.azul.app java.base java.sqlcom.azul.zoop com.azul.zeta java.xml java.logging
  • 25. © 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’);
  • 26. © Copyright Azul Systems 2016 Module Readability Graph com.azul.app java.base java.sqlcom.azul.zoop com.azul.zeta java.xml java.logging
  • 27. © 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
  • 28. © 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
  • 29. © Copyright Azul Systems 2016 Java Accessibility (pre-JDK 9) public protected <package> private
  • 30. © 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)
  • 31. © Copyright Azul Systems 2016 JDK Platform Modules 29
  • 32. © Copyright Azul Systems 2016 Developing Code With Modules
  • 33. © 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
  • 34. © Copyright Azul Systems 2016 Module Path $ javac –modulepath dir1:dir2:dir3
  • 35. © 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
  • 36. © 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
  • 37. © Copyright Azul Systems 2016 Module Diagnostics $ java –Xdiag:resolver –mp mods –m com.azul.zoop/com.azul.zoop.Main
  • 38. © 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
  • 39. © 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
  • 40. © Copyright Azul Systems 2016 Application Execution (JAR) $ java –mp myLib:mods –m com.azul.zoop.Main Azul application initialised!
  • 41. © 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
  • 42. © 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
  • 43. © Copyright Azul Systems 2016 Application Migration
  • 44. © Copyright Azul Systems 2016 Typical Application (JDK 8) jar jar jar JDK jar jarjar jar jar jar jar jar jar
  • 45. © 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
  • 46. © 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
  • 47. © 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
  • 48. © 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
  • 49. © 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; ???? }
  • 50. © 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
  • 51. © 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
  • 52. © 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
  • 53. © 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
  • 54. © Copyright Azul Systems 2016 Summary & Further Information
  • 55. © 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
  • 56. © 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
  • 57. © Copyright Azul Systems 2016 Further Information § openjdk.java.net § openjdk.java.net/jeps § openjdk.java.net/projects/jigsaw § jcp.org 55
  • 58. © Copyright Azul Systems 2016 © Copyright Azul Systems 2015 @speakjava azul.com Questions Simon Ritter Deputy CTO, Azul Systems 56
  • 59. Watch the video with slide synchronization on InfoQ.com! http://www.infoq.com/presentations/ jigsaw-jdk-9