LorraineJUG - Le classpath n'est pas mort

Embed Size (px)

Citation preview

  1. 1. Alexis Hassler Le classpath n'est pas mort... Janvier 2015 mais presque
  2. 2. "Classpath is dead!" Mark Reinhold JavaOne 2009
  3. 3. Classpath Classloader Mort? Succession
  4. 4. Alexis Hassler Dveloppeur, formateur Java Indpendant Co-leader du
  5. 5. Classpath
  6. 6. String hello = "Bonjour Devoxx"; MyStuff var; Chercher les classes CLASSPATH
  7. 7. -classpath java -cp hello-lib.jar HelloWorld
  8. 8. Manifest Manifest-Version: 1.0 Class-Path: hello-lib.jar Main-Class: HelloWorld
  9. 9. Connatre le classpath System.getProperty("java.class.path");
  10. 10. Erreurs java.lang.NoClassDefFoundError java.lang.ClassNotFoundException
  11. 11. Classpath Gr par des classloaders
  12. 12. Classloader
  13. 13. java.lang.ClassLoader loadClass(String name) : Class getResource(String name) : URL getResources(String name) : Enumeration getResourceAsStream(String name) : InputStream getParent() : ClassLoader
  14. 14. Classloader sun.misc.Launcher$AppClassLoader CLASSPATH MyStuff.class.getClassLoader()
  15. 15. Bootstrap Classloader null classloader.getClass().getClassLoader()
  16. 16. Bootstrap Classloader BootstrapClassLoader
  17. 17. ExtensionClasspath sun.misc.Launcher$ExtClassLoader sun.misc.Launcher$AppClassLoader Dlgation BootstrapClassLoader Parent first Parent first System ClassLoader Extension ClassLoader
  18. 18. Dlgation java -cp hello-lib.jar ... System.getProperty("java.class.path"); ClasspathSystem ClassLoader
  19. 19. Dlgation java -Djava.ext.dirs=~/.java8/ext ... System.getProperty("java.ext.dirs"); Extension Extension ClassLoader
  20. 20. Dlgation java -Xbootclasspath:hello-rt.jar ... BootstrapClassLoader System.getProperty("sun.boot.class.path");
  21. 21. bootclasspath java -Xbootclasspath:hello-rt.jar ... java -Xbootclasspath/a:hello-lib.jar ... java -Xbootclasspath/p:hello-lib.jar ...
  22. 22. Endorsed java -Djava.endorsed.dirs=~/.java8/endorsed ... Endorsed BootstrapClassLoader
  23. 23. Endorsed APIs standards hors JCP org.omg (CORBA), org.w3c.dom, org.xml.sax (XML) APIs standalone JAXP, JAXB, Scripting, Compiler API,...
  24. 24. http://github.com/hasalex/classpath-demo
  25. 25. classloader-demo Dmonstration BootstrapClassLoader java -cp cl-demo.jar fr.sewatech.classpath.Count System ClassLoader
  26. 26. classloader-demo Dmonstration BootstrapClassLoader java -Xbootclasspath/p:cl-demo.jar fr.sewatech.classpath.Count
  27. 27. URLClassloader java.net.URLClassLoader sun.misc.Launcher$AppClassLoader sun.misc.Launcher$ExtClassLoader URLURLURL
  28. 28. URLClassloader System ClassLoader Bootstrap ClassLoader URL ClassLoader URL ClassLoader URL ClassLoader Parent first Parent first Parent first
  29. 29. http://github.com/hasalex/classpath-demo
  30. 30. Dmonstration java -cp cl-demo.jar:msg-main.jar fr.sewatech.classpath.Hello classloader-demo message-main message-common message-printer message-main
  31. 31. classloader-demo message-main message-common message-printer message-main Dmonstration java -cp cl-demo.jar:msg-main.jar fr.sewatech.classpath.HelloViaUrl message-mainClasspath URLClassloader
  32. 32. Dmonstration classloader-demo message-common message-printer message-main message-main System ClassLoader ParentFirst ClassLoader
  33. 33. FLTM Classloader Fait Le Toi-Mme
  34. 34. Usages Application Servers JRebel Javassist, CGLib,...
  35. 35. Tomcat System Bootstrap Common Webapp1 Webapp2 Webapp3 Local First
  36. 36. JBoss AS 5 System Bootstrap Common Web App Ent App Web Module EJB Module Local First Repo First
  37. 37. Erreurs ClassCastException MyStuff cannot be cast to MyStuff W TF ?
  38. 38. Erreurs URL ClassLoader URL ClassLoader MyStuff var = MyStuffFactory.build(); return new MyStuff() ;
  39. 39. http://github.com/hasalex/classpath-demo
  40. 40. Dmonstration classloader-demo message-common message-printer message-main message-main System ClassLoader ParentFirst ClassLoader
  41. 41. Dmonstration classloader-demo message-common message-printer message-main message-main System ClassLoader LocalFirst ClassLoader
  42. 42. Mort?
  43. 43. http://www.ironmaidenwallpaper.com/
  44. 44. Dpendances Maven, Gradle, ...
  45. 45. Dpendances Classpath
  46. 46. http://github.com/hasalex/classpath-demo
  47. 47. message-main message-common Dmonstration message-printer classloader-demo slf4j-api 1.5.11 slf4j-api 1.7.2
  48. 48. Succession
  49. 49. Granularit Classpath Application
  50. 50. Granularit Application Web / JavaEE Librairies partagesApplication
  51. 51. Modularit Application Web / JavaEE Application
  52. 52. 1999 Java embarqu Java SE Java serveur
  53. 53. OSGi OS + Hardware Java Execution Environment Applications (bundles) Module Life Cycle Services
  54. 54. JBoss Modules Sous-projet de Wildfly Inspir de Jigsaw Base de JBoss OSGi
  55. 55. JBoss Modules java -jar jboss-modules.jar -mp path/to/modules my.main.module.name Java SE
  56. 56. 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
  57. 57.
  58. 58. WildFly bin Scripts de dmarrage bundles Composants OSGi modules Modules JBoss standalone Profil standalone domain Profil domain
  59. 59. bin Scripts de dmarrage bundles Composants OSGi modules Modules JBoss standalone Profil standalone domain Profil domain WildFly message.war
  60. 60. WildFly message.war
  61. 61. http://github.com/hasalex/classpath-demo
  62. 62. Tomcat Classloading WEB-INF/classes, WEB-INF/lib Webapp ClassLoader $CATALINA_HOME/lib System ClassLoader Common Class Loader
  63. 63. Tomcat Module? WEB-INF/classes, WEB-INF/lib System ClassLoader Common Class Loader Webapp ClassLoader $CATALINA_HOME/lib Module ClassLoader modules
  64. 64. Tomcat https://github.com/hasalex/tomcat-modules
  65. 65. Jigsaw Projet OpenJDK Intgr au JDK 7 9 (2016) 8 (2012) (2008) . . .
  66. 66. Jigsaw JEP 200:The Modular JDK JEP 201: Modular Source Code JEP 220:The Modular Run-Time Images JEP xxx:The JDK Module System JSR 376: Java Platform Module System
  67. 67. J'imagine qu'il est tentant, si le seul outil que vous avez est un marteau, de traiter tout problme comme si c'tait un clou. Abraham MaslowPaul Watzlawick
  68. 68. @AlexisHassler http://alexis-hassler.com [email protected] http://sewatech.fr