{"id":4998,"date":"2018-12-27T11:45:00","date_gmt":"2018-12-27T11:45:00","guid":{"rendered":"https:\/\/blog.fabianpiau.com\/?p=4998"},"modified":"2023-06-13T15:37:45","modified_gmt":"2023-06-13T14:37:45","slug":"a-java-11-migration-successful-story","status":"publish","type":"post","link":"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/","title":{"rendered":"Une migration Java 11 r\u00e9ussie"},"content":{"rendered":"<p><a class=\"lang\" href=\"https:\/\/blog.fabianpiau.com\/en\/2018\/12\/27\/a-java-11-migration-successful-story\/\" title=\"Read in english\"><strong class=\"labellang\"><span class=\"en\">&nbsp;<\/span>English version available<\/strong><\/a><\/p>\n<p>Cet article r\u00e9sume le travail que nous avons accompli au sein de mon \u00e9quipe pour migrer nos micro-services de Java 8 \u00e0 Java 11 pour le site Hotels.com.<\/p>\n<p>En r\u00e9sum\u00e9, pour chacun de nos services, nous avons suivi les \u00e9tapes suivantes:<\/p>\n<ul>\n<li>Compiler le code avec Java 11<\/li>\n<li>D\u00e9marrer le service (compatible Java 11) sur Java 8<\/li>\n<li>D\u00e9marrer le service sur Java 11<\/li>\n<\/ul>\n<blockquote><p>En r\u00e9alit\u00e9, nous avons eu quelques \u00e9tapes suppl\u00e9mentaires. Lorsque nous avons commenc\u00e9 la migration, Java 11 n\u2019\u00e9tait pas encore disponible, nous ne pouvions utiliser que Java 10.<br \/>\nL&rsquo;hypoth\u00e8se \u00e9tait la suivante: si le code compile avec Java 10, la migration vers Java 11 ne demandera pas beaucoup de travail, car le changement le plus important \u00e0 propos de la modularit\u00e9 a \u00e9t\u00e9 introduit avec Java 9 et le projet Jigsaw. Heureusement, ce fut le cas!<\/p><\/blockquote>\n<p><br clear=\"none\" \/><\/p>\n<div style=\"max-width: 560px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/post\/00092\/star-wars-lightsaber-upgrade.png?resize=550%2C186&#038;ssl=1\" alt=\"Mise \u00e0 jour du sabre laser Star Wars...\" title=\"Mise \u00e0 jour du sabre laser Star Wars...\" width=\"550\" height=\"186\" class=\"size-medium wp-image-257\" \/><p class=\"wp-caption-text\">Mise \u00e0 jour du sabre laser Star Wars...<\/p><\/div>\n<p><br clear=\"none\" \/><\/p>\n<h4>1. Compiler le code avec Java 11<\/h4>\n<p>C&rsquo;est la partie qui a pris le plus de temps. En effet, nous avons d\u00fb monter en version la plupart des frameworks et des outils que nous utilisions. En particulier, nous avons d\u00fb g\u00e9rer la migration de Spring Boot 1 \u00e0 2 et de Spring 4 \u00e0 5. S&rsquo;agissant de versions majeures, nous avons d\u00fb prendre en compte quelques modifications importantes.<\/p>\n<p><strong>Spring Boot<\/strong><\/p>\n<p>Pour Spring Boot 2, les guides de migration officiels de <a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-2.0-Release-Notes\" target=\"_ blank\" title=\"Notes de version de Spring Boot 2.0\" rel=\"noopener noreferrer\">Spring Boot 2.0<\/a> et <a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-2.1-Release-Notes\" target=\"_ blank\" title=\"Notes de version de Spring Boot 2.1\" rel=\"noopener noreferrer\">Spring Boot 2.1<\/a> sont bien \u00e9crits et d\u00e9taill\u00e9s.<\/p>\n<ul>\n<li>Le <a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/issues\/13151\" target=\"_blank\" title=\"M\u00e9canisme de priorit\u00e9 des profils avec Spring Boot 2\" rel=\"noopener noreferrer\">chargement des profils a \u00e9volu\u00e9<\/a><\/li>\n<li>Le <a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Relaxed-Binding-2.0\" target=\"_blank\" title=\"Spring Boot Relaxed Binding 2.0\" rel=\"noopener noreferrer\">relaxed binding des propri\u00e9t\u00e9s est un peu moins relaxed<\/a><\/li>\n<li>Certaines propri\u00e9t\u00e9s ont \u00e9t\u00e9 renomm\u00e9es et d&rsquo;autres sont indisponibles (par exemple, la propri\u00e9t\u00e9 <code>security.basic.enabled<\/code> doit \u00eatre remplac\u00e9e par un <code>WebSecurityConfigurerAdapter<\/code>)<\/li>\n<li>Certains endpoints ont \u00e9t\u00e9 renomm\u00e9s (par exemple, actuator healthchecks)<\/li>\n<li>L&rsquo;overriding de bean est maintenant d\u00e9sactiv\u00e9 par d\u00e9faut. Comme nous l&rsquo;utilisions dans nos tests d&rsquo;int\u00e9gration, nous avons d\u00fb le r\u00e9activer avec la nouvelle propri\u00e9t\u00e9  <code>spring.main.allow-bean-definition-overriding<\/code>.<\/li>\n<\/ul>\n<p><strong>Spring<\/strong><\/p>\n<p>La <a href=\"https:\/\/github.com\/spring-projects\/spring-framework\/wiki\/Upgrading-to-Spring-Framework-5.x\" target=\"_ blank\" title=\"Mise \u00e0 niveau vers Spring Framework 5. x \" rel=\"noopener noreferrer\">migration vers Spring 5<\/a> \u00e9tait plut\u00f4t simple du point de vue du code avec quelques changements mineurs. La partie la plus compliqu\u00e9e \u00e9tait li\u00e9e au fait que le projet \u00e9tait legacy et que nous devions g\u00e9rer une configuration Spring en XML complexe et la migration vers Dropwizard Metrics 4.<\/p>\n<p><strong>Divers<\/strong><\/p>\n<p>Il peut arriver que des frameworks ne soient toujours pas compatibles avec Java 9+ car ils ne sont pas activement maintenus par la communaut\u00e9. Dans notre cas, nous avons d\u00fb trouver une solution de contournement pour Cassandra Unit. Nous ne voulions pas investir de temps dans un changement de framework DB de test car nous pr\u00e9voyons de passer \u00e0 DynamoDB.<\/p>\n<p>Nous avons \u00e9galement d\u00fb faire face au \u00ab\u00a0Maven dependency hell\u00a0\u00bb car certaines d\u00e9pendances obligatoires tiraient d&rsquo;anciennes d\u00e9pendances non compatibles avec Java 9+. Dans la plupart des cas, l&rsquo;ajout d&rsquo;exclusions dans le POM a r\u00e9solu le probl\u00e8me.<\/p>\n<p><strong>Environnement local<\/strong><\/p>\n<p>En local, nous avons ajout\u00e9 quelques alias \u00e0 notre fichier de profil bash pour passer d\u2019une version de Java \u00e0  une autre.<\/p>\n<pre class=\"brush: bash; light: true; title: ; notranslate\" title=\"\">\r\nalias setjava8=&quot;export JAVA_HOME=\/Library\/Java\/JavaVirtualMachines\/jdk1.8.0_172.jdk\/Contents\/Home\/&quot;\r\nalias setjava10=&quot;export JAVA_HOME=\/Library\/Java\/JavaVirtualMachines\/jdk-10.0.2.jdk\/Contents\/Home\/&quot;\r\nalias setjava11=&quot;export JAVA_HOME=\/Library\/Java\/JavaVirtualMachines\/openjdk-11.jdk\/Contents\/Home\/&quot;\r\n<\/pre>\n<p>Sous IntelliJ, le changement de version de Java peut \u00eatre effectu\u00e9 \u00e0 partir des param\u00e8tres du projet (la liste d\u00e9roulante \u00ab\u00a0Project SDK\u00a0\u00bb).<\/p>\n<p><strong>Environnement IC<\/strong><\/p>\n<p>Du c\u00f4t\u00e9 de l&rsquo;Int\u00e9gration Continue (nous utilisons Bamboo), nous avons mis \u00e0 jour l&rsquo;agent pour qu&rsquo;il utilise Java 11.<br \/>\nNous avons constat\u00e9 qu\u2019il n\u2019\u00e9tait pas possible d\u2019avoir des versions diff\u00e9rentes de l\u2019agent pour les plans de branche et le plan principal (master), car la configuration du plan est globale. Cela signifie que la mise \u00e0 jour de l&rsquo;agent vers Java 11 cassera le plan principal si quelqu&rsquo;un d&rsquo;autre commite sur master (par exemple, une nouvelle fonctionnalit\u00e9 ou un correctif de bogue totalement ind\u00e9pendant de la migration vers Java 11).<br \/>\nPour att\u00e9nuer ce probl\u00e8me et \u00e9viter un build rouge, il \u00e9tait important pour nous de nous assurer que le projet \u00e9tait compilable avec Java 11 et que tous les tests passaient localement avant d&rsquo;effectuer la mise \u00e0 jour de l&rsquo;agent, ceci afin de merger rapidement la branche concernant la migration Java. Une autre option consisterait \u00e0 remettre temporairement l&rsquo;agent \u00e0 Java 8 une fois que le plan de branche est vert sur Java 11 sans oublier de le rebasculer sur Java 11 juste avant le merge.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>2. D\u00e9marrer le service (compatible Java 11) sur Java 8<\/h4>\n<p>Une fois que tout a \u00e9t\u00e9 corrig\u00e9, merg\u00e9 et que le build principal est au vert, nous nous sommes assur\u00e9 que la version compatible Java 11 fonctionnait correctement dans nos environnements de test. En gros, nous nous assurions que rien ne soit cass\u00e9\u2026 Nous avions des tests unitaires, d&rsquo;int\u00e9gration et des tests end-to-end, autant dire que notre niveau de confiance \u00e9tait assez \u00e9lev\u00e9. Comme on est jamais trop prudent, nous avons effectu\u00e9 des tests exploratoires manuels sur l\u2019API, avec quelques requ\u00eates exotiques et autres cas en marge afin de nous assurer que le service se comportait correctement. Nous avons \u00e9galement consult\u00e9 les log et les tableaux de bord Grafana pour s&rsquo;assurer que tout fonctionnait bien.<\/p>\n<p>La prochaine \u00e9tape consistait \u00e0 pousser cette nouvelle version en production. Le service fonctionnait toujours avec Java 8, m\u00eame si le code \u00e9tait compatible (et compil\u00e9) avec Java 11, nous ne voulions pas introduire trop de changements en m\u00eame temps, nous n\u2019aimons pas les versions risqu\u00e9es apr\u00e8s tout. Nous avons trait\u00e9 cette version avec un soin suppl\u00e9mentaire en raison de la refactorisation importante et des multiples mont\u00e9es en version. Apr\u00e8s avoir examin\u00e9 les tableaux de bord Grafana pendant quelques jours, en comparant les m\u00e9triques avant et apr\u00e8s la migration, nous avons constat\u00e9 que tout s&rsquo;\u00e9tait bien pass\u00e9.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>3. D\u00e9marrer le service sur Java 11<\/h4>\n<p>Le but \u00e9tait d&rsquo;ex\u00e9cuter le service sur Java 11. En th\u00e9orie, ce serait aussi simple que de mettre \u00e0 jour le fichier Docker pour utiliser l&rsquo;image Java 11 et pousser l&rsquo;artifact en production. Cependant, dans la pratique, ce n\u2019\u00e9tait pas si simple\u2026<\/p>\n<p>Tout d\u2019abord, nous avons d\u00fb mettre \u00e0 jour certains arguments de la JVM (le <a href=\"https:\/\/bugs.java.com\/bugdatabase\/view_bug.do?bug_id=JDK-8180286\" target=\"_blank\" title=\"Remove the launchers data model flags\" rel=\"noopener noreferrer\">param\u00e8tre <code>-d64<\/code> est obsol\u00e8te<\/a> et emp\u00eachera le service de d\u00e9marrer, nous avons \u00e9galement d\u00fb mettre \u00e0 jour l&rsquo;argument concernant les logs du Garbage Collector).<\/p>\n<p>Ensuite, nous avons rapidement r\u00e9alis\u00e9 que les logs s&rsquo;\u00e9taient volatilis\u00e9es dans Splunk pour notre environnement de production interne. En fait, elles apparaissaient dans le future alors qu&rsquo;il n&rsquo;y avait aucun soucis avec la production sur AWS. Nous avons d\u00fb mettre \u00e0 jour la configuration logback pour corriger cette \u00ab\u00a0distorsion temporelle\u00a0\u00bb ;) en mettant \u00e0 jour le <a href=\"https:\/\/logback.qos.ch\/manual\/layouts.html#date\" target=\"_blank\" title=\"Logback date patterns\" rel=\"noopener noreferrer\">date pattern<\/a> de <code>%d{ISO8601}<\/code> \u00e0 <code>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ,UTC}<\/code>.<\/p>\n<p>Une autre erreur \u00e9trange <code>VerifyError: Bad type on operand stack<\/code> a fait son apparition pendant le d\u00e9ploiement en production. AppDynamics emp\u00eachait le d\u00e9marrage de certaines instances en raison d&rsquo;une manipulation exotique du bytecode. Pour des raisons encore inconnues, le d\u00e9ploiement \u00e9chouait al\u00e9atoirement sur une des instances apr\u00e8s avoir r\u00e9ussi sur plusieurs autres! Nous avons d\u00fb d\u00e9sactiver AppDynamics, ce qui nous convenait bien, car nous n\u2019utilisons pas cet outil dans notre \u00e9quipe.<\/p>\n<p>Apr\u00e8s la migration vers Java 11, nous avons \u00e9galement d\u00fb mettre \u00e0 jour certains de nos tableaux de bord Grafana afin de refl\u00e9ter l&rsquo;utilisation d&rsquo;un nouveau Garbage Collector &#8211; G1.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Conclusion<\/h4>\n<p>Aujourd&rsquo;hui, 3 services fournissant les notifications utilisateur utilisant Spring Boot 2 et 1 service fournissant l&rsquo;en-t\u00eate et le pied de page du site utilisant Spring 5 fonctionnent sur Java 11, cela fait maintenant plusieurs semaines. Ils utilisent le Garbage Collector par d\u00e9faut G1 et nous n&rsquo;avons rencontr\u00e9 aucun comportement \u00e9trange li\u00e9 \u00e0 la m\u00e9moire ou \u00e0 tout autre probl\u00e8me de performance. Aussi, nous n\u2019avons constat\u00e9 aucune am\u00e9lioration de nos temps de r\u00e9ponse. Mais maintenant nous utilisons une version Java LTS (support \u00e0 long terme), la migration a \u00e9t\u00e9 un succ\u00e8s.<\/p>\n<p>Et apr\u00e8s? <a href=\"https:\/\/openjdk.java.net\/projects\/jdk\/12\/\" target=\"_blank\" title=\"JDK 12\" rel=\"noopener noreferrer\">Java 12<\/a> sera publi\u00e9 en mars 2019. A ce jour, nous ne savons toujours pas si nous utiliserons cette version ou attendrons le prochain Java LTS. Cela d\u00e9pendra probablement des fonctionnalit\u00e9s incluses.<br \/>\n<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;English version available Cet article r\u00e9sume le travail que nous avons accompli au sein de mon \u00e9quipe pour migrer nos micro-services de Java 8 \u00e0 Java 11 pour le site Hotels.com. En r\u00e9sum\u00e9, pour chacun de nos services, nous avons suivi les \u00e9tapes suivantes: Compiler le code avec Java 11 D\u00e9marrer le service (compatible Java [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5000,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[53,286],"class_list":["post-4998","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agile-programming","tag-java","tag-migration"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Une migration Java 11 r\u00e9ussie | CarmaBlog<\/title>\n<meta name=\"description\" content=\"&nbsp;English version available Cet article r\u00e9sume le travail que nous avons accompli au sein de mon \u00e9quipe pour migrer nos micro-services de Java 8 \u00e0\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Une migration Java 11 r\u00e9ussie | CarmaBlog\" \/>\n<meta property=\"og:description\" content=\"&nbsp;English version available Cet article r\u00e9sume le travail que nous avons accompli au sein de mon \u00e9quipe pour migrer nos micro-services de Java 8 \u00e0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/\" \/>\n<meta property=\"og:site_name\" content=\"CarmaBlog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/fabian.piau\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/fabian.piau\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-27T11:45:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-13T14:37:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/12\/java-11-thumbnail.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fabian Piau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fabianpiau\" \/>\n<meta name=\"twitter:site\" content=\"@fabianpiau\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fabian Piau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/\"},\"author\":{\"name\":\"Fabian Piau\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"headline\":\"Une migration Java 11 r\u00e9ussie\",\"datePublished\":\"2018-12-27T11:45:00+00:00\",\"dateModified\":\"2023-06-13T14:37:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/\"},\"wordCount\":2564,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2018\\\/12\\\/java-11-thumbnail.jpg?fit=350%2C350&ssl=1\",\"keywords\":[\"java\",\"migration\"],\"articleSection\":[\"Programmation agile\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/\",\"url\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/\",\"name\":\"Une migration Java 11 r\u00e9ussie | CarmaBlog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2018\\\/12\\\/java-11-thumbnail.jpg?fit=350%2C350&ssl=1\",\"datePublished\":\"2018-12-27T11:45:00+00:00\",\"dateModified\":\"2023-06-13T14:37:45+00:00\",\"description\":\"&nbsp;English version available Cet article r\u00e9sume le travail que nous avons accompli au sein de mon \u00e9quipe pour migrer nos micro-services de Java 8 \u00e0\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[[\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/\"]]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2018\\\/12\\\/java-11-thumbnail.jpg?fit=350%2C350&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2018\\\/12\\\/java-11-thumbnail.jpg?fit=350%2C350&ssl=1\",\"width\":350,\"height\":350,\"caption\":\"Java 11\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/12\\\/27\\\/a-java-11-migration-successful-story\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Homepage\",\"item\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmation agile\",\"item\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/category\\\/agile-programming\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"A Java 11 migration successful story\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/\",\"name\":\"CarmaBlog\",\"description\":\"Agilit\u00e9, D\u00e9veloppement Java, Nouvelles technologies et plus...\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\",\"name\":\"Fabian Piau\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"width\":567,\"height\":667,\"caption\":\"Fabian Piau\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\"},\"description\":\"D\u00e9veloppeur Java, Fabian s'int\u00e9resse aux nouvelles technologies et plus particuli\u00e8rement \u00e0 leur utilisation dans un contexte agile.\",\"sameAs\":[\"https:\\\/\\\/blog.fabianpiau.com\",\"https:\\\/\\\/www.facebook.com\\\/fabian.piau\",\"https:\\\/\\\/www.instagram.com\\\/fabianpiau\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/fabianpiau\\\/\",\"https:\\\/\\\/x.com\\\/fabianpiau\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Une migration Java 11 r\u00e9ussie | CarmaBlog","description":"&nbsp;English version available Cet article r\u00e9sume le travail que nous avons accompli au sein de mon \u00e9quipe pour migrer nos micro-services de Java 8 \u00e0","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/","og_locale":"fr_FR","og_type":"article","og_title":"Une migration Java 11 r\u00e9ussie | CarmaBlog","og_description":"&nbsp;English version available Cet article r\u00e9sume le travail que nous avons accompli au sein de mon \u00e9quipe pour migrer nos micro-services de Java 8 \u00e0","og_url":"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/","og_site_name":"CarmaBlog","article_publisher":"https:\/\/www.facebook.com\/fabian.piau","article_author":"https:\/\/www.facebook.com\/fabian.piau","article_published_time":"2018-12-27T11:45:00+00:00","article_modified_time":"2023-06-13T14:37:45+00:00","og_image":[{"width":350,"height":350,"url":"https:\/\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/12\/java-11-thumbnail.jpg","type":"image\/jpeg"}],"author":"Fabian Piau","twitter_card":"summary_large_image","twitter_creator":"@fabianpiau","twitter_site":"@fabianpiau","twitter_misc":{"\u00c9crit par":"Fabian Piau","Dur\u00e9e de lecture estim\u00e9e":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.fabianpiau.com\/2018\/12\/27\/a-java-11-migration-successful-story\/#article","isPartOf":{"@id":"https:\/\/blog.fabianpiau.com\/2018\/12\/27\/a-java-11-migration-successful-story\/"},"author":{"name":"Fabian Piau","@id":"https:\/\/blog.fabianpiau.com\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"headline":"Une migration Java 11 r\u00e9ussie","datePublished":"2018-12-27T11:45:00+00:00","dateModified":"2023-06-13T14:37:45+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.fabianpiau.com\/2018\/12\/27\/a-java-11-migration-successful-story\/"},"wordCount":2564,"commentCount":3,"publisher":{"@id":"https:\/\/blog.fabianpiau.com\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"image":{"@id":"https:\/\/blog.fabianpiau.com\/2018\/12\/27\/a-java-11-migration-successful-story\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/12\/java-11-thumbnail.jpg?fit=350%2C350&ssl=1","keywords":["java","migration"],"articleSection":["Programmation agile"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.fabianpiau.com\/2018\/12\/27\/a-java-11-migration-successful-story\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/","url":"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/","name":"Une migration Java 11 r\u00e9ussie | CarmaBlog","isPartOf":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/#primaryimage"},"image":{"@id":"https:\/\/blog.fabianpiau.com\/2018\/12\/27\/a-java-11-migration-successful-story\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/12\/java-11-thumbnail.jpg?fit=350%2C350&ssl=1","datePublished":"2018-12-27T11:45:00+00:00","dateModified":"2023-06-13T14:37:45+00:00","description":"&nbsp;English version available Cet article r\u00e9sume le travail que nous avons accompli au sein de mon \u00e9quipe pour migrer nos micro-services de Java 8 \u00e0","breadcrumb":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":[["https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/"]]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/#primaryimage","url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/12\/java-11-thumbnail.jpg?fit=350%2C350&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/12\/java-11-thumbnail.jpg?fit=350%2C350&ssl=1","width":350,"height":350,"caption":"Java 11"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.fabianpiau.com\/fr\/2018\/12\/27\/a-java-11-migration-successful-story\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Homepage","item":"https:\/\/blog.fabianpiau.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Programmation agile","item":"https:\/\/blog.fabianpiau.com\/fr\/category\/agile-programming\/"},{"@type":"ListItem","position":3,"name":"A Java 11 migration successful story"}]},{"@type":"WebSite","@id":"https:\/\/blog.fabianpiau.com\/fr\/#website","url":"https:\/\/blog.fabianpiau.com\/fr\/","name":"CarmaBlog","description":"Agilit\u00e9, D\u00e9veloppement Java, Nouvelles technologies et plus...","publisher":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.fabianpiau.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/blog.fabianpiau.com\/fr\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14","name":"Fabian Piau","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","width":567,"height":667,"caption":"Fabian Piau"},"logo":{"@id":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1"},"description":"D\u00e9veloppeur Java, Fabian s'int\u00e9resse aux nouvelles technologies et plus particuli\u00e8rement \u00e0 leur utilisation dans un contexte agile.","sameAs":["https:\/\/blog.fabianpiau.com","https:\/\/www.facebook.com\/fabian.piau","https:\/\/www.instagram.com\/fabianpiau\/","https:\/\/www.linkedin.com\/in\/fabianpiau\/","https:\/\/x.com\/fabianpiau"]}]}},"views":2898,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/12\/java-11-thumbnail.jpg?fit=350%2C350&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pbSHyl-1iC","_links":{"self":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/posts\/4998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/comments?post=4998"}],"version-history":[{"count":0,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/posts\/4998\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/media\/5000"}],"wp:attachment":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/media?parent=4998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/categories?post=4998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/tags?post=4998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}