keeping up with java - goto conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb jvm...

35
By Sander Mak Keeping up @Sander_Mak with Java

Upload: others

Post on 05-Jun-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

By Sander Mak

Keeping up

@Sander_Makwith Java

Page 2: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

About SanderFellow, Software Architect

@ Luminis

Experience in modular development stacks

Conference Speaker & Author

Page 3: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Java

9(Sept. 2017)

Page 4: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Quick Java Module Overview

Page 5: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Modules

Packages

Classes

Methods

What's a Module?

10 PRINT "REALLY?!"; 20 GOTO 10;

Page 6: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

module main { }

module-info.java

Module Declarations

main.web main.persistence main.integration

main

Page 7: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

module main { requires helper; }

module-info.java

module helper {

}

module-info.java

helper

Explicit Dependencies

main.web main.persistence main.integration

main

Page 8: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

module main { requires helper; }

module helper { exports helper.api;

}

module-info.java module-info.java

helper.api

helper

Well-defined Interfaces

main.web main.persistence main.integration

main

Page 9: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

module main { requires helper; }

module helper { exports helper.api;

}

module-info.java module-info.java

helper.api

helper.impl

helper

Strong Encapsulation

main.web main.persistence main.integration

main

Page 10: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

module main { requires helper; }

module helper { exports helper.api; opens helper.impl; }

module-info.java module-info.java

helper.api

helper.impl

helper

Open for Run-time Reflection

main.web main.persistence main.integration

main

Page 11: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Demo: EasyText

easytext.cli

easytext.analysis

Page 12: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Why?Modular JDKMaintainability

Reliable compositionFlexibility

Page 13: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

quick refresher why/advantages

(JDK: modularized, your app: architecture from whiteboard to code, explicit dependencies in language, strong encapsulation, jlink

Why?

Decrease the model-code gap

Page 14: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

IoT Device

jlink

+main

lib1 lib2

jdk ~300mb

application ~2mb

JVM

main

lib1 lib2

java.base

java.logging

java.xml

Custom Run-time Image

~25mb

Page 15: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Impact on Java 8 codebasesUse of encapsulated JDK types:

Run-time warningsCompile-time errors

Use of enterprise APIs in JDK:Won't resolve by defaultGone in Java 11!

java.corba java.xml.bind java.xml.ws.* java.activation java.transaction

Page 16: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

R

jshell

EPL

eadvalrintoop

Input codeRun codeSee resultsIteratively refine

Page 17: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

jshell

DEMO

Page 18: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

List<String> books = new ArrayList<>(); books.add("Java 9 Modularity"); books.add("Designing Data-Intensive Applications"); books.add("Java 8 Lambdas");

Collection Factory Methods

Page 19: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Collection Factory Methods

List<String> books = List.of("Java 9 Modularity", "Designing Data-Intensive Applications", "Java 8 Lambdas");

Set.of Map.of

Page 20: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Java

10(March 2018)

Page 21: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

var

String name = "Sander"; public void aMethod() { String name = "Sander"; }

public void aMethod() { var name = "Sander"; }

Page 22: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

var

URL url = new URL("https://javamodularity.com"); URLConnection connection = url.openConnection(); BufferedInputStream inputStream = new BufferedInputStream(connection.getInputStream());

var bookurl = new URL("https://javamodularity.com"); var connection = bookurl.openConnection(); var bookStream = new BufferedInputStream(connection.getInputStream());

DEMO

Page 23: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Java

11(Sept. 2018)

Page 24: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

HttpClient

HttpURLConnectionHTTP/2 & WebSocketReactive Streams Support

Page 25: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

HttpClient

send sendAsync ...

HttpClient.Builder

HttpRequest

uri headers method ...

HttpRequest.Builder

HttpResponse

uri statusCode body ...newBuilder

newBuilder

HttpClient

Page 26: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

HttpClient

HttpClient httpClient = HttpClient.newHttpClient();

HttpRequest req = HttpRequest.newBuilder(URI.create("https://google.com")) .GET() .build();

HttpResponse<String> response = httpClient.send(req, BodyHandlers.ofString())

Page 27: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Java

12(March 2019)

Page 28: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Switch Statements

int numletters; switch (day) { case MONDAY: FRIDAY: SUNDAY: numletters = 6; break; case TUESDAY: numletters = 7; break; case THURSDAY: SATURDAY: numletters = 8; break; case WEDNESDAY: numletters = 9; break; }

Page 29: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Preview Feature: Switch Expression

int numLetters = switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9; };

Page 30: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Let's Talk About Adoption

Page 31: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

https://jaxenter.com/java-8-still-strong-java-10-142642.html

https://www.baeldung.com/java-in-2018https://www.jetbrains.com/research/devecosystem-2018/java/

Java Magazine & Snyk

Page 32: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Java 11

Long Term Support

Java 9

Java 10

Java 12

Java 13

6 months

Java 11 Java 11 LTS

minimum 3 years

Page 33: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Which JDK?

JDK 11 changes the game

Page 34: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

@Sander_Mak

Oracle JDK 8Binary Code License

Oracle JDK 11Java SE Subscription

$

OpenJDK 11GPL v2

Amazon CorrettoAdoptOpenJDKRed Hat OpenJDK

=

Page 35: Keeping up with Java - GOTO Conference · 2019-06-19 · lib1 lib2 jdk ~300mb application ~2mb JVM main lib1 lib2 java.base java.logging java.xml Custom Run-time Image ~25mb @Sander_Mak

Thanks. Read More: javamodularity.com

@Sander_Mak

bit.ly/ps-sander