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

44 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
44
Sur SlideShare
0
Issues des intégrations
0
Intégrations
0
Actions
Partages
0
Téléchargements
1
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

×