<?xml version="1.0" encoding="UTF-8"?><rss
version="2.0"
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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:media="http://search.yahoo.com/mrss/"
> <channel><title>Commentaires sur : Bean Validation</title> <atom:link href="http://blog.xebia.fr/2010/07/15/bean-validation/feed/" rel="self" type="application/rss+xml" /><link>http://blog.xebia.fr/2010/07/15/bean-validation/</link> <description>J2EE, Agilité et SOA</description> <lastBuildDate>Thu, 09 Feb 2012 15:43:24 +0000</lastBuildDate> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <item><title>Par : Franck Wolff</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-29535</link> <dc:creator>Franck Wolff</dc:creator> <pubDate>Tue, 10 Aug 2010 14:41:03 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-29535</guid> <description>Forgot the links for the GraniteDS validation framework documentation: http://www.graniteds.org/confluence/display/DOC22/3.+Validation+Framework+%28JSR-303+like%29.
FW.</description> <content:encoded><![CDATA[<p>Forgot the links for the GraniteDS validation framework documentation: <a
href="http://www.graniteds.org/confluence/display/DOC22/3.+Validation+Framework+%28JSR-303+like%29" rel="nofollow">http://www.graniteds.org/confluence/display/DOC22/3.+Validation+Framework+%28JSR-303+like%29</a>.</p><p>FW.</p> ]]></content:encoded> </item> <item><title>Par : Franck Wolff</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-29534</link> <dc:creator>Franck Wolff</dc:creator> <pubDate>Tue, 10 Aug 2010 14:39:32 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-29534</guid> <description>Hi,
GraniteDS 2.2 comes with an ActionScript3 implementation of the Bean Validation specification and its code generation tools may be configured to automatically replicate Java bean constraint annotations into the generated ActionScript3 model.
FW.</description> <content:encoded><![CDATA[<p>Hi,</p><p>GraniteDS 2.2 comes with an ActionScript3 implementation of the Bean Validation specification and its code generation tools may be configured to automatically replicate Java bean constraint annotations into the generated ActionScript3 model.</p><p>FW.</p> ]]></content:encoded> </item> <item><title>Par : Joseph</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-28859</link> <dc:creator>Joseph</dc:creator> <pubDate>Wed, 28 Jul 2010 10:25:44 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-28859</guid> <description>@Arnaud
Hum, un peu des deux ;)
En fait, le bug concernant l&#039;internationalisation et la mise en œuvre de sa correction sont, AMHA, spécifiques à Hibernate Validator 4.x.
La verbosité de l&#039;API et la non prise en compte des génériques sont eux plus à lier à la JSR303 elle même.
Au demeurant, ces 2 derniers points ont certainement fait l&#039;objet de discussion pendant l&#039;élaboration de la JSR et, assurément, ne sont pas d&#039;une résolution aisée. Mais le résultat reste verbeux et surprenant à l&#039;heure de Java 7.
++
joseph</description> <content:encoded><![CDATA[<p>@Arnaud</p><p>Hum, un peu des deux <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p><p>En fait, le bug concernant l&#8217;internationalisation et la mise en œuvre de sa correction sont, AMHA, spécifiques à Hibernate Validator 4.x.</p><p>La verbosité de l&#8217;API et la non prise en compte des génériques sont eux plus à lier à la JSR303 elle même.</p><p>Au demeurant, ces 2 derniers points ont certainement fait l&#8217;objet de discussion pendant l&#8217;élaboration de la JSR et, assurément, ne sont pas d&#8217;une résolution aisée. Mais le résultat reste verbeux et surprenant à l&#8217;heure de Java 7.</p><p>++<br
/> joseph</p> ]]></content:encoded> </item> <item><title>Par : Guillaume Arnaud</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-28823</link> <dc:creator>Guillaume Arnaud</dc:creator> <pubDate>Tue, 27 Jul 2010 07:43:15 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-28823</guid> <description>@Joseph
merci pour ce retour d&#039;expérience.
Lorsque vous parlez de &quot;réalisation de l&#039;API pas tip top&quot;, il s&#039;agit d&#039;Hibernate Validator ?</description> <content:encoded><![CDATA[<p>@Joseph</p><p>merci pour ce retour d&#8217;expérience.</p><p>Lorsque vous parlez de &laquo;&nbsp;réalisation de l&#8217;API pas tip top&nbsp;&raquo;, il s&#8217;agit d&#8217;Hibernate Validator ?</p> ]]></content:encoded> </item> <item><title>Par : Guillaume Arnaud</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-28822</link> <dc:creator>Guillaume Arnaud</dc:creator> <pubDate>Tue, 27 Jul 2010 07:39:56 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-28822</guid> <description>@Louis
S&#039;il n&#039;y a pas de besoins particuliers pour migrer vers un framework standard et que les services de validations &quot;manuels&quot; sont satisfaisants, autant rester sur un existant qu&#039;on maîtrise bien.
Pour de nouveaux projets par contre je trouve ça intéressant de pouvoir s&#039;appuyer sur un socle commun et pouvoir profiter de l&#039;expérience d&#039;autres projets.</description> <content:encoded><![CDATA[<p>@Louis</p><p>S&#8217;il n&#8217;y a pas de besoins particuliers pour migrer vers un framework standard et que les services de validations &laquo;&nbsp;manuels&nbsp;&raquo; sont satisfaisants, autant rester sur un existant qu&#8217;on maîtrise bien.</p><p>Pour de nouveaux projets par contre je trouve ça intéressant de pouvoir s&#8217;appuyer sur un socle commun et pouvoir profiter de l&#8217;expérience d&#8217;autres projets.</p> ]]></content:encoded> </item> <item><title>Par : joseph</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-28724</link> <dc:creator>joseph</dc:creator> <pubDate>Fri, 23 Jul 2010 22:55:41 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-28724</guid> <description>Bonjour
Sympa cette présentation détaillée.
Pour avoir mis en pratique Bean Validation depuis sa sortie, voici quelques retours d&#039;expériences:
- intégration avec Wicket est sympa (cf http://mvnrepository.com/artifact/org.wicketstuff/jsr303), surtout le PropertyValidator (à condition d&#039;utiliser des PropertyModel partout, rien n&#039;est parfait)
- principe fort intéressant: les entités définissent désormais le &quot;socle vital&quot; de règles de validations (ce qui est nommé les invariants plus haut). Avoir tout cela en un seul endroit et repris partout ailleurs est vraiment intéressant.
- réalisation de l&#039;API pas tip top : l&#039;implémentation de l&#039;internationalisation avait un bug plus que surprenant. Plus embêtant, l&#039;implémentation est verbeuse et ne prend pas en compte les génériques, par exemple un Set.
au final, on est mieux avec que sans, mais l&#039;API aurait sans doute pu être plus compact et proche de Java6.
++
joseph</description> <content:encoded><![CDATA[<p>Bonjour</p><p>Sympa cette présentation détaillée.</p><p>Pour avoir mis en pratique Bean Validation depuis sa sortie, voici quelques retours d&#8217;expériences:<br
/> - intégration avec Wicket est sympa (cf <a
href="http://mvnrepository.com/artifact/org.wicketstuff/jsr303" rel="nofollow">http://mvnrepository.com/artifact/org.wicketstuff/jsr303</a>), surtout le PropertyValidator (à condition d&#8217;utiliser des PropertyModel partout, rien n&#8217;est parfait)<br
/> - principe fort intéressant: les entités définissent désormais le &laquo;&nbsp;socle vital&nbsp;&raquo; de règles de validations (ce qui est nommé les invariants plus haut). Avoir tout cela en un seul endroit et repris partout ailleurs est vraiment intéressant.<br
/> - réalisation de l&#8217;API pas tip top : l&#8217;implémentation de l&#8217;internationalisation avait un bug plus que surprenant. Plus embêtant, l&#8217;implémentation est verbeuse et ne prend pas en compte les génériques, par exemple un Set.</p><p>au final, on est mieux avec que sans, mais l&#8217;API aurait sans doute pu être plus compact et proche de Java6.</p><p>++<br
/> joseph</p> ]]></content:encoded> </item> <item><title>Par : louis gueye</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-28633</link> <dc:creator>louis gueye</dc:creator> <pubDate>Mon, 19 Jul 2010 15:28:10 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-28633</guid> <description>Merci pour le retour Guillaume!
Effectivement c&#039;est possible avec les groupes. Mais moi j&#039;aime la simplicité :). Lorsqe ça devient trop fastidieux de définir un ensemble de contraintes j&#039;aime autant encapsuler ma validation dans une classe que j&#039;appelle.
Je vais explorer les groupes plus en profondeur mais par principe je préfère encapsuler mes validations dans une classe (ça me permet d&#039;être fortement cohésif) dont la responsabilité est de valider un Use Case complexe qui implique plusieurs objets qui collaborent entre eux. C&#039;est plus cohésif mais très certainement moins industrialisable pour les outils de génération.
Je préfère une classe de type RenewXXXValidator qui va faire des contrôles de type business dans les objets metiers User, Transaction, Advert, Media
plutôt que de définir un groupe @RenewXXX sur les propriétés de chacun des objets ci-dessus qui participent au renouvellement de XXX.
Je suppose que je me fais vieux et que je devrais me mettre aux nouveaux outils :).
Bonne soirée.</description> <content:encoded><![CDATA[<p>Merci pour le retour Guillaume!</p><p>Effectivement c&#8217;est possible avec les groupes. Mais moi j&#8217;aime la simplicité <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Lorsqe ça devient trop fastidieux de définir un ensemble de contraintes j&#8217;aime autant encapsuler ma validation dans une classe que j&#8217;appelle.</p><p>Je vais explorer les groupes plus en profondeur mais par principe je préfère encapsuler mes validations dans une classe (ça me permet d&#8217;être fortement cohésif) dont la responsabilité est de valider un Use Case complexe qui implique plusieurs objets qui collaborent entre eux. C&#8217;est plus cohésif mais très certainement moins industrialisable pour les outils de génération.</p><p>Je préfère une classe de type RenewXXXValidator qui va faire des contrôles de type business dans les objets metiers User, Transaction, Advert, Media<br
/> plutôt que de définir un groupe @RenewXXX sur les propriétés de chacun des objets ci-dessus qui participent au renouvellement de XXX.</p><p>Je suppose que je me fais vieux et que je devrais me mettre aux nouveaux outils <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p><p>Bonne soirée.</p> ]]></content:encoded> </item> <item><title>Par : Guillaume Arnaud</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-28626</link> <dc:creator>Guillaume Arnaud</dc:creator> <pubDate>Mon, 19 Jul 2010 11:31:40 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-28626</guid> <description>@Cyril
D&#039;après la doc hibernate ( http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/additionalmodules.html#d0e3875 ), il suffit effectivement d&#039;ajouter dans le classpath un jar implémentant la jsr-303. Si on veut forcer la présence de ce jar il faut passer en mode &lt;strong&gt;callback &lt;/strong&gt;et si au contraire on ne veut pas du tout de validation il faut le mode &lt;strong&gt;none&lt;/strong&gt;.
J&#039;espère que ça répond à ta question.</description> <content:encoded><![CDATA[<p>@Cyril</p><p>D&#8217;après la doc hibernate ( <a
href="http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/additionalmodules.html#d0e3875" rel="nofollow">http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/additionalmodules.html#d0e3875</a> ), il suffit effectivement d&#8217;ajouter dans le classpath un jar implémentant la jsr-303. Si on veut forcer la présence de ce jar il faut passer en mode <strong>callback </strong>et si au contraire on ne veut pas du tout de validation il faut le mode <strong>none</strong>.</p><p>J&#8217;espère que ça répond à ta question.</p> ]]></content:encoded> </item> <item><title>Par : Guillaume Arnaud</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-28625</link> <dc:creator>Guillaume Arnaud</dc:creator> <pubDate>Mon, 19 Jul 2010 11:24:19 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-28625</guid> <description>@louis
Merci pour ce retour d&#039;expèrience concret.
Il me semble que dans tes deux cas on peut tout de même utiliser la jsr-303 en s&#039;appuyant sur la notion de groupe ( http://people.redhat.com/~ebernard/validation/#validationapi-validatorapi-groups ).
Par exemple pour le cas de l&#039;annulation, on créerait une interface &lt;strong&gt;AnnulationCheck&lt;/strong&gt;. L&#039;annotation serait donc &lt;strong&gt;@NotNull(groups={AnnulationCheck.class})&lt;/strong&gt;. Ensuite pour la validation en cas d&#039;annulation &lt;strong&gt;validator.validate(monObjet, AnnulationCheck.class)&lt;/strong&gt;. Dans les autres validations, si on ne précise pas le groupe, la validation sera désactivée sur le champ &lt;strong&gt;commentaire&lt;/strong&gt;.
L&#039;autre exemple semble plus complexe mais je pense que cette solution doit fonctionner aussi.</description> <content:encoded><![CDATA[<p>@louis</p><p>Merci pour ce retour d&#8217;expèrience concret.</p><p>Il me semble que dans tes deux cas on peut tout de même utiliser la jsr-303 en s&#8217;appuyant sur la notion de groupe ( <a
href="http://people.redhat.com/~ebernard/validation/#validationapi-validatorapi-groups" rel="nofollow">http://people.redhat.com/~ebernard/validation/#validationapi-validatorapi-groups</a> ).</p><p>Par exemple pour le cas de l&#8217;annulation, on créerait une interface <strong>AnnulationCheck</strong>. L&#8217;annotation serait donc <strong>@NotNull(groups={AnnulationCheck.class})</strong>. Ensuite pour la validation en cas d&#8217;annulation <strong>validator.validate(monObjet, AnnulationCheck.class)</strong>. Dans les autres validations, si on ne précise pas le groupe, la validation sera désactivée sur le champ <strong>commentaire</strong>.</p><p>L&#8217;autre exemple semble plus complexe mais je pense que cette solution doit fonctionner aussi.</p> ]]></content:encoded> </item> <item><title>Par : Cyril Lakech</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-28620</link> <dc:creator>Cyril Lakech</dc:creator> <pubDate>Mon, 19 Jul 2010 09:32:57 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-28620</guid> <description>Excellente piqure de rappel pour certains et bonne entrée en matière pour d&#039;autres, cet article se laisse lire et à le mérite d&#039;être en français. Bravo !
J&#039;ai une petite question concernant le javax.persistence.validation.mode: Si on ne configure rien, par défaut cette propriété est en auto c&#039;est ca ? (si j&#039;en crois la doc jboss)
Pour quand on ne met rien, on ne retrouve pas les contraintes en bdd dans le schéma.
Une idée ?</description> <content:encoded><![CDATA[<p>Excellente piqure de rappel pour certains et bonne entrée en matière pour d&#8217;autres, cet article se laisse lire et à le mérite d&#8217;être en français. Bravo !</p><p>J&#8217;ai une petite question concernant le javax.persistence.validation.mode: Si on ne configure rien, par défaut cette propriété est en auto c&#8217;est ca ? (si j&#8217;en crois la doc jboss)</p><p>Pour quand on ne met rien, on ne retrouve pas les contraintes en bdd dans le schéma.</p><p>Une idée ?</p> ]]></content:encoded> </item> <item><title>Par : louis gueye</title><link>http://blog.xebia.fr/2010/07/15/bean-validation/#comment-28619</link> <dc:creator>louis gueye</dc:creator> <pubDate>Mon, 19 Jul 2010 09:02:44 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5033#comment-28619</guid> <description>Bonjour Guillaume,
Merci pour l&#039;article. L&#039;intégration à Spring est intéressante.
J&#039;aimerais juste apporter un éclairage sur l&#039;utilisation de la jsr-303.
La validation fournie par la jsr-303 est une validation de type &quot;validation donnée&quot;.
Elle est effectivement intéressante pour les &quot;invariants&quot;. Les invariants sont des données qui ont la même validation quel que soit le use-case.
Exemple : donnée obligatoire, format de sécurité sociale, etc.
On ne pourra pas valider de telles contraintes :
- BR-127 : La raison d&#039;une annulation est obligatoire
- BR-542 : Le nombre maximal d&#039;alertes est de 3 tant que la transaction est à l&#039;état &quot;non payée&quot;.
La 1ère règle montre que le champ &quot;commentaire&quot; est non obligatoire d&#039;habitude mais est obligatoire dans le cas d&#039;une annulation. Dans ce cas il ne faut pas annoter le champ @NotNull.
La 2ème règle montre bien que l&#039;on ne peut pas annoter @Valid sur le collaborateur Transaction, ni annoter @Size(min = 0, max = 3) sur le collaborateur Set. Ca n&#039;est pas vrai dans tous les cas.
La solution est d&#039;utiliser la jsr-303 pour les invariants de format (donnée correctement formatée, périmètre de valeur correct, type de valeur correct, caractère obligatoire permanent).
Pour une gestion des données qui dépendent du use-case, utiliser un validateur.
Le concept est celui des validateurs spring mais sans être liée à l&#039;API d&#039;erreur qui est lourde d&#039;après moi. On prendra soin d&#039;invoquer le validateur de la jsr-303 (pour appliquer la validation données) avant de commencer notre validation métier.
Cdt,
Louis.</description> <content:encoded><![CDATA[<p>Bonjour Guillaume,</p><p>Merci pour l&#8217;article. L&#8217;intégration à Spring est intéressante.<br
/> J&#8217;aimerais juste apporter un éclairage sur l&#8217;utilisation de la jsr-303.</p><p>La validation fournie par la jsr-303 est une validation de type &laquo;&nbsp;validation donnée&nbsp;&raquo;.<br
/> Elle est effectivement intéressante pour les &laquo;&nbsp;invariants&nbsp;&raquo;. Les invariants sont des données qui ont la même validation quel que soit le use-case.<br
/> Exemple : donnée obligatoire, format de sécurité sociale, etc.<br
/> On ne pourra pas valider de telles contraintes :<br
/> &#8211; BR-127 : La raison d&#8217;une annulation est obligatoire<br
/> &#8211; BR-542 : Le nombre maximal d&#8217;alertes est de 3 tant que la transaction est à l&#8217;état &laquo;&nbsp;non payée&nbsp;&raquo;.</p><p>La 1ère règle montre que le champ &laquo;&nbsp;commentaire&nbsp;&raquo; est non obligatoire d&#8217;habitude mais est obligatoire dans le cas d&#8217;une annulation. Dans ce cas il ne faut pas annoter le champ @NotNull.<br
/> La 2ème règle montre bien que l&#8217;on ne peut pas annoter @Valid sur le collaborateur Transaction, ni annoter @Size(min = 0, max = 3) sur le collaborateur Set. Ca n&#8217;est pas vrai dans tous les cas.</p><p>La solution est d&#8217;utiliser la jsr-303 pour les invariants de format (donnée correctement formatée, périmètre de valeur correct, type de valeur correct, caractère obligatoire permanent).<br
/> Pour une gestion des données qui dépendent du use-case, utiliser un validateur.<br
/> Le concept est celui des validateurs spring mais sans être liée à l&#8217;API d&#8217;erreur qui est lourde d&#8217;après moi. On prendra soin d&#8217;invoquer le validateur de la jsr-303 (pour appliquer la validation données) avant de commencer notre validation métier.</p><p>Cdt,</p><p>Louis.</p> ]]></content:encoded> </item> </channel> </rss>
