On Apr 1, 2011, at 1:13 PM, Romain Manni-Bucau wrote: > Hi all, > > to implement bean validation, is it a good idea to do like it (i tried to > write something simple but understandable, say me if i failed ;)): > > <[email protected]>1) create a builder ValidatorBuilder class > i) method createValidatorFactory(ModuleType type {WEBAPP, OTHER}, URL > validationUrl {null or not}) returning a ValidatorFactory > 2) in Assembler::createApplication() > i) bind a dynamic proxy in "VALIDATOR_FACTORY_NAMING_CONTEXT + > ValidatorFactory" (same idea for Validator) - > containerSystem.getJNDIContext().bind("...", vfProxy) > ii) IMHO it should be done before the persistence building (to put it as > parameter in the entity manager factory creation) but will it not break > something about the weaving (i saw some comments about it)? > 3) the proxy/proxies > i) manage a map/cache of ValidatorFactory and Validator (is it necessary > for validator?). The key will be the module (maybe the path? it should only > be unique) > ii) invoke(...) { > type = getModuleTypeFromClassLoader(); > if (!validatorFactoryExistsForModule(currentModule())) { > vf = ValidatorBuilder::createValidatorFactory(type); > } > return whatWeWantByReflection(); > }
One quick thought would be to maybe put the ValidatorFactory instance in the ModuleContext object. Should eliminate the need for any mapping/caching which often ends up leaky. We might even (someday) want to redo some of the EntityManagerFactory stuff that way -- we didn't have an AppContext or ModuleContext when that code was written. On the URL note. The Info object tree passed from the ConfigurationFactory to the Assembler doesn't allow URL or Class or any other thing tied to a classloader. If we were to create a set of Info objects to represent the validation.xml, how complex would that tree be? For the beans.xml and persistence.xml it was pretty simple. The validation configuration file looks really simple. The mapping file is complex. I'm not sure if we need both or just one of them like in JPA (we handle persistence.xml and the provider handles the mapping files) -David
