jigsaw - jug karlsruhejug-karlsruhe.de/assets/slides/jigsaw_trossbach.pdf · modules can provide...

22
Project Jigsaw_ Florian Troßbach

Upload: others

Post on 23-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Project Jigsaw_Florian Troßbach

Page 2: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

whoami

• codecentric Karlsruhe

• Plain Old Java Dev

• Currently trying to tame the SMACK stack

2

Page 3: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Services

3

Page 4: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Modules can provide services

• java.util.ServiceLoader

4

Page 5: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Modules can provide services

• Modules provide service implementations

• Other modules can use services

• ServiceLoader finds all implementations on the module path

• No dependency on the providing modules needed => decoupling!

5

Page 6: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Example

6

module org.codefx.demo.advent { // list the required modules requires org.codefx.demo.advent.calendar; // list the used services uses org.codefx.demo.advent.surprise.SurpriseFactory; }

module org.codefx.demo.advent.factory.quote { requires public org.codefx.demo.advent.surprise; // specify which class provides which service provides org.codefx.demo.advent.surprise.SurpriseFactory with org.codefx.demo.advent.factory.quote.QuoteFactory; }

Page 7: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Example

7

Diagram by Nicolai Parlog, http://blog.codefx.org/java/dev/jigsaw-hands-on-guide/

Page 8: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Working with non-modular code

8

Page 9: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Non-modular code

• Using libraries

• Spring, Guava, …

• your internal library

• Using modular code from non-modular code

9

Automatic modules

Unnamed module

Page 10: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Automatic modules

What is the name of an automatic module?

• The name of the jar • guava.jar => “guava”

• guava-19.0.jar

10

Page 11: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Automatic modules

What does an automatic module export?

• All its packages • => All public types

11

Page 12: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Automatic modules

What does an automatic module require?

• All exports of all modules on the module path

• All public types in the unnamed module

12

Page 13: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

The unnamed module

What is the name of the unnamed module?

• Any guesses?

13

Page 14: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

The unnamed module

What does the unnamed module export?

• All its packages

• requires unnamed;

14

Page 15: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

The unnamed module

What does an the unnamed module require?

• All exports of all modules on the module path

15

Page 16: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Named Modules

Overview

16

[..].advent

java.base

[..].advent.surprise

guava

Unnamed module

commons-io-2.4.0.jar

commons-lang.jar

Page 17: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Example

17

Page 18: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Breaking Jigsaw - Live

18

Page 19: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

jlink

19

Page 20: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Build your own JRE!

• Create your own Java runtime

• Pick which modules to include

• Can lead to really small distributions (< 15 MB)

20

Page 21: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Example

21

Page 22: Jigsaw - JUG Karlsruhejug-karlsruhe.de/assets/slides/Jigsaw_Trossbach.pdf · Modules can provide services • Modules provide service implementations • Other modules can use services

Resources

• https://github.com/ftrossbach/demo-jigsaw-advent-calendar

• Mark Reinhold, “The State of the Module System”

• http://openjdk.java.net/projects/jigsaw/spec/sotms/

• Nicolai Parlog’s posts on Jigsaw

• http://blog.codefx.org/tag/project-jigsaw/

• My blog posts on Jigsaw

• https://blog.codecentric.de/en/2015/11/first-steps-with-java9-jigsaw-part-1/

• https://blog.codecentric.de/en/2015/12/first-steps-with-java9-jigsaw-part-2/

22