Java 8MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE - IT News Info
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Java 8MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 1
TABLE DES MATIÈRES P.04_ Avant-propos P.05_ Un peu d’histoire P.12_ Java Everywhere P.18_ Les nouveaux concepts de Java 8 P.30_ La migration vers Java 8 P.39_ Java 9 : Le futur est déjà là P.46_ Conclusion 2 JAVA 8
SOAT en quelques mots Nous favorisons Société d’expertise et de conseil en informatique, SOAT est spécialisée sur les technologies Java-JEE, depuis toujours Microsoft, Web, Mobile et accompagne les entre- l’émulation prises dans leur transformation agile. technologique Au quotidien, ce sont plus de 350 collaborateurs et le partage de talents qui interviennent à toutes les étapes des connaissances de vos projets IT de manière adaptée à vos besoins entre nos consultants et vos budgets. Nous vous soutenons également dans vos choix technologiques, la conception de vos architectures, la réalisation et l’évolution de vos SI ainsi que sur des domaines d’expertise pointus, tels que votre stratégie web ou mobile, votre migration vers le cloud computing ou encore la réalisation d’objets connectés. Blog, conférences, communautés techniques, livres blancs, veille technologique… nous favorisons depuis toujours l’émulation technologique et le partage des connaissances entre nos consultants. Cette démarche de capitalisation ancrée dans les gènes de notre société, participe à la diffusion des savoirs. Allier savoir-faire et savoir-être reste notre défi au quotidien pour rendre notre organisation toujours plus performante et épanouissante. MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 3
AVANT-PROPOS Java s’est imposé, depuis plus de 15 ans, modernes. Aucune autre version de Java comme le langage incontournable des n’aura apporté autant de nouveautés et systèmes d’information modernes. Il est d’avancées fonctionnelles. présent à tous les étages des grandes L’objectif de ce livre blanc n’est pour autant architectures, de la base de données aux pas d’en faire un catalogue exhaustif, mais interfaces utilisateur. de mettre en relief les points majeurs qui Pourtant, Java a traversé une zone de impacteront le développement de nos turbulence depuis le rachat de Sun applications de gestion et la migration Microsystems par Oracle. Alors que Sun vers cette nouvelle version. avait réussi à maintenir un rythme de sortie Après un rapide aparté sur le contexte d’une version majeure tous les deux ans, historique et la genèse de Java 8, nous Oracle ne parviendra pas à tenir ces délais parlerons de la présence de Java dans pour la version 7 et peinera à gagner la les différents environnements. Nous confiance de la communauté open source. nous attacherons ensuite à expliciter les Pire, à l’attente s’est ajoutée la déception, nouveaux concepts de Java 8 et à montrer Java 7 a en effet eu du mal à convaincre en quoi les expressions lambdas et l’API le public. Fonctionnellement étriquée et Stream représentent une avancée majeure n’intégrant pas les lambdas expressions, de la plateforme, en ouvrant de nouvelles cette nouvelle version a déçu et ses opportunités pour écrire des applications problèmes de sécurité, dont la presse IT et simples et performantes. le grand public se sont faites l’écho, ont fini Reste à savoir quelle stratégie adopter d’entacher sa réputation. pour migrer vers Java 8 en toute sécurité Après cette période de flottement, tout et en parvenant à diminuer au maximum l’enjeu pour Java 8 était de rendre au langage sa dette technique ? Nous vous ferons part ses lettres de noblesse et de le remettre au des meilleures pratiques sur le sujet avant premier plan des langages objets actuels. d’aborder le futur de Java, autrement dit nos prévisions pour sa version 9. Les efforts fournis par Oracle pour mettre au point cette nouvelle version ont été conséquents, et le résultat est au rendez- vous. Avec Java 8, Java est de nouveaux sur les rails et capable d’intégrer les dernières évolutions des langages 4 JAVA 8
JAVA 8 - MIGRATION ET ENJEUX UN PEU D’HISTOIRE STRATÉGIQUES EN ENTREPRISE 1e Partie Un peu d’histoire • Pourquoi a-t-on adopté Java ? • Java et performances • Pourquoi continuer à utiliser Java ? • Une version attendue 6 ans • Oracle rachète Sun Microsystems • La sortie de Java 7 MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 5
Un peu d’histoire Dans quel but Java a-t-il été conçu ? Quels étaient les objectifs de ses créateurs et pourquoi ce langage a-t-il rencontré un tel succès ? Java est un langage conçu au début des Dans quel but Java a-t-il été conçu ? années 90, dans un environnement infor- Quels étaient les objectifs de ses matique en pleine effervescence. La plupart créateurs et pourquoi ce langage a-t-il des grands principes sont écrits : langage rencontré un tel succès ? impératif, objet, fonctionnel, même s’ils seront encore amenés à évoluer. A l’époque, trois langages se partagent le marché du développement des applications La différence entre langage interprété d’entreprise : le C, le C++ et le Cobol. Le C et compilé a été quantifiée, les projets est très populaire dans la mesure où il a été prennent de l’ampleur et l’on se rend bien utilisé pour écrire Unix et qu’il est tout natu- compte que la gestion des bases de code rellement adopté par Linux. Le Cobol s’avère source, la production des livrables et le dé- l’un des langages favoris pour le développe- ploiement en production restent probléma- ment des applications de gestion, bien qu’il tiques. A cela s’ajoute l’arrivée d’Internet qui, arrive en fin de vie. Et concernant la partie on le pressent bien, va changer les choses et objet, le langage le plus populaire est le C++, amener des problématiques nouvelles. construit sur ce qui a fait le succès du C, en y introduisant la notion d’objet dont les applications complexes ont besoin. 6 JAVA 8
Un peu d’histoire Pourquoi a-t-on adopté Java ? Java arrive donc tardivement, sur un Par ailleurs, le C++ souffre, tout comme le C, marché déjà mature et bien couvert par d’un défaut irrémédiable : on ne peut pas des produits solidement établis. Quelles vérifier que le pointeur au travers duquel on sont alors les raisons de son succès ? écrit a été correctement fixé vers une zone de mémoire réservée. Java décide donc de vérifier Les premières raisons que l’on peut avancer systématiquement ce type d’écriture, interdit sont assez évidentes. Tout d’abord Java est l’arithmétique sur les pointeurs et s’assure que construit sur une syntaxe simple, issue du C l’on ne peut pas écrire au-delà de la limite d’un et du C++, ce qui permettra aux développeurs tableau ou d’une chaîne de caractères. de l’adopter facilement et rapidement. Ensuite, Java est un langage objet et se place donc Ainsi près de 70% des bugs des applications C immédiatement en concurrence avec C++, et C++ ont disparu comme par enchantement. en apportant de la valeur à ce langage. Certes moins riche et plus contraignant, Java est apparu comme un langage plus sûr, dans La valeur choisie par ses concepteurs lequel on écrit moins de bugs. se situe à deux niveaux : Le second niveau concerne le fonctionnement Le premier niveau consiste, non pas à des applications elles-mêmes. Alors que le enrichir les fonctionnalités du C++, mais à C et le C++ sont des langages compilés, qui les appauvrir. Cela peut paraître paradoxal s’exécutent directement sur le processeur des mais du point de vue de la programmation ordinateurs, Java fait le pari de l’interprétation. objet, Java est en réalité moins riche que Le compilateur Java génère un bytecode, le C++. Comment cet amoindrissement interprété dans une machine virtuelle qui se des fonctionnalités peut-il apporter tant de charge de surveiller les écritures interdites et succès ? La raison en est toute simple : si Java de gérer la mémoire. est moins riche, il est aussi moins complexe et donc plus simple à utiliser. A la différence du C et du C++, il n’est pas nécessaire en java de libérer la mémoire Java a en effet su apprendre des problèmes que l’on réserve explicitement, puisque c’est posés par le C++, et a su les résoudre. Le C++ la machine virtuelle, équipée d’un garbage a du mal à spécifier l’héritage multiple, ce qui collector, qui s’en charge. La fuite de mémoire, pose des problèmes à l’exécution et que l’on l’un des problèmes les plus récurrents et détecte à la compilation. Java a d’entrée de jeu préjudiciables des langages natifs, s’en trouve interdit l’héritage multiple et a ainsi résolu de ainsi réglé. manière radicale la question. La seule présence de cette machine virtuelle, réglant les nombreux problèmes des langages compilés nativement, a largement contribué au succès fulgurant de Java. Java a su apprendre des problèmes posés par le C++, et a su les résoudre MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 7
Un peu d’histoire Java et performances Utiliser une machine virtuelle constitue Pourquoi Java est-il plus rapide qu’un un véritable pari sur l’avenir et peut langage compilé ? de prime abord apparaître comme un handicap, car Java est lent, beaucoup plus Pour une raison simple : le compilateur C lent que ses concurrents. ou C++ opère avec pour seule information le code à compiler et les options qu’on Les détracteurs de Java s’appuient lui fournit. Le compilateur just in time de précisément sur cet argument : la lenteur et Java observe dans un premier temps la le fait que le garbage collector laisse tout de façon dont le code est exécuté et met en même passer des fuites de mémoire. Or les œuvre des optimisations issues de cette détracteurs se trompent lorsqu’ils stipulent observation. que Java ne pourra jamais être plus rapide que le C++, dans la mesure où il est un Il est capable de supprimer des parties de langage interprété. code qui ne font rien, d’inliner des appels de méthodes avec une profondeur bien En décembre 1998, Java 2 sort et en 1999, supérieure à ce que l’on fait en C++ et de Sun dote la plateforme d’une nouvelle retirer des synchronisations inutiles. machine virtuelle : Hotspot, qui permet S’il détecte que la version compilée d’un une compilation just in time. Le bytecode code ne s’exécute pas de façon optimale, il est alors compilé en code natif, ce qui est capable de refaire cette compilation en assure au langage des performances l’améliorant. comparables au C++. Les raisons pour lesquelles Java a connu un Ce compilateur just in time a fait l’objet tel succès il y a 15 ans sont toujours valides de très nombreux investissements et aujourd’hui, et l’on adopte encore Java pour améliorations, offrant à Java une rapidité des raisons similaires. d’exécution supérieure à C++ depuis près de 10 ans. Dans certains contextes, Java s’est La gestion de la mémoire par un garbage même avéré plus rapide que le C, ce qui collector a également fait l’objet de n’est pas une moindre performance. nombreuses attentions et de grandes améliorations. Désormais, utiliser un garbage collector est plus performant que le pattern alloc / free des C et C++. 8 JAVA 8
Un peu d’histoire Pourquoi continuer à utiliser Java ? Java a su s’imposer comme l’un des Même en ces temps de pénurie, le nombre meilleurs langages de programmation de développeurs Java reste le plus élevé pour les applications de gestion depuis de tous, ce qui constitue une garantie de plus de 15 ans. maintenabilité pour les projets existants. Le langage en lui-même est performant, Cela dit, l’industrie du développement supporté par des machines virtuelles rapides évolue, et Java, vieux de 20 ans, avait et efficaces. Si la plateforme Java EE a pu besoin d’un sérieux dépoussiérage. Après être plus controversée jusqu’en version 4, une période un peu trouble, revisiter les l’écosystème Java est sans aucun doute l’un principales API du langage et même au-delà, des plus riches que l’on puisse trouver. Le les principaux patterns d’utilisation du nombre de projets Open source grandit langage, était devenu une nécessité. chaque jour, rendent des services dans tous les domaines applicatifs et à tous les étages de nos applications. Une version attendue 6 ans Depuis Java 2, sorti en décembre Java 7 devait donc sortir en 2008, avec 1998, Sun Microsystems avait réussi à une évolution importante : les lambda maintenir un rythme de sortie d’une expressions. Mais à l’époque, Sun version majeure tous les deux ans. Et de Microsystems était dans une situation fait, Java 6 a été publié en 2006. financière très critique. Depuis l’éclatement de la bulle Internet en 2000, l’entreprise Comme il se fait régulièrement dans notre avait perdu de son aura auprès des industrie informatique, le choix de Sun serveurs informatiques hébergeant des sites Microsystems était le suivant : Internet. En quelques années, ses ventes se sont écroulées, sa valeur en bourse a • Une sortie majeure propose des évolutions considérablement chuté et en avril 2009, du langage et de ses API l’entreprise se fait racheter par Oracle. • La sortie suivante propose une stabilisation des nouveautés, des améliorations de Les conséquences pour le développement performance mais sans évolution majeure de Java seront lourdes : les investissements ne seront plus à la hauteur, Java va C’est précisément ce qu’il s’est passé : les cruellement manquer de main d’œuvre, la types paramétrés (génériques) ont été gouvernance connaîtra une longue période introduits en Java 5, ce qui a représenté une de flottement et la communauté ne saura évolution majeure. Suite à cette version, plus très bien dans quelle direction aller. arrive Java 6, sans grand bouleversement mais avec une nouvelle JVM plus performante que la précédente. MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 9
Un peu d’histoire Oracle rachète Sun Microsystems Le rachat de Sun Microsystems a été exacerbée par le départ précipité de par Oracle dure plus longtemps James Gosling, créateur du langage et icône que prévu, et finalement la version 7 du monde Java. de Java ne sort pas. La blogosphère réagit très mal à ce rachat, le Lorsque la procédure de rachat arrive enfin à JCP s’enflamme après la démission de Doug son terme, Oracle se retrouve propriétaire de Lea, professeur à l’université d’Osego et père Java et annonce très clairement que la société des API concurrentes en Java. aura besoin d’un langage de développement robuste, performant et pérenne, comme Oracle se retrouve face à une décision socle de ses produits. Oracle est donc là pour difficile à prendre. Nous sommes en 2010, reprendre les investissements et donner une il n’y a toujours pas eu de version direction claire aux développements. majeure de Java depuis 2006 et toute la communauté attend avec impatience les Mais la réalité a été quelque peu différente. lambda expressions dans Java 7. Mais Alors que Sun jouissait d’une excellente image Java 7 est toujours en chantier et ses dans les communautés Open source, Oracle fameuses lambda expressions ne sont arrive sur un terrain hostile, dont la méfiance absolument pas prêtes. Sun jouissait d’une excellente image dans les communautés Open Source, Oracle arrive sur un terrain hostile 10 JAVA 8
Un peu d’histoire La sortie de Java 7 Qu’adviendra-t-il alors de Java 7 ? Oracle Il est clair qu’Oracle prend un réel risque s’est retrouvé face à un choix délicat : avec cette nouvelle annonce, et Java aussi. soit sortir rapidement une version 7 mais incomplète et sans les lambdas, La date de sortie sera une dernière fois soit attendre la finalisation des lambdas décalée. Oracle a dû en effet concentrer ses mais retarder la sortie de la version 7. efforts sur les correctifs dont Java 7 avait C’est la première des deux options besoin, au détriment des développements qui sera finalement choisie et l’on sait sur Java 8. rétrospectivement que ce fut le bon choix. L’attente aurait été trop longue et La sortie de Java 8 en mars 2014, avec ses néfaste pour l’avenir de Java. très attendues lambda expressions, a été toutefois bien accueillie. Entre-temps Java 7 est enfin publié en juillet 2011. les choses se sont améliorées avec la Mais les ennuis vont rapidement s’enchaîner. communauté. Malgré quelques premiers Insuffisamment testée, la nouvelle faux pas dans sa communication, Oracle version présente des défaillances ; a su donner des gages de confiance à la elle doit être patchée peu de temps après communauté Open source. Doug Lea est sa sortie. revenu au JCP, qui s’est remis au travail dans la sérénité. Apache Lucene, moteur de recherche Open source, ne fonctionne plus et des failles Outre les expressions lambda, de nombreuses concernant la sécurité du langage sont évolutions ont été ajoutées aux classes décelées. Cette information, rapidement existantes ainsi que de nouvelles API venant relayée dans la presse IT et grand public, enrichir le spectre fonctionnel dans de aura évidemment un effet dévastateur sur nombreux domaines. L’un des domaines l’opinion. dans lequel brillent ces API est sans aucun doute le traitement des données. Traiter Pourtant, Java 7 n’est pas une si mauvaise des données jusqu’en Java 7 passe par version. Le langage évolue dans le sens de l’utilisation des collections et du pattern la simplification de certains patterns qui en iterator. Ce pattern, écrit il y a plus de 20 avaient réellement besoin et quelques API ans, est resté au cœur de nos applications sont optimisées avec l’arrivée d’une nouvelle de gestion depuis 1998. Avec Java 8, il API I/O très intéressante. Reste que ces devient presque obsolète et est remplacé nouveautés déçoivent et ne sont pas à la par l’API Stream. L’écriture du code est ainsi hauteur d’une attente déjà trop longue. grandement facilitée et ses performances sont nettement améliorées. Java 8 est donc rapidement annoncé, avec une date de sortie et la promesse de lambda expressions intégrées. Mais l’annonce est encore une fois mal accueillie. La communauté est très sceptique : la date sera-t-elle encore repoussée ? Le périmètre fonctionnel va-t-il être maintenu ? MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 11
JAVA 8 - MIGRATION ET ENJEUX JAVA EVERYWHERE STRATÉGIQUES EN ENTREPRISE 2e Partie Java Everywhere • Portabilité • Java 8 et les objets connectés • Java 8 et les applications graphiques natives • Java 8 et les serveurs d’entreprise • Java 8 et le cloud • Java 8 et les applications mobiles 12 JAVA 8
Java Everywhere Portabilité Depuis sa création, Java est compatible croît à une vitesse vertigineuse avec l’arrivée avec la quasi-totalité des processeurs et des objets connectés, ce qui rend encore des OS, ce qui dans les années 90 était plus pertinente la portabilité de Java. nécessaire puisque l’on développait sous Comme Java est, par essence, un langage Windows et que l’on déployait sur Unix de réseau, il s’intègre parfaitement puis sous Linux. dans un environnement distribué et apparaît comme un langage de choix pour Si ce point n’est évidemment pas remis en programmer tous les devices qui peuplent cause, le contexte a cependant changé. La notre quotidien. diversité des plateformes de déploiement Java 8 et les objets connectés Les analystes nous prédisent que d’ici objets peupleront notre quotidien en 2020, 10 ans, nous utiliserons au quotidien et qu’ils génèreront 40% de données que les une demi-douzaine d’objets connectés serveurs Internet auront à traiter, contre 11% en moyenne. aujourd’hui. Tous les domaines sont touchés : la domotique, Java 8 est au centre de ces enjeux et apporte l’automatique industrielle, les objets personnels les réponses techniques dont les développeurs (montres, lunettes, capteurs médicaux), les ont besoin. Le langage apporte en effet la véhicules personnels et professionnels. Sans notion de profil et peut être déployé de façon compter bien sûr les téléphones et tablettes. optimale sur l’ensemble de ces devices. Des API spécifiques permettent d’enrichir les fonctionnalités réseau et de les aligner sur De quoi ces objets ont-ils besoin ? les besoins spécifiques de ces plateformes particulières. 1. D e fiabilité, car ils sont allumés en permanence. Pour les devices qui disposent d’un terminal 2. D e performance, car ils doivent répondre graphique, Java 8 apporte JavaFX 8. Ce rapidement et implémenter des traitements framework, en développement depuis de locaux. nombreuses années, atteint un excellent niveau 3. D e sécurité, une tierce personne ne doit de maturité. pas pouvoir intercepter les données qu’ils échangent. Il permet, entre autres, de piloter des écrans HD 4. De modes de gestion déportés : on doit à partir d’un Raspberry Pi par exemple. Enfin, pouvoir se connecter dessus pour pouvoir Java FX permet de développer des applications les administrer. interactives sur des bornes équipées d’écrans 5. De nouvelles plateformes pour agréger les tactiles pour un coût très faible. données qu’ils produisent, et en extraire de l’information pertinente. 20 milliards d’objets Ce dernier point ne doit pas être négligé. connectés peupleront IDC prévoit qu’environ 20 milliards de ces notre quotidien en 2020 MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 13
Java Everywhere Java 8 et les applications graphiques natives Depuis ses premières versions, Java permet Depuis plusieurs années, le framework de construire des interfaces homme machine JavaFX monte en puissance. Il s’agit d’un natives en utilisant le framework Swing. remplacement de Swing qui apporte ce qui manque à son prédécesseur. De nombreuses applications ont été développées en Swing et certaines sont Java 8 apporte JavaFX 8 qui tire parti des encore utilisées aujourd’hui. nouveautés introduites dans Java 8 et Conçu il y a 20 ans, Swing est aujourd’hui un permet la migration d’une application Swing peu vieillissant ; d’une part il ne couvre pas soit étape par étape, soit en reprenant tout tous les besoins des applications graphiques de zéro. modernes, notamment dans le domaine de l’animation pure, et d’autre part, il devient de plus en plus compliqué de le faire évoluer. Java 8 et les serveurs d’entreprise Java reste bien sûr présent pour le Pour Java EE, certains éléments de Java développement d’interfaces Web. 8 seront déterminants : les lambda expressions bien sûr, mais aussi les Historiquement, Java Servlet / JSP a fait partie nouveautés dans le domaine de la des premiers frameworks web utilisables concurrence, qui serviront de socle industriellement. Si vers la fin des années 90, aux traitements asynchrones, dans les les avancées sont encore balbutiantes, de domaines suivants : servlets, EJB, JMS, bus nombreux projets ont adopté Java comme d’événements (CDI). langage pour le développement de leur partie Web. Aujourd’hui, Java reste présent au cœur des applications d’entreprise, à tous les étages fonctionnels : interfaces Web, couche de services et accès aux données. Si cette partie des applications se construit sur des plateformes complémentaires, telles que Java EE ou Spring, l’influence de Java 8 reste très présente. Spring 4 supporte déjà Java 8. Java EE 8 dont les travaux ont commencé fin 2013 sera construit également sur Java 8. 14 JAVA 8
Java Everywhere Java 8 et le cloud Java est une plateforme de développement plus simple à mettre en œuvre : tout dont les applications ont vocation à être l’environnement logiciel de la machine déployées sur le cloud. Les entreprises qui serveur a été préparé pour nous. déploient leurs applications sur le cloud ne souhaitent en général pas s’attacher à un Ces deux modes existent commercialement fournisseur en particulier, mais veulent avoir depuis plusieurs années déjà, donc rien de la possibilité de déplacer leurs applications nouveau dans cet horizon. Mais le cloud est d’un hébergeur à l’autre. Or les applications un domaine qui bouge vite et sur lequel la Java EE répondent parfaitement à cette concurrence est particulièrement agressive. contrainte. Par ailleurs, de nouveaux modes, que l’on pourrait appeler hybrides, apparaissent et Mode IaaS ou PaaS ? méritent que l’on s’y attarde un peu. L’hébergement cloud qui nous intéresse repose sur deux approches : le mode Les modes hybrides Infrastructure as a Service (IaaS), ou Platform as a Service (PaaS). Il existe depuis quelques mois des modes hybrides, dans lesquels on déploie une pile Le premier mode consiste à louer une logicielle dans un environnement virtualisé. machine virtuelle chez un hébergeur. Le Ce mode est un intermédiaire entre le mode dimensionnement de cette machine est IaaS et SaaS, dans la mesure où l’on ne déterminé lors de sa création : mémoire, CPU déploie pas de machine virtuelle soi-même. et disque. La facturation se fait ensuite au temps, en fonction de la taille de la machine. Un environnement existant y est proposé dès le départ que l’on particularise pour créer Une fois la machine créée, l’environnement un serveur d’applications à configurer. La logiciel est installé, puis l’application elle- dernière couche de déploiement consiste à même pour servir nos requêtes. Ces étapes déployer l’application dans ce serveur. peuvent d’ailleurs être automatisées, plusieurs outils de scripting existent. Plusieurs outils sont apparus ces derniers Le deuxième mode consiste à louer un mois pour créer ce type d’environnement, serveur d’application déjà installé, sur une construits sur les nouvelles possibilités de infrastructure plus ou moins puissante. virtualisation offertes par le noyau Linux : La facturation se fait en fonction de la LXC. LXC est une solution de virtualisation puissance de calcul dont le serveur a besoin intermédiaire entre chroot et la machine et qui dépend de la charge de l’application. virtuelle classique. LXC permet de construire Techniquement, cet environnement est une machine virtuelle dans un environnement un peu plus contraignant que le premier, Linux, en utilisant le noyau de la machine puisque le serveur utilisé est dans une hôte. Cela offre de nombreux gains en termes configuration standard qui n’est en général de performance et de temps de chargement pas modifiable. Mais il est également notamment. Le cloud est un domaine qui bouge vite et sur lequel la concurrence est particulièrement agressive MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 15
Java Everywhere Quel mode choisir ? Une application Java EE peut passer d’un hébergeur La réponse à cette question est complexe, à l’autre car elle ne dépend pas que de l’application à déployer. L’idéal est de considérer l’unité Déployer une application donnée, mise au de déploiement propre à chaque mode. point sur un serveur d’application particulier En mode IaaS, cette unité est la machine est en général attachée à ce serveur. virtuelle : Ubuntu, Windows, etc… En mode Certains modules de Java EE manquent SaaS, cette unité est l’application que l’on de portabilité d’un serveur à l’autre. veut déployer. En mode hybride, il s’agit Passer d’une implémentation de JPA telle du container dont la limite est le point à qu’Hibernate à une autre, EclipseLink, par partir duquel le déploiement nécessite une exemple, ne se fera pas sans douleur. configuration particulière. Ce mode est sans La notion de portabilité des applications Java doute celui qui va se développer le plus et EE doit donc être considérée avec prudence. proposer les modes de fonctionnement les plus riches, d’autant que tous les hébergeurs Elle ne pose en général pas de problème supportent ce mode. pour les couches de présentation et de services. Mais elle peut se révéler plus Dans la plupart des cas (on pense bien sûr à problématique lorsque l’on considère la Docker), le container de virtualisation est un couche d’accès aux données. élément portable d’un hébergeur à l’autre, ce qui permet de choisir son hébergement Reste que les serveurs Java EE les plus avec plus de souplesse. populaires sont supportés par la plupart des hébergeurs cloud, en mode Platform Cela dit, il y a toutes les chances que as a Service (PaaS) ou Infrastructure as a les données sur lesquelles l’application Service (IaaS). Une application Java EE est travaille constituent la contrainte la donc par nature, parfaitement adaptée à un plus prépondérante dans le choix de déploiement cloud. l’hébergement de l’application. Pour des raisons de temps d’accès, on préfèrera exécuter les traitements au plus près des données. Les contraintes techniques et les coûts de migration des grands volumes de données d’un hébergement à l’autre rendent Une application Java EE ces migrations impossibles dans la pratique. est donc par nature, parfaitement adaptée Le choix de l’hébergeur est souvent verrouillé par ce phénomène, identifié sous à un déploiement cloud le nom de « data gravity ». Il faut donc être très vigilant lorsque l’on crée des grandes quantités de données chez un hébergeur car on risque fort d’en dépendre pour de nombreuses années. 16 JAVA 8
Java Everywhere Java 8 et les applications mobiles Historiquement, le domaine des de conserver une base de code unique au applications mobiles a toujours été travers de plateformes cibles : poste client peu exploité que ce soit par Sun ou plateforme mobile. Cette approche est Microsystems ou Oracle. Depuis qu’Oracle intéressante, mais il s’agit d’un mode de est propriétaire de Java, les procès se fonctionnement finalement dégradé par sont enchaînés avec Google, en tant rapport à une application native. que développeur principal d’Android et étant donné la part de marché d’Android, L’exécution de code JavaFX sur Android ou on comprend sans peine les enjeux iOS est différent. Il s’agit bien d’exécuter financiers de ces actions. une application développée pour le poste de travail sur des plateformes mobiles, en Le langage et la machine virtuelle utilisés par l’occurrence Android et iOS, sans conversion Android ont évolué à partir du langage Java, et donc sans dégradation. et même s’ils ont divergé il est facile pour un développeur Java de se les approprier. À l’heure actuelle, les applications mobiles utilisent toujours Java 7, mais il est possible de programmer la partie serveur en Java 8. Le développement de cette partie À l’heure actuelle, les de l’applicatif peut être complètement applications mobiles utilisent détaché de la partie purement mobile. toujours Java 7, mais il est On se retrouve alors dans le contexte du développement d’applications cloud possible de programmer la classique. partie serveur en Java 8 Des efforts émergent pour faciliter l’exécution des applications graphiques écrites en JavaFX 8 (intégré à Java 8) sur les plateformes Android et iOS. Ce point est intéressant car il s’agit bien là d’exécuter le code JavaFX sur des plateformes mobiles. Les outils alternatifs qui existent convertissent le code écrit dans le langage natif (Java, C# ou autre) dans un langage qui sert de dénominateur commun (Java pour Android, Objective C ou Swift pour iOS, HTML 5), lui-même exécuté sur la plateforme cible. Cette approche permet MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 17
JAVA 8 - MIGRATION ET ENJEUX LES NOUVEAUX CONCEPTS DE JAVA 8 STRATÉGIQUES EN ENTREPRISE 3e Partie Les nouveaux concepts de Java 8 • Nouvelle gestion des dates et des calendriers • Nouveaux patterns en traitement de données • Nouveaux patterns en programmation parallèle • Nouveaux patterns en programmation réactive • Les autres nouvelles fonctionnalités 18 JAVA 8
Les nouveaux concepts de Java 8 Aucune version de Java n’a apporté Du point de vue des concepts, la première autant de nouveautés que Java 8. Le grande évolution est l’arrivée d’une travail sur ce point a été remarquable. nouvelle API, nommée Stream, qui opère dans le domaine du traitement des Si l’objet de ce livre blanc n’est pas d’en données. Rappelons que les seuls outils faire un catalogue exhaustif, mais plutôt dont nous disposons en Java pour traiter de mettre en relief les points majeurs qui des données datent de 1998, apportés par impacteront sur le développement de nos l’API Collection. Même si cette API a été applications de gestion, il ne faut pas non réécrite au moins deux fois depuis 16 ans, plus oublier que ces nouveautés comportent les patterns qu’elle a alors apportés n’ont des points techniques très utiles pour les jamais véritablement changé. L’arrivée de développeurs de frameworks. cette nouvelle API et des nouveaux patterns introduits avec elle, présentent donc une En effet, du point de vue purement réelle avancée. technique, la principale nouveauté est bien sûr l’arrivée des expressions lambda. Le second concept important concerne la Cette technique de programmation se programmation asynchrone. Java 8 introduit traduit par une nouvelle syntaxe introduite un nouveau jeu d’interfaces et de classes dans le langage et un nouveau mode dans le domaine de la programmation d’exécution pour le code porté par une concurrente, dédié au lancement de tâches expression lambda. Cette syntaxe permet asynchrones. Le concept est différent de d’écrire simplement du code complexe la programmation concurrente, de plus et lui apporte ainsi plus de lisibilité et de haut niveau, et probablement plus simple à maintenabilité. Le gain en performance, appréhender et à mettre en œuvre. somme toute substantiel (Oracle annonce un facteur 70), est en réalité une forme de Mais commençons par une nouvelle API bonus, qui découle naturellement de cette attendue depuis fort longtemps. Elle n’est nouvelle façon d’écrire du code. en fait pas si nouvelle puisqu’il s’agit de l’intégration d’une API existante dans le Cette nouveauté à elle seule a un impact JDK, portant sur la gestion des dates et des majeur sur l’ensemble du JDK. Le nombre de calendriers. classes du JDK modifiées par l’introduction des lambdas est plus important que le nombre de classes qui avaient été modifiées par l’arrivée des génériques de Java 5 en 2004. Les nouveautés apportées par Java 8 comportent des points techniques très utiles pour les développeurs de frameworks MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 19
Les nouveaux concepts de Java 8 Nouvelle gestion des dates et des calendriers Jusqu’en Java 7, la gestion des dates et des classes, ce qui rendra cette API utilisable dans calendriers reposent essentiellement sur toutes les applications de gestion. deux classes : Date et Calendar. Ces deux classes ont été conçues au tout début de Cette nouvelle API, rebaptisée Java Java, il y a environ 20 ans. Date & Time pour l’occasion, apporte quantité de concepts, de classes et On peut dire sans se tromper qu’elles ont de méthodes utilitaires avec trois été construites sur des concepts tombés en principaux objectifs : obsolescence. Ces classes avaient été d’ailleurs déjà déclarées deprecated en Java 3, sans • Corriger les obsolescences de l’API précédente toutefois qu’une alternative satisfaisante n’ait • Supporter les nouvelles normes en matière de été fournie. Reste que pour les applications gestion des dates et calendriers, entre autres, Java EE et notamment dans les modules JPA, de leur conversion en chaînes de caractères leur utilisation est incontournable. • Simplifier grandement la tâche des développeurs dans le domaine de la Jusqu’en Java 7, Joda Time est sans aucun manipulation des dates doute l’API de choix pour les applications Java. Il s’agit d’une librairie externe au JDK, Cette nouvelle API n’est pas encore supportée brillamment conçue, pratique et simple à par JPA, bien que des passerelles existent. utiliser. La bonne nouvelle est que le JDK 8 Elle le sera dans la prochaine version, ce qui embarque une version peu modifiée de Joda permettra de l’utiliser pleinement dans nos Time. A priori, JPA supportera ces nouvelles applications de gestion. Nouveaux patterns en traitement de données Au commencement Le code que l’on écrira en Java 7 pour était l’Iterator résoudre cette question simple ressemblera probablement au code 1 ( Cf. page 21). Jusqu’en Java 7, on disposait d’un unique pattern pour traiter des données, qui Ce code est très classique, les applications consistait à intégrer ces données dans une de gestion en regorgent. Il s’agit d’une instance de collection et à itérer dessus. application d’un pattern bien connu : le pattern iterator, décrit dans le fameux Prenons l’exemple d’un traitement simple ; « Gang of Four1» , publié en 1994. supposons que l’on dispose d’une liste de personnes et que l’on souhaite calculer [1] Design Patterns: Elements of Reusable Object-Oriented la moyenne d’âge des personnes de plus Software, Erich Gamma, Richard Helm, Ralph Johnson, de 20 ans qui se trouvent dans cette liste. John Vlissides, Addison Wesley ed., 1994. 20 JAVA 8
Les nouveaux concepts de Java 8 On peut formuler deux valeur à notre moyenne. Le traitement de ce remarques au sujet de ce code : cas limite n’est pas écrit ici. La première remarque est qu’il décrit de Si cette valeur doit être affichée dans un tableau manière très précise la façon dont le calcul de de bord, on pourra peut-être la remplacer par notre moyenne s’effectue. Tellement précise, un signe visuel indiquant à l’utilisateur que la qu’il laisse peu de marge de manœuvre à valeur en question ne peut être calculée. Si la JVM ou au compilateur pour optimiser le en revanche, elle doit être injectée en entrée traitement. Clairement, améliorer le temps d’un autre calcul, on va devoir transmettre une de calcul va nécessiter l’écriture de code information qui n’est pas le résultat, mais plutôt d’optimisation dans ce code qui est par une absence de résultat. essence, applicatif. Le traitement suivant va devoir prendre en La deuxième remarque est qu’il passe sous compte cet état de fait. Le tout ressemblera silence le fait que si nous n’avons pas de fort à une verrue dans notre code et sera un personnes de plus de 20 ans dans notre liste, point coûteux à gérer, notamment en termes il nous est quasi impossible de donner une de maintenabilité. Code 1 moyenne d’âge par itération Puis vint l’API Stream L’API Stream apporte une manière radicalement différente de programmer. Écrivons le même code que le précédent, en utilisant cette nouvelle API. Code 2 moyenne d’âge par stream MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 21
Les nouveaux concepts de Java 8 Le premier constat est que le code écrit est La gestion des valeurs moins volumineux. En est-il pour autant qui n’existent pas plus simple ? La réponse est probablement plus complexe qu’il n’y paraît, car le code ne La question de la valeur moyenne d’une liste décrit pas de façon laborieuse chaque étape d’âges qui serait vide, est également traitée du calcul mais manipule des concepts de dans ce code. On pourrait penser naïvement plus haut niveau. que cette méthode average retourne un nombre, probablement un double mais ce La ligne 3 est un mapping, consistant à n’est pas le cas, car on sait à l’avance qu’il est transformer notre liste de personnes en impossible de calculer la valeur moyenne une liste d’entiers, leurs âges. On applique d’un ensemble de nombres qui serait vide. la méthode passée en paramètre à chaque Cette valeur n’est pas définie pour des personne pour obtenir son âge. raisons précises issues de la théorie des groupes. La ligne 4 est un filtrage, qui ne conserve de cette liste que les âges strictement plus Mais l’API Stream a été intelligemment grands que 20. On applique ici l’expression conçue et a prévu ce cas. Plutôt que de passée en paramètre. retourner directement un nombre, cette méthode retourne un objet particulier, de Enfin, l’appel de la ligne 5, calcule type Optional. Ce nouveau concept dans Java directement la valeur moyenne de cette liste 8 permet de gérer de façon particulièrement d’entiers. élégante ce type de méthodes qui peuvent ne rien retourner. Cette façon de programmer se déroule concrètement La force de ce nouveau type d’objet, est que en deux temps l’on peut le traiter de façon très naturelle dans le cadre de l’API Stream. Sans entrer Elle commence par mettre en forme les dans les détails, disons simplement que données (passage d’une liste de personnes à l’API Stream connaît le type Optional et une liste d’âge de laquelle on retire les âges dispose des outils nécessaires pour gérer inférieurs à 20), puis elle lance un calcul dont ces objets de façon simple, non intrusive l’algorithme précis se trouve dans l’API. et performante. La première version du code que nous avons écrit, décrivait chaque étape du calcul. Il s’agissait de la programmation d’un algorithme, en l’occurrence le calcul d’une moyenne. Cette deuxième version est en fait la description d’un résultat. Elle ne décrit pas l’algorithme en tant que tel mais c’est l’API elle-même qui réalise le calcul. Toutes les optimisations se trouvent donc dans l’API et ne viennent pas polluer le code applicatif. 22 JAVA 8
Les nouveaux concepts de Java 8 Nouveaux patterns en programmation parallèle Le besoin de paralléliser Java EE a continué d’interdire leur utilisation directe jusqu’en version 7, publiée en 2011. Au milieu des années 2000, une révolution La programmation concurrente appartient silencieuse a eu lieu dans le domaine au domaine des développeurs de serveur et de l’informatique : l’arrivée massive des est interdite aux développeurs d’applications processeurs multicœurs et l’arrêt de l’évolution à proprement parler. De ce fait, aujourd’hui de la fréquence de fonctionnement des CPU. encore, nombre de développeurs Java Sans en avoir l’air, cette révolution a eu un connaissent mal ces API Concurrentes. impact majeur sur le design des applications de gestion. Jusqu’à cette époque, pour La réponse technique apportée par les améliorer les performances d’une application serveurs d’application jusqu’en Java 7 permet jugée trop lente, la seule option consistait à de traiter de plus en plus de requêtes attendre. Attendre quoi ? Simplement l’arrivée en parallèle ce qui rend nos applications de nouvelles machines, plus rapides que celles plus rapides. La rapidité ici se mesure en de la génération précédente. nombre de requêtes traitées par seconde et effectivement, ce nombre augmente. Cette période bénie est révolue et ne Mais la question de l’accélération du reviendra probablement pas. Les processeurs traitement de chaque requête reste ouverte. que nous utilisons ne gagnent plus en Que se passe-t-il si, au lieu de mesurer le rapidité mais là où nous n’en avions qu’un nombre de requêtes traitées par seconde, seul (monocœur), nous en avons désormais on s’intéresse au temps de traitement d’une plusieurs (multicœur). Chaque traitement requête unique ? En d’autres termes, que se dans notre application n’est pas plus rapide passe-t-il si un traitement particulier est jugé qu’avant, mais là où l’on n’en exécutait qu’un trop long et que l’on souhaite en améliorer la seul, on peut à présent en exécuter plusieurs performance ? en parallèle. Grâce à ces processeurs multicœurs, nos applications sont La seule façon de faire est de pouvoir globalement plus rapides et capables de découper le traitement à effectuer en sous- faire plus d’une chose en même temps. tâches, et de distribuer ces tâches sur les cœurs de notre CPU. Ainsi là où chaque C’est précisément dans ce contexte que les traitement s’effectuait dans son propre fil API Concurrentes, qui savent gérer ce point, d’exécution, sur un cœur de notre CPU, il ont été publiées dans Java 5 en 2004. De pourra désormais s’effectuer dans plusieurs ce point de vue, Java est donc parfaitement fils d’exécution, chacun sur son propre cœur. à l’heure et les serveurs d’applications ont On gagne ainsi un étage dans la parallélisation su exploiter ces nouvelles capacités des de notre application. processeurs. Qu’est-ce que ces API ont-elles changé pour Java 8 introduit la les développeurs d’applications de gestion ? possibilité de paralléliser En réalité pas grand-chose. Ces API ont pu un traitement donné être pleinement exploitées (avec d’autres) par les serveurs d’applications eux-mêmes, mais par simple appel d’une sont restées masquées pour les développeurs. unique méthode MIGRATION ET ENJEUX STRATÉGIQUES EN ENTREPRISE 23
Les nouveaux concepts de Java 8 Les outils de parallélisation matriciel parallèle, sont déjà exploités depuis plusieurs années dans ce domaine. Amazon Paralléliser un traitement donné est une a ouvert une offre de location de clusters tâche délicate, très technique et complexe de GPU en 2010. Dans le domaine des à faire fonctionner correctement. Du point supercalculateurs, les processeurs NVidia de vue purement algorithmique, on constate Tesla sont utilisés depuis la même époque. fréquemment qu’un traitement donné ne se résout pas avec le même algorithme en série A l’heure actuelle, il est possible d’utiliser et en parallèle. plusieurs API externes au JDK pour lancer des traitements sur de telles architectures. Aucune API du JDK ne permet de traiter ce problème spécifique jusqu’en version Chacune de ces API repose sur un modèle 6. À partir de Java 7, un framework de programmation qui lui est propre, de fait son apparition : Fork / Join. Il traite même que sur des dépendances, Java et spécifiquement ce point de la parallélisation natives, propres. Ces solutions sont très des traitements lourds. Il reste néanmoins intéressantes mais poseront tôt ou tard délicat à faire fonctionner, à mettre au point le problème inhérent à tous les codes et encore plus à maintenir. propriétaires attachés à une technologie, à savoir : sa maintenabilité. Java 8 expose une API particulièrement simple à mettre en œuvre et efficace Les efforts portent aujourd’hui sur pour résoudre ce problème. Il s’agit d’un l’intégration de tels outils dans le JDK, au simple appel de méthode. Les gains en travers du projet « Sumatra ». performance pour une opération de tri massif exécutée sur huit cœurs sont de Le but affiché est de pouvoir exploiter ces l’ordre d’un facteur 6,5, ce qui est tout à fait possibilités de façon transparente, efficace remarquable. La réponse apportée par Java et maintenable au niveau du JDK lui-même. 8 à la parallélisation est donc celle qu’il faut Les travaux sur ce point sont encore très sans aucun doute utiliser. en amont et il est donc difficile de prévoir leur aboutissement pour une quelconque Le futur de Java en calcul version du JDK. parallèle Les possibilités offertes par ces nouvelles Reste que les consommateurs de calcul techniques de parallélisation sont parallèle n’ont pas attendu Java 8 pour donc très larges et vont s’amplifier exécuter des traitements parallèles sur les dans les années à venir. Examiner si ces processeurs modernes. opportunités peuvent être exploitées dans nos applications est une nécessité pour un Il existe aujourd’hui deux façons de faire du bénéfice à court terme. calcul haute performance sur nos machines classiques. On peut bien entendu exploiter le multicœur des processeurs Intel, ARM ou Sparc. Mais on peut également lancer nos traitements sur des GPU, tels que ceux embarqués sur les cartes graphiques de nos PC. Ces processeurs, particulièrement performants dans le domaine du calcul 24 JAVA 8
Vous pouvez aussi lire