À l'occasion de la sortie d'un cours complet et gratuit sur l'écriture d'une application JEE moderne avec Glassfish utilisant des services cloud Azure, InfoQ FR a pu interroger ses auteurs José Paumard et Sébastien Pertus, sur les sujets abordés : CDI, JPA, EJB, REST en JAX-RS / JAXB, JSF, ainsi que l'Azure Blob Storage. Le cours est disponible sur la Microsoft Virtual Academy.
InfoQ FR : Bonjour José, Sébastien, vous venez de publier un cours en ligne, gratuit, permettant d'apprendre à écrire une application JEE moderne utilisant JPA, les EJB, des services exposés en REST et un frontend JSF. Est-ce que tout d'abord vous pouvez nous parler de la genèse de ce cours ?
José : Bonjour à tous. Je pense que tout a commencé il y a environ un an et demi lorsque Microsoft nous a contacté au travers de Soat, pour l'organisation d'une après-midi sur Java 8. Au début, cela m’a un peu interpellé. Microsoft, Java, n’était-ce pas un peu incongru ? Et en y regardant de plus près, je me suis rendu compte que Microsoft s'intéressait beaucoup à Java, qu'il y avait cet accord Microsoft / Oracle autour d'Azure, qui avait notamment amené Microsoft à proposer le premier hébergement cloud Java 8 supporté commercialement. J'ai approfondi l'offre Azure (je la connaissais mal), et l'ai trouvée très intéressante pour les développeurs Java. L'après-midi a eu lieu, et s'est très bien passée. Par la suite, j’ai fais une autre intervention chez Microsoft, sur la plateforme Java EE, sa gouvernance, le JCP, etc… pour un public interne. Et là encore, l’accueil a été excellent. Par curiosité, je suis allé suivre le track Java aux TechDays 2013, et ai découvert un univers que je ne soupçonnais pas. J'y ai entendu parler mix de technologies, Open source, à cent lieues des idées reçues que l'on peut avoir. Les choses auraient pu en rester là, mais il se trouve que Microsoft m'a contacté pour produire ce cours "Java EE sur Azure". J'ai trouvé cette occasion très belle, et Soat a apporté son soutien sans hésiter. Le résultat est là : environ 5 heures de cours produites en toute liberté (j’insiste sur ce point), moitié sur Java EE, moitié sur la façon dont déployer ce type d’applications dans Azure. Ce cours intéresse à la fois les développeurs Java, par l’introduction à Java EE qu’il propose. Les aspects les plus importants sont couverts : JPA, EJB, CDI, JAX-RS, JSF. Il intéresse également les développeurs d'applications cloud, car il montre qu’Azure est équipé pour supporter des applications Java, simplement et efficacement. Il couvre les points fondamentaux : mode PaaS, base relationnelle, stockage en blob. Le tout dans un environnement construit pour les besoins de l’application : Glassfish 4.1 et Java 8. La facilité avec laquelle on peut construire son propre environnement de déploiement est très intéressante.
Sébastien : Bonjour à tous. Tout cela remonte à l’année dernière lorsque j’ai parlé en interne de mon envie de créer un évènement autour de Java 8. Cela fait plusieurs années que je m’intéresse à Java et son écosystème et j’ai toujours été persuadé que nous avions beaucoup de choses en commun et à partager. En 2014, j’ai organisé le premier évènement dédié à Java 8, hébergé dans nos locaux, où José est notamment intervenu (et où InfoQ FR avait couvert l’évènement d’ailleurs). La vision de Satya Nadella autour de l’ouverture et l’interopérabilité des systèmes d’information, est en complète adéquation avec ce genre de démarche, alors on se devait de poursuivre et de continuer l’effort. Je voulais changer cette année de concept et trouver un autre moyen de toucher nos communautés. MVA (Microsoft Virtual Academy) me semblait le meilleur endroit pour concrétiser cela et José a tout de suite répondu présent pour créer un cours Java sur Azure. Là où tout cela devient encore plus intéressant, c’est au final le point commun entre tout ça : le cloud. Le cours en devient extrêmement intéressant puisqu’on y apprend à créer une application Java, mais aussi à la déployer dans Azure; la boucle est bouclée.
InfoQ FR : Est-ce qu'il y a des points particuliers sur lesquels faire attention lorsque l'on fait tourner une instance Glassfish sur Windows Azure ?
José : Comme d’habitude lorsque l’on déploie une application dans le cloud, le point de la configuration est le point délicat. Ici, Glassfish fonctionne dans une machine virtuelle créée par Azure lui-même, donc il doit être configuré précisément. Ce point nécessite de connaître un peu le fonctionnement de son serveur d’application (la problématique serait la même avec un Wildfly), mais il est bien expliqué dans le cours. Sans entrer dans trop de détails, il y a des ports particuliers à ouvrir, de la sécurité (authentification notamment) à configurer. Rien de bien méchant pour un sysop aguerri, ni pour un développeur un peu geek. Une fois cette barrière passée (et on ne la passe qu’une fois), les choses fonctionnent comme à la maison, c'est très agréable.
InfoQ FR : En termes de passage à l'échelle, "scalabilité", est-ce simple de passer d'une instance isolée à un cluster Glassfish si l'on est par exemple obligé de faire de la réplication de sessions HTTP ?
José : Ce point n’est pas couvert dans le cours, et il dépend du type de déploiement que l’on choisit. En mode PaaS, on peut décider de l’élasticité de l’application. Cette configuration se fait dans l’IHM et a un impact sur la facturation qui aura lieu, cela va de soi. Pour un déploiement IaaS, les choses se font comme partout, et dépendent du serveur d’application que l’on utilise. Cela dit, on peut se poser la question de la pertinence de la scalabilité par clusterisation. Cela n’est pas forcément la bonne idée et dépend de l’application que l’on veut déployer. En général, lorsque l’on passe par une telle solution, c’est que l’on a un état stocké dans une session utilisateur et que l’on a besoin de passer cet état de nœud en nœud. Concevoir des applications de cette façon aujourd’hui est un peu vieillot. L’entretien de cette session a un coût non négligeable, et l’on peut souvent trouver des méthodes alternatives, y compris dans le contexte de ce qu’Azure propose.
InfoQ FR : Peut-on lier des comportements de type scale-in, scale-out, c'est-à-dire une auto-augmentation et auto-réduction du nombre d'instances lors de changements de trafic ?
Sébastien : Oui bien sûr. Tout dépend de ce qu’on veut mettre en place. Le tout étant d’avoir au moins deux machines virtuelles non ? Blague à part, le système de scale (ou mise à l’échelle) dans Azure peut être manuel ou automatique suivant vos paramètres. Globalement, la mise à l’échelle peut intervenir suivant 2 facteurs, l’utilisation moyenne de CPU et la file d’attente de messages, et prend en compte le nombre de machines virtuelles associées. Une fois que vous avez identifié un seuil (mettons 60% de CPU), vous pouvez définir l’augmentation de l’échelle (ajout d’1 ou 2 instances par exemple). Evidemment, la mise à l’échelle peut être établie de façon manuelle ou via une planification programmée. Voilà une documentation complète sur le sujet.
InfoQ FR : Vous montrez dans le cours la configuration de l'IDE, notamment par exemple le SDK Azure - est-ce que les bibliothèques sont aussi disponibles facilement pour Maven, Gradle et autres ?
José : Oui, Maven est supporté. Le cours est déjà assez long, et je n’ai pas voulu ajouter une couche de complexité supplémentaire en introduisant la problématique Maven. Dans une optique d’industrialisation complète du processus de déploiement, tout peut se faire par Maven, et de plusieurs façons. En quelques mots : Maven peut gérer les dépendances vers les différentes librairies dont on a besoin (typiquement le driver JDBC de SQL Server pour l’accès à SQL Database), la construction bien sûr (il s’agit d’un WAR), et le déploiement dans un Tomcat ou Glassfish (par exemple). Dans la mesure où Maven supporte également les protocoles FTP et autres, on peut aussi exploiter les capacités d’Azure sur ce point.
Sébastien : La plupart des modules externes disponibles sur d’autres plateformes que Visual Studio sont en général proposés par Microsoft Open tech. Concernant Maven, il existe un SDK Azure Java pour Maven que vous trouverez ici. Concernant Gradle, encore une fois MS Open Tech fournit un plugin pour s’intégrer à TFS. Toutes les informations sur le sujet sont disponibles ici.
InfoQ FR : De façon générale, qu'est-ce qui est mis à disposition par Azure concernant l'intégration continue, si par exemple je souhaite construire mon application en continu, voire même la déployer en continu sur un serveur de test ?
José : Azure sait aller chercher des sources sur GitHub ou Bitbucket, donc ce mode de déploiement est possible aussi. Les choses se configurent via l’IHM d’administration, il y a bien sûr des clés à configurer, du classique.
Sébastien : Concernant le mode test, nous avons un mode Staging permettant de tester votre environnement. Très pratique quand on veut déployer une nouvelle version. Le passage du mode staging à production s’effectue en un clic.
Concernant l’intégration continue, Azure permet de se coupler facilement à TFS online, vous pouvez même utiliser Git pour ceux qui préfèrent. Encore une fois, de la documentation sur le sujet disponible ici et ici.
InfoQ FR : Est-ce qu'il est possible facilement de faire tourner un autre conteneur Java EE, par exemple JBoss/Wildfly ?
José : La réponse est oui pour n’importe quel environnement de déploiement, puisqu’Azure propose un mode IaaS, dans lequel on a la main sur à peu près tout. Pour le mode PaaS, deux serveurs sont supportés pour le moment : Tomcat 7 et Jetty 9.1, sous Java 7. Il existe également un mode PaaS intermédiaire, dans lequel on peut en fait choisir son serveur et JVM, sans avoir à configurer sa propre VM. On uploade son propre serveur avec sa configuration, on peut uploader sa propre JVM, ou en choisir une dans un catalogue, et Azure crée une VM avec les éléments qu’on lui donne. J’aime bien ce mode car il est très souple, et m’a par exemple permis de déployer Glassfish 4.1 dans du Java 8, sans pour autant passer par le déploiement d’une VM, ce qui est toujours un peu plus fastidieux. Est-il possible de déployer un Wildfly par ce biais ? Je ne vois pas pourquoi cela ne serait pas possible, mais je n’ai pas essayé. Sinon, pour les autres serveurs d’applications classiques, notamment WebLogic, il existe un catalogue très fourni de VM préconfigurées, avec support commercial. On est en mode IaaS dans ce cas.
Sébastien : C’est possible via des machines virtuelles. VMDepot regroupe un ensemble de VM préconfigurées qui peuvent être déployées dans Azure facilement. En général, le plus simple c’est de rechercher sur VMDepot une machine virtuelle prête à être déployée. Je ne suis vraiment pas un spécialiste sur JBoss ou Wildfly, mais une petite recherche sur VMDepot donne cela : JBoss 7.2 sur Ubuntu 14.04 et Wildfly 8.1 sur Ubuntu 14.04.
InfoQ FR : Aujourd'hui, pour déployer une application JEE sur une instance Glassfish, il est nécessaire de packager cette distribution Glassfish et de l'uploader ensuite sur Windows Azure. Est-il prévu de fournir à terme des instances Glassfish déjà prêtes et configurées ?
José : Difficile de répondre à cette question quand on est indépendant comme je le suis. À terme, le déploiement sous Glassfish ne se fera plus que dans un contexte de test ou de formation. On aura toujours besoin de Glassfish puisqu’au moment où une nouvelle version de Java EE sort, il nous faut un serveur d’applications qui serve d’implémentation de référence. L’expérience prouve que le support d’une nouvelle version de Java EE prend du temps aux éditeurs des principaux serveurs d’applications (Weblogic, Websphere, JBoss, etc…). Si l’on veut pouvoir commencer à travailler dès la sortie de la spécification, on a besoin de cette implémentation de référence, immédiatement disponible. Un support en mode PaaS serait de toute façon la bienvenue, mais ne pas l’avoir n’empêche pas de travailler avec.
InfoQ FR : Le cours est très détaillé, à la manière d'une vraie formation sur plusieurs jours, et aborde à peu près toutes les API de JEE ; le travail doit donc avoir été assez colossal - envisagez-vous de publier d'autres cours maintenant que vous devez être "rodés" ?
José : Effectivement, construire un cours tel que celui-ci est un investissement important, en particulier en temps. Cela dit, je crois beaucoup dans le développement des MOOC, j’en ai produit moi-même sur plusieurs plateformes (MVA, Pluralsight, Parleys). Comme on peut l’imaginer, dans le strict domaine Java / Azure, il reste encore de nombreuses choses à dire. On peut penser à des choses plus avancées au niveau de la partie front-end, utilisant les websockets par exemple, ajouter un module JMS sur la partie backend, détailler le déploiement continu via GitHub / Jenkins, pour rester dans le très classique. Et comme on peut l’imaginer aussi, dans ce domaine comme dans beaucoup d’autres, l’argent est le nerf de la guerre. Il est clair que ce travail n’aurait pas été possible sans le soutien financier de Soat et de Microsoft. Personnellement, je serais ravi de pouvoir produire d’autres cours de ce type, simplement les choses ne dépendent pas que de moi.
Sébastien : MVA est une plateforme très importante pour nous, notamment la présence de cours en français qui soient de très bonne qualité. Alors, oui, nous continuerons à publier des cours, et effectivement, le travail est souvent colossal. Pour vous donner une idée, une vidéo de 20 minutes avec un tutorial et un package de sources, peut représenter 1 à 3 jours de préparation. Mais quand on aime… Personnellement, en plus de superviser certains cours (comme le cours Java dans Azure), je vais publier prochainement deux cours, un sur Azure Mobile Services et l’autre sera la suite des « Fondamentaux C# » pour lequel j’ai eu étonnamment beaucoup de retours positifs, ce qui motive bien sûr pour en publier d’autres !
InfoQ FR : Merci pour vos réponses, avez-vous quelque chose à ajouter ?
José : Merci à InfoQ FR pour cette interview. En tant que vieux (dans tous les sens du terme) développeur Java / Linux / Open Source, je trouve que l’on assiste à une période passionnante. Les grands acteurs de l’informatique, Microsoft, Oracle, IBM, Google, Amazon, commencent à se livrer une vraie bataille commerciale sur le cloud. Les annonces fusent, les choses se précisent, les services deviennent de plus en plus sophistiqués. La bataille entre Linux / Java d’une part et Windows / .NET d’autre part est dépassée. Les grands acteurs rivalisent d’inventivité pour capter les marchés et les développeurs, les opportunités vont se faire de plus en plus riches dans les années à venir. Tout ceci promet d’être passionnant.
Sébastien : Merci à vous pour cette interview. Je crois que José a bien résumé notre vision des choses. Les choses changent et nous n’en sommes qu’au début ! Je crois surtout que le message, comme le dit José très justement, c’est que le temps de la bataille Java / .NET ou Windows / Linux est définitivement révolue. C’est ce que j’essaie de porter au quotidien, même si les vieilles rancœurs ont la vie dure. Et n’hésitez pas à me contacter si vous avez des idées ou des commentaires, je suis toujours disponible pour discuter entre personnes de bonnes volonté. Suivez l’actualité, je peux déjà vous dire que nous allons encore avancer sur le sujet cette année, et nous allons bientôt vous annoncer de nouvelles actions dans ce sens.
Vous pouvez retrouver le cours en question ici: Cours MVA « Java/JEE dans Azure ».