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 >****************************************** >
