[seam-issues] [JBoss JIRA] Commented: (SEAMVALIDATE-7) ConstraintValidator instances created incorrectly

Jozef Hartinger (JIRA) jira-events at lists.jboss.org
Mon Mar 14 05:25:45 EDT 2011


    [ https://issues.jboss.org/browse/SEAMVALIDATE-7?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12587685#comment-12587685 ] 

Jozef Hartinger commented on SEAMVALIDATE-7:
--------------------------------------------

That's a good point which I missed completely. You should check with the BeanManager to see if it is able to provide an instance of a particular type. If it's not, the instance creation should be delegated to the default factory. This is how we do in the resteasy-cdi module http://resteasy.svn.sourceforge.net/viewvc/resteasy/trunk/jaxrs/resteasy-cdi/src/main/java/org/jboss/resteasy/cdi/CdiInjectorFactory.java?revision=1288&view=markup

> ConstraintValidator instances created incorrectly
> -------------------------------------------------
>
>                 Key: SEAMVALIDATE-7
>                 URL: https://issues.jboss.org/browse/SEAMVALIDATE-7
>             Project: Seam Validation
>          Issue Type: Bug
>    Affects Versions: 3.0.0.CR1
>            Reporter: Jozef Hartinger
>            Assignee: Gunnar Morling
>            Priority: Critical
>             Fix For: 3.0.0.Final
>
>
> The current way of creating a ConstraintValidator instance is not correct:
> {code}
> AnnotatedType<T> type = beanManager.createAnnotatedType(key);
> InjectionTarget<T> it = beanManager.createInjectionTarget(type);
> CreationalContext<T> ctx = beanManager.createCreationalContext(null);
> T instance = it.produce(ctx);
> it.inject(instance, ctx);
> it.postConstruct(instance);
> return instance;
> {code}
> Since an AnnotatedType and InjectionTarget are created for every ConstraintValidator creation, it is not possible for a thirdparty extension to wrap these metadata during container startup. The correct way of creating a ConstraintValidator instance would be:
> {code}
> Set<Bean<?>> beans = beanManager.getBeans(key);
> Bean<?> bean = beanManager.resolve(beans);
> CreationalContext<?> ctx = beanManager.createCreationalContext(bean);
> return (T) beanManager.getReference(bean, key, ctx);
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the seam-issues mailing list