Hi Rick,

Isn't "javax.faces.validator.beanValidator.ValidatorFactory" attribute
required in the ServletContext only when the web app is using JSF?  Then the
place where this attribute can be added is in MyFacesModuleBuilderExtension
using a RuntimeCustomizer (similar to JasperServletContextCustomizer that
adds "org.apache.tomcat.InstanceManager" attribute to ServletContext).  By
the time the customize() method is called, the ValidatorFactory is available
in the jndiContext at "comp/ValidatorFactory".  I will create a patch for
this for you to review.


On Thu, Aug 26, 2010 at 8:56 PM, Rick McGuire <rick...@gmail.com> wrote:

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



-- 
Vamsi

Reply via email to