[cdi-dev] WithAnnotations with ProcessInjectionTarget events
Jozef Hartinger
jharting at redhat.com
Mon Aug 17 02:25:25 EDT 2015
Hi Nigel,
this feature is being considered for CDI 2.0: The relevant issue is:
https://issues.jboss.org/browse/CDI-270
Jozef
On 14.8.2015 15:20, Nigel Deakin wrote:
> George,
>
> Yes, you're right. That warning refers to a different method of the same
> extension (which is obvious now). Thanks for pointing that out. So the
> WELD message is correct.
>
> So that just leaves me asking whether it would be desirable to support
> @WithAnnotations with ProcessInjectionTarget events, to avoid the need
> to call isAnnotationPresent() on every injection target.
>
> Nigel
>
> On 14/08/2015 13:52, George Gastaldi wrote:
>>
>> Hi Nigel,
>>
>> Check the error message, I think it's not the same method you
>> referenced it. However I would like to see @WithAnnotations or a
>> similar solution for other Process* types.
>>
>> Best Regards,
>>
>> George Gastaldi
>>
>> Em 14/08/2015 09:04, "Nigel Deakin" <nigel.deakin at oracle.com
>> <mailto:nigel.deakin at oracle.com>> escreveu:
>>
>> I'm writing a portable extension, and my Extension class includes
>> the following observer method
>>
>> public <X> void processInjectionTarget(
>> @Observes ProcessInjectionTarget<X> event) {
>>
>> When I start the server (Glassfish) I see this warning in the log:
>>
>> WELD-000411: Observer method [BackedAnnotatedMethod] public
>> com.foo.MyExtension.processAnnotatedType(@Observes
>> ProcessAnnotatedType<Object>) receives events for all annotated
>> types. Consider restricting events using
>> @WithAnnotations or a generic type with bounds.]]
>>
>> I thought "OK, fair enough. I only want to receive
>> ProcessInjectionTarget events for classes that have a specific
>> annotation. So I'll do what it suggests and @WithAnnotations to
>> restrict the events received."
>>
>> However if I look up the javadocs for WithAnnotations it says
>> "WithAnnotations may be applied to any portable extension
>> observer method with an event parameter type of
>> ProcessAnnotatedType to filter the events delivered."
>>
>> And if I try using WithAnnotations on the above method, I indeed
>> get an error at runtime.
>>
>> So the warning message WELD-000411 is incorrect, since it suggests
>> doing something that is not allowed.
>>
>> @WithAnnotations would have been perfect for my needs. Why is it
>> not allowed when observing ProcessInjectionTarget events?
>>
>> So it looks as if I will simply have to receive every such event
>> and check whether it has the required annotation:
>>
>> public <X> void processInjectionTarget(
>> @Observes ProcessInjectionTarget<X> event) {
>>
>> if
>> (!event.getAnnotatedType().isAnnotationPresent(MyAnnotation.class)) {
>> return;
>> }
>>
>> This doesn't look very efficient to me, since there will be a lot
>> of irrelevant events. Is there a better way?
>>
>> Nigel
>>
>>
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev at lists.jboss.org <mailto:cdi-dev at lists.jboss.org>
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>
>> Note that for all code provided on this list, the provider
>> licenses the code under the Apache License, Version 2
>> (http://www.apache.org/licenses/LICENSE-2.0.html). For all other
>> ideas provided on this list, the provider waives all patent and
>> other intellectual property rights inherent in such information.
>>
>>
>>
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>
>> Note that for all code provided on this list, the provider licenses the code under the Apache License, Version 2 (http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas provided on this list, the provider waives all patent and other intellectual property rights inherent in such information.
>
>
>
> _______________________________________________
> cdi-dev mailing list
> cdi-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/cdi-dev
>
> Note that for all code provided on this list, the provider licenses the code under the Apache License, Version 2 (http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas provided on this list, the provider waives all patent and other intellectual property rights inherent in such information.
>
More information about the cdi-dev
mailing list