Bean Validation (alias JSR 303) se stala soucasti JEE 6, takze o ni 
pravdepodobne jeste uslysime. Proto jsem se chtel zeptat na nejake PRAKTICKE 
zkusenosti s touto specifikaci a jak se pripadne resily mou popisovane problemy.
Tridu ThreadLocal samozrejme znam, ale ta mi nijak nepomuze vyresit problem 1 a 
navic vytvareni separatniho validacniho kontextu (mozne reseni 2) vlastnimi 
silami jsem se chtel vyhnout (i v ramci stejneho vlakna muze stejny validator 
dat jine vysledky v zavislosti na jinak "umistene" anotaci, takze omezovani 
kontextu na vlakno je nedostatecne.).

Kazdopadne dekuji za jakoukoli odpoved :-)
Martin

P.S. Zrejme jsem pouzil spatny predmet emailu, nebot Hibernate Validator pred 
verzi 4, je "jeden z mnoha validatoru". Takze berte to jako spis Bean 
Validation specifikaci v ramci JEE 6 :-).

P.P.S. Jinak Hibernate ORM, Spring a mnohe dalsi frameworky probirane zde v 
konferenci maji vlastni fora.

>------------------------------
>
>Message: 2
>Date: Tue, 17 Aug 2010 10:46:20 +0200
>From: Roman Pichlík <[email protected]>
>Subject: Re: Hibernate validator 4 - omezeni ?
>To: Java <[email protected]>
>Message-ID:
>       <[email protected]>
>Content-Type: text/plain; charset=ISO-8859-1
>
>Nejlepsi bude tenhle dotaz polozit primo ve foru Hibernate Validatoru.
>Jinak pokud ten kontext to API nenabizi (kouknete se radeji dvakrat),
>tak si jej udelejte pomoci tridy ThreadLocal
>(http://download.oracle.com/javase/6/docs/api/java/lang/ThreadLocal.html).
>
>[code]
>public final class ValidationContext {
>         private static final ValidationContext instance =  new 
> ValidationContext();
>         private final ThreadLocal holder = new ThreadLocal();
>
>         public void set(Object value) {
>              holder.set(value);
>         }
>
>         public Object get() {
>             return holder.get();
>         }
>
>         public static ValidationContext getContext() {
>            return instance;
>         }
>}
>[/code]
>
>Samozrejme bych doporucil udelat to typove a do ValidationContext
>neukladat Object, ale nejaky vas objekt.
>
>2010/8/16  <[email protected]>:
>>
>> Dobry den,
>> je treba refaktorovat validacni modul nasi aplikace a mel jsem v umyslu k 
>> tomu vyuzit specifikaci JSR303 a jeji referencni implementaci Hibernate 
>> validator verze 4.
>>
>> Po prvnim seznameni a odzkouseni mi tam pro me ucely chybi dve veci, ktere 
>> ukazu na vymyslenem prikladu :
>> Mejme obecny graf, kde je nejaky objekt Uzel, ktery ma potomky KorenovyUzel 
>> a dalsi nespecifikovany pocet potomku. Kazdy uzel ma atributy vstupniHrany, 
>> vystupniHrany a kodUzlu.
>>
>> Pokud budu chtit otestovat, ze dana struktura je strom, pak musi byt splnena 
>> validace:
>> @Size(max = 1)
>> Set<Hrana> vstupniHrany;
>> pro vsechny Uzly s vyjimkou KorenovyUzel.
>>
>> A ted me problemy :
>> 1, chtel bych validaci @Size(max=1) umistit na predka Uzel a na potomkovi 
>> KorenovyUzel je "prekryt" @Size(max=0) a vyhnout se tak nutnosti rozepisovat 
>> validaci na vsech potomcich tridy Uzel (hierarchie trid modelu je finalni a 
>> nemuzu ji menit), pripadne vyjmenovavat v prislusnem validatoru (obecne to 
>> bude custom validace), pro ktere tridy se validace chova jinak !
>>
>> 2, standartnim mechanismem v MessageInterpolator byt schopen na zaklad 
>> template zadane v externim textovem souboru (ValidationMessages.properties) 
>> zobrazit kodUzlu.
>> Resenim pro me neni vytvaret template ve validatoru ! Validator se bude 
>> pouzivat v ruznych kontextech a s jinymi validacnimi zpravami (dle atributu 
>> message prislusne anotace) a zpravy musi byt modifikovatelne pouze na 
>> zaklade textoveho souboru.
>> Ma predstava byla, ze validator pri objevene chybe na Uzlu s kodem "Uzel77" 
>> vlozi "referenci" a jeji obsah (napr. {kodUzlu} a "Uzel77") do nejakeho 
>> "kontextu" a behem prekladu zpravy v MessageInterpolator pokud bude v 
>> template retezec {kodUzlu} tak ho nahradi textem Uzel77.
>> Nicmene, zadny "kontext", ktery by mi toto umoznoval jsem nenasel a jedine 
>> "reseni", ktere me napadlo bylo pridavat to do defaultni sablony ve forme 
>> klic = hodnota (odkud se tato cast odebere pred defaultnim 
>> MessageInterpolatorem a pote se nahradi "rucne"). Ale prijde mi to trochu 
>> pres ruku.
>> Resenim pomoci ConstraintViolation je jiz pozde (pouze validator "vi", co 
>> presne validuje a jaka atributy se z validovaneho objektu "hodi" pro popis).
>>
>> Prosim o Vase zkusenosti s touto specifikaci a zda je nejake "obvykle" 
>> reseni jak tyto dve omezeni obejit.
>> Dekuji za Vas cas
>> Martin
>>
>
>
>
>-- S pozdravem Roman "Dagi" Pichlik
>
>/* http://dagblog.cz/ Blog pro kodery */
>
>
>Konec: Konference Digest, Vol 69, Issue 12
>******************************************
>

Odpovedet emailem