DevFest Nantes 2016 - Jigsaw est prêt à tuer le classpath Java
-
Upload
alexis-hassler -
Category
Technology
-
view
146 -
download
0
Transcript of DevFest Nantes 2016 - Jigsaw est prêt à tuer le classpath Java
1DEVFEST NANTES 16
DEVFEST NANTES 16
Jigsaw est prêt à tuer le
classpath@AlexisHassler - #devfestnantes
"Classpath is dead!"
Mark ReinholdJavaOne 2009
3DEVFEST NANTES 16
Classpath Classloader
SuccessionJigsaw
4DEVFEST NANTES 16
Alexis Hassler
Développeur
Formateur
Indépendant
Fondateur
Préparateur de
Classpath
https://www.fickr.com/photos/summonedbyfells/15007676965
6DEVFEST NANTES 16
String hello = "Salut à vous tous les zazous";
Chercher les classes
CLASSPATH
Hello var = new Hello();
7DEVFEST NANTES 16
-classpath
java -cp hello-lib.jar HelloWorld
8DEVFEST NANTES 16
Erreurs
java.lang.NoClassDefFoundError
java.lang.ClassNotFoundException
https://www.fickr.com/photos/rocketboom/2816790116
Class Loader
https://www.fickr.com/photos/15574096@N00/12119344725/
10DEVFEST NANTES 16
java.lang.ClassLoader
loadClass(String name) : Class<?>
getResource(String name) : URLgetResourceAsStream(String name) : InputStream
getParent() : ClassLoader
11DEVFEST NANTES 16
Classloader
sun.misc.Launcher$AppClassLoader CLASSPATH
Hello.class.getClassLoader()
12DEVFEST NANTES 16
Classloader
null
Hello.class.getClassLoader()
.getClass().getClassLoader()
13DEVFEST NANTES 16
Bootstrap Classloader
BootstrapClassLoader
14DEVFEST NANTES 16
Délégation
BootstrapClassLoader
Parent frst
System ClassLoader
15DEVFEST NANTES 16
Délégation
System ClassLoader
java -cp hello-lib.jar ...
16DEVFEST NANTES 16
bootclasspath
java -Xbootclasspath/p:hello-lib.jar ...
java -Xbootclasspath:hello-rt.jar ...
java -Xbootclasspath/a:hello-lib.jar ...
BootstrapClassLoader
https://github.com/hasalex/classpath-demo
18DEVFEST NANTES 16
DémonstrationBootstrapClassLoader
java -cp example.jar fr.sewatech.classpath.Count
System ClassLoader
java.lang.Integer
example.jar
java.lang.Integer
19DEVFEST NANTES 16
example.jar
Démonstration
java -Xbootclasspath/p:example.jar fr.sewatech.classpath.Count
BootstrapClassLoader
java.lang.Integer
java.lang.Integer
20DEVFEST NANTES 16
URLClassloader
java.net.URLClassLoader
sun.misc.Launcher$AppClassLoader
URLURLURL
21DEVFEST NANTES 16
URLClassloader
System ClassLoader
Bootstrap ClassLoader
URL ClassLoader
URL ClassLoader
URL ClassLoader
Parentfrst
Parentfrst
Parentfrst
22DEVFEST NANTES 16
DIY Classloader
23DEVFEST NANTES 16
Usages
Application Servers JRebel Javassist, CGLib,...
24DEVFEST NANTES 16
Tomcat
System
Bootstrap
Common
Webapp1
Webapp2
Webapp3
Local First
message-launcher
message-main
message-common
message-printer
message-service
26DEVFEST NANTES 16
Démonstration
message-launcher
message-common
message-printer
message-service
message-service
System ClassLoader ParentFirst ClassLoader
27DEVFEST NANTES 16
Démonstration
message-launcher
message-common
message-printer
message-service
message-service
System ClassLoader LocalFirst ClassLoader
https://www.fickr.com/photos/delete08/5971235700/
29DEVFEST NANTES 16 http://www.ironmaidenwallpaper.com/
30DEVFEST NANTES 16
Dépendances
Maven, Gradle,...
31DEVFEST NANTES 16
Dépendances
Classpath
https://github.com/hasalex/classpath-demo
33DEVFEST NANTES 16
Démonstration
slf4j-api 1.5.11
slf4j-api 1.7.2
message-launcher
message-main
message-common
message-printer
message-service
34DEVFEST NANTES 16
Granularité
SécuritéApache commons-collections
https://foxglovesecurity.com/
Succession
36DEVFEST NANTES 16
Modularité
Dépendance Exposition
Lecture
37DEVFEST NANTES 16
1999
Java embarquéJava SEJava serveur
38DEVFEST NANTES 16
Bundle-Name = Hello Service
Bundle-SymbolicName = hello-service
Bundle-Description = Hello Service Bundle
Bundle-Version = 1.0.1
Export-Package = fr.sewatech.classpath
Import-Package = fr.sewatech.classpath.print;version=1.3
OSGi
Bundle
39DEVFEST NANTES 16
OSGi
OS + Hardware
Java Runtime
Module
Life Cycle Services
40DEVFEST NANTES 16
JBoss Modules
java -jar jboss-modules.jar -mp path/to/modules
my.main.module.name
Base de JBoss OSGi
Java SE
41DEVFEST NANTES 16
JBoss Modules
module.xml
resource dependency slot
dependency slot
dependency slot
name slot
resource
resource
42DEVFEST NANTES 16
Jigsaw
9 (2016)8 (2012)
(2017)
Projet
Intégré au JDK 7 (2008)
43DEVFEST NANTES 16
Jigsaw
Modularité du JDK
44DEVFEST NANTES 16
Jigsaw
Modularité des applications// module-info.java
module message.service {
requires java.xml.bind;
requires message.common;
exports fr.sewatech.message;
}
45DEVFEST NANTES 16
Jigsaw
Compilation
javac --module-path modules \
-d target/classes/ \
$(find src/main/java/ -name "*.java")
46DEVFEST NANTES 16
Jigsaw
Exécution
java --module-path jigsaw-modules \
-m misc.examples/fr.sewatech.example.Main
https://github.com/hasalex/classpath-demo
Jigsaw ++
https://www.fickr.com/photos/intvgene/370973576
49DEVFEST NANTES 16
Classpath mode
java -classpath lib/* fr.sewatech.example.Main
50DEVFEST NANTES 16
Modular JDK
rt.jar tools.jar
51DEVFEST NANTES 16
Modular JDK
https://github.com/hasalex/classpath-demo
53DEVFEST NANTES 16
Dependencies
module message.service {
requires message.printer;
requires slf4j.api;
}
module message.printer {
requires transitive message.common;
}
message.printer
message.service
message.common
54DEVFEST NANTES 16
module message.service {
requires message.printer;
requires slf4j.api;
}
Dependencies
Automatic modules slf4j-api-1.5.2.
slf4j.api
message.service
55DEVFEST NANTES 16
Dependencies
Classpath
message.common
message.printer
unnamed
message.service
56DEVFEST NANTES 16
Dependencies
module message.service @ 1.0 {
requires message.printer @ 1.0;
requires slf4j.api @ 1.7;
}
Module version
https://github.com/hasalex/classpath-demo
58DEVFEST NANTES 16
Exports
Accessibilitypublicprotectedpackageprivate
inside a module
59DEVFEST NANTES 16
Exports
Accessibilitypublic for other modules
module message.service {
exports fr.sewatech.message;
}
60DEVFEST NANTES 16
Exports
Accessibilitypublic for some modules
module java.base {
exports sun.reflect to
java.logging,
java.sql,
jdk.scripting.nashorn;
}
61DEVFEST NANTES 16
field.setAccessible(true);
Exports
java.lang.reflect.InaccessibleObjectException
Refection
module message.service {
exports private java.security;
}
https://github.com/hasalex/classpath-demo
63DEVFEST NANTES 16
Classloader
java.net.URLClassLoader FLTMClassLoader
java.lang.ClassLoader
64DEVFEST NANTES 16
BootClassLoader
bootclasspath
java -Xbootclasspath/p:hello-lib.jar ...
java -Xbootclasspath:hello-rt.jar ...
java -Xbootclasspath/a:hello-lib.jar ...
65DEVFEST NANTES 16
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
https://github.com/hasalex/classpath-demo
Jigsaw ++++
https://www.fickr.com/photos/foot-slogger/901793825/
68DEVFEST NANTES 16
Aller plus haw avec Jigsaw
Service Providers / Loaders
Layers : versioning
jlink : custom JRE
jdeps : migration
...
Quand ?
https://www.fickr.com/photos/mars_/18189674562/
70DEVFEST NANTES 16
Planning
Java SE 9
71DEVFEST NANTES 16
Planning
Outils ?Maven, Gradle, IDE
Livrairies ?SLF4J, Guava,...
Frameworks ?Spring, Hibernate,...
Runtimes ?Java EE, Tomcat,...Hadoop,...
72DEVFEST NANTES 16
Essayer...
https://jdk9.java.net/download/ Exécutable d'installation
https://jdk9.java.net/jigsaw/ ArchiveDernières évolutions de Jigsaw
73DEVFEST NANTES 16
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/
74DEVFEST NANTES 16
module-path is born
classpath is NOT dead
Conclusion
76DEVFEST NANTES 16
https://www.sewatech.fr
@AlexisHassler
http://alexis-hassler.com
https://www.fickr.com/photos/a-hassler/28532230893