[weld-dev] Do Custom implementations of Bean need to provide injection points?

Martin Kouba mkouba at redhat.com
Fri Aug 4 08:07:17 EDT 2017


Hm, I think BeanManager.getReference() should not be used here, see also 
6.5.3. Contextual reference for a bean [1]:

"The container must ensure that every injection point of type 
InjectionPoint and qualifier @Default of any dependent object 
instantiated during this process receives a null value if it is not 
being injected into any injection point."

However, in Weld you could use 
BeanManager.getInjectableReference(InjectionPoint, CreationalContext<?>) 
and provide some dummy IP. See for example 
https://github.com/weld/core/blob/master/tests-arquillian/src/test/java/org/jboss/weld/tests/injectionPoint/custom/BarBean.java#L50.

FYI there is a TCK test that verifies the InjectionPoint is null if 
using getReference() outside custom bean's create: 
org.jboss.cdi.tck.tests.lookup.injectionpoint.InjectionPointTest#testNullInjectionPointInjectedIntoNonInjectedObject()

Martin

[1]
http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#contextual_reference

Dne 4.8.2017 v 13:05 Martin Kouba napsal(a):
> Hi John,
> 
> Bean.getInjectionPoints() is only used during validation - returned 
> injection points are validated at initialization time, so for a custom 
> bean it makes sense to return an empty set as there are no real 
> injection points.
> 
> WRT lookup - what exactly do you try to accomplish? Do you try to obtain 
> InjectionPoint metadata from inside a custom dependent bean's create() 
> method? This should be possible although not clearly specified. I think 
> we have a test with BeanManager.getInjectableReference(InjectionPoint, 
> CreationalContext<?>) but I will need to double check.
> 
> I will also look at the geronimo-config repo.
> 
> Martin
> 
> Dne 4.8.2017 v 11:42 John D. Ament napsal(a):
>> Hi
>>
>> As the subject says.  I have a library that registers a custom 
>> implementation of Bean, which has a method
>>
>>      @Override
>>      public Set<InjectionPoint> getInjectionPoints() {
>>          return Collections.emptySet();
>>      }
>>
>> When testing this on Weld3, I have code that looks up the injection 
>> point, to find the annotations present.  However, the following 
>> injection point lookup fails:
>>
>>      private static InjectionPoint findInjectionPoint(final 
>> BeanManager bm, final CreationalContext<?> ctx) {
>>          return InjectionPoint.class.cast(
>> bm.getReference(bm.resolve(bm.getBeans(InjectionPoint.class)), 
>> InjectionPoint.class, ctx));
>>      }
>>
>> so based on a CreationalContext I'm looking for InjectionPoint.  Maybe 
>> there's a different way that this is supposed to work?  If you're 
>> interested in giving it a shot, take a look at 
>> https://github.com/apache/geronimo-config and run the Weld3 profile to 
>> replicate the issue.
>>
>> John
>>
>>
>> _______________________________________________
>> weld-dev mailing list
>> weld-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/weld-dev
>>
> 

-- 
Martin Kouba
Senior Software Engineer
Red Hat, Czech Republic


More information about the weld-dev mailing list