Top Banner
Après Java 8, Java 9 et 10 Speakers : Jean-Michel Doudoux (Oxiane) Format : Conférence Date : 20 avril 2018 Introduction Beaucoup de choses bougent en ce moment au niveau du langage Java. La version 8 de Java a apporté beaucoup de nouveautés. Il y’a eu un réel engouement pour Java 8. Preuve en est, d’après l’index TIOBE, Java est redevenu le langage de l’année en 2015. Java 9 Java 9 est la version la plus controversée de l’histoire de Java car le JCP a voté non pour la première fois. Les principales fonctionnalités Le système de module JPMS (Java Platform Module System) issu du projet Jigsaw 89 JEPs : évolutions mineures, des API, des outils Java 9 vient avec un nouveau modèle de releases : 2 releases majeures de Java par an via OpenJDK. Java 11 arrive en septembre 2018. Oracle propose un modèle LTS : 1 version tous les 3 ans à partir de Java 11. Java 9 et 10 ne sont pas LTS. Les a priori Classpath et module-path cohabitent Le code d’une application ne doit pas obligaoirement être modularisé La classe sun.misc.Unsafe n’est finalement pas retirée Une application Java 8 compile en Java 9 : çà dépend Une application Java 8 s’exécute en Java 9 : çà dépend Améliorations Méthode private dans les interfaces Variables finales API et outils Process API Flow API Fabriques pour collection immuable Var Handles (remplace partiellement Unsafe) Enrichissement de CompletableFuture
6

208-04-20 - Java 9 et 10 - javaetmoi.com

Jun 16, 2022

Download

Documents

dariahiddleston
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: 208-04-20 - Java 9 et 10 - javaetmoi.com

AprèsJava8,Java9et10Speakers:Jean-MichelDoudoux(Oxiane)Format:ConférenceDate:20avril2018IntroductionBeaucoupdechosesbougentencemomentauniveaudulangageJava.Laversion8deJavaaapportébeaucoupdenouveautés.Ily’aeuunréelengouementpourJava8.Preuveenest,d’aprèsl’indexTIOBE,Javaestredevenulelangagedel’annéeen2015.Java9Java9estlaversionlapluscontroverséedel’histoiredeJavacarleJCPavoténonpourlapremièrefois.Lesprincipalesfonctionnalités

• LesystèmedemoduleJPMS(JavaPlatformModuleSystem)issuduprojetJigsaw• 89JEPs:évolutionsmineures,desAPI,desoutils

Java9vientavecunnouveaumodèledereleases:2releasesmajeuresdeJavaparanviaOpenJDK.Java11arriveenseptembre2018.OracleproposeunmodèleLTS:1versiontousles3ansàpartirdeJava11.Java9et10nesontpasLTS.Lesapriori

• Classpathetmodule-pathcohabitent• Lecoded’uneapplicationnedoitpasobligaoirementêtremodularisé• Laclassesun.misc.Unsafen’estfinalementpasretirée• UneapplicationJava8compileenJava9:çàdépend• UneapplicationJava8s’exécuteenJava9:çàdépend

Améliorations

• Méthodeprivatedanslesinterfaces• Variablesfinales• …

APIetoutils

• ProcessAPI• FlowAPI• Fabriquespourcollectionimmuable• VarHandles(remplacepartiellementUnsafe)• EnrichissementdeCompletableFuture

Page 2: 208-04-20 - Java 9 et 10 - javaetmoi.com

• JavaDocenHTML5avecrecherche• JShell

AméliorationsdelaJVM

• Globalementdemeilleursperformances:o CompactStringo ConcaténationdeStringavecInvokeDynamico G1commeGCpardéfauto Codecompilérépartidansducacheséparé

• UnificationduloggingdelaJVMLesmodules

• Lesmodulessontperçuscommecontraignantso Pasdesplitpackageo Pasd’accèspardéfautauxclassespubliquesd’unmoduleo Nécessitédedéfinirlesdépendancesdanslemodule-infoETdanslesoutilsde

build(Maven)• Avantagesdesmodules:

o Encapsulationforte§ Améliorationdelasécuritéetdelamaintenabilité

o Uneconfigurationfiable§ Réduitlesproblèmesdeclasspathhell.LaJVMpeutdétecterles

modulesmanquant(maispaslaversion…)o Occasionderemettredel’ordre

§ Dansledesigndeslivrables§ Danslesdépendances§ DanslesAPIutilisées

• 4typesdemoduleso Platformmodules:modulesduJREo Unnamedmodule:modulesregroupanttouteslesclasses/JARduclasspatho AppNamedmodules:jarmodulairedanslemodulepatho Automaticmodules:JARnonmodulairedanslemodulepath

RuntimepersonnaliséL’outilJavaLinker(jlinker)permetdecréerunJREpersonnaliséàpartirdesmodulesutilisésparl’application.Pourfonctionner,cetoutilnécessitequetouslesJARsdoiventêtremodulaires,cequin’estpaspourtoutdesuite.MigrationversJava9FaireunétatdeslieuxFaireunecartographiedesdépendancespourvérifiers’ilexisteuneversionmodulaire.Utilisationdel’outilJdepsduJDKpourcartographierlesdépendances.Jdepsanalysestatiquementlebytecode(travaillesurles.classetles.jar)Permetégalementdedétecterlessplitpackages.

Page 3: 208-04-20 - Java 9 et 10 - javaetmoi.com

Jdepspermetdecréerlemodule-infod’unJARdonné,avecpossibilitédeleretouchermanuellementaprès.Migrationd’unebibliothèque2stratégies:1. Conversionenmoduled’unJAR

• Ajoutd’unfichiermodule-info2. Sansconversionenmodule

o Nécessitédefigersonnomvial’attributAutomatic-Module-Name.Sinon,lenomestdéterminéautomatiquementàpartirdunomduJAR.

Quelquesoitlastratégieadoptée,bientesteravecclasspathetmodulepath.Raison:leurscomportementspeutdifférer.PourquoinepasresterenJava4,5,6,7ou8?

• Plusdesupportd’Oracle• PlusdemiseàjourgratuitesdeJRE• Nepermetpastoujoursd’upgraderdeslibrairies

Pourquoinepasmigrerversuneautretechno?PourquelROI?LecoutdemigrationversJava9resterabieninférieure.Stratégieviable:attentelaprochaineLTSAl’avenir,ilvafalloirchoisirentrelemodèlegratuitoulesupportpayant

• ModèleLTS:support(nongratuit)longueduréeproposéeparOracleMigrerverslesmodulesSolutioncible:lesmodules.Nécessitéd’ajouterunmodule-infoàchaqueJAR.Problèmedesdépendancesetdesdépendancestransitivesutilisées.OnpeutmigreràJava9sanslesmodules.Ilestpossibleden’utiliserqueleclasspathcommeenJava8Solutionintermédiaire:migrationincrémentale.Modularisercomplètementoupartiellementl’application.Continueràutiliserdesbibliothèquesnonmodulairesletempsqu’ellessemettentàjour.L’outiljarpermetdesavoirsiunJARestmodulaireoupasavecl’option--describe-module.SurunJARmodulaire,ildonnelenomautomatique.L’option--illegal-accesspermetd’autoriserounonl’accèsparintrospectionparleunnamedmodule.Pardéfaut,l’optionestàpermit(touslesaccèssontautorisés).FaitperdreunepartiedesbénéficesdeJPMS.Atermes,lavaleurpardéfautserapasséeàdeny.Jean-Michelnousconseilledenepasignorerlewarning.4valeurspossibles:warning,debug,deny,permit

Page 4: 208-04-20 - Java 9 et 10 - javaetmoi.com

PourassouplirJPMS,ily’a5optionsauniveaudelaJVMouducompilateur:1. –add-module2. –add-reads3. –add-exports4. –add-open5. –patch-module:permetd’ajouterdesclassesdansunmoduleCesoptionsnemodifientpaslemodule-info.Attentionànepasabuserdeleurutilisation.

Multi-ReleaseJAR(MRJAR)Permetd’étendreleformatJAR:incluredesclassesspécifiquesde.classpourd’autresversionsdeJavadansunmêmefichierjarUnjarpeutcontenirplusieurs.classpourdifférentesversions

Page 5: 208-04-20 - Java 9 et 10 - javaetmoi.com

OutiljdeprscanAnalysestatiquedes.classpourrechercherlesAPIdeprecatedJava11varetirerdesméthodes.Cequin’étaitpaslecasjusque-là.L’applicationnefonctionneraplus.LesincompatibilitéL’identifiant_n’estplusvalide.Lesmécanismesd’endorsedetd’extensionsontretirés.LeJREetleJDKontdésormaislamêmestructurederépertoire.LesAPIinternesLaplupartdesAPIinternessontencapsulées.Ledéveloppeurn’yaplusaccès.Certainessontremplacées(ex:sun.misc.BASE64Decoderparjava.util.Base64).D’autresvontdisparaitre(ex:Unsafe)L’outiljdepsavecl’option--jdkinternalsproposeunesolutionderemplacementsielleexiste.Lesdépendancescycliques

• LesJARSnonmodulairespeuventavoirdesdépendancescycliqueso Pasunebonnepratiqueo Maiscourantdansleclasspath

• Ilvaêtrenécessairedeleséliminer.• Nefonctionneniàlacompilationniauruntime

Splitpackages

• UnmêmepackageJavaprésentdansplusieursJAR• Courantdansleclasspath• InterditparJava9pourfiabilisélaconfiguration• S’appliquepourlespackagesdanslesmodulesdesmodulesexportésouNON

Nouveauformatdeversion

• LaversiondeJavaestparfoisutiliséepourdemauvaisesraisons• LeformatdeversionchangeenJava9• ÇaarechangéunpeuenJava10• Solutions:utiliserl’APIRuntime.VersionouleMRJAR

LesmodulesJavaEE

• LesmodulesJavaEEnesontpluschargéspardéfaut:JAXB,JAX-WS• Depréférence,utilisezunelibrairieexternecarellesserontretiréesdeJava11

Page 6: 208-04-20 - Java 9 et 10 - javaetmoi.com

Java10Arrivé6moisaprèsJava9.Seulement12JEPs.ArenduJava9obsolèteL’inférencedetypepourladéclarationdevariableslocalesavecvarAttention:varn’estpasunmotcléCodequicompile:varvar="Bonjour";Parcontre,uneclasseappeléevarnecompileraplus.Préconisation:utiliservaravecdiscernement.Lecodepeutêtreplusoumoinslisible.Lenommagedesvariablesestprimordial.MeilleursupportdeDocker:

• OptionUseContainerSupport(Linuxuniquement)Conclusion

• Javaévolue,nousdevons(devrons)suivre• LamigrationversJPMSetlesmodulesseraobligatoiretôtoutard

o Ellevaêtredélicateetlongueo Plusieursstratégiessontpossibles

• OracleproposeunguidedemigrationversJava9