[
https://issues.jboss.org/browse/CDI-328?page=com.atlassian.jira.plugin.sy...
]
Martin Kouba commented on CDI-328:
----------------------------------
Also the javadoc should explicitly state that:
* declaring bean may be null if the producer field/method is static
* producer bean may be null if the Producer is created for a non-contextual object
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