<?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>romain.getBlog( ); &#187; play</title>
	<atom:link href="http://linsolas.free.fr/wordpress/index.php/category/java/play/feed/" rel="self" type="application/rss+xml" />
	<link>http://linsolas.free.fr/wordpress</link>
	<description></description>
	<lastBuildDate>Wed, 23 Jan 2013 21:29:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Jouons avec les Entités de Play!</title>
		<link>http://linsolas.free.fr/wordpress/index.php/2011/08/jouons-avec-les-entites-de-play/</link>
		<comments>http://linsolas.free.fr/wordpress/index.php/2011/08/jouons-avec-les-entites-de-play/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 23:09:40 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://linsolas.free.fr/wordpress/?p=165</guid>
		<description><![CDATA[J&#8217;avais évoqué il y a quelques temps déjà Play!, et j&#8217;avais même traduit le tutoriel officiel en français montrant les capacités de ce framework. Ayant eu l&#8217;occasion de me remettre sur Play! ces derniers jours, je ne peux m&#8217;empêcher de vous faire partager le plaisir que j&#8217;ai eu à l&#8217;utiliser en vous parlant d&#8217;un aspect [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://linsolas.free.fr/wordpress/index.php/2010/01/jouons/">J&#8217;avais évoqué</a> il y a quelques temps déjà <a href="http://www.playframework.org/" onclick="pageTracker._trackPageview('/outgoing/www.playframework.org/?referer=');">Play!</a>, et j&#8217;avais même traduit le <a href="http://linsolas.developpez.com/articles/java/play/guide/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/java/play/guide/?referer=');">tutoriel officiel en français</a> montrant les capacités de ce framework.</p>
<p>Ayant eu l&#8217;occasion de me remettre sur Play! ces derniers jours, je ne peux m&#8217;empêcher de vous faire partager le plaisir que j&#8217;ai eu à l&#8217;utiliser en vous parlant d&#8217;un aspect sympathique de ce framework : la gestion des entités.</p>
<p><span id="more-165"></span></p>
<p>Si vous avez déjà eu l&#8217;occasion de vous faire la main sur Play!, vous ne devriez rien apprendre ici. Il s&#8217;agit surtout de donner envie à ceux qui hésitent à se lancer dans l&#8217;aventure Play!.</p>
<h2>L&#8217;entité User</h2>
<p>Commençons par écrire notre entité, que nous appellerons <code>User</code>. Voici le code :</p>
<pre class="brush: java;">
package models;

import javax.persistence.Entity;
import play.db.jpa.Model;

@Entity
public class User extends Model {

    public String name;
    public String email;
    public boolean isAdmin;

    public User() {
    }

    public User(String name, String email, boolean isAdmin) {
        this.name = name;
        this.email = email;
        this.isAdmin = isAdmin;
    }

}
</pre>
<p>Nous notons déjà deux choses importantes :</p>
<ul>
<li>Les propriétés de notre entité sont publiques, et nous ne polluons plus notre classe avec des getters et setters (en attendant les <code>property</code> de Java 8 <img src='http://linsolas.free.fr/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</li>
<li>L&#8217;entité étend la classe <code>play.db.jpa.Model</code>. C&#8217;est ce point que nous allons voir en détail juste après.</li>
</ul>
<h2>La super-classe Model</h2>
<p>Cette super-classe <a href="http://www.playframework.org/documentation/api/1.2.2/play/db/jpa/Model.html" onclick="pageTracker._trackPageview('/outgoing/www.playframework.org/documentation/api/1.2.2/play/db/jpa/Model.html?referer=');">Model</a> (et ses parents) vont nous simplifier grandement la vie, car elle nous évitera l&#8217;écriture d&#8217;un DAO. En effet, nous disposons, simplement grâce à notre entité, des principales méthodes de CRUD (<i>Create, Read, Update, Delete</i>):</p>
<ul>
<li><code>count()</code> pour compter le nombre d&#8217;entités, en fournissant éventuellement des paramètres pour affiner la requête ;</li>
<li><code>save()</code> pour sauver notre entité ;</code></li>
</ul>
<p>Voyons quelques exemples basiques avec un test unitaire :</p>
<pre class="brush: java;">
public class UserTest extends UnitTest {

    @Before
    public void clean() {
        Fixtures.deleteDatabase();
    }

    @Test
    public void testAddition() {
        assertEquals(0, User.count());
        new User(&quot;romain linsolas&quot;, &quot;romain@example.com&quot;, true).save();
        assertEquals(1, User.count());
    }

}
</pre>
<p>On notera que nous nettoyons la base de données en mémoire avant chaque test, afin de ne pas fausser nos résultats. De plus, notre classe JUnit étendant la classe <code>play.test.UnitTest</code> afin de profiter de l'environnement de Play! : création de la base de données en mémoire et la structure des tables, par exemple.</p>
<pre class="brush: java;">
    private void insertUsers() {
        new User(&quot;romain linsolas&quot;, &quot;admin@example.com&quot;, true).save();
        new User(&quot;romain linsolas&quot;, &quot;romain@example.com&quot;, false).save();
        new User(&quot;bob l'eponge&quot;, &quot;bob.leponge@example.com&quot;, false).save();
        new User(&quot;romain gary&quot;, &quot;romain.gary@example.com&quot;, false).save();
    }

    @Test
    public void testFindAll() {
        insertUsers();
        assertEquals(4, User.findAll().size());
    }

    @Test
    public void testFindOneArg() {
        insertUsers();
        List&lt;User&gt; list = User.find(&quot;byName&quot;, &quot;romain linsolas&quot;).fetch();
        assertEquals(2, list.size());
        assertEquals(&quot;romain linsolas&quot;, list.get(0).name);
    }

    @Test
    public void testFindTwoArgs() {
        insertUsers();
        List&lt;User&gt; list = User.find(&quot;byNameAndIsAdmin&quot;, &quot;romain linsolas&quot;, true).fetch();
        assertEquals(1, list.size());
        assertTrue(list.get(0).isAdmin);
    }
</pre>
<p>Dans le code précédent, nous insérons quatre utilisateurs, et nous vérifions que la méthode <code>findAll()</code> nous retourne le nombre correct d'éléments. Nous faisons également une autre vérification, où nous recherchons tous les utilisateurs selon la valeur d'une propriété, ici <code>name</code>. Le dernier test permet de montrer une utilisation un peu plus poussée de la méthode <code>find("…")</code>, où nous cherchons tous les utilisateurs ayant un nom donné et dont l'attribut <code>isAdmin</code> vaut <code>true</code>.</p>
<p>Nous pouvons encore améliorer les choses en fournissant encore plus de détails sur la recherche, par exemple comme ceci :</p>
<pre class="brush: java;">
    @Test
    public void testFindAndOrder() {
        insertUsers();
        List&lt;User&gt; list = User.find(&quot;name = ? order by email desc&quot;, &quot;romain linsolas&quot;).fetch();
        assertEquals(2, list.size());
        assertFalse(list.get(0).isAdmin);
    }
</pre>
<p>où nous cherchons les utilisateurs selon un nom donné, puis en les triant selon l'adresse mail. Nous aurions pu encore corsé les choses en mettant en place des jointures avec d'autres entités...</p>
<p>Bien entendu, cette fonctionnalité ne marche pas seulement avec les méthodes de comptage ou de recherche, on pourra l'utiliser avec la méthode <code>delete()</code> :</p>
<pre class="brush: java;">
    @Test
    public void testDelete() {
        insertUsers();
        User.delete(&quot;name = ?&quot;, &quot;romain linsolas&quot;);
        assertEquals(2, User.count());
    }
</pre>
<p>Ce ne sont là que quelques possibilités, la classe <code>Model</code> offre d'autres fonctionnalités permettant les opérations de <i>CRUD</i>.</p>
<h2>Conclusion</h2>
<p>Au final, il n'y rien de révolutionnaire ici, mais que de temps gagné grâce à ces méthodes si utiles ! C'est sans doute ça la force première de Play! : nous offrir un retour rafraichissant à la <b>simplicité</b>. Et ça, c'est bon !</p>
<p>Pour aller plus loin :</p>
<ul>
<li><a href="http://www.playframework.org/" onclick="pageTracker._trackPageview('/outgoing/www.playframework.org/?referer=');">Site de Play!</a></li>
<li><a href="http://linsolas.developpez.com/articles/java/play/guide/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/java/play/guide/?referer=');">Tutoriel que j'ai traduit en français sur Play!</a></li>
<li><a href="http://www.playframework.org/documentation/1.2.2/jpa" onclick="pageTracker._trackPageview('/outgoing/www.playframework.org/documentation/1.2.2/jpa?referer=');">Les entités JPA de Play!</a></li>
</ul>
<a href="javascript:toggleStartStop();PicLensLite.start({feedUrl:'http://linsolas.free.fr/wordpress/wp-content/plugins/wp-piclens/mrss.php?id=165'});">Start Slide Show with PicLens Lite <img src="http://linsolas.free.fr/wordpress/wp-content/plugins/wp-piclens/PicLensButton.png" alt="PicLens" width="16" height="12" border="0" align="top"></a>]]></content:encoded>
			<wfw:commentRss>http://linsolas.free.fr/wordpress/index.php/2011/08/jouons-avec-les-entites-de-play/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tutoriel Play !</title>
		<link>http://linsolas.free.fr/wordpress/index.php/2010/02/tutoriel-play/</link>
		<comments>http://linsolas.free.fr/wordpress/index.php/2010/02/tutoriel-play/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 19:13:06 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://linsolas.free.fr/wordpress/?p=111</guid>
		<description><![CDATA[Lors de mon précédent billet, j&#8217;avais évoqué le framework Play en montrant comment réaliser un simple Hello World. J&#8217;avais promis d&#8217;aller plus loin dans l&#8217;étude de ce framework, j&#8217;ai en fin de compte traduit l&#8217;intégralité du tutoriel présenté sur le site officiel. A travers ce tutoriel, vous pourrez découvrir plus de fonctionnalités de Play, d&#8217;apprendre [...]]]></description>
			<content:encoded><![CDATA[<p>Lors de mon <a href="http://linsolas.free.fr/wordpress/index.php/2010/01/jouons/">précédent billet</a>, j&#8217;avais évoqué le <a href="http://www.playframework.org" onclick="pageTracker._trackPageview('/outgoing/www.playframework.org?referer=');">framework Play</a> en montrant comment réaliser un simple Hello World.</p>
<p>J&#8217;avais promis d&#8217;aller plus loin dans l&#8217;étude de ce framework, j&#8217;ai en fin de compte traduit l&#8217;intégralité du tutoriel présenté sur le site officiel. A travers ce tutoriel, vous pourrez découvrir plus de fonctionnalités de Play, d&#8217;apprendre la façon dont il gère la persistence, comment créer des pages complexes, d&#8217;ajouter de l&#8217;authentification, etc.</p>
<p>Vous pouvez lire ma prose sur <a href="http://linsolas.developpez.com/articles/java/play/guide/" onclick="pageTracker._trackPageview('/outgoing/linsolas.developpez.com/articles/java/play/guide/?referer=');">mon site developpez.com</a> !</p>
]]></content:encoded>
			<wfw:commentRss>http://linsolas.free.fr/wordpress/index.php/2010/02/tutoriel-play/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Jouons !</title>
		<link>http://linsolas.free.fr/wordpress/index.php/2010/01/jouons/</link>
		<comments>http://linsolas.free.fr/wordpress/index.php/2010/01/jouons/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 21:29:24 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[play]]></category>

		<guid isPermaLink="false">http://linsolas.free.fr/wordpress/?p=96</guid>
		<description><![CDATA[Non, rangez les Nintendo, je ne vais pas parler de jeu, mais de Play !. Play ! est donc un framework créé par Guillaume Bort qui s&#8217;apparente quelque peu à Grails, mais 100% orienté Java. Je laisse le touilleur donner quelques explications supplémentaires sur cet outil. Etape #1: Installons Play ! Pour installer Play!, rien [...]]]></description>
			<content:encoded><![CDATA[<p>Non, rangez les Nintendo, je ne vais pas parler de jeu, mais de <a href="http://www.playframework.org" onclick="pageTracker._trackPageview('/outgoing/www.playframework.org?referer=');">Play !</a>. <strong>Play !</strong> est donc un framework créé par <a href="http://guillaume.bort.fr/" onclick="pageTracker._trackPageview('/outgoing/guillaume.bort.fr/?referer=');">Guillaume Bort</a> qui s&#8217;apparente quelque peu à Grails, mais 100% orienté Java. Je <a href="http://www.touilleur-express.fr/2009/12/13/framework-play-a-decouvrir-le-jeudi-17-decembre/" onclick="pageTracker._trackPageview('/outgoing/www.touilleur-express.fr/2009/12/13/framework-play-a-decouvrir-le-jeudi-17-decembre/?referer=');">laisse le touilleur</a> donner quelques explications supplémentaires sur cet outil.</p>
<p><img class="aligncenter" title="Play !" src="http://www.playframework.org/images/play.png" alt="" width="177" height="64" /></p>
<h1>Etape #1: Installons Play !</h1>
<p>Pour installer <strong>Play!</strong>, rien de plus simple : il suffit de télécharger le ZIP (<a href="http://download.playframework.org/" onclick="pageTracker._trackPageview('/outgoing/download.playframework.org/?referer=');">ici</a>), puis de le décompresser sur son disque. C&#8217;est tout ! Pensons à ajouter le répertoire ainsi décompressé dans notre variable d&#8217;environnement Windows <em>PATH</em>, histoire de pouvoir taper la commande <strong>play</strong> en ligne de commande&#8230;</p>
<h1>Etape #2 : Démarrons !</h1>
<p>Allons à la racine de notre répertoire d&#8217;installation de <strong>Play!</strong>, et tapons la commande suivante :</p>
<pre class="brush: plain;">d:\developpement\play-1.0&gt; play new helloworld</pre>
<p>La commande nous demande alors quelle est le nom de notre nouvelle application :</p>
<pre class="brush: plain;">d:\developpement\play-1.0&gt;play new helloworld
~        _            _
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/
~
~ play! 1.0, http://www.playframework.org
~
~ The new application will be created in d:\developpement\play-1.0\helloworld
~ What is the application name? HelloWorld
~
~ OK, the application is created.
~ Start it with : play run heloworld
~ Have fun!
~</pre>
<p>Notre première application est prête ! Eh oui ! Voyons les choses plus en détails&#8230; Regardons le contenu du répertoire ainsi créé :</p>
<pre class="brush: plain;">app/
conf/
lib/
public/
test/</pre>
<p>Ces répertoires ont les rôles les suivants :</p>
<ul>
<li><em>app</em> : contient le code de l&#8217;application elle-même, à savoir les classes Java ainsi que les pages HTML.</li>
<li><em>conf</em> : les fichiers de configuration, en particulier <em>application.conf</em> qui contient les paramètres de notre application (par exemple le port du serveur, la configuration de la connection à la base de données, etc.), le fichier <em>routes</em>, qui définit les liens entre les URL et les pages web. Enfin, ce répertoire contient le fichier <em>messages</em> utilisé pour l&#8217;internationalisation du projet.</li>
<li><em>lib</em> : ce répertoire contient les librairies Java optionnelles.</li>
<li><em>public</em> : place contenant les ressources publiques, à savoir les images, les fichiers Javascript ou CSS.</li>
<li><em>test</em> : le répertoire permet de stocker les fichiers de tests, qu&#8217;il s&#8217;agisse de tests JUnit ou Selenium.</li>
</ul>
<p>Et  ça marche ? Voyons voir&#8230; Lançons la commande suivante :</p>
<pre class="brush: plain;">d:\developpement\play-1.0\helloworld&gt; play run</pre>
<pre class="brush: plain;">d:\developpement\play-1.0\helloworld&gt;play run
~        _            _
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/
~
~ play! 1.0, http://www.playframework.org
~
~ Ctrl+C to stop
~
Listening for transport dt_socket at address: 8000
20:15:17,611 INFO  ~ Starting d:\developpement\play-1.0\helloworld
20:15:20,579 WARN  ~ You're running Play! in DEV mode
20:15:22,111 INFO  ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...</pre>
<p>Rendons-nous sur l&#8217;adresse <a href="http://localhost:9000" onclick="pageTracker._trackPageview('/outgoing/localhost_9000?referer=');">http://localhost:9000</a> (9000 étant le port par défaut du serveur <strong>Play !</strong>) pour visualiser la page par défaut :</p>
<p style="text-align: center;"><img class="aligncenter" title="Page par défaut de Play !" src="http://www.playframework.org/documentation/1.0/images/guide1-2" alt="" width="653" height="406" /></p>
<p>Mais quelle est la magie ? Le fichier <em>conf/routes</em> définit le routage des requêtes au sein de notre application. En particulier :</p>
<pre class="brush: plain;"># Home page
GET     /                                       Application.index</pre>
<p>Cette ligne indique que lorsqu&#8217;un utilisateur se connecte à la racine de notre application (ici http://localhost:9000/), sa requête sera prise en charge la <em>Application.index</em>. Ce contrôleur est visible dans <em>app/controlles/Application.java</em> :</p>
<pre class="brush: java;">package controllers;

import play.mvc.*;

public class Application extends Controller {

  public static void index() {
    render();
  }

}</pre>
<p>La première chose à constater ici c&#8217;est que notre contrôleur étend la classe <em>play.mvc.Controller</em>. Cette classe nous propose &#8211; entre autres &#8211; la méthode <em>render()</em> qui est ici utilisée dans l&#8217;action <em>index</em>. Cette action est par ailleurs définie comme une méthode publique et statique. C&#8217;est la façon de définir une action dans <strong>Play !</strong>. Dans cet exemple, cette dernière ne fait qu&#8217;afficher le contenu d&#8217;un template se trouvant dans <em>app/views/Application/index.html</em> (c&#8217;est le template utilisé par défaut, car nous n&#8217;en avons pas défini dans notre classe Java) :</p>
<pre class="brush: plain;">#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}</pre>
<p>Ce template est divisé en trois parties. Tout d&#8217;abord, on y voit que notre template étend le <em>main.html</em> :</p>
<pre class="brush: xml;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;

&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
  &lt;head&gt;
    &lt;title&gt;#{get 'title' /}&lt;/title&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;/&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; href=&quot;@{'/public/stylesheets/main.css'}&quot; /&gt;
    &lt;link rel=&quot;shortcut icon&quot; type=&quot;image/png&quot; href=&quot;@{'/public/images/favicon.png'}&quot; /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    #{doLayout /}
  &lt;/body&gt;
&lt;/html&gt;</pre>
<p>Dans ce fichier, on y voit le tag <em>#{doLayout /}</em> qui marque l&#8217;endroit où sera inseré le contenu du fichier <em>Application/index.html</em>.</p>
<p>Ensuite, on constate la façon dont un paramètre du template (le <em>title</em>) est passé à la page parente, via les <em>#{set &#8230;/}</em> et <em>#{get &#8230;/}</em>.</p>
<p>Enfin, la partie <em>#{welcome /}</em> génère le message d&#8217;accueil que nous avons pu voir précédemment.</p>
<h1>Etape #3 :Utilisons Eclipse</h1>
<p>Pour faciliter le développement de notre application, nous utilisons Eclipse. Pour ce faire, utilisons la commande suivante :</p>
<pre class="brush: plain;">d:\developpement\play-1.0&gt; play eclipsify helloworld</pre>
<p><strong>Play !</strong> se charge alors de créer les fichiers nécessaires à Eclipse :</p>
<pre class="brush: plain;">d:\developpement\play-1.0&gt;play eclipsify helloworld
~        _            _
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/
~
~ play! 1.0, http://www.playframework.org
~
~ OK, the application is ready for eclipse
~ Use File/Import/General/Existing project to import d:\developpement\play-1.0\helloworld into eclipse
~
~ Use eclipsify again when you want to update eclipse configuration files.
~ However, it's often better to delete and re-import the project into your workspace since eclipse keeps dirty caches...
~</pre>
<p>Les fichiers nécessaires à l&#8217;importation du projet dans Eclipse sont désormais créés. Il s&#8217;agit du <em>.project</em>, <em>.classpath</em> et <em>.settings/</em>.</p>
<p>Voilà, nous avons notre première petite application <strong>Play !</strong> qui tourne. On a vu deux ou trois concepts intéressants, mais il y a encore plein de jolies choses à découvrir sur ce framework (si vous avez suivi le lien du Touilleur que je vous ai donné en début de post, vous en avez déjà vu quelques unes) ! Nous les aborderons dans un prochain post, très bientôt !</p>
<h1>Bonus</h1>
<p>Voici la liste des options proposées par la commande <em>play</em> :</p>
<pre class="brush: plain;">C:\developpement\play-1.0\&gt;play help
~        _            _
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/
~
~ play! 1.0, http://www.playframework.org
~
~ For all commands, if the application is not specified, the current directory is used
~ Use 'play help cmd' to get more help on a specific command
~
~ Available commands are:
~ ~~~~~~~~~~~~~~~~~~~~~~~
~ auto-test      Automatically run all application tests
~ classpath      Display the computed classpath
~ clean          Delete temporary files (including the bytecode cache)
~ eclipsify      Create all eclipse configuration files
~ help           Display help on a specific command
~ id             Define the framework ID
~ modules        Display the computed modules list
~ netbeansify    Create all netbeans configuration files
~ new            Create a new application
~ out            Follow logs/system.out file
~ pid            Show the pid of a running application
~ precompile     Precompile all Java sources and templates to speed up application start
~ run            Run the application in the current shell
~ restart        Restart the running application
~ secret         Generate a new secret key
~ status         Display the status of the running application
~ start          Start the application in background
~ stop           Stop the running application
~ test           Run the application in test mode in the current shell
~ war            Export the application as a standalone WAR archive
~
~ Also refer to documentation at http://www.playframework.org/documentation
~</pre>
<a href="javascript:toggleStartStop();PicLensLite.start({feedUrl:'http://linsolas.free.fr/wordpress/wp-content/plugins/wp-piclens/mrss.php?id=96'});">Start Slide Show with PicLens Lite <img src="http://linsolas.free.fr/wordpress/wp-content/plugins/wp-piclens/PicLensButton.png" alt="PicLens" width="16" height="12" border="0" align="top"></a>]]></content:encoded>
			<wfw:commentRss>http://linsolas.free.fr/wordpress/index.php/2010/01/jouons/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
