<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>play framework - In Fine - Le Blog</title>
	<atom:link href="https://blog.infine.com/tag/play-framework/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.infine.com</link>
	<description>Le blog des technos de demain !</description>
	<lastBuildDate>Tue, 03 Apr 2012 09:42:50 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>

<image>
	<url>https://blog.infine.com/wp-content/uploads/2021/03/cropped-vignette-32x32.png</url>
	<title>play framework - In Fine - Le Blog</title>
	<link>https://blog.infine.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>L&#8217;application Devoxx France d&#8217;In Fine est disponible sur le Google Play Store</title>
		<link>https://blog.infine.com/lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store-1954?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store</link>
					<comments>https://blog.infine.com/lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store-1954#comments</comments>
		
		<dc:creator><![CDATA[Florian Boulay]]></dc:creator>
		<pubDate>Fri, 30 Mar 2012 11:21:45 +0000</pubDate>
				<category><![CDATA[Conférence]]></category>
		<category><![CDATA[Mobile (Android/iOS)]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[devoxx]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[play framework]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=1954</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">2</span> <span class="rt-label rt-postfix">min.</span></span> In Fine, en tant que partenaire de l&#8217;évènement majeur qu&#8217;est Devoxx France, a le plaisir de mettre à disposition une application pour Devoxx France sur Android. Cette première version permet : De mettre en favoris vos sessions préférées De consulter le planning des sessions, et le détail des speakers De voir ce qui se passe &#8230;</p>
<p>The post <a href="https://blog.infine.com/lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store-1954">L’application Devoxx France d’In Fine est disponible sur le Google Play Store</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">2</span> <span class="rt-label rt-postfix">min.</span></span><p><a href="https://blog.infine.com/wp-content/uploads/2012/03/logo_devoxx_fr_negate.jpg" class="fancyboxgroup" rel="gallery-1954" title="Logo Devoxx France"><img decoding="async" src="https://blog.infine.com/wp-content/uploads/2012/03/logo_devoxx_fr_negate-300x154.jpg" alt="Logo Devoxx France" title="Logo Devoxx France" width="300" height="154" class="alignright size-medium wp-image-1984" srcset="https://blog.infine.com/wp-content/uploads/2012/03/logo_devoxx_fr_negate-300x154.jpg 300w, https://blog.infine.com/wp-content/uploads/2012/03/logo_devoxx_fr_negate.jpg 400w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>In Fine, en tant que partenaire de l&#8217;évènement majeur qu&#8217;est Devoxx France, a le plaisir de mettre à disposition une application pour Devoxx France sur Android. Cette première version permet :</p>
<ul>
<li>De mettre en favoris vos sessions préférées</li>
<li>De consulter le planning des sessions, et le détail des speakers</li>
<li>De voir ce qui se passe sur Twitter avec le tag <em>devoxxfr</em></li>
<li>D&#8217;avoir accès au plan des 2 étages de l&#8217;hôtel où se déroulera la conférence</li>
<li>Et d&#8217;autres fonctionnalités&#8230;</li>
</ul>
<p><span id="more-1954"></span></p>
<p>Cette application fonctionne parfaitement sur téléphone , mais n&#8217;est pas encore totalement adaptée pour les tablettes. Dans les semaines qui viennent, nous allons continuer à mettre à jour l&#8217;application pour qu&#8217;elle soit la plus simple à utiliser possible. Voici une prévision des futures évolutions  :</p>
<ul>
<li>Complète adaptation de l&#8217;ergonomie de l&#8217;application aux tablettes</li>
<li>Ajout de la recherche sur les speakers. Actuellement elle ne fonctionne que sur les sessions</li>
<li>Quand on clique sur une salle, afficher la carte de l&#8217;étage correspondant</li>
<li>Pouvoir mettre en favori des speakers</li>
<li>Et bien d&#8217;autres choses qui dépendront des retours que nous aurons</li>
</ul>
<p>Nous sommes très fiers de mettre à disposition cette application. Elle sera mise en open source au moment de la conférence Devoxx France, certainement en licence Apache 2.<br />
Si vous rencontrez des problèmes ou avez des suggestions, écrivez un commentaire ici, ou envoyer un mail au compte indiqué sur la fiche du Google Play Store.</p>
<p>Dans la suite de l&#8217;article, nous allons approfondir l&#8217;aspect technique de l&#8217;application. Si au contraire vous souhaitez directement aller télécharger l&#8217;application, alors il faut aller ici : <a href="https://play.google.com/store/apps/details?id=com.infine.android.devoxx">Play Store</a></p>
<h2>Architecture technique</h2>
<figure id="attachment_1964" aria-describedby="caption-attachment-1964" style="width: 300px" class="wp-caption aligncenter"><a href="https://blog.infine.com/wp-content/uploads/2012/03/archi_appli_android_devoxx1.png" class="fancyboxgroup" rel="gallery-1954"><img decoding="async" class="size-medium wp-image-1964" src="https://blog.infine.com/wp-content/uploads/2012/03/archi_appli_android_devoxx1-300x164.png" alt="Architecture applicative de l'application Devoxx France In Fine" width="300" height="164" srcset="https://blog.infine.com/wp-content/uploads/2012/03/archi_appli_android_devoxx1-300x164.png 300w, https://blog.infine.com/wp-content/uploads/2012/03/archi_appli_android_devoxx1.png 660w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-1964" class="wp-caption-text"><em>Architecture applicative de l&#039;application Devoxx France In Fine</em></figcaption></figure>
<p>Comme le montre le schéma ci-dessus, nous n&#8217;avons pas directement connecté l&#8217;application Android avec les API RESTful fournies par le site Devoxx. En effet les temps de réponse sont très variables, certains service ont déjà mis plus de 5 minutes à répondre. D&#8217;autre part, certains service renvoient des données en double ou incomplètes.<br />
Le serveur intérmédiaire permet donc de mieux maîtriser les données. Grâce à Play et à Mongo DB, les temps de réponse sont excellents et la charge que peut encaisser le serveur est bien au dessus de ce que nous atteindrons. Un test JMeter a mesuré que le serveur pouvait encaisser 300 requêtes par secondes. La plupart des requêtes répondent en moins de 0.1 seconde. Nous estimons que le serveur aurait à supporter, au maximum de son activité, 25 requêtes par minute</p><p>The post <a href="https://blog.infine.com/lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store-1954">L’application Devoxx France d’In Fine est disponible sur le Google Play Store</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/lapplication-devoxx-france-din-fine-est-disponible-sur-le-google-play-store-1954/feed</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Devoxx 2011 &#8211; annonces</title>
		<link>https://blog.infine.com/devoxx-2011-annonces-1397?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=devoxx-2011-annonces</link>
					<comments>https://blog.infine.com/devoxx-2011-annonces-1397#respond</comments>
		
		<dc:creator><![CDATA[Florian Boulay]]></dc:creator>
		<pubDate>Wed, 16 Nov 2011 15:29:36 +0000</pubDate>
				<category><![CDATA[Conférence]]></category>
		<category><![CDATA[devoxx]]></category>
		<category><![CDATA[play framework]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=1397</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">2</span> <span class="rt-label rt-postfix">min.</span></span> Cette première grosse journée pour Devoxx a été l&#8217;occasion de faire différentes annonces. La première concerne le framework Play et la deuxième concerne le monde Java français. Play La version 2.0 de Play a déjà été annoncée il y a plusieurs semaines. Une pré-version de test avait été mise à disposition. Aujourd&#8217;hui la sortie de &#8230;</p>
<p>The post <a href="https://blog.infine.com/devoxx-2011-annonces-1397">Devoxx 2011 – annonces</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">2</span> <span class="rt-label rt-postfix">min.</span></span><p><a href="https://blog.infine.com/wp-content/uploads/2011/11/devoxx11.png" class="fancyboxgroup" rel="gallery-1397" title="Devoxx 2011"><img decoding="async" src="https://blog.infine.com/wp-content/uploads/2011/11/devoxx11.png" alt="Logo Devoxx 2011" title="Devoxx 2011" width="218" height="80" class="alignright size-full wp-image-1407" /></a><br />
Cette première grosse journée pour Devoxx a été l&#8217;occasion de faire différentes annonces. La première concerne le framework Play et la deuxième concerne le monde Java français.</p>
<h1>Play</h1>
<p>La version 2.0 de Play a déjà été annoncée il y a plusieurs semaines. Une pré-version de test avait été mise à disposition. Aujourd&#8217;hui la sortie de la beta a été annoncée.</p>
<p><span id="more-1397"></span></p>
<p>Lors de la présentation faite par Sadek Drobi (<a href="http://twitter.com/Sadache">@Sadache</a>) et Guillaume Bort, les nouveautés ont été détaillées :</p>
<ul>
<li>Intégration de Scala directement dans Play : les templates ne se feront plus en Groovy mais en Scala. Les classes pourront être faites en Java ou en Scala. Cela a pour conséquence la mise à disposition de la console Scala qui permettra, par exemple, d&#8217;appeler directement du code applicatif à parti de la ligne de commande.</li>
<li>Un système de build est désormais intégré, il s&#8217;agit de SBT (Simple Build Tool). Ce choix est certainement la conséquence de l&#8217;intégration de Scala. Cela remplacera l&#8217;ancien système basé sur Ivy.</li>
<li>Intégration d&#8217;Akka</li>
<li>Les scripts javascript et les feuilles de styles sont compilés</li>
</ul>
<p>Plus d&#8217;infos disponibles sur le site officiel : <a href="http://scala.playframework.org/2.0">http://scala.playframework.org/2.0</a></p>
<p>L&#8217;autre annonce est que Play intègre désormais la stack Typesafe. Cela signifie que Typesafe fournira du support sur Play. De plus Guillaume Bort va désormais siégé au board of advisor de Typesafe (Je ne sais pas comment le traduire, conseil d&#8217;administration ?) en tant que conseiller sur les choix techniques web d&#8217;après ce que Guillaume a dit durant sa présentation.</p>
<h1>Devoxx France</h1>
<p><a href="https://blog.infine.com/wp-content/uploads/2011/11/devoxx_france_300_250.gif" class="fancyboxgroup" rel="gallery-1397" title="devoxx_france"><img loading="lazy" decoding="async" src="https://blog.infine.com/wp-content/uploads/2011/11/devoxx_france_300_250.gif" alt="Bannière Devoxx France" title="devoxx_france" width="250" height="200" class="alignleft size-full wp-image-1405" /></a></p>
<p>Une version française de Devoxx se tiendra du 18 au 20 avril 2012 à Paris ! Elle est inspirée du modèle belge et elle durera 3 jours et sera à 75% en français et 25% en anglais. Elle est organisée par les membres du Paris Jug (Antonio Goncalves, Zouheir Cadi, José Paumard et Nicolas Martignolle). Ce sera la plus grosse conférence Java francophone, venez nombreux !<br />
In Fine sera bien entendu partenaire de cet évènement.<br />
Plus de détails sur le <a href="http://www.touilleur-express.fr/2011/11/16/devoxx-france-2012/">blog de Nicolas Martignolle.</a></p><p>The post <a href="https://blog.infine.com/devoxx-2011-annonces-1397">Devoxx 2011 – annonces</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/devoxx-2011-annonces-1397/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ce que j&#8217;aime dans Play!</title>
		<link>https://blog.infine.com/ce-que-j%e2%80%99aime-dans-play-10?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ce-que-j%25e2%2580%2599aime-dans-play</link>
					<comments>https://blog.infine.com/ce-que-j%e2%80%99aime-dans-play-10#comments</comments>
		
		<dc:creator><![CDATA[Florian Boulay]]></dc:creator>
		<pubDate>Fri, 18 Feb 2011 09:59:53 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[full-stack]]></category>
		<category><![CDATA[play]]></category>
		<category><![CDATA[play framework]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=10</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">3</span> <span class="rt-label rt-postfix">min.</span></span> Je suis devenu un adepte du framework Play!. Je ne le pratique pas depuis longtemps, seulement depuis 10 mois environ. Mais la courbe d&#8217;apprentissage est vraiment rapide. Une semaine est suffisante pour être à l&#8217;aise et être autonome. J&#8217;ai la modeste prétention, dans cet article, de montrer 2 ou 3 trucs qui font de ce &#8230;</p>
<p>The post <a href="https://blog.infine.com/ce-que-j%e2%80%99aime-dans-play-10">Ce que j’aime dans Play!</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">3</span> <span class="rt-label rt-postfix">min.</span></span><p><a href="https://blog.infine.com/wp-content/uploads/2011/01/play_logo.png" class="fancyboxgroup" rel="gallery-10"><img loading="lazy" decoding="async" class="alignleft size-full wp-image-447" src="https://blog.infine.com/wp-content/uploads/2011/01/play_logo.png" alt="play logo" width="144" height="65" /></a>Je suis devenu un adepte du framework Play!. Je ne le pratique pas depuis longtemps, seulement depuis 10 mois environ. Mais la courbe d&#8217;apprentissage est vraiment rapide. Une semaine est suffisante pour être à l&#8217;aise et être autonome. J&#8217;ai la modeste prétention, dans cet article, de montrer 2 ou 3 trucs qui font de ce framework une nouvelle manière de voir le web en Java.</p>
<p>Pour commencer, Play! est très simple à installer. Il suffit de décompresser le zip dans un répertoire, et de créer une variable <em>PLAY_HOME</em> qui pointe sur ce répertoire. Play! a uniquement besoin de Java comme pré-requis pour fonctionner. Et c&#8217;est tout ! Pour rappel, la plupart des autres frameworks web Java ont au moins besoin d&#8217;un serveur d&#8217;application&#8230;</p>
<p>Comme Play! embarque un serveur web, il se suffit à lui-même. Cette notion est appelée &#8220;full-stack&#8221;. Elle signifie que Play! est autonome à la fois dans son mode de développement en proposant tout ce qu&#8217;il faut pour faire une application web, de la couche présentation à l&#8217;accès aux données, et également lors de l&#8217;exécution des applications Play! qui tournent grâce au serveur web intégré.</p>
<p>Play! propose de nombreuses fonctionnalités peu répandues dans le monde du web en java. Par exemple, le code modifié est pris à chaud par le serveur web, il suffit de rafraîchir le navigateur pour voir sa modification ! La gestion d&#8217;erreur est également poussée. Lorsqu&#8217;une exception se produit, l&#8217;erreur s&#8217;affiche très clairement dans le navigateur. Comme le montre l&#8217;image suivante :<br />
<figure id="attachment_458" aria-describedby="caption-attachment-458" style="width: 300px" class="wp-caption aligncenter"><a href="https://blog.infine.com/wp-content/uploads/2011/01/play_exception_page.png" class="fancyboxgroup" rel="gallery-10"><img decoding="async" src="https://blog.infine.com/wp-content/uploads/2011/01/play_exception_page-300x160.png" alt="Play exception page" /></a><figcaption id="caption-attachment-458" class="wp-caption-text"><em>Cliquez sur l'image pour l'agrandir</em></figcaption></figure></p>
<p>Le développement rapide est une des caractéristiques de Play! On passe beaucoup plus de temps à coder qu&#8217;à faire de la configuration ou de l&#8217;installation. Et ce n&#8217;est pas tout, Play! propose beaucoup de moyens d&#8217;accélérer le développement. Je vais donc vous en montrer quelques uns. Je ne compte pas énumérer tout ce qui fait que Play! permet de développer rapidement, mais seulement donner un aperçu.<br />
Play! propose sur son site, une documentation très complète, ainsi qu&#8217;un tutoriel bien fait qui permet de se familiariser avec les notions principales du framework. Si on peut paraître sceptique devant tant de d&#8217;enthousiasme, faire le tutoriel permettra à quiconque de se rendre compte de la rapidité avec laquelle le développement se fait avec Play!.</p>
<p><span id="more-10"></span></p>
<h1>Arborescence</h1>
<p>Ceux qui connaissent Ruby on Rails et Grails ont déjà les bases pour Play!. Par exemple, l&#8217;arborescence des répertoires est très similaire :<br />
<a href="https://blog.infine.com/wp-content/uploads/2010/05/play_directory_structure.png" class="fancyboxgroup" rel="gallery-10" title=""><img loading="lazy" decoding="async" src="https://blog.infine.com/wp-content/uploads/2010/05/play_directory_structure.png" alt="Play directory structure" title=""Play directory structure" width="90" height="108" class="alignnone size-full wp-image-451" /></a><br />
Les répertoires ont des noms explicites, par exemple le répertoire <em>public</em> permet au serveur web de renvoyer des ressources directement, telles que des images ou des scripts.<br />
Le répertoire <em>conf</em> contient les fichiers de configuration comme son nom l&#8217;indique. Par défaut, Play! en crée trois : </p>
<ul>
<li>Un pour l&#8217;application de l&#8217;application et du serveur web</li>
<li>Un pour définir les URL de l&#8217;application</li>
<li>Un dernier contenant les messages de l&#8217;application</li>
</ul>
<p>D&#8217;autres fichiers de configuration peuvent être créer dans ce répertoire, notamment pour chaque langue gérée par votre application.</p>
<h1>La puissance dans le fichier de configuration</h1>
<p><em>Application.conf</em> est un fichier similaire à un fichier properties. Il est créé par Play! lors de la création d&#8217;une application. Il contient plein de valeurs essentielles pour configurer le serveur web, telles que le port à utiliser, le nom du cookie. Il contient également des propriétés permettant de configurer l&#8217;application comme la base de données, la configuration JPA, du cache&#8230;</p>
<p>Le gros avantage de ce fichier, est qu&#8217;il peut être l&#8217;unique fichier de configuration de l&#8217;application, et ce quel que soit l&#8217;environnement sur lequel est déployé la web app ! En effet Play! intègre un système qui permet de surcharger des valeurs dans le fichier de configuration. Lors du lancement de l&#8217;application, il suffit de préciser un paramètre supplémentaire sur la ligne de commande pour choisir les propriétés à appliquer. Comme ce n&#8217;est sûrement pas clair, voici un exemple :</p>
<pre class="brush: java; title: ; notranslate">
%integration.application.mode=dev
%production.application.mode=prod
application.mode=dev
</pre>
<p>Le fichier ci-dessus est un extrait d&#8217;un fichier de configuration <em>application.conf</em>. Il contient 3 fois la même propriété nommée <em>application.mode</em>. Certaines sont suffixées ce qui permet de donner une valeur précise selon si l&#8217;application est lancée en intégration ou en production. Par défaut, la valeur sera celle de ligne 3 si le paramètre n&#8217;est pas indiqué. C&#8217;est super pratique et très bien pensé !</p>
<h1>Le rechargement à chaud du code et de la conf</h1>
<p>La propriété que j&#8217;ai montré dans l&#8217;extrait du fichier <em>application.conf</em> dans le paragraphe précédent, est une clé très spéciale, qui permet encore à Play! de se distinguer. Elle permet d&#8217;indiquer au framework que l&#8217;application est en mode développement ou production. La distinction est très importante pour le développeur, et pour la sécurité de l&#8217;application.</p>
<p>Le mode <em>dev</em> permet au développeur un gain de temps maximum. Lors du développement, un changement sur un fichier de code ou de configuration sera pris à chaud par le framework. Un rafraîchissement de la page du navigateur, et c&#8217;est pris en compte ! C&#8217;est tout simplement du bonheur de développer dans ces conditions.<br />
Le mode <em>production</em> interdit, bien entendu, le rechargement du code à chaud, mais il permet également de précompiler les fichiers java et les fichiers de templates (qui sont les fichiers permettant l&#8217;affichage des pages web). Les performances sont donc meilleures en mode <em>production</em> qu&#8217;en mode <em>développement</em>.</p>
<h1>Sans état !</h1>
<p>Play! est un framework sans état. Cela signifie qu&#8217;aucune session n&#8217;est conservée du côté du serveur. Cette philosophie est à l&#8217;opposée de la plupart des frameworks java bâtis sur la norme servlet. Cela permet à Play! de se rapprocher de la philosophie initiale du protocole HTTP où chaque requête est indépendante de la précédente, donc sans état. Le framework sait qui effectue la requête grâce au cookie.<br />
Du côté serveur, il faut donc repenser sa manière de gérer les requêtes sans état. Par exemple, si des objets doivent être stockés pour être utilisés lors des requêtes suivantes, il faudra utiliser un cache ou la base de donnée directement. D&#8217;ailleurs à propos du cache, Play! intègre un cache directement basé sur EhCache.<br />
Le fait que Play! soit sans état permet d&#8217;avoir une architecture scalable. Cela permet aussi au framework de gérer très facilement les requêtes de type REST qui sont également des requêtes sans état.<br />
Encore une bonne raison d&#8217;essayer Play!.</p>
<h2>Exemple d&#8217;URL de type REST</h2>
<p>Allez, je vous donne un exemple de REST implémenté dans Play!. L&#8217;exemple suivant permet d&#8217;effacer une personne de l&#8217;application.<br />
L&#8217;unique page de l&#8217;application affiche une liste de personnes. La seule action possible est d&#8217;en effacer une :<br />
<a href="https://blog.infine.com/wp-content/uploads/2011/01/list_person.png" class="fancyboxgroup" rel="gallery-10"><img loading="lazy" decoding="async" src="https://blog.infine.com/wp-content/uploads/2011/01/list_person.png" alt="list of persons" width="207" height="82" class="aligncenter size-full wp-image-488" /></a><br />
Le fait de cliquer sur le lien <em>delete</em> appelera une URL définie dans le fichier de configuration <em>routes</em> dont voici l&#8217;extrait concerné :</p>
<pre class="brush: java; title: ; notranslate">
DELETE        /person/{id}         Application.deletePerson
</pre>
<p>Ce fichier définie une URL de type REST. Elle signifie qu&#8217;une URL de type <em>/person/348</em> avec la méthode HTTP <em>DELETE</em> appelera la méthode <em>Application.deletePerson</em> avec le paramètre 348.<br />
Lorsqu&#8217;on affiche la page d&#8217;accueil, la log indique :</p>
<pre class="brush: java; title: ; notranslate">
21:00:57,315 INFO  ~ URL called : GET localhost/
</pre>
<p>Ensuite, une fois que nous cliquons sur le lien delete :</p>
<pre class="brush: java; title: ; notranslate">
21:06:24,937 INFO  ~ URL called : DELETE localhost/person/2
</pre>
<p>Evidemment, l&#8217;affichage des personnes fonctionne tel qu&#8217;attendu :<br />
<a href="https://blog.infine.com/wp-content/uploads/2011/01/list_person_with_deleted_person.png" class="fancyboxgroup" rel="gallery-10"><img loading="lazy" decoding="async" src="https://blog.infine.com/wp-content/uploads/2011/01/list_person_with_deleted_person.png" alt="list with person deleted" width="195" height="55" class="aligncenter size-full wp-image-489" /></a></p>
<p>Le code java est extrêmement simple. Voici la méthode affichant l&#8217;URL et la méthode HTTP pour chaque requête HTTP :</p>
<pre class="brush: java; title: ; notranslate">
@Before
static void printHttpInfos() {
	Logger.info(&quot;URL called : %s %s&quot;, request.method, request.domain + request.path);
}
</pre>
<p>Et voici le code java permettant la suppression d&#8217;une personne :</p>
<pre class="brush: java; title: ; notranslate">
public static void deletePerson(long id) {
	Person.&lt;Person&gt; findById(id).delete();
	index();
}
</pre>
<p>Je ne vais pas vous décrire ce que fait chaque ligne de code. Je voulais simplement montrer à quel point il est facile de faire des choses qui sont plus compliquées sans Play!. Encore une fois, n&#8217;hésitez pas à aller faire le tutoriel sur le site de Play!, on y apprend toutes les bases et notamment ce que je viens de vous montrer.</p>
<h1>Les tests</h1>
<p>Dans un framework moderne, la prise en charge des tests est indispensable, et Play! n&#8217;y échappe pas. Les tests Play! sont basés sur deux librairies très connues : JUnit et Selenium.<br />
En lançant le serveur en mode <em>test</em>, les tests peuvent être lancés via une page dédiée sur l&#8217;application web. C&#8217;est très pratique pour lancer manuellement des tests via le browser.<br />
D&#8217;autre part les données de tests peuvent être initialisées grâce à un fichier YAML. Voici le fichier utilisé pour initialiser les données du paragraphe précédent (dans mon cas je l&#8217;ai utilisé pour initialiser la base de données de mon application) :</p>
<pre class="brush: plain; title: ; notranslate">
Person(test1):
    firstName: Florian
    lastName: Boulay

Person(test2):
    firstName: Antonio
    lastName: Goncalves

Person(test3):
    firstName: Antoine
    lastName: Ramponi
</pre>
<p>Play! permet de créer 3 types de tests :</p>
<ul>
<li>Les tests unitaires : les classes doivent hériter de la classe <em>UnitTest</em>. C&#8217;est l&#8217;équivalent d&#8217;un test JUnit classique.</li>
<li>Les tests fonctionnels : les classes doivent hériter de la classe <em>FunctionnalTest</em>. Ce sont des tests d&#8217;intégration avec l&#8217;application web.</li>
<li>Les tests de validation : ce sont des tests Selenium.</li>
</ul>
<h2>Les tests  fonctionnels</h2>
<p>Je vais faire un petit zoom sur les tests dits fonctionnels.</p>
<p>Pour cela j&#8217;ai un peu modifié l&#8217;exemple utilisé précédemment afin d&#8217;avoir plus de cas de tests possibles. La mini application web ne comporte toujours qu&#8217;une seule page, mais elle est désormais composée de 2 listes : une liste d&#8217;employés disponibles, et une des employés d&#8217;astreinte. L&#8217;interface ressemble à ceci :<br />
<a href="https://blog.infine.com/wp-content/uploads/2011/01/managing_employees_2.png" class="fancyboxgroup" rel="gallery-10" title="Managing employees"><img loading="lazy" decoding="async" src="https://blog.infine.com/wp-content/uploads/2011/01/managing_employees_2-300x167.png" alt="Managing employees" title="Managing employees" width="300" height="167" class="aligncenter size-medium wp-image-582" srcset="https://blog.infine.com/wp-content/uploads/2011/01/managing_employees_2-300x167.png 300w, https://blog.infine.com/wp-content/uploads/2011/01/managing_employees_2.png 340w" sizes="(max-width: 300px) 100vw, 300px" /></a><br />
Le fait de cliquer sur <em>on call</em> permet de faire passer la personne d&#8217;astreinte en la mettant dans la seconde liste. Le fait de cliquer sur <em>free</em> permet de faire l&#8217;inverse.</p>
<p>Comme dit précédemment les classes de test doivent hériter de la classe <em>FunctionnalTest</em>. De plus, le serveur doit être lancé en mode test. Voici un exemple de test fonctionnel permettant de tester l&#8217;unique page de cette application. La première méthode teste l&#8217;état initial, c&#8217;est-à-dire les 3 personnes qui sont présentes dans la liste des employés disponibles. La seconde méthode teste le passage d&#8217;une personne de la première liste à la seconde en cliquant sur le lien <em>on call</em> :</p>
<pre class="brush: java; title: ; notranslate">
public class EmployeesTest extends FunctionalTest {

	@Before
	public void setUp() {
		Logger.debug(&quot;Reloading all data&quot;);
		Fixtures.deleteAll();
		Fixtures.load(&quot;data.yml&quot;);
	}

	@Test
	public void testStartState() throws Exception {
		Response response = GET(&quot;/&quot;);
		// test the 200 status
		assertIsOk(response);
		String httpBody = getContent(response);
		assertTrue(httpBody.length() &gt; 0);
		// test that 3 &lt;li&gt; are returned
		assertContentMatch(&quot;(?s)&lt;ul&gt;\\s*&quot; +
							&quot;&lt;li&gt;Florian Boulay.*&quot; +
							&quot;&lt;li&gt;Antonio Goncalves.*&quot; +
							&quot;&lt;li&gt;Antoine Ramponi.*&quot; +
							&quot;&lt;/ul&gt;&quot;, response);
	}

	@Test
	public void testOnCallPeople() throws Exception {
		// make Antonio Goncalves on call
		Person antonio = Person.find(&quot;byFirstName&quot;, &quot;Antonio&quot;).&lt;Person&gt; first();
		Response response = PUT(&quot;/person/onCall/&quot; + antonio.id, &quot;text/html&quot;, &quot;&quot;);
		// test the 302 response
		assertStatus(302, response);
		String httpBody = getContent(response);
		assertTrue(httpBody.length() == 0);
		java.net.URL locationHeader = new java.net.URL(response.getHeader(&quot;location&quot;));
		response = GET(locationHeader.getPath());
		// test the 200 response
		httpBody = getContent(response);
		assertTrue(httpBody.length() &gt; 0);
		assertContentMatch(&quot;(?s)&lt;ul&gt;\\s*&quot; +
							&quot;&lt;li&gt;Florian Boulay.*&quot; +
							&quot;&lt;li&gt;Antoine Ramponi.*&quot; +
							&quot;&lt;/ul&gt;&quot;, response);
		assertContentMatch(&quot;(?s)&lt;ul&gt;\\s*&quot; +
							&quot;&lt;li&gt;Antonio Goncalves.*&quot; +
							&quot;&lt;/ul&gt;&quot;, response);
	}

}
</pre>
<p>Voici les quelques logs générées :</p>
<pre class="brush: java; title: ; notranslate">
00:39:21,725 DEBUG ~ Reloading all data
00:39:21,777 INFO  ~ URL called : GET localhost/
00:39:22,469 DEBUG ~ Reloading all data
00:39:22,505 INFO  ~ URL called : PUT localhost/person/onCall/8
00:39:22,525 INFO  ~ URL called : GET localhost/
</pre>
<h1>L&#8217;API simple</h1>
<p>Ce qui est très agréable au quotidien avec Play! est la facilité d&#8217;utilisation des API disponibles. Je n&#8217;ai pas montré beaucoup de code dans cet article, mais vous pouvez constater la simplicité de lecture du code fait avec Play!. Cela permet comme presque tout le reste, d&#8217;avoir une marge de progression rapide, d&#8217;être opérationnel bien plus vite qu&#8217;avec d&#8217;autres framework web&#8230; Mais tout ça, je l&#8217;ai déjà dit. Je vais plutôt vous montrer quelques lignes utilisant l&#8217;API de Play!, vous pourrez vous faire une idée bien plus facilement qu&#8217;avec un long discours.</p>
<pre class="brush: java; title: ; notranslate">
// récupérer la requête HTTP courante
Request request = Http.Request.current();

// récupérer l'EntityManager 
EntityManager em = JPA.em();

// faire un appel rapide à un web service
HttpResponse response = WS.url(&quot;http://www.w3schools.com/webservices/tempconvert.asmx?op=FahrenheitToCelsius&quot;).get();

// récupérer toutes les entités Person (entité au sens objet du modèle de donnée)
List&lt;Person&gt; findAll = Person.findAll()
// compter le nombre d'entités Person
long count = Person.count();
// faire des requêtes simple sur l'entité Person
List&lt;Person&gt; allAntos = Person.find(&quot;byFirstNameLike&quot;, &quot;anto%&quot;).fetch();
// etc......
</pre>
<h3>Petit mot de la fin</h3>
<p>Cet article touche à sa fin. J&#8217;aurais tellement voulu vous en montrer plus comme la validation super simple, les templates HTML, comment répondre au client en fonction du format qu&#8217;il demande (XML, JSON&#8230;.), mais c&#8217;est déjà assez long. Je profiterai d&#8217;un prochain article pour me concentrer sur un aspect plus précis du framework.<br />
J&#8217;espère avoir convaincu les quelques sceptiques à propos du framework Play!</p>
<h3>Ressources</h3>
<p>Site officiel du framework Play! : <a href="http://www.playframework.org/">http://www.playframework.org/</a><br />
Le google group très actif : <a href="http://groups.google.com/group/play-framework">http://groups.google.com/group/play-framework</a><br />
Le repository git du code source de Play! : <a href="https://github.com/playframework/play">https://github.com/playframework/play</a><br />
Le premier livre sur Play! : <a href="http://www.the-play-book.co.uk/">http://www.the-play-book.co.uk/</a></p><p>The post <a href="https://blog.infine.com/ce-que-j%e2%80%99aime-dans-play-10">Ce que j’aime dans Play!</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/ce-que-j%e2%80%99aime-dans-play-10/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Devoxx 2010, vu de l&#8217;intérieur</title>
		<link>https://blog.infine.com/devoxx-2010-vu-de-linterieur-366?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=devoxx-2010-vu-de-linterieur</link>
					<comments>https://blog.infine.com/devoxx-2010-vu-de-linterieur-366#comments</comments>
		
		<dc:creator><![CDATA[Florian Boulay]]></dc:creator>
		<pubDate>Mon, 06 Dec 2010 18:00:30 +0000</pubDate>
				<category><![CDATA[Conférence]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[cloudbees]]></category>
		<category><![CDATA[devoxx]]></category>
		<category><![CDATA[play framework]]></category>
		<guid isPermaLink="false">https://blog.infine.com/?p=366</guid>

					<description><![CDATA[<p><span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span> Mise à jour du 6 décembre 2010 :CloudBees a levé 4 millions de dollars. Plus de détails sur le blog de CloudBees. Devoxx 2010 s&#8217;est tenue toute cette semaine à Anvers. Entre 2 présentations de Brian Goetz, Joshua Bloch ou Mark Reinhold, je suis allé voir quelques personnalités du monde java afin d&#8217;en savoir plus &#8230;</p>
<p>The post <a href="https://blog.infine.com/devoxx-2010-vu-de-linterieur-366">Devoxx 2010, vu de l’intérieur</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Temps de lecture : </span> <span class="rt-time">4</span> <span class="rt-label rt-postfix">min.</span></span><p><strong>Mise à jour du 6 décembre 2010 :</strong>CloudBees a levé 4 millions de dollars. Plus de détails sur le <a href="http://blog.cloudbees.com/2010/11/cloudbees-raises-4m-usd-from-matrix.html">blog de CloudBees</a>.</p>
<p>Devoxx 2010 s&#8217;est tenue toute cette semaine à Anvers. Entre 2 présentations de Brian Goetz, Joshua Bloch ou Mark Reinhold, je suis allé voir quelques personnalités du monde java afin d&#8217;en savoir plus sur leur actualité et leurs impressions.</p>
<h1>Stephan Janssen</h1>
<p><a href="https://blog.infine.com/wp-content/uploads/2010/11/stephanJanssen.jpg" class="fancyboxgroup" rel="gallery-366" title="Stephan Janssen"><img loading="lazy" decoding="async" class="alignleft size-full wp-image-382" title="Stephan Janssen" src="https://blog.infine.com/wp-content/uploads/2010/11/stephanJanssen.jpg" alt="Stephan Janssen picture" width="92" height="114" /></a>Créateur du BeJUG et de <a href="http://www.devoxx.com">Devoxx</a>. Je suis allé le voir pour avoir quelques détails sur l&#8217;organisation d&#8217;un tel évènement.</p>
<p><strong>Bonjour Stephan, peux-tu  présenter Devoxx à ceux qui ne connaissent pas ?</strong><br />
Devoxx est une conférence annuelle qui est organisée par le Java User Group belge. C&#8217;est déjà la neuvième édition. Quelques statistiques : 3000 personnes qui viennent de 40 pays, et cela dure 5 jours à Anvers dans le deuxième plus grand complexe de cinéma d&#8217;Europe.<br />
<span id="more-366"></span><br />
<strong>Comment expliques-tu le succès de Devoxx ?</strong><br />
D&#8217;abord le prix qui est vraiment pas cher, moins de 500€ pour 5 jours. On a aussi des rock stars qui viennent ! On a des personnes comme Joshua Bloch, Romain Guy etc. Le lieu aussi avec des écrans géants est vraiment chouette.</p>
<p><strong>Penses-tu que Devoxx se déroulera ailleurs dans un futur proche ?</strong><br />
L&#8217;autre endroit possible est le Heysel à Bruxelles, mais le problème est que nous devons créer des salles nous-mêmes, ce qui aurait pour conséquence que le prix de l&#8217;entrée doublerait. Je préfère &#8220;less is more&#8221;.</p>
<p><strong>As-tu eu le temps d&#8217;assister à quelques sessions ?</strong><br />
Oui, j&#8217;en ai vu quelques sessions. Ca roule bien, mais heureusement on également <a href="http://parleys.com">parleys</a> où toutes les sessions seront diffusées.</p>
<p><strong>Merci</strong><br />
Merci</p>
<h1>Sacha Labourey</h1>
<p><a href="https://blog.infine.com/wp-content/uploads/2010/11/sachaLabourey.jpg" class="fancyboxgroup" rel="gallery-366" title="Sacha Labourey"><img loading="lazy" decoding="async" class="alignleft size-full wp-image-384" title="Sacha Labourey" src="https://blog.infine.com/wp-content/uploads/2010/11/sachaLabourey.jpg" alt="Sacha Labourey picture" width="87" height="114" /></a>Après une carrière chez JBoss, Sacha a créé une société <a href="http://cloudbees.com/">CloudBees.</a></p>
<p><strong>Bonjour Sacha, quelle est la raison de ta venue à Devoxx cette année ?</strong><br />
Manger des sandwichs, et boire des coca zero principalement ! Mais surtout présenter CloudBees, ma société.</p>
<p><strong>Présente nous CloudBees.</strong><br />
CloudBees est une société qui vit dans les nuages, et qui vise à rendre les développeurs à nouveau en contrôle de l&#8217;informatique, qui a été trop longtemps volé par ces messieurs de l&#8217;IT.<br />
Le désir est de pouvoir faire totalement faire ses développements dans le cloud, ensuite les tests unitaires et le Q&amp;A de manière générale, et ensuite la mise en production. Donc l&#8217;unité sur laquelle on se focalise en tant que développeur sera vraiment l&#8217;application, on ne se soucie plus du tout de l&#8217;IT, on ne soucie plus du tout de virtual machine, de java virutal machine, d&#8217;operation system, de storage, de backup, tout ça doit disparaître. On se focalise sur l&#8217;application, et nous on fera le reste.</p>
<p><strong>CloudBees est uniquement destiné aux applications java ?</strong><br />
Aujourd&#8217;hui on est orienté sur la machine virtuelle java, ça peut être scala, jRuby ou autre chose. Aujourd&#8217;hui la majorité utilise java malgré sa mort annoncé jour après jour, c&#8217;est quand même un écosystème extrêmement saint et fort, mais rien dans l&#8217;infrastructure qu&#8217;on est en train de mettre en place en terme de process, en terme de provisionning et autre ne dépend réellement de java. C&#8217;est suffisamment générique, mais il faut choisir ses guerres, la notre c&#8217;est celle de java pour l&#8217;instant.</p>
<p><strong>Pour terminer, quelles sont tes impressions sur Devoxx 2010 ?</strong><br />
J&#8217;ai pas encore eu le temps d&#8217;aller voir des sessions, mais je retrouve tout à fait l&#8217;esprit JavaPolis de l&#8217;époque, donc ça se passe très bien, et on est à peine mieux respecté qu&#8217;à JavaOne donc ça fait toujours plaisir.</p>
<p><strong>Merci beaucoup Sacha.</strong><br />
Merci !</p>
<h1>Nicolas Leroux</h1>
<p><a href="https://blog.infine.com/wp-content/uploads/2010/11/nicolasleroux.jpg" class="fancyboxgroup" rel="gallery-366" title="Nicolas Leroux"><img loading="lazy" decoding="async" class="alignleft size-full wp-image-383" title="Nicolas Leroux" src="https://blog.infine.com/wp-content/uploads/2010/11/nicolasleroux.jpg" alt="Nicolas Leroux picture" width="114" height="114" /></a>Nicolas est expatrié aux Pays-Bas où il travaille en tant que développeur pour la société Lunatech. Il est également un des contributeurs les plus actifs du framework  <a href="http://www.playframework.org/">Play!</a>. C&#8217;est à ce titre que je suis allé le voir.</p>
<p><strong>Bonjour Nicolas, quelle est la raison de ta venue à Devoxx cette année ?</strong><br />
Pour voir les conférences, faire du networking et aussi pour promouvoir Play! bien sûr.</p>
<p><strong>Il n&#8217;y a pas de session sur Play! cette année, en avez-vous proposé une ?</strong><br />
Nous avions proposé une vraie session Play!, pas dans le BoF. Vue la concurrence acharnée qu&#8217;il y a à Devoxx, on a été refusé, c&#8217;est pas grave, l&#8217;année prochaine on réessaiera.</p>
<p><strong>Play! 1.1 est sorti il y a un peu moins d&#8217;un mois, quelles sont les prochaines étapes ?</strong><br />
Il y en a beaucoup ! Il y a plusieurs axes de travail. Guillaume Bort est en train de travailler sur une partie qui s&#8217;appelle Evolution, qui permet de migrer ses bases de données très facilement.<br />
Personnellement, quand j&#8217;ai cinq minutes, je travaille sur un meilleur binding entre JSON et java. Après il a plein d&#8217;autres choses à faire. Ce que j&#8217;aimerais faire, c&#8217;est un conteneur pour JBoss.<br />
<strong>Comme c&#8217;est actuellement le cas pour Glassfish.</strong><br />
Erwan Loisant est train d&#8217;améliorer les librairies clientes pour faire des requêtes à des web services et Peter Hilton travaille sur la documentation</p>
<p><strong>Y a-t-il une roadmap pour la version 1.2 ?</strong><br />
Elle est pas encore définitive, mais la roadmap peut être consultée sur le site <a href="http://playframework.org">playframework.org</a> qui a un lien sur le bug tracker qui est Lighthouse, et là on peut voir la roadmap.</p>
<p><strong>Merci Nicolas, à l&#8217;année prochaine pour une session officielle de Play!</strong><br />
Ou alors si vous avez l&#8217;occasion d&#8217;aller à Paris pour voir Zenexity, c&#8217;est des petits gars sympas et ils vous expliqueront tout !</p><p>The post <a href="https://blog.infine.com/devoxx-2010-vu-de-linterieur-366">Devoxx 2010, vu de l’intérieur</a> first appeared on <a href="https://blog.infine.com">In Fine - Le Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.infine.com/devoxx-2010-vu-de-linterieur-366/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
