<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
	<title>Comments for NooCodeCommit</title>
	
	<link>http://www.noocodecommit.com/blog/nicogiard</link>
	<description>le petit monde de Play! framework (et de Wicket)...</description>
	<lastBuildDate>Mon, 02 Jan 2012 13:24:47 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/noocodecommit-comments" /><feedburner:info uri="noocodecommit-comments" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Comment on Play! Framework Tips : un renderArgs.put dans un @After sert t’il à quelque chose by nicogiard</title>
		<link>http://feedproxy.google.com/~r/noocodecommit-comments/~3/FEDKIixUOvo/comment-page-1</link>
		<dc:creator>nicogiard</dc:creator>
		<pubDate>Mon, 02 Jan 2012 13:24:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.noocodecommit.com/blog/nicogiard/?p=1055#comment-30263</guid>
		<description>Ce qu'ils sont fort ces Zergs :p</description>
		<content:encoded><![CDATA[<p>Ce qu&#8217;ils sont fort ces Zergs :p</p>
<img src="http://feeds.feedburner.com/~r/noocodecommit-comments/~4/FEDKIixUOvo" height="1" width="1"/>]]></content:encoded>
	<feedburner:origLink>http://www.noocodecommit.com/blog/nicogiard/tips/play-framework-tips-un-renderargs-put-dans-un-after-sert-til-a-quelque-chose/comment-page-1#comment-30263</feedburner:origLink></item>
	<item>
		<title>Comment on Play! Framework Tips : un renderArgs.put dans un @After sert t’il à quelque chose by ZergPowa</title>
		<link>http://feedproxy.google.com/~r/noocodecommit-comments/~3/gC_igZOXtCs/comment-page-1</link>
		<dc:creator>ZergPowa</dc:creator>
		<pubDate>Mon, 02 Jan 2012 11:36:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.noocodecommit.com/blog/nicogiard/?p=1055#comment-30262</guid>
		<description>Bonjour,

Explication concrète : les méthodes annotées en "@after" sont appelées &lt;strong&gt;après&lt;/strong&gt; le render. Par conséquent, modifier les renderArgs ne sert effectivement plus à rien, c'est trop tard.

Il y aurait un effet si les méthodes @after étaient appelées au moment du render, ce qui n'est pas le cas. Un petit coup d'oeil dans play.mvc.ActionInvoker permet de le vérifier (méthode invoke).
&lt;code&gt;
            // 3. Invoke the action
            try {
                // @Before
                handleBefores(request);
                
                // Action
                Result actionResult = null;
                ...
                ...invokeControllerMethod...etc...
                ... (la controllerMethod fait appel au render)
                ...

                // @After
                handleAfters(request);

&lt;/code&gt;

Bonne journée !</description>
		<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Explication concrète : les méthodes annotées en &#8220;@after&#8221; sont appelées <strong>après</strong> le render. Par conséquent, modifier les renderArgs ne sert effectivement plus à rien, c&#8217;est trop tard.</p>
<p>Il y aurait un effet si les méthodes @after étaient appelées au moment du render, ce qui n&#8217;est pas le cas. Un petit coup d&#8217;oeil dans play.mvc.ActionInvoker permet de le vérifier (méthode invoke).<br />
<code><br />
            // 3. Invoke the action<br />
            try {<br />
                // @Before<br />
                handleBefores(request);</p>
<p>                // Action<br />
                Result actionResult = null;<br />
                ...<br />
                ...invokeControllerMethod...etc...<br />
                ... (la controllerMethod fait appel au render)<br />
                ...</p>
<p>                // @After<br />
                handleAfters(request);</p>
<p></code></p>
<p>Bonne journée !</p>
<img src="http://feeds.feedburner.com/~r/noocodecommit-comments/~4/gC_igZOXtCs" height="1" width="1"/>]]></content:encoded>
	<feedburner:origLink>http://www.noocodecommit.com/blog/nicogiard/tips/play-framework-tips-un-renderargs-put-dans-un-after-sert-til-a-quelque-chose/comment-page-1#comment-30262</feedburner:origLink></item>
	<item>
		<title>Comment on Play! Framework Tips : Circular reference avec renderJSON by mael</title>
		<link>http://feedproxy.google.com/~r/noocodecommit-comments/~3/w2u9e88d77M/comment-page-1</link>
		<dc:creator>mael</dc:creator>
		<pubDate>Thu, 24 Nov 2011 16:16:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.noocodecommit.com/blog/nicogiard/?p=1070#comment-27441</guid>
		<description>bonjour,

Un truc sympa si l'on veut enrichir son objet plutôt que le tronquer en supprimant des données.

Il suffit de remplacer dans la fonction serialize(..)
JsonObject obj = new JsonObject(); 
par 
JsonObject obj = new Gson().toJsonTree(obj).getAsJsonObject(); // on récupère l'objet déja parsé

Par exemple, si 'lon veut ajouter le type d'une classe complexe.
		 
public JsonElement serialize(Objet obj, Type type, JsonSerializationContext jsonSerializationContext) {
   JsonObject obj = new Gson().toJsonTree(obj).getAsJsonObject();
    obj.addProperty("type", obj.getClass().getName());
    return obj;
}

Perso, le problème s'est posé avec la manipulation d'objets complexes ayant un meme parent. Le parsage Json étant effectué sur le type du parent,
il était un peu dommage de rajouter l'information de type de classe dans l'objet a parser. Cela aurait fait redondance.</description>
		<content:encoded><![CDATA[<p>bonjour,</p>
<p>Un truc sympa si l&#8217;on veut enrichir son objet plutôt que le tronquer en supprimant des données.</p>
<p>Il suffit de remplacer dans la fonction serialize(..)<br />
JsonObject obj = new JsonObject();<br />
par<br />
JsonObject obj = new Gson().toJsonTree(obj).getAsJsonObject(); // on récupère l&#8217;objet déja parsé</p>
<p>Par exemple, si &#8216;lon veut ajouter le type d&#8217;une classe complexe.</p>
<p>public JsonElement serialize(Objet obj, Type type, JsonSerializationContext jsonSerializationContext) {<br />
   JsonObject obj = new Gson().toJsonTree(obj).getAsJsonObject();<br />
    obj.addProperty(&#8220;type&#8221;, obj.getClass().getName());<br />
    return obj;<br />
}</p>
<p>Perso, le problème s&#8217;est posé avec la manipulation d&#8217;objets complexes ayant un meme parent. Le parsage Json étant effectué sur le type du parent,<br />
il était un peu dommage de rajouter l&#8217;information de type de classe dans l&#8217;objet a parser. Cela aurait fait redondance.</p>
<img src="http://feeds.feedburner.com/~r/noocodecommit-comments/~4/w2u9e88d77M" height="1" width="1"/>]]></content:encoded>
	<feedburner:origLink>http://www.noocodecommit.com/blog/nicogiard/tips/play-framework-tips-circular-reference-avec-renderjson/comment-page-1#comment-27441</feedburner:origLink></item>
	<item>
		<title>Comment on Play! Framework Tips : Circular reference avec renderJSON by nicogiard</title>
		<link>http://feedproxy.google.com/~r/noocodecommit-comments/~3/T5yRpJXu_tw/comment-page-1</link>
		<dc:creator>nicogiard</dc:creator>
		<pubDate>Sun, 11 Sep 2011 13:59:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.noocodecommit.com/blog/nicogiard/?p=1070#comment-23759</guid>
		<description>Merci Laurent pour ce commentaire. 
Je vais essayer tout ça très rapidement. Ca a l'air sympa!

Merci de partager tout ça ici !</description>
		<content:encoded><![CDATA[<p>Merci Laurent pour ce commentaire.<br />
Je vais essayer tout ça très rapidement. Ca a l&#8217;air sympa!</p>
<p>Merci de partager tout ça ici !</p>
<img src="http://feeds.feedburner.com/~r/noocodecommit-comments/~4/T5yRpJXu_tw" height="1" width="1"/>]]></content:encoded>
	<feedburner:origLink>http://www.noocodecommit.com/blog/nicogiard/tips/play-framework-tips-circular-reference-avec-renderjson/comment-page-1#comment-23759</feedburner:origLink></item>
	<item>
		<title>Comment on Play! Framework Tips : un renderArgs.put dans un @After sert t’il à quelque chose by Jitesh Gawali</title>
		<link>http://feedproxy.google.com/~r/noocodecommit-comments/~3/yYKGpVaN7Z0/comment-page-1</link>
		<dc:creator>Jitesh Gawali</dc:creator>
		<pubDate>Thu, 08 Sep 2011 06:42:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.noocodecommit.com/blog/nicogiard/?p=1055#comment-23440</guid>
		<description>Hi, I'm Jitesh, and I work for Packt. I am looking for reviewers for our recently published book, &lt;a href="http://www.packtpub.com/play-framework-cookbook/book"&gt;Play Framework Cookbook&lt;/a&gt; written by Alexander Reelsen .

I found that your blog is informative, and has potential articles on Play! If you are interested in reviewing the book, then I'd be glad to send you an &lt;b&gt;e-copy&lt;/b&gt; of it.

More information about the book: http://www.packtpub.com/play-framework-cookbook/book

For more details, contact me on: jiteshg@packtpub.com</description>
		<content:encoded><![CDATA[<p>Hi, I&#8217;m Jitesh, and I work for Packt. I am looking for reviewers for our recently published book, <a href="http://www.packtpub.com/play-framework-cookbook/book">Play Framework Cookbook</a> written by Alexander Reelsen .</p>
<p>I found that your blog is informative, and has potential articles on Play! If you are interested in reviewing the book, then I&#8217;d be glad to send you an <b>e-copy</b> of it.</p>
<p>More information about the book: <a href="http://www.packtpub.com/play-framework-cookbook/book">http://www.packtpub.com/play-framework-cookbook/book</a></p>
<p>For more details, contact me on: <a href="mailto:jiteshg@packtpub.com">jiteshg@packtpub.com</a></p>
<img src="http://feeds.feedburner.com/~r/noocodecommit-comments/~4/yYKGpVaN7Z0" height="1" width="1"/>]]></content:encoded>
	<feedburner:origLink>http://www.noocodecommit.com/blog/nicogiard/tips/play-framework-tips-un-renderargs-put-dans-un-after-sert-til-a-quelque-chose/comment-page-1#comment-23440</feedburner:origLink></item>
	<item>
		<title>Comment on Play! Framework Tips : Circular reference avec renderJSON by Laurent Simon</title>
		<link>http://feedproxy.google.com/~r/noocodecommit-comments/~3/z4EbyGINu28/comment-page-1</link>
		<dc:creator>Laurent Simon</dc:creator>
		<pubDate>Tue, 06 Sep 2011 10:06:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.noocodecommit.com/blog/nicogiard/?p=1070#comment-23292</guid>
		<description>Ta méthode fonctionne bien. Par contre elle est un peu lourde à mettre en oeuvre. Si le problème ne se pose que sur une seule classe comme ici, alors ça va. Si ça doit être appliqué à plusieurs autres classes, il faudrait utiliser une méthode un peu plus transparente (et industrialisée).

Play est un peu léger sur ce point mais ça peut facilement être complété de façon élégante. Je vois 2 solutions possibles.

* Solution 1 : Compléter Play en continuant à utiliser Gson.

- Créer une nouvelle annotation runtime (par exemple NotSerialized)
- Créer une &lt;code&gt;ExclusionStrategy&lt;/code&gt; Gson qui se base sur la présence de cette annotation pour exclure de la sérialisation (c'est en fait l'inverse de la stratégie par défaut utilisée par Gson avec son annotation &lt;code&gt;@Expose&lt;/code&gt; au travers de sa méthode &lt;code&gt;GsonBuilder.excludeFieldsWithoutExposeAnnotation()&lt;/code&gt; ). 
- Créer une nouvelle implémentation de &lt;code&gt;play.mvc.result.Result&lt;/code&gt; pour remplacer &lt;code&gt;play.mvc.result.JsonResult&lt;/code&gt;  
 en s'inspirant de son code ou en l’étendant (par exemple MyJsonResult). 
- Créer un nouveau contrôleur abstrait qui fait un extend de celui de base et redéfinit les fonctions renderJson afin que celles-ci utilisent &lt;code&gt;MyJsonResult&lt;/code&gt; au lieu de &lt;code&gt;JsonResult&lt;/code&gt; (par exemple MyController).

Il suffit ensuite d’utiliser systématiquement ce nouveau contrôleur et d'annoter les attributs qui posent problème avec &lt;code&gt;@NoSerialize&lt;/code&gt;. Ce qui donne:

&lt;code&gt;
package models;
 
import javax.persistence.Entity;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import play.data.validation.MaxSize;
import play.data.validation.Required;
import play.db.jpa.Model;
 
@Entity
public class Comment extends Model {
    @Required
    public String author;
 
    @Lob
    @Required
    @MaxSize(10000)
    public String content;
 
    @ManyToOne
    @Required
    @NoSerialize
    public Post post;
}
&lt;/code&gt;

et:

&lt;code&gt;
package controllers;
 
import java.util.List;
import models.Post;
import play.mvc.Controller;
 
public class Application extends MyController {
    public static void index() {
        List posts = Post.findAll();
        renderJSON(posts);
    }
}
&lt;/code&gt;

Ainsi, plus de code à écrire pour obtenir le même résultat que dans ton exemple.

* Solution 2 : Compléter Play en remplaçant Gson par FlexJSON

Là je ne vais pas tout expliquer mais, globalement le principe peut être le même en surface en utilisant des annotations. L'intérêt majeur de FlexJSON par rapport à Gson est qu'il permet de prendre en compte le fait que pour une entité donnée il peut exister plusieurs vues différentes suivant le contexte d'usage. Pour ce faire, il se base sur un contexte se sérialisation qui lui dit quoi inclure ou exclure dans un contexte donné (un &lt;code&gt;JSONSerializer&lt;/code&gt;).

Par défaut FlexJSON propose des annotations un peu limitées (&lt;code&gt;@JSON&lt;/code&gt;) qui permettent d'inclure ou d'exclure des attributs. Ce qui revient grosso modo à l'annotation &lt;code&gt;@NoSerialize&lt;/code&gt; que je proposais pour Gson.

Par contre, il est très facile de créer des annotations plus complètes qui permettraient de prendre en compte un contexte en construisant automatiquement des &lt;code&gt;JSONSerializer&lt;/code&gt; à partir des infos portée par les annotations.

Par exemple, en générique on aurait: 

&lt;code&gt;
/** Notion de contexte de sérialisation **/
public interface SerializationContext {}
&lt;/code&gt;


&lt;code&gt;
@Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.FIELD})
  public @interface NoSerialize {
    Class[] context default "";
  }
&lt;/code&gt;

Alors en reprenant le même principe que précédemment, a l'usage ça pourrait donner:

&lt;code&gt;
/** Contexte de sérialisation spécifique à la vue "liste des commentaires **/
public interface ListeCommentaires extends Serialization Context {}
&lt;/code&gt;

&lt;code&gt;
@Entity
public class Comment extends Model {
    @Required
    public String author;
 
    @Lob
    @Required
    @MaxSize(10000)
    @NoSerialize( context={ ListeCommentaires.class }  )  // toujours sérialisé, sauf pour ListeCommentaires 
    public String content;
 
    @ManyToOne
    @Required
    @NoSerialize      // jamais sérialisé
    public Post post;
}
&lt;/code&gt;

Il suffirait alors d'ajouter une variante de &lt;code&gt;renderJson&lt;/code&gt; admettant un argument de type Class  pour pouvoir sérialiser pour un contexte particulier. Exemple:

&lt;code&gt;
public class Application extends Controller {
    public static void index() {
        List posts = Post.findAll();
        renderJSON(posts, ListeCommentaires.class );
    }
}
&lt;/code&gt;

 Alors qu'un appel à &lt;code&gt;renderJson&lt;/code&gt; sans cet argument supplémentaire ferait un sérialisation pour le contexte par défaut.

 Ça permettrait donc de prendre en compte le fait que suivant le contexte d'utilisation un objet n'est pas toujours sérialisé de la même façon, problème que l'on rencontre obligatoirement à un moment donné si on ne veut pas transférer de données inutiles ou non souhaitables (droits d'usage/sécurité par exemple).</description>
		<content:encoded><![CDATA[<p>Ta méthode fonctionne bien. Par contre elle est un peu lourde à mettre en oeuvre. Si le problème ne se pose que sur une seule classe comme ici, alors ça va. Si ça doit être appliqué à plusieurs autres classes, il faudrait utiliser une méthode un peu plus transparente (et industrialisée).</p>
<p>Play est un peu léger sur ce point mais ça peut facilement être complété de façon élégante. Je vois 2 solutions possibles.</p>
<p>* Solution 1 : Compléter Play en continuant à utiliser Gson.</p>
<p>- Créer une nouvelle annotation runtime (par exemple NotSerialized)<br />
- Créer une <code>ExclusionStrategy</code> Gson qui se base sur la présence de cette annotation pour exclure de la sérialisation (c&#8217;est en fait l&#8217;inverse de la stratégie par défaut utilisée par Gson avec son annotation <code>@Expose</code> au travers de sa méthode <code>GsonBuilder.excludeFieldsWithoutExposeAnnotation()</code> ).<br />
- Créer une nouvelle implémentation de <code>play.mvc.result.Result</code> pour remplacer <code>play.mvc.result.JsonResult</code><br />
 en s&#8217;inspirant de son code ou en l’étendant (par exemple MyJsonResult).<br />
- Créer un nouveau contrôleur abstrait qui fait un extend de celui de base et redéfinit les fonctions renderJson afin que celles-ci utilisent <code>MyJsonResult</code> au lieu de <code>JsonResult</code> (par exemple MyController).</p>
<p>Il suffit ensuite d’utiliser systématiquement ce nouveau contrôleur et d&#8217;annoter les attributs qui posent problème avec <code>@NoSerialize</code>. Ce qui donne:</p>
<p><code><br />
package models;</p>
<p>import javax.persistence.Entity;<br />
import javax.persistence.Lob;<br />
import javax.persistence.ManyToOne;<br />
import play.data.validation.MaxSize;<br />
import play.data.validation.Required;<br />
import play.db.jpa.Model;</p>
<p>@Entity<br />
public class Comment extends Model {<br />
    @Required<br />
    public String author;</p>
<p>    @Lob<br />
    @Required<br />
    @MaxSize(10000)<br />
    public String content;</p>
<p>    @ManyToOne<br />
    @Required<br />
    @NoSerialize<br />
    public Post post;<br />
}<br />
</code></p>
<p>et:</p>
<p><code><br />
package controllers;</p>
<p>import java.util.List;<br />
import models.Post;<br />
import play.mvc.Controller;</p>
<p>public class Application extends MyController {<br />
    public static void index() {<br />
        List posts = Post.findAll();<br />
        renderJSON(posts);<br />
    }<br />
}<br />
</code></p>
<p>Ainsi, plus de code à écrire pour obtenir le même résultat que dans ton exemple.</p>
<p>* Solution 2 : Compléter Play en remplaçant Gson par FlexJSON</p>
<p>Là je ne vais pas tout expliquer mais, globalement le principe peut être le même en surface en utilisant des annotations. L&#8217;intérêt majeur de FlexJSON par rapport à Gson est qu&#8217;il permet de prendre en compte le fait que pour une entité donnée il peut exister plusieurs vues différentes suivant le contexte d&#8217;usage. Pour ce faire, il se base sur un contexte se sérialisation qui lui dit quoi inclure ou exclure dans un contexte donné (un <code>JSONSerializer</code>).</p>
<p>Par défaut FlexJSON propose des annotations un peu limitées (<code>@JSON</code>) qui permettent d&#8217;inclure ou d&#8217;exclure des attributs. Ce qui revient grosso modo à l&#8217;annotation <code>@NoSerialize</code> que je proposais pour Gson.</p>
<p>Par contre, il est très facile de créer des annotations plus complètes qui permettraient de prendre en compte un contexte en construisant automatiquement des <code>JSONSerializer</code> à partir des infos portée par les annotations.</p>
<p>Par exemple, en générique on aurait: </p>
<p><code><br />
/** Notion de contexte de sérialisation **/<br />
public interface SerializationContext {}<br />
</code></p>
<p><code><br />
@Retention(RetentionPolicy.RUNTIME)<br />
  @Target({ElementType.FIELD})<br />
  public @interface NoSerialize {<br />
    Class[] context default "";<br />
  }<br />
</code></p>
<p>Alors en reprenant le même principe que précédemment, a l&#8217;usage ça pourrait donner:</p>
<p><code><br />
/** Contexte de sérialisation spécifique à la vue "liste des commentaires **/<br />
public interface ListeCommentaires extends Serialization Context {}<br />
</code></p>
<p><code><br />
@Entity<br />
public class Comment extends Model {<br />
    @Required<br />
    public String author;</p>
<p>    @Lob<br />
    @Required<br />
    @MaxSize(10000)<br />
    @NoSerialize( context={ ListeCommentaires.class }  )  // toujours sérialisé, sauf pour ListeCommentaires<br />
    public String content;</p>
<p>    @ManyToOne<br />
    @Required<br />
    @NoSerialize      // jamais sérialisé<br />
    public Post post;<br />
}<br />
</code></p>
<p>Il suffirait alors d&#8217;ajouter une variante de <code>renderJson</code> admettant un argument de type Class  pour pouvoir sérialiser pour un contexte particulier. Exemple:</p>
<p><code><br />
public class Application extends Controller {<br />
    public static void index() {<br />
        List posts = Post.findAll();<br />
        renderJSON(posts, ListeCommentaires.class );<br />
    }<br />
}<br />
</code></p>
<p> Alors qu&#8217;un appel à <code>renderJson</code> sans cet argument supplémentaire ferait un sérialisation pour le contexte par défaut.</p>
<p> Ça permettrait donc de prendre en compte le fait que suivant le contexte d&#8217;utilisation un objet n&#8217;est pas toujours sérialisé de la même façon, problème que l&#8217;on rencontre obligatoirement à un moment donné si on ne veut pas transférer de données inutiles ou non souhaitables (droits d&#8217;usage/sécurité par exemple).</p>
<img src="http://feeds.feedburner.com/~r/noocodecommit-comments/~4/z4EbyGINu28" height="1" width="1"/>]]></content:encoded>
	<feedburner:origLink>http://www.noocodecommit.com/blog/nicogiard/tips/play-framework-tips-circular-reference-avec-renderjson/comment-page-1#comment-23292</feedburner:origLink></item>
	<item>
		<title>Comment on Play! Framework Tips : un renderArgs.put dans un @After sert t’il à quelque chose by nicogiard</title>
		<link>http://feedproxy.google.com/~r/noocodecommit-comments/~3/DttpPosACSo/comment-page-1</link>
		<dc:creator>nicogiard</dc:creator>
		<pubDate>Tue, 06 Sep 2011 07:34:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.noocodecommit.com/blog/nicogiard/?p=1055#comment-23284</guid>
		<description>Bien sur si quelqu'un à une explication concrète qu'il n'hésite pas à le partager ici.</description>
		<content:encoded><![CDATA[<p>Bien sur si quelqu&#8217;un à une explication concrète qu&#8217;il n&#8217;hésite pas à le partager ici.</p>
<img src="http://feeds.feedburner.com/~r/noocodecommit-comments/~4/DttpPosACSo" height="1" width="1"/>]]></content:encoded>
	<feedburner:origLink>http://www.noocodecommit.com/blog/nicogiard/tips/play-framework-tips-un-renderargs-put-dans-un-after-sert-til-a-quelque-chose/comment-page-1#comment-23284</feedburner:origLink></item>
	<item>
		<title>Comment on Play! Framework Tips : Attention au Controller nommé “Tags” by nicogiard</title>
		<link>http://feedproxy.google.com/~r/noocodecommit-comments/~3/bqs7CPajzKU/comment-page-1</link>
		<dc:creator>nicogiard</dc:creator>
		<pubDate>Tue, 06 Sep 2011 07:31:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.noocodecommit.com/blog/nicogiard/?p=1050#comment-23283</guid>
		<description>Effectivement ça fait penser à ça. 

J'ai aussi dans l'idée de faire un post sur une mésaventure de passage de dev sur H2 en "prod" sur MySQL qui a bien merdé (nommage et conf en jeu).</description>
		<content:encoded><![CDATA[<p>Effectivement ça fait penser à ça. </p>
<p>J&#8217;ai aussi dans l&#8217;idée de faire un post sur une mésaventure de passage de dev sur H2 en &#8220;prod&#8221; sur MySQL qui a bien merdé (nommage et conf en jeu).</p>
<img src="http://feeds.feedburner.com/~r/noocodecommit-comments/~4/bqs7CPajzKU" height="1" width="1"/>]]></content:encoded>
	<feedburner:origLink>http://www.noocodecommit.com/blog/nicogiard/tips/play-framework-tips-attention-au-controller-nomme-tags/comment-page-1#comment-23283</feedburner:origLink></item>
	<item>
		<title>Comment on Play! Framework Tips : Attention au Controller nommé “Tags” by Baztoune</title>
		<link>http://feedproxy.google.com/~r/noocodecommit-comments/~3/aRgdv10rBGY/comment-page-1</link>
		<dc:creator>Baztoune</dc:creator>
		<pubDate>Mon, 05 Sep 2011 15:47:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.noocodecommit.com/blog/nicogiard/?p=1050#comment-23247</guid>
		<description>Ca me fait penser à cette table "show" pour une appli de programme TV en Play!, qui fonctionnait en local, mais plantait lors du déploiement sur PlayApps (mot réservé sur MySQL et visiblement pas sur H2, je n'ai pas approfondi). Quelques heures perdues pour l'occasion...</description>
		<content:encoded><![CDATA[<p>Ca me fait penser à cette table &#8220;show&#8221; pour une appli de programme TV en Play!, qui fonctionnait en local, mais plantait lors du déploiement sur PlayApps (mot réservé sur MySQL et visiblement pas sur H2, je n&#8217;ai pas approfondi). Quelques heures perdues pour l&#8217;occasion&#8230;</p>
<img src="http://feeds.feedburner.com/~r/noocodecommit-comments/~4/aRgdv10rBGY" height="1" width="1"/>]]></content:encoded>
	<feedburner:origLink>http://www.noocodecommit.com/blog/nicogiard/tips/play-framework-tips-attention-au-controller-nomme-tags/comment-page-1#comment-23247</feedburner:origLink></item>
	<item>
		<title>Comment on Pourquoi Ivy et pas Maven? by Deix</title>
		<link>http://feedproxy.google.com/~r/noocodecommit-comments/~3/BrnUKCif6lE/comment-page-1</link>
		<dc:creator>Deix</dc:creator>
		<pubDate>Sun, 03 Jul 2011 14:00:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.noocodecommit.com/blog/nicogiard/?p=22#comment-20133</guid>
		<description>Je suis d'accord avec bzion. Maven n'est PAS qu'un outil de gestion de projet. Il a également le mérite d'offrir un cadre objectif et CONVENTIONNEL, ce qu'Ant n'offre pas. Il est également prouvé par expérience de nombreux architectes qu'Ant est un enfer pour la productivité d'une EQUIPE (avec environnements variés, machines différentes, pratiques différentes) alors que Maven est une seule fois dans un cycle projet, lors de sa conception. C'est à dire qu'ensuite, généralement, une poignée de développeurs manipulent les fichiers propres à leurs besoins. De plus, l'héritage des POM offert par Maven permet une flexibilité du besoin et un découplage fort ne rendant finalement pas si complexe que ça sa configuration. En d'autres termes, tous les POM ne sont pas nécessaires en terme de visibilité, seules les parties intéressantes (et généralement spécifiques à un besoin, donc organisées) le sont. Chacun possède SA vue du projet.

Pour finir, Maven est un outil DÉCLARATIF, contrairement à Ant qui est un outil PROCÉDURAL. On ne désire pas, dans un cycle projet, définir les tâches qui vont constituer son cycle. On préférera généralement une généricité du cycle de projet, ce qu'offre Maven. Je répondrai donc à la phrase "Tous les projets sont différents": oui, en un sens, mais le cadre conventionnel offert par Maven est commun à TOUS LES PROJETS. Et puis, si les choix des conventions ne plaisent pas, c'est configurable. Cependant, on préconise le respect des conventions Maven pour éviter de plonger dans un un sentiment de rébellion inutile, finalement.</description>
		<content:encoded><![CDATA[<p>Je suis d&#8217;accord avec bzion. Maven n&#8217;est PAS qu&#8217;un outil de gestion de projet. Il a également le mérite d&#8217;offrir un cadre objectif et CONVENTIONNEL, ce qu&#8217;Ant n&#8217;offre pas. Il est également prouvé par expérience de nombreux architectes qu&#8217;Ant est un enfer pour la productivité d&#8217;une EQUIPE (avec environnements variés, machines différentes, pratiques différentes) alors que Maven est une seule fois dans un cycle projet, lors de sa conception. C&#8217;est à dire qu&#8217;ensuite, généralement, une poignée de développeurs manipulent les fichiers propres à leurs besoins. De plus, l&#8217;héritage des POM offert par Maven permet une flexibilité du besoin et un découplage fort ne rendant finalement pas si complexe que ça sa configuration. En d&#8217;autres termes, tous les POM ne sont pas nécessaires en terme de visibilité, seules les parties intéressantes (et généralement spécifiques à un besoin, donc organisées) le sont. Chacun possède SA vue du projet.</p>
<p>Pour finir, Maven est un outil DÉCLARATIF, contrairement à Ant qui est un outil PROCÉDURAL. On ne désire pas, dans un cycle projet, définir les tâches qui vont constituer son cycle. On préférera généralement une généricité du cycle de projet, ce qu&#8217;offre Maven. Je répondrai donc à la phrase &#8220;Tous les projets sont différents&#8221;: oui, en un sens, mais le cadre conventionnel offert par Maven est commun à TOUS LES PROJETS. Et puis, si les choix des conventions ne plaisent pas, c&#8217;est configurable. Cependant, on préconise le respect des conventions Maven pour éviter de plonger dans un un sentiment de rébellion inutile, finalement.</p>
<img src="http://feeds.feedburner.com/~r/noocodecommit-comments/~4/BrnUKCif6lE" height="1" width="1"/>]]></content:encoded>
	<feedburner:origLink>http://www.noocodecommit.com/blog/nicogiard/stuff/pourquoi-ivy-et-pas-maven/comment-page-1#comment-20133</feedburner:origLink></item>
</channel>
</rss>

