Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ......

33
By Sander Mak Java 9 Modularity in Action @Sander_Mak

Transcript of Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ......

Page 1: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

By Sander Mak

Java 9 Modularity in Action

@Sander_Mak

Page 2: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Today's journey

Modularity matters

Java 9 modules

Services

Linking

Page 3: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Modularity matters

Modularity is the ultimate agile tool

Page 4: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Good fences make good neighbours

Hide your internals!

Service contract

Module

Page 5: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Work in progress, but almost there!

Java 9: Jigsaw, JSR-376

Page 6: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Goals‣ Modularise the JDK ‣ Reliable application composition ‣ Strong encapsulation - hide platform internals ‣ Improved security

Current status‣ JDK 9 modularised ‣ JSR 376 prototype (Jigsaw) ‣ Spec almost complete

Page 7: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

History of Jigsaw

JSR-277 Java Module System

2005 2006 2011 2014

JSR-294 Improved Modularity Support

Java 7: No Jigsaw

Java 8: No Jigsaw

JSR-376 Java Platform Module System

JSR-291 'OSGi 4.1'

Page 8: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

JEP 200: The Modular JDK

Page 9: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Goodbye classpathReliable configuration

Page 10: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Goodbye classpathModules with explicit dependencies

my.modulerequires

other.module

Page 11: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Strong encapsulationHide your internals

java.base java.lang java.time java.util

com.sun.* sun.*

jdk.internal.*

my.modulerequires

Access checks at VM level (even reflection)

Page 12: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Why not just use OSGi?‣ OSGi is built on top of the JVM ‣ Can’t be used to modularise the JDK itself

Page 13: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Why not just use OSGi?‣ OSGi is built on top of the JVM ‣ Can’t be used to modularise the JDK itself

Why not only modularise the JDK?‣ Fair point :-) ‣ OSGi has never seen mass adoption, Java 9 will

bring modularity to all of us

Page 14: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Demo: EasyTextAnalyze text complexity

easytext.cli

easytext.analyis

requires

Page 15: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Contracts & Services

MyInterface i = new MyImpl();

How to use code that you can’t access?

Page 16: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Contracts & Services

Provider module

Service Registry

Consumer module

Register service

Lookup service

Return service

instance

Use an interface as contract

Page 17: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

JSR-376 services module myApi { exports com.api; }

Page 18: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

JSR-376 services module myApi { exports com.api; }

module myConsumer { requires myApi; uses com.api.MyService; }

Page 19: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

JSR-376 services module myApi { exports com.api; }

‣ Services resolved and wired by modular runtime ‣ Use with 'enhanced' ServiceLoader API

module myConsumer { requires myApi; uses com.api.MyService; }

module myProvider { requires myApi; provides com.api.MyService with myProvider.MyServiceImpl; }

Page 20: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

JSR-376 services module myApi { exports com.api; }

‣ Services resolved and wired by modular runtime ‣ Use with 'enhanced' ServiceLoader API

module myConsumer { requires myApi; uses com.api.MyService; }

module myProvider { requires myApi; provides com.api.MyService with myProvider.MyServiceImpl; }

Iterable<MyService> services = ServiceLoader.load(MyService.class);

for(MyService svc: services) { svc.doSomething(); }

Page 21: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

ExtensibilityDemo: EasyText

Page 22: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Extensibility

Multiple algorithms: ‣ Flesch-Kincaid ‣ Coleman-Liau

Demo: EasyText

Page 23: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Extensibility

CLI & GUI?

Multiple algorithms: ‣ Flesch-Kincaid ‣ Coleman-Liau

Demo: EasyText

Page 24: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

easytext.algorithm.api

easytext.algorithm.kincaid

easytext.algorithm.coleman

easytext.cli

easytext.gui

Demo: EasyText

javafx.controls

JDKApplication

javafx.graphics

Page 25: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

easytext.algorithm.api

easytext.algorithm.kincaid

easytext.algorithm.coleman

easytext.cli

easytext.gui

Demo: EasyText

javafx.controls

JDKApplication

ServiceLoader

javafx.graphics

Page 26: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

JSR-376 linking‣ Use a linking tool (jlink) to create a custom 'runtime

image' with only the modules you need ‣ Uses explicit dependencies from module-info.class ‣ Allows for whole-program optimization

Runtime image

jdk.base

jdk.desktop

my.mod1

my.mod2

JVM

Page 27: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Demo: EasyText linking

Page 28: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

‣ JSR-376 forces module-aware tooling ‣ Modularity throughout all

development phases

Java 9's promise

Page 29: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

‣ JSR-376 forces module-aware tooling ‣ Modularity throughout all

development phases

Java 9's promise

Spotlight on modularity == good

Page 30: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Thank you.

bit.ly/java9book @javamodularity

Page 31: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Thank you.

bit.ly/java9book @javamodularity

40/50% discount: AUTHD

Page 32: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

Thank you.

bit.ly/java9book @javamodularity

Migrating to Java 9 Modules

Tomorrow, Wintergarten 9:00

40/50% discount: AUTHD

Page 33: Java 9 Modularity in Action - Home: DOAG e.V.€¦ · Java 9 Modularity in Action @Sander_Mak. ... Hide your internals! Service contract Module. ... JVM. Demo: EasyText linking

bit.ly/java9book @javamodularity

http://bit.ly/java9course

Java 9 Modularity: First Look

Thank you.