SlideShare a Scribd company logo
CZEGO OCZEKIWAĆ OD MODUŁÓW W JAVIE 9
Piotr Kubowicz @pkubowicz
PLAN PODRÓŻY
1. Czym w Javie będą moduły?
2. Moduły a mikroserwisy
3. Moduły a biblioteki i monolity
4. Wsparcie w IDE (IntelliJ Idea)
5. Narzędzia do budowania
6. Jak przygotować się już teraz
PROJECT JIGSAW
(grudzień 2014)
cele
niezawodność: jasne zależności
mocna enkapsulacja: ukrywanie publicznych
typów
zastosowanie
wewnętrzna struktura runtime'u Javy
kod użytkownika
długa historia
CZYM JEST MODUŁ
module example.greeter.protocol {
requires java.base;
requires guava;
exports example.greeter.protocol;
}
ORGANIZACJA JRE
java.base (najpewniej jest tu każda klasa, o której
pomyślisz)
java.logging
java.management (JMX)
java.instrument
java.corba :)
razem ponad 70
NIE TRZEBA UŻYWAĆ MODUŁÓW
Kod można uruchamiać "po staremu" - przez classpath.
Działa np. Tomcat 8, ElasticSearch 2.4
JAK DEKLAROWAĆ MODUŁ
moduł to JAR z plikiem module-info.class
tworzymy src/main/java/module-info.java
takiego pliku nie da się skompilować przy
-source 1.8
po skompilowaniu takiego JAR-a nie wczyta Java 8
MODUŁY W MIKROSERWISACH
- tworzy z modułów custom runtime image
custom-jre/bin/java -m moduł/klasa
jlink
build/custom-jre:
bin conf include legal lib release
build/custom-jre/bin:
java keytool
build/custom-jre/lib:
classlist jrt-fs.jar libjimage.so libnio.so modules tzdb.dat
jexec jvm.cfg libjsig.so libverify.so security
jli libjava.so libnet.so libzip.so server
MODUŁY W MIKROSERWISACH
np. Docker z prostym serwerem HTTP z OpenJDK 8
na Debianie Jessie: 310 MB
to samo zlinkowane z Javą 9: 199 MB
OpenJDK 8 na Alpine Linuksie: 81 MB
Alpine + Java 9: 35-41 MB
bez Dockera: katalog 30 MB, .tar.bz2 15 MB
MODUŁY W MIKROSERWISACH
Weźmy prawdziwy serwer, ale lekki np. Undertow
( )
java.base, java.naming, java.security.jgss, java.sql,
java.logging, java.management, java.security.sasl
Custom JRE: 37 MB
czołówka wydajności
JAK WYCIĄGNĄĆ ZALEŻNOŚCI?
(ale nie z JDK 8)jdeps
% jdeps -summary --class-path 
xnio-api-3.3.6.Final.jar:jboss-logging-3.2.1.Final.jar 
undertow-core-2.0.0.Alpha1.jar
undertow-core-2.0.0.Alpha1.jar -> java.sql
undertow-core-2.0.0.Alpha1.jar -> jdk.unsupported
% jdeps -verbose:class undertow-core-2.0.0.Alpha1.jar
io.undertow.util.FastConcurrentDirectDeque -> sun.misc.Unsafe
JDK internal API (jdk.unsupported)
MODUŁY DLA MONOLITÓW
pisząc moduł udostępniamy klientom tylko te
publiczne klasy, które wybierzemy
resztę możemy zmieniać jak chcemy i mamy
gwarancję, że nic nie popsujemy klientom
exports example.greeter.protocol;
MODUŁY DLA MONOLITÓW
klienci nie widzą naszych zależności
możemy je dodawać i usuwać jak chcemy
zależność to część naszego API - udostępniamy ją
klientom
requires guava;
requires transitive guava;
WSPARCIE IDE
Idea od
sugeruje mody kacje w module-info.java
ale też ciągle podpowiada nieeksportowane klasy
Eclipse -
2017.1
podobno
URUCHAMIANIE Z MODUŁAMI
Zamiast
uruchamiamy
java -cp build/modules/greeter-protocol.jar:
build/modules/greeter-server.jar example.greeter.server.Runner
java --module-path build/modules -m example.greeter.server/
example.greeter.server.Runner
WERYFIKACJA PRZY URUCHAMIANIU
Error occurred during initialization of boot layer
java.lang.module.FindException: Module example.greeter.protocol
not found, required by example.greeter.server
ZALEŻNOŚCI Z JAVY 8 JAKO MODUŁY
Automatyczne moduły - JAR wrzucony do module path
staje się modułem.
Nazwa modułu z nazwy pliku: guava-21.0.jar ->
guava
PROBLEMY Z MODUŁAMI
zakaz split packages - dany pakiet tylko w 1 module,
nawet nieeksportowany
wiele bibliotek nie było pisanych z taką myślą
Jigsaw nie zajmuje się kon iktem wersji, to zadanie
Gradle'a/Mavena
możliwe NoClassDefFoundError lub
NoSuchMethodError w runtimie
KIEDY BIBLIOTEKI BĘDĄ MODUŁAMI?
nieprędko
Spring 5.0 M5 - kompatybilny z Javą 9, na razie bez
module-info
BUDOWANIE
Gradle - jeszcze nie da się skompilować modułów
Maven - chyba da się
MODUŁY BEZ JAVY 9
Java Library Plugin w Gradle'u
nowy, promowany sposób kompilowania Javy
Java Software Model
eksperymentalny, brak wsparcia w IDE
dodatkowo
ukrywanie zależności przed klientami
ukrywanie publicznych klas przed
klientami
DO SAMODZIELNEGO CZYTANIA
- zaawansowane
tematy; nieaktualna składnia!
+
http://docs.oracle.com/javase/9/migrate/toc.htm
http://openjdk.java.net/projects/jigsaw/quick-start
slajdy The Java 9 Module System In Action
Advanced Modular Development na Java One 2016
The State of the Module System
aktualny format deklaracji modułu
Modules vs. microservices
RedHat strzela focha odpowiedź
POMYŚL O MODUŁACH W TWOIM SYSTEMIE
KOD I SLAJDY
Prezentacja na licencji
Gra ka , CC BY 2.0
github.com/pkubowicz/java9-link
slideshare.net/PiotrKubowicz1
Creative Commons Attribution 4.0 International
Willi Heidelbach

More Related Content

Similar to Czego oczekiwać od modułów w Javie 9

Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Krzysztof Synak
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Grzegorz Bartman
 
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.js
Wojciech Kaniuka
 
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVCWzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Quick-Solution
 
Środowisko testowe pod REST-a
Środowisko testowe pod REST-aŚrodowisko testowe pod REST-a
Środowisko testowe pod REST-a
Future Processing
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
qbeuek
 
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
tkryskiewicz
 
Interfejs użytkownika w aplikacji mobilnej - LWUIT
Interfejs użytkownika w aplikacji mobilnej - LWUITInterfejs użytkownika w aplikacji mobilnej - LWUIT
Interfejs użytkownika w aplikacji mobilnej - LWUIT
Dariusz Walczak
 
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?
Quick-Solution
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
Tomasz Borowski
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
Sages
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous Delivery
XSolve
 
WEBINAR 3 # Pierwszy test automatyczny
WEBINAR 3 # Pierwszy test automatycznyWEBINAR 3 # Pierwszy test automatyczny
WEBINAR 3 # Pierwszy test automatyczny
testuj.pl
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologią
MarcinStachniuk
 
mod_perl. Podręcznik programisty
mod_perl. Podręcznik programistymod_perl. Podręcznik programisty
mod_perl. Podręcznik programisty
Wydawnictwo Helion
 
INVOKEDYNAMIC - bardziej dynamiczna JVM (Confitura 2012)
INVOKEDYNAMIC - bardziej dynamiczna JVM (Confitura 2012)INVOKEDYNAMIC - bardziej dynamiczna JVM (Confitura 2012)
INVOKEDYNAMIC - bardziej dynamiczna JVM (Confitura 2012)
Waldek Kot
 
Automatyczne testy end-to-end aplikacji JavaScript.
Automatyczne testy end-to-end aplikacji JavaScript.Automatyczne testy end-to-end aplikacji JavaScript.
Automatyczne testy end-to-end aplikacji JavaScript.
Future Processing
 
Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0
Maciej Zbrzezny
 
Szybkie prototypowanie i development we VueJS
Szybkie prototypowanie i development we VueJSSzybkie prototypowanie i development we VueJS
Szybkie prototypowanie i development we VueJS
The Software House
 
Ciągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieCiągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - Wprowadzenie
Artur Radosz
 

Similar to Czego oczekiwać od modułów w Javie 9 (20)

Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
 
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.js
 
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVCWzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
 
Środowisko testowe pod REST-a
Środowisko testowe pod REST-aŚrodowisko testowe pod REST-a
Środowisko testowe pod REST-a
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
 
Interfejs użytkownika w aplikacji mobilnej - LWUIT
Interfejs użytkownika w aplikacji mobilnej - LWUITInterfejs użytkownika w aplikacji mobilnej - LWUIT
Interfejs użytkownika w aplikacji mobilnej - LWUIT
 
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous Delivery
 
WEBINAR 3 # Pierwszy test automatyczny
WEBINAR 3 # Pierwszy test automatycznyWEBINAR 3 # Pierwszy test automatyczny
WEBINAR 3 # Pierwszy test automatyczny
 
Java Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologiąJava Web Start – jak żyć z tą dziwną technologią
Java Web Start – jak żyć z tą dziwną technologią
 
mod_perl. Podręcznik programisty
mod_perl. Podręcznik programistymod_perl. Podręcznik programisty
mod_perl. Podręcznik programisty
 
INVOKEDYNAMIC - bardziej dynamiczna JVM (Confitura 2012)
INVOKEDYNAMIC - bardziej dynamiczna JVM (Confitura 2012)INVOKEDYNAMIC - bardziej dynamiczna JVM (Confitura 2012)
INVOKEDYNAMIC - bardziej dynamiczna JVM (Confitura 2012)
 
Automatyczne testy end-to-end aplikacji JavaScript.
Automatyczne testy end-to-end aplikacji JavaScript.Automatyczne testy end-to-end aplikacji JavaScript.
Automatyczne testy end-to-end aplikacji JavaScript.
 
Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0Wprowadzenie do MEF w .NET 4.0
Wprowadzenie do MEF w .NET 4.0
 
Szybkie prototypowanie i development we VueJS
Szybkie prototypowanie i development we VueJSSzybkie prototypowanie i development we VueJS
Szybkie prototypowanie i development we VueJS
 
Ciągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieCiągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - Wprowadzenie
 

More from Piotr Kubowicz

Mutation testing: Too good to be true? (Devoxx)
Mutation testing: Too good to be true? (Devoxx)Mutation testing: Too good to be true? (Devoxx)
Mutation testing: Too good to be true? (Devoxx)
Piotr Kubowicz
 
Mutation testing: Too good to be true? (4Developers)
Mutation testing: Too good to be true? (4Developers)Mutation testing: Too good to be true? (4Developers)
Mutation testing: Too good to be true? (4Developers)
Piotr Kubowicz
 
Lotny start z testami kontraktowymi 4Developers
Lotny start z testami kontraktowymi 4DevelopersLotny start z testami kontraktowymi 4Developers
Lotny start z testami kontraktowymi 4Developers
Piotr Kubowicz
 
Po co nam RSocket?
Po co nam RSocket?Po co nam RSocket?
Po co nam RSocket?
Piotr Kubowicz
 
Lotny start z testami kontraktowymi
Lotny start z testami kontraktowymiLotny start z testami kontraktowymi
Lotny start z testami kontraktowymi
Piotr Kubowicz
 
Flying Start into Contract Testing
Flying Start into Contract TestingFlying Start into Contract Testing
Flying Start into Contract Testing
Piotr Kubowicz
 
Problem sprytnego programisty
Problem sprytnego programistyProblem sprytnego programisty
Problem sprytnego programisty
Piotr Kubowicz
 
Programista wychodzi z piwnicy
Programista wychodzi z piwnicy Programista wychodzi z piwnicy
Programista wychodzi z piwnicy
Piotr Kubowicz
 

More from Piotr Kubowicz (8)

Mutation testing: Too good to be true? (Devoxx)
Mutation testing: Too good to be true? (Devoxx)Mutation testing: Too good to be true? (Devoxx)
Mutation testing: Too good to be true? (Devoxx)
 
Mutation testing: Too good to be true? (4Developers)
Mutation testing: Too good to be true? (4Developers)Mutation testing: Too good to be true? (4Developers)
Mutation testing: Too good to be true? (4Developers)
 
Lotny start z testami kontraktowymi 4Developers
Lotny start z testami kontraktowymi 4DevelopersLotny start z testami kontraktowymi 4Developers
Lotny start z testami kontraktowymi 4Developers
 
Po co nam RSocket?
Po co nam RSocket?Po co nam RSocket?
Po co nam RSocket?
 
Lotny start z testami kontraktowymi
Lotny start z testami kontraktowymiLotny start z testami kontraktowymi
Lotny start z testami kontraktowymi
 
Flying Start into Contract Testing
Flying Start into Contract TestingFlying Start into Contract Testing
Flying Start into Contract Testing
 
Problem sprytnego programisty
Problem sprytnego programistyProblem sprytnego programisty
Problem sprytnego programisty
 
Programista wychodzi z piwnicy
Programista wychodzi z piwnicy Programista wychodzi z piwnicy
Programista wychodzi z piwnicy
 

Czego oczekiwać od modułów w Javie 9

  • 1. CZEGO OCZEKIWAĆ OD MODUŁÓW W JAVIE 9 Piotr Kubowicz @pkubowicz
  • 2. PLAN PODRÓŻY 1. Czym w Javie będą moduły? 2. Moduły a mikroserwisy 3. Moduły a biblioteki i monolity 4. Wsparcie w IDE (IntelliJ Idea) 5. Narzędzia do budowania 6. Jak przygotować się już teraz
  • 3. PROJECT JIGSAW (grudzień 2014) cele niezawodność: jasne zależności mocna enkapsulacja: ukrywanie publicznych typów zastosowanie wewnętrzna struktura runtime'u Javy kod użytkownika długa historia
  • 4. CZYM JEST MODUŁ module example.greeter.protocol { requires java.base; requires guava; exports example.greeter.protocol; }
  • 5. ORGANIZACJA JRE java.base (najpewniej jest tu każda klasa, o której pomyślisz) java.logging java.management (JMX) java.instrument java.corba :) razem ponad 70
  • 6. NIE TRZEBA UŻYWAĆ MODUŁÓW Kod można uruchamiać "po staremu" - przez classpath. Działa np. Tomcat 8, ElasticSearch 2.4
  • 7. JAK DEKLAROWAĆ MODUŁ moduł to JAR z plikiem module-info.class tworzymy src/main/java/module-info.java takiego pliku nie da się skompilować przy -source 1.8 po skompilowaniu takiego JAR-a nie wczyta Java 8
  • 8. MODUŁY W MIKROSERWISACH - tworzy z modułów custom runtime image custom-jre/bin/java -m moduł/klasa jlink build/custom-jre: bin conf include legal lib release build/custom-jre/bin: java keytool build/custom-jre/lib: classlist jrt-fs.jar libjimage.so libnio.so modules tzdb.dat jexec jvm.cfg libjsig.so libverify.so security jli libjava.so libnet.so libzip.so server
  • 9. MODUŁY W MIKROSERWISACH np. Docker z prostym serwerem HTTP z OpenJDK 8 na Debianie Jessie: 310 MB to samo zlinkowane z Javą 9: 199 MB OpenJDK 8 na Alpine Linuksie: 81 MB Alpine + Java 9: 35-41 MB bez Dockera: katalog 30 MB, .tar.bz2 15 MB
  • 10. MODUŁY W MIKROSERWISACH Weźmy prawdziwy serwer, ale lekki np. Undertow ( ) java.base, java.naming, java.security.jgss, java.sql, java.logging, java.management, java.security.sasl Custom JRE: 37 MB czołówka wydajności
  • 11. JAK WYCIĄGNĄĆ ZALEŻNOŚCI? (ale nie z JDK 8)jdeps % jdeps -summary --class-path xnio-api-3.3.6.Final.jar:jboss-logging-3.2.1.Final.jar undertow-core-2.0.0.Alpha1.jar undertow-core-2.0.0.Alpha1.jar -> java.sql undertow-core-2.0.0.Alpha1.jar -> jdk.unsupported % jdeps -verbose:class undertow-core-2.0.0.Alpha1.jar io.undertow.util.FastConcurrentDirectDeque -> sun.misc.Unsafe JDK internal API (jdk.unsupported)
  • 12. MODUŁY DLA MONOLITÓW pisząc moduł udostępniamy klientom tylko te publiczne klasy, które wybierzemy resztę możemy zmieniać jak chcemy i mamy gwarancję, że nic nie popsujemy klientom exports example.greeter.protocol;
  • 13. MODUŁY DLA MONOLITÓW klienci nie widzą naszych zależności możemy je dodawać i usuwać jak chcemy zależność to część naszego API - udostępniamy ją klientom requires guava; requires transitive guava;
  • 14. WSPARCIE IDE Idea od sugeruje mody kacje w module-info.java ale też ciągle podpowiada nieeksportowane klasy Eclipse - 2017.1 podobno
  • 15. URUCHAMIANIE Z MODUŁAMI Zamiast uruchamiamy java -cp build/modules/greeter-protocol.jar: build/modules/greeter-server.jar example.greeter.server.Runner java --module-path build/modules -m example.greeter.server/ example.greeter.server.Runner
  • 16. WERYFIKACJA PRZY URUCHAMIANIU Error occurred during initialization of boot layer java.lang.module.FindException: Module example.greeter.protocol not found, required by example.greeter.server
  • 17. ZALEŻNOŚCI Z JAVY 8 JAKO MODUŁY Automatyczne moduły - JAR wrzucony do module path staje się modułem. Nazwa modułu z nazwy pliku: guava-21.0.jar -> guava
  • 18. PROBLEMY Z MODUŁAMI zakaz split packages - dany pakiet tylko w 1 module, nawet nieeksportowany wiele bibliotek nie było pisanych z taką myślą Jigsaw nie zajmuje się kon iktem wersji, to zadanie Gradle'a/Mavena możliwe NoClassDefFoundError lub NoSuchMethodError w runtimie
  • 19. KIEDY BIBLIOTEKI BĘDĄ MODUŁAMI? nieprędko Spring 5.0 M5 - kompatybilny z Javą 9, na razie bez module-info
  • 20. BUDOWANIE Gradle - jeszcze nie da się skompilować modułów Maven - chyba da się
  • 21. MODUŁY BEZ JAVY 9 Java Library Plugin w Gradle'u nowy, promowany sposób kompilowania Javy Java Software Model eksperymentalny, brak wsparcia w IDE dodatkowo ukrywanie zależności przed klientami ukrywanie publicznych klas przed klientami
  • 22. DO SAMODZIELNEGO CZYTANIA - zaawansowane tematy; nieaktualna składnia! + http://docs.oracle.com/javase/9/migrate/toc.htm http://openjdk.java.net/projects/jigsaw/quick-start slajdy The Java 9 Module System In Action Advanced Modular Development na Java One 2016 The State of the Module System aktualny format deklaracji modułu Modules vs. microservices RedHat strzela focha odpowiedź
  • 23. POMYŚL O MODUŁACH W TWOIM SYSTEMIE
  • 24. KOD I SLAJDY Prezentacja na licencji Gra ka , CC BY 2.0 github.com/pkubowicz/java9-link slideshare.net/PiotrKubowicz1 Creative Commons Attribution 4.0 International Willi Heidelbach