Alexis Hassler
Jigsaw
est prêt à tuer le
classpath
octobre 2016
"Classpath is dead!"
Mark Reinhold
JavaOne 2009
Classpath
Classloader
Mort 
?
Succession
Jigsaw
Alexis Hassler
Développeur
Formateur
Indépendant
Fondateur
Préparateur de
Classpath
String hello = "Salut à vous tous les zazous";
Chercher les classes
CLASSPATH
Hello var = new Hello();
-classpath
java -cp hello-lib.jar HelloWorld
Erreurs
java.lang.NoClassDefFoundError
java.lang.ClassNotFoundException
Classloader
java.lang.ClassLoader
loadClass(String name) : Class<?>
getResource(String name) : URL
getResourceAsStream(String name) : ...
Classloader
sun.misc.Launcher$AppClassLoader
CLASSPATH
Hello.class.getClassLoader()
Classloader
null
Hello.class.getClassLoader()
.getClass().getClassLoader()
Bootstrap Classloader
BootstrapClassLoader
Délégation
BootstrapClassLoader
Parent
first
System ClassLoader
Délégation
java -cp hello-lib.jar ...
System ClassLoader
BootstrapClassLoader
bootclasspath
java -Xbootclasspath/p:hello-lib.jar ...
java -Xbootclasspath:hello-rt.jar ...
java -Xb...
https://github.com/hasalex/classpath-demo
Démonstration
BootstrapClassLoader
java -cp example.jar fr.sewatech.classpath.Count
System ClassLoader
java.lang.Integer
e...
example.jar
Démonstration
java  -Xbootclasspath/p:example.jar  fr.sewatech.classpath.Count
java.lang.Integer
BootstrapClas...
URLClassloader
java.net.URLClassLoader
sun.misc.Launcher$AppClassLoader
URLURLURL
URLClassloader
System ClassLoader
Bootstrap ClassLoader
URL ClassLoader
URL ClassLoader
URL ClassLoader
Parent
first
Paren...
FLTM Classloader
Fait Le Toi-Même
Usages
Application Servers
JRebel
Javassist, CGLib,...
Tomcat
System
Bootstrap
Common
Webapp1
Webapp2
Webapp3
Local First
message-launcher
message-main
message-common
message-printer
message-service
Démonstration
message-launcher
message-common
message-printer
message-service
message-service
System ClassLoader ParentFir...
Démonstration
message-launcher
message-common
message-printer
message-service
message-service
System ClassLoader LocalFirs...
Mort ?
http://www.ironmaidenwallpaper.com/
Dépendances
Maven,
Gradle,
...
Dépendances
Classpath
https://github.com/hasalex/classpath-demo
Démonstration
slf4j-api
1.5.11
slf4j-api
1.7.2
message-launcher
message-main
message-common
message-printer
message-service
Granularité
Sécurité
Apache commons-collections
https://foxglovesecurity.com/
Succession
Modularité
Dépendance
Exposition
Lecture
1999
Java embarqué
Java SE
Java serveur
Bundle-Name = Simple Bundle
Bundle-SymbolicName = simple-bundle
Bundle-Description = Simple Bundle
Bundle-Version = 1.0.1
...
OSGi
OS + Hardware
Java Runtime
Module
Life Cycle Services
JBoss Modules
Sous-projet de
Inspiré de Jigsaw (version 2010)
Base de JBoss OSGi
JBoss Modules
java -jar jboss-modules.jar -mp path/to/modules
my.main.module.name
WildFly / JBoss EAP
Java SE
JBoss Modules
hibernate-infinispan-4.1.6.Final.jar
module.xml
hibernate-core-4.1.6.Final.jar
hibernate-entitymanager-4.1.6...
JBoss Modules
module.xml
resource
resource
resource
dependency slot
dependency slot
dependency slot
name slot
Jigsaw
Projet OpenJDK
Intégré au JDK 7 (2008)
9 (2016)
8 (2012)
(2017)
Jigsaw
Modularité du JDK
Corba pour Hello World ?
Swing pour Tomcat ?
Jigsaw
Modularité des applications
module-info.java
module message.service {
requires java.xml.bind;
requires message.comm...
Jigsaw
Compilation
javac --module-path modules 
-d target/classes/ 
$(find src/main/java/ -name "*.java")
Jigsaw
Exécution
java --module-path jigsaw-modules 
-m misc.examples/fr.sewatech.example.Main
https://github.com/hasalex/classpath-demo
Jigsaw ++
Classpath mode
java -classpath lib/* fr.sewatech.example.Main
Modular JDK
rt.jar tools.jar
Modular JDK
https://github.com/hasalex/classpath-demo
Dependencies
module message.service {
requires message.printer;
requires slf4j.api;
}
module message.printer {
requires tr...
module message.service {
requires message.printer;
requires slf4j.api;
}
Dependencies
Automatic modules
message.service
sl...
Dependencies
Classpath
message.service
message.printer
message.common
unnamed
Dependencies
module message.service @ 1.0 {
requires message.printer @ 1.0;
requires slf4j.api @ 1.7;
}
Module version
https://github.com/hasalex/classpath-demo
Exports
Java accessibility
public
protected
package private
private
inside a module
Exports
Java accessibility
public for other modules
module message.service {
exports fr.sewatech.message;
}
Exports
Java accessibility
public for some modules
module java.base {
exports sun.reflect to
java.logging,
java.sql,
jdk.s...
Exports
module message.service {
exports private java.security;
}
field.setAccessible(true);
// => java.lang.reflect.Inacc...
https://github.com/hasalex/classpath-demo
Classloader
java.net.URLClassLoader FLTMClassLoader
java.lang.ClassLoader
BootClassLoader
bootclasspath
java -Xbootclasspath/p:hello-lib.jar ...
java -Xbootclasspath:hello-rt.jar ...
java -Xbootcl...
Patch
Compile
Run
javac -Xmodule:java.base 
-d ../patch-classes 
src/java/lang/Integer.java
java --patch-module java.base=...
https://github.com/hasalex/classpath-demo
Jigsaw ++
++
Aller plus haw avec Jigsaw
Service Providers / Loaders
Versioning / Layers
Custom JRE : jlink
Migration : jdeps
...
Quand ?
Planning
Java SE 9
27 juillet 2017
Planning
Outils ?
Maven, Gradle, IDE
Livrairies ?
Runtimes ?
Java EE, Tomcat,...
Hadoop,...
Essayer...
https://jdk9.java.net/download/
Exécutable d'installation
https://jdk9.java.net/jigsaw/
Archive
Dernières évolu...
Apprendre +
JavaOne
http://openjdk.java.net/projects/jigsaw/talks/
Quick-Start Guide
http://openjdk.java.net/projects/jigs...
module-path is born
classpath is NOT dead
Conclusion
@AlexisHassler
http://alexis-hassler.com
https://www.sewatech.fr
Soft-Shake 2016 : Jigsaw  est prêt à tuer le classpath
Prochain SlideShare
Chargement dans…5
×

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

110 vues

Publié le

En 2009, la mort du classpath a été annoncée. Les classloaders à plat ou hiérarchiques devaient être remplacés par des systèmes modulaires et tous nos problèmes de dépendance devaient se résoudre d'eux-mêmes. C'est le projet Jigsaw qui devait accomplir cette tâche. Il sera finalement intégré au JDK 9 dont la sortie est prévue pour 2017.

Dans la première partie de cette présentation, je vous revenir sur le fonctionnement des classloaders du JDK et voir au travers quelques exemples les problèmes étranges qu'ils posent.

Dans la deuxième partie, je présenterai ce que Jigsaw va apporter et j'expliquerai quels problèmes il va résourdre. Je le comparerai aux solutions qui existent déjà, comme OSGi et JBoss Modules.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
110
Sur SlideShare
0
Issues des intégrations
0
Intégrations
0
Actions
Partages
0
Téléchargements
2
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 1. Alexis Hassler Jigsaw est prêt à tuer le classpath octobre 2016
  2. 2. "Classpath is dead!" Mark Reinhold JavaOne 2009
  3. 3. Classpath Classloader Mort  ? Succession Jigsaw
  4. 4. Alexis Hassler Développeur Formateur Indépendant Fondateur Préparateur de
  5. 5. Classpath
  6. 6. String hello = "Salut à vous tous les zazous"; Chercher les classes CLASSPATH Hello var = new Hello();
  7. 7. -classpath java -cp hello-lib.jar HelloWorld
  8. 8. Erreurs java.lang.NoClassDefFoundError java.lang.ClassNotFoundException
  9. 9. Classloader
  10. 10. java.lang.ClassLoader loadClass(String name) : Class<?> getResource(String name) : URL getResourceAsStream(String name) : InputStream getParent() : ClassLoader
  11. 11. Classloader sun.misc.Launcher$AppClassLoader CLASSPATH Hello.class.getClassLoader()
  12. 12. Classloader null Hello.class.getClassLoader() .getClass().getClassLoader()
  13. 13. Bootstrap Classloader BootstrapClassLoader
  14. 14. Délégation BootstrapClassLoader Parent first System ClassLoader
  15. 15. Délégation java -cp hello-lib.jar ... System ClassLoader
  16. 16. BootstrapClassLoader bootclasspath java -Xbootclasspath/p:hello-lib.jar ... java -Xbootclasspath:hello-rt.jar ... java -Xbootclasspath/a:hello-lib.jar ...
  17. 17. https://github.com/hasalex/classpath-demo
  18. 18. Démonstration BootstrapClassLoader java -cp example.jar fr.sewatech.classpath.Count System ClassLoader java.lang.Integer example.jar java.lang.Integer
  19. 19. example.jar Démonstration java  -Xbootclasspath/p:example.jar  fr.sewatech.classpath.Count java.lang.Integer BootstrapClassLoader java.lang.Integer
  20. 20. URLClassloader java.net.URLClassLoader sun.misc.Launcher$AppClassLoader URLURLURL
  21. 21. URLClassloader System ClassLoader Bootstrap ClassLoader URL ClassLoader URL ClassLoader URL ClassLoader Parent first Parent first Parent first
  22. 22. FLTM Classloader Fait Le Toi-Même
  23. 23. Usages Application Servers JRebel Javassist, CGLib,...
  24. 24. Tomcat System Bootstrap Common Webapp1 Webapp2 Webapp3 Local First
  25. 25. message-launcher message-main message-common message-printer message-service
  26. 26. Démonstration message-launcher message-common message-printer message-service message-service System ClassLoader ParentFirst ClassLoader
  27. 27. Démonstration message-launcher message-common message-printer message-service message-service System ClassLoader LocalFirst ClassLoader
  28. 28. Mort ?
  29. 29. http://www.ironmaidenwallpaper.com/
  30. 30. Dépendances Maven, Gradle, ...
  31. 31. Dépendances Classpath
  32. 32. https://github.com/hasalex/classpath-demo
  33. 33. Démonstration slf4j-api 1.5.11 slf4j-api 1.7.2 message-launcher message-main message-common message-printer message-service
  34. 34. Granularité Sécurité Apache commons-collections https://foxglovesecurity.com/
  35. 35. Succession
  36. 36. Modularité Dépendance Exposition Lecture
  37. 37. 1999 Java embarqué Java SE Java serveur
  38. 38. 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
  39. 39. OSGi OS + Hardware Java Runtime Module Life Cycle Services
  40. 40. JBoss Modules Sous-projet de Inspiré de Jigsaw (version 2010) Base de JBoss OSGi
  41. 41. JBoss Modules java -jar jboss-modules.jar -mp path/to/modules my.main.module.name WildFly / JBoss EAP Java SE
  42. 42. 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
  43. 43. JBoss Modules module.xml resource resource resource dependency slot dependency slot dependency slot name slot
  44. 44. Jigsaw Projet OpenJDK Intégré au JDK 7 (2008) 9 (2016) 8 (2012) (2017)
  45. 45. Jigsaw Modularité du JDK Corba pour Hello World ? Swing pour Tomcat ?
  46. 46. Jigsaw Modularité des applications module-info.java module message.service { requires java.xml.bind; requires message.common; exports fr.sewatech.message; }
  47. 47. Jigsaw Compilation javac --module-path modules -d target/classes/ $(find src/main/java/ -name "*.java")
  48. 48. Jigsaw Exécution java --module-path jigsaw-modules -m misc.examples/fr.sewatech.example.Main
  49. 49. https://github.com/hasalex/classpath-demo
  50. 50. Jigsaw ++
  51. 51. Classpath mode java -classpath lib/* fr.sewatech.example.Main
  52. 52. Modular JDK rt.jar tools.jar
  53. 53. Modular JDK
  54. 54. https://github.com/hasalex/classpath-demo
  55. 55. Dependencies module message.service { requires message.printer; requires slf4j.api; } module message.printer { requires transitive message.common; } message.service message.printer message.common
  56. 56. module message.service { requires message.printer; requires slf4j.api; } Dependencies Automatic modules message.service slf4j.api slf4j-api-1.5.2.
  57. 57. Dependencies Classpath message.service message.printer message.common unnamed
  58. 58. Dependencies module message.service @ 1.0 { requires message.printer @ 1.0; requires slf4j.api @ 1.7; } Module version
  59. 59. https://github.com/hasalex/classpath-demo
  60. 60. Exports Java accessibility public protected package private private inside a module
  61. 61. Exports Java accessibility public for other modules module message.service { exports fr.sewatech.message; }
  62. 62. Exports Java accessibility public for some modules module java.base { exports sun.reflect to java.logging, java.sql, jdk.scripting.nashorn; }
  63. 63. Exports module message.service { exports private java.security; } field.setAccessible(true); // => java.lang.reflect.InaccessibleObjectException Refection
  64. 64. https://github.com/hasalex/classpath-demo
  65. 65. Classloader java.net.URLClassLoader FLTMClassLoader java.lang.ClassLoader
  66. 66. BootClassLoader bootclasspath java -Xbootclasspath/p:hello-lib.jar ... java -Xbootclasspath:hello-rt.jar ... java -Xbootclasspath/a:hello-lib.jar ...
  67. 67. 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
  68. 68. https://github.com/hasalex/classpath-demo
  69. 69. Jigsaw ++ ++
  70. 70. Aller plus haw avec Jigsaw Service Providers / Loaders Versioning / Layers Custom JRE : jlink Migration : jdeps ...
  71. 71. Quand ?
  72. 72. Planning Java SE 9 27 juillet 2017
  73. 73. Planning Outils ? Maven, Gradle, IDE Livrairies ? Runtimes ? Java EE, Tomcat,... Hadoop,...
  74. 74. Essayer... https://jdk9.java.net/download/ Exécutable d'installation https://jdk9.java.net/jigsaw/ Archive Dernières évolutions de Jigsaw
  75. 75. Apprendre + JavaOne http://openjdk.java.net/projects/jigsaw/talks/ Quick-Start Guide http://openjdk.java.net/projects/jigsaw/quick-start The State of the Module System http://openjdk.java.net/projects/jigsaw/spec/sotms/
  76. 76. module-path is born classpath is NOT dead Conclusion
  77. 77. @AlexisHassler http://alexis-hassler.com https://www.sewatech.fr

×