I'm trying to implement the bean validation feature described in section EE.6.27 of the Java EE 6 specification. This requires that the web container set a property named "javax.faces.validator.beanValidator.ValidatorFactory" in the ServletContext. I know where this should be set, but I'm having problems getting access to the ValidatorFactory instance that I need to satisfy this requirement.

For example, I've tried adding the following code to TomcatContainer to set this property:

        // now set the module context ValidatorFactory in a context property.
        try  {
            javax.naming.Context  ctx  =contextInfo.getJndiContext();
            Object  validatorFactory  =ctx.lookup("java:comp/ValidatorFactory");
            
context.getServletContext().setAttribute("javax.faces.validator.beanValidator.ValidatorFactory",validatorFactory);
        }catch  (NamingException  e) {
             // ignore.  We just don't set the property if it's not available.
        }


This results in a NamingException, which probably means that contextInfo.getJndiContext() is not the correct place to retrieve this or the context has not yet been set up correctly. I've also tried using an InitialContext to do the lookup with the same result. I had a similar problem with Jetty where I tried using

        try  {
            javax.naming.Context  ctx  
=integrationContext.getComponentContext();
            Object  validatorFactory  =ctx.lookup("java:comp/ValidatorFactory");

to lookup the factory. How should I be obtaining this value when setting up the container?

I have a similar issue with passing the ValidatorFactory when setting up the JPA provider. The call to createContainerEntityManagerFactory() is made in constructor of the PersistenceUnitGBean. In that context, how should the lookup for the ValidatorFactory instance for the module be performed?

Rick

Reply via email to