Top Banner
Alexis Hassler Jigsaw est prêt à tuer le classpath octobre 2016
78

Soft-Shake 2016 : Jigsaw est prêt à tuer le classpath

Apr 15, 2017

Download

Technology

Alexis Hassler
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Alexis Hassler

Jigsaw est prêt à tuer le

classpath

octobre 2016

Page 2: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

"Classpath is dead!"

Mark ReinholdJavaOne 2009

Page 3: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

ClasspathClassloader

Mort ?

SuccessionJigsaw

Page 4: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Alexis Hassler

Développeur

Formateur

Indépendant

Fondateur

Préparateur de

Page 5: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Classpath

Page 6: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

String hello = "Salut à vous tous les zazous";

Chercher les classes

CLASSPATH

Hello var = new Hello();

Page 7: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

-classpath

java -cp hello-lib.jar HelloWorld

Page 8: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Erreurs

java.lang.NoClassDefFoundError

java.lang.ClassNotFoundException

Page 9: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Classloader

Page 10: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

java.lang.ClassLoader

loadClass(String name) : Class<?>

getResource(String name) : URLgetResourceAsStream(String name) : InputStream

getParent() : ClassLoader

Page 11: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Classloader

sun.misc.Launcher$AppClassLoader

CLASSPATH

Hello.class.getClassLoader()

Page 12: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Classloader

null

Hello.class.getClassLoader()

.getClass().getClassLoader()

Page 13: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Bootstrap Classloader

BootstrapClassLoader

Page 14: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Délégation

BootstrapClassLoader

Parent first

System ClassLoader

Page 15: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Délégation

java -cp hello-lib.jar ...

System ClassLoader

Page 16: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

BootstrapClassLoader

bootclasspath

java -Xbootclasspath/p:hello-lib.jar ...

java -Xbootclasspath:hello-rt.jar ...

java -Xbootclasspath/a:hello-lib.jar ...

Page 17: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

https://github.com/hasalex/classpath-demo

Page 18: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

DémonstrationBootstrapClassLoader

java -cp example.jar fr.sewatech.classpath.Count

System ClassLoader

java.lang.Integer

example.jar

java.lang.Integer

Page 19: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

example.jar

Démonstration

java  -Xbootclasspath/p:example.jar  fr.sewatech.classpath.Count

java.lang.Integer

BootstrapClassLoader

java.lang.Integer

Page 20: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

URLClassloader

java.net.URLClassLoader

sun.misc.Launcher$AppClassLoader

URLURLURL

Page 21: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

URLClassloader

System ClassLoader

Bootstrap ClassLoader

URL ClassLoader

URL ClassLoader

URL ClassLoader

Parentfirst

Parentfirst

Parentfirst

Page 22: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

FLTM Classloader

Fait Le Toi-Même

Page 23: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Usages

Application Servers

JRebel

Javassist, CGLib,...

Page 24: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Tomcat

System

Bootstrap

Common

Webapp1

Webapp2

Webapp3

Local First

Page 25: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

message-launcher

message-main

message-common

message-printer

message-service

Page 26: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Démonstration

message-launcher

message-common

message-printer

message-service

message-service

System ClassLoader ParentFirst ClassLoader

Page 27: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Démonstration

message-launcher

message-common

message-printer

message-service

message-service

System ClassLoader LocalFirst ClassLoader

Page 28: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Mort ?

Page 29: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

http://www.ironmaidenwallpaper.com/

Page 30: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Dépendances

Maven, Gradle,...

Page 31: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Dépendances

Classpath

Page 32: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

https://github.com/hasalex/classpath-demo

Page 33: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Démonstration

slf4j-api 1.5.11

slf4j-api 1.7.2

message-launcher

message-main

message-common

message-printer

message-service

Page 34: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Granularité

SécuritéApache commons-collections

https://foxglovesecurity.com/

Page 35: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Succession

Page 36: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Modularité

Dépendance

Exposition

Lecture

Page 37: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

1999

Java embarquéJava SEJava serveur

Page 38: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Bundle-Name = Simple Bundle

Bundle-SymbolicName = simple-bundle

Bundle-Description = Simple Bundle

Bundle-Version = 1.0.1

Export-Package = fr.sewatech.mystuff.services

Import-Package = org.osgi.framework;version=1.3

OSGi

Bundle

Page 39: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

OSGi

OS + Hardware

Java Runtime

Module

Life Cycle Services

Page 40: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

JBoss Modules

Sous-projet de

Inspiré de Jigsaw (version 2010)

Base de JBoss OSGi

Page 41: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

JBoss Modules

java -jar jboss-modules.jar -mp path/to/modules

my.main.module.name

WildFly / JBoss EAP

Java SE

Page 42: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

JBoss Modules

hibernate-infinispan-4.1.6.Final.jar

module.xml

hibernate-core-4.1.6.Final.jar

hibernate-entitymanager-4.1.6.Final.jar

modules

com

fr

org

...

org

hibernate

main

Page 43: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

JBoss Modules

module.xml

resource

resource

resource

dependency slot

dependency slot

dependency slot

name slot

Page 44: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Jigsaw

Projet OpenJDK

Intégré au JDK 7 (2008)

9 (2016)

8 (2012)

(2017)

Page 45: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Jigsaw

Modularité du JDK

Corba pour Hello World ?

Swing pour Tomcat ?

Page 46: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Jigsaw

Modularité des applicationsmodule-info.java

module message.service {

requires java.xml.bind;

requires message.common;

exports fr.sewatech.message;

}

Page 47: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Jigsaw

Compilation

javac --module-path modules \

-d target/classes/ \

$(find src/main/java/ -name "*.java")

Page 48: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Jigsaw

Exécution

java --module-path jigsaw-modules \

-m misc.examples/fr.sewatech.example.Main

Page 49: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

https://github.com/hasalex/classpath-demo

Page 50: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Jigsaw ++

Page 51: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Classpath mode

java -classpath lib/* fr.sewatech.example.Main

Page 52: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Modular JDK

rt.jar tools.jar

Page 53: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Modular JDK

Page 54: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

https://github.com/hasalex/classpath-demo

Page 55: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Dependencies

module message.service {

requires message.printer;

requires slf4j.api;

}module message.printer {

requires transitive message.common;

}

message.service

message.printer

message.common

Page 56: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

module message.service {

requires message.printer;

requires slf4j.api;

}

Dependencies

Automatic modules

message.service

slf4j.api

slf4j-api-1.5.2.

Page 57: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Dependencies

Classpath

message.service message.printer

message.common

unnamed

Page 58: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Dependencies

module message.service @ 1.0 {

requires message.printer @ 1.0;

requires slf4j.api @ 1.7;

}

Module version

Page 59: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

https://github.com/hasalex/classpath-demo

Page 60: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Exports

Java accessibilitypublic

protected

package private

private

inside a module

Page 61: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Exports

Java accessibilitypublic for other modules

module message.service {

exports fr.sewatech.message;

}

Page 62: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Exports

Java accessibilitypublic for some modules

module java.base {

exports sun.reflect to

java.logging,

java.sql,

jdk.scripting.nashorn;

}

Page 63: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Exports

module message.service {

exports private java.security;

}

field.setAccessible(true);// => java.lang.reflect.InaccessibleObjectException

Refection

Page 64: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

https://github.com/hasalex/classpath-demo

Page 65: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Classloader

java.net.URLClassLoader FLTMClassLoader

java.lang.ClassLoader

Page 66: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

BootClassLoader

bootclasspath

java -Xbootclasspath/p:hello-lib.jar ...

java -Xbootclasspath:hello-rt.jar ...

java -Xbootclasspath/a:hello-lib.jar ...

Page 67: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Patch

Compile

Run

javac -Xmodule:java.base \

-d ../patch-classes \

src/java/lang/Integer.java

java --patch-module java.base=patch.jar \

--module-path jigsaw-modules \

-m misc.examples

Page 68: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

https://github.com/hasalex/classpath-demo

Page 69: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Jigsaw ++++

Page 70: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Aller plus haw avec Jigsaw

Service Providers / Loaders

Versioning / Layers

Custom JRE : jlink

Migration : jdeps

...

Page 71: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Quand ?

Page 72: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Planning

Java SE 927 juillet 2017

Page 73: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Planning

Outils ?Maven, Gradle, IDE

Livrairies ?

Runtimes ?Java EE, Tomcat,...

Hadoop,...

Page 74: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Essayer...

https://jdk9.java.net/download/ Exécutable d'installation

https://jdk9.java.net/jigsaw/ Archive

Dernières évolutions de Jigsaw

Page 75: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

Apprendre +

JavaOnehttp://openjdk.java.net/projects/jigsaw/talks/

Quick-Start Guidehttp://openjdk.java.net/projects/jigsaw/quick-start

The State of the Module Systemhttp://openjdk.java.net/projects/jigsaw/spec/sotms/

Page 76: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

module-path is born

classpath is NOT dead

Conclusion

Page 77: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath
Page 78: Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath

@AlexisHassler

http://alexis-hassler.com

https://www.sewatech.fr