{"id":79,"date":"2010-01-29T10:35:25","date_gmt":"2010-01-29T09:35:25","guid":{"rendered":"http:\/\/www.alpesjug.fr\/?p=79"},"modified":"2010-02-12T20:39:14","modified_gmt":"2010-02-12T19:39:14","slug":"play","status":"publish","type":"post","link":"https:\/\/www.alpesjug.fr\/?p=79","title":{"rendered":"Play!"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-93\" title=\"Assistance dojo_play\" src=\"http:\/\/www.alpesjug.fr\/wp-content\/uploads\/2010\/01\/play_001-300x225.png\" alt=\"Assistance dojo_play\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2010\/01\/play_001-300x225.png 300w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2010\/01\/play_001-1024x768.png 1024w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2010\/01\/play_001.png 2048w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/>Ce mercredi 27 janvier, nous avons assist\u00e9 \u00e0 la pr\u00e9sentation du framework Play! au travers d&rsquo;un d\u00e9fi simple : d\u00e9velopper la mini application Web de gestion de contacts <a href=\"http:\/\/blog.zenika.com\/index.php?post\/2009\/03\/10\/Concours-D\u00e9velopper-une-application-web-en-Wicket3\">ZenContact<\/a>. L&rsquo;avantage de l&rsquo;application ZenContact est d&rsquo;avoir un point de r\u00e9f\u00e9rence \u00e0 partir duquel nous pouvons comparer les frameworks entre eux.<\/p>\n<p>La pr\u00e9sentation \u00e9tait tr\u00e8s attendue. La salle \u00e9tait comble et nous avons d\u00fb refuser des inscriptions pour manque de place. En effet, bien que sortie en version 1.0 en octobre, le framework Play! a d\u00e9j\u00e0 fait parler de lui. Nous pouvons par exemple le trouver dans le <a href=\"http:\/\/blog.xebia.fr\/2009\/12\/17\/livre-blanc-les-frameworks-web-java-haute-productivite\/\">livre blanc de Xebia<\/a>, ce qui est \u00e9tonnant pour un si jeune framework ; un livre blanc \u00e9tant en g\u00e9n\u00e9ral destin\u00e9 \u00e0 pr\u00e9senter l&rsquo;\u00e9tat de l&rsquo;art, donc de ce qui a fait un minimum ses preuves.<\/p>\n<p>Pour commencer, comme avec Grails, la structure d&rsquo;une application Web est impos\u00e9e par Play! et n&rsquo;est pas compatible avec un syst\u00e8me de gestion de cycle de build comme Maven. D&rsquo;ailleurs, dans Play! le cycle de build du code est rendu transparent en compilant \u00e0 la vol\u00e9e le moindre changement dans les sources, et ceci gr\u00e2ce \u00e0 l&rsquo;int\u00e9gration du compilateur Java d&rsquo;Eclipse. A la diff\u00e9rence de Grails, le choix a \u00e9t\u00e9 fait d&rsquo;utiliser Java comme langage, ce qui permet de profiter des fonctionnalit\u00e9s avanc\u00e9es d&rsquo;un IDE d\u00e9di\u00e9. D&rsquo;ailleurs, tout le travail d&rsquo;\u00e9dition de code se fait via l&rsquo;IDE ; pas besoin d&rsquo;un outil sp\u00e9cifique pour cr\u00e9er telle ou telle classe d&rsquo;objet. ( Pour illustrer la simplicit\u00e9 d&rsquo;\u00e9criture de code avec Play!, Guillaume Bort a fait le choix de n&rsquo;utiliser qu&rsquo;un simple \u00e9diteur de texte avanc\u00e9 (Text Mate)).<\/p>\n<div id=\"attachment_95\" style=\"width: 310px\" class=\"wp-caption alignleft\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-95\" class=\"size-medium wp-image-95\" title=\"play_004\" src=\"http:\/\/www.alpesjug.fr\/wp-content\/uploads\/2010\/01\/play_004-300x225.png\" alt=\"Guillaume Bort\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2010\/01\/play_004-300x225.png 300w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2010\/01\/play_004-1024x768.png 1024w, https:\/\/www.alpesjug.fr\/wp-content\/uploads\/2010\/01\/play_004.png 2048w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><p id=\"caption-attachment-95\" class=\"wp-caption-text\">Guillaume Bort<\/p><\/div>\n<p>Du c\u00f4t\u00e9 Web, malheureusement (c&rsquo;est mon avis), pas de surprise, comme la plupart des frameworks Web, Play! repose sur une approche classique MVC et sur un moteur de templates c\u00f4t\u00e9 IHM ; la nouveaut\u00e9 ne se trouve donc pas de ce c\u00f4t\u00e9-ci. Le moteur et le langage de template est maison et repose sur un socle Groovy. Les choix de conception sur le langage sont \u00e0 mon avis pertinent et int\u00e9ressant : ils rendent l&rsquo;usage de templating plus ais\u00e9. A c\u00f4t\u00e9 de ceci, comme le veut la nouvelle vague, l&rsquo;ensemble IHM client\/serveur repose sur la convention : ainsi \u00e0 un contr\u00f4leur correspond un r\u00e9pertoire de m\u00eame nom dans lequel sont regroup\u00e9s les fichiers Web (HTML, XML, &#8230;) avec pour intitul\u00e9 l&rsquo;action d\u00e9fini dans le contr\u00f4leur. A c\u00f4t\u00e9 de ceci, comme avec d&rsquo;autres frameworks, l&rsquo;association URL avec le contr\u00f4leur est r\u00e9alis\u00e9 par un fichier de mapping relativement simple.<\/p>\n<p>Ensuite, comme la majorit\u00e9 des frameworks Web Java, Play! fait usage des technologies ou outils qui ont fait leur preuve ou qui apportent un r\u00e9el gain de productivit\u00e9. On peut citer par exemple Hibernate pour le mapping Objet\/Relationnel et JPA pour la gestion de la persistance. Le tout est \u00e9videmment int\u00e9gr\u00e9 de fa\u00e7on quasi-transparente pour le d\u00e9veloppeur. D&rsquo;ailleurs, l&rsquo;int\u00e9gration est le ma\u00eetre mot de Play! mais \u00e0 un point que ses concurrents n&rsquo;ont pas os\u00e9 franchir : ils ont cass\u00e9 le mod\u00e8le Java Web classique \u00e0 base de servlet pour proposer leur propre solution. Le r\u00e9sultat est qu&rsquo;ils int\u00e8grent directement le serveur d&rsquo;application Web avec l&rsquo;application, donc un serveur Web maison d\u00e9di\u00e9. La raison ? Au m\u00eame titre que pour le d\u00e9veloppement, faciliter aussi le d\u00e9ploiement en production de l&rsquo;application Web.<img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-94\" title=\"Habib GUERGACHI en pleine explication\" src=\"http:\/\/www.alpesjug.fr\/wp-content\/uploads\/2010\/01\/play_003-225x300.png\" alt=\"Habib GUERGACHI en pleine explication\" width=\"225\" height=\"230\" \/> Ce point n&rsquo;a pas \u00e9t\u00e9 montr\u00e9 et il reste encore \u00e0 le v\u00e9rifier dans un contexte r\u00e9el ; et ceci d&rsquo;autant plus qu&rsquo;il aura \u00e0 faire face \u00e0 une forte opposition culturelle dans les entreprises o\u00f9 souvent la simplicit\u00e9 est vue, parfois inconsciemment, plus comme quelque chose de soup\u00e7onneux.<\/p>\n<p>Pour finir, Play! a fait donc le choix de la rupture tout en s&rsquo;inscrivant dans la tendance actuelle que l&rsquo;on pourrait appeler la REST way. Play! est avant tout un framework pour construire une application Web et rien d&rsquo;autre. Les concepteurs de ce framework sont d&rsquo;ailleurs bien insist\u00e9 sur ce point. Et pour eux, le Web est mieux servi par une approche REST que par toute autre autre. Ainsi, chaque page Web est un rendu de l&rsquo;\u00e9tat courant d&rsquo;une ressource identifi\u00e9e par l&rsquo;URL, celle-ci pouvant \u00eatre repr\u00e9sent\u00e9e par un objet m\u00e9tier dans l&rsquo;application. Dans Play!, la repr\u00e9sentation de la ressource Web peut aussi bien \u00eatre du HTML (pour une interaction avec un utilisateur finale), que du XML ou du JSON ou encore du PDF.<\/p>\n<p>Voici le <a href=\"http:\/\/coffeebean.loicdescotte.com\/2010\/01\/compte-rendu-du-coding-dojo-play.html\" target=\"_blank\">compte-rendu<\/a> fait par Lo\u00efc Descotte de son dojo.<\/p>\n<p><a title=\"zencontact, the application we've created at the @alpesjug co...  on Twitpic\" href=\"http:\/\/twitpic.com\/10ptpf\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-94\" src=\"http:\/\/twitpic.com\/show\/thumb\/10ptpf.png\" alt=\"zencontact, the  application we've created at the @alpesjug co... on Twitpic\" width=\"81\" height=\"81\" \/><\/a>Sinon vous pouvez aussi consulter les <a href=\"http:\/\/www.slideshare.net\/GenevaJUG\/play-framework-presentation\" target=\"_blank\">slides<\/a> pr\u00e9sent\u00e9es lors de la session du <a href=\"http:\/\/www.genevajug.ch\" target=\"_blank\">GenevaJug<\/a>.<br \/>\nEt enfin Romain a traduit le <a href=\"http:\/\/linsolas.developpez.com\/articles\/java\/play\/guide\/\" target=\"_blank\">tutorial Play! en fran\u00e7ais<\/a> et vous pouvez le suivre si vous n&rsquo;avez pu participer au dojo.<br \/>\nLe r\u00e9sultat du dojo est t\u00e9l\u00e9chargeable sous la forme d&rsquo;une <a href=\"http:\/\/guillaume.bort.fr\/apps\/zencontact-play.zip\">application de d\u00e9monstration ici <\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ce mercredi 27 janvier, nous avons assist\u00e9 \u00e0 la pr\u00e9sentation du framework Play! au travers d&rsquo;un d\u00e9fi simple : d\u00e9velopper la mini application Web de gestion de contacts ZenContact. L&rsquo;avantage de l&rsquo;application ZenContact est d&rsquo;avoir un point de r\u00e9f\u00e9rence \u00e0 partir duquel nous pouvons comparer les frameworks entre eux.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[12,13,4],"class_list":["post-79","post","type-post","status-publish","format-standard","hentry","category-compte-rendu","tag-dojo","tag-framework","tag-jug"],"_links":{"self":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/79","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=79"}],"version-history":[{"count":23,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/79\/revisions"}],"predecessor-version":[{"id":120,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=\/wp\/v2\/posts\/79\/revisions\/120"}],"wp:attachment":[{"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=79"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=79"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.alpesjug.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=79"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}