[
https://issues.jboss.org/browse/CDI-178?page=com.atlassian.jira.plugin.sy...
]
Pete Muir updated CDI-178:
--------------------------
Fix Version/s: 1.1 (Proposed)
(was: 1.1.PRD)
Require container-provided Producer implementation to use
getInjectionPoints()
------------------------------------------------------------------------------
Key: CDI-178
URL:
https://issues.jboss.org/browse/CDI-178
Project: CDI Specification Issues
Issue Type: Clarification
Components: Portable Extensions
Affects Versions: 1.0
Reporter: Jozef Hartinger
Assignee: Pete Muir
Priority: Minor
Fix For: 1.1 (Proposed)
A CDI extension should be able to turn a field of a into a CDI injection point as easily
as by overriding the getInjectionPoints() method of the container-provided InjectionTarget
implementation e.g.:
{code}
event.setInjectionTarget(decorate(event.getInjectionTarget()));
...
protected <T> InjectionTarget<T> decorate(final InjectionTarget<T>
delegate)
{
return new ForwardingInjectionTarget<T>() {
@Override
public Set<InjectionPoint> getInjectionPoints() {
Set<InjectionPoint> injectionPoints = new
HashSet<InjectionPoint>();
injectionPoints.addAll(super.getInjectionPoints());
injectionPoints.addAll(); // additional injection points
return injectionPoints;
}
@Override
protected InjectionTarget<T> delegate() {
return delegate;
}
};
}
{code}
However, the spec does not require the container-provided InjectionTarget implementation
to make use of the getInjectionPoint() method when creating a new instance. As a result,
the approach above may or may not work.
Therefore, it is currently necessary for a portable extension to also provide an
implementation of at least the inject() method (for field injection points) and implement
the injection itself. This is problematic in 1.0 of the spec since a portable extension
does not necessarily have access to the BeanManager instance of the BDA where the
injection target is deployed, thus different visibility rules apply.
Clarify that the container-provided implementation of the Producer interface should use
the result of the getInjectionPoints() method as a source of information about the
injection points to inject.
--
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