[cdi-dev] [JBoss JIRA] (CDI-328) SPI for creating producers broken

Jozef Hartinger (JIRA) jira-events at lists.jboss.org
Thu Feb 28 09:48:56 EST 2013


Jozef Hartinger created CDI-328:
-----------------------------------

             Summary: SPI for creating producers broken
                 Key: CDI-328
                 URL: https://issues.jboss.org/browse/CDI-328
             Project: CDI Specification Issues
          Issue Type: Bug
          Components: Portable Extensions
    Affects Versions: 1.1.PFD
            Reporter: Jozef Hartinger
            Priority: Blocker
             Fix For: 1.1.FD


CDI-268 introduces a set of factories to deal with the chicken-egg problem when creating Beans and Producers/InjectionTargets.

Unlike InjectionTargetFactory, the ProducerFactory interface does not address the problem properly.

In order to create a Producer implementation for a producer field/method, the following ingredients are needed:
* an AnnotatedField / AnnotatedMethod
* a declaring bean (bean for the class the producer field/method is declared on - the field/method is invoked on instances of the declaring bean) . Declaring bean does not need to be specified if the field/method is static
* bean for which the producer is created - this is needed in order for Producer.getInjectionPoints.getBean() to return the right thing. The bean is optional an may not be specified if the Producer is created for a non-contextual object

The following (slightly modified) SPI should handle all the requirements:

{noformat}
public interface ProducerFactory<X> {

    public <T> Producer<T> createProducer(Bean<T> bean);
}
{noformat}

{noformat}
public interface BeanManager {

    public <X> ProducerFactory<X> getProducerFactory(AnnotatedField<? super X> field, Bean<X> declaringBean);

    public <X> ProducerFactory<X> getProducerFactory(AnnotatedMethod<? super X> method, Bean<X> declaringBean);

    public <T, X> Bean<T> createBean(BeanAttributes<T> attributes, Class<X> beanClass, ProducerFactory<X> producerFactory);
}
{noformat}

Notice the additional *declaringBean* parameter for getProducerFactory() and modified type parameters in createBean() and ProducerFactory.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the cdi-dev mailing list