[JBoss JIRA] (CDI-328) SPI for creating producers broken
by Jozef Hartinger (JIRA)
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