[cdi-dev] Extensions and spec-related observer method injection points question

Martin Kouba mkouba at redhat.com
Fri Feb 17 03:16:28 EST 2017


Dne 17.2.2017 v 07:08 Matej Novotny napsal(a):
> Hi, comment inline.
>
> ----- Original Message -----
>> From: "Laird Nelson" <ljnelson at gmail.com>
>> To: cdi-dev at lists.jboss.org
>> Sent: Thursday, February 16, 2017 11:11:41 PM
>> Subject: [cdi-dev] Extensions and spec-related observer method injection	points question
>>
>> This section (
>> http://docs.jboss.org/cdi/spec/2.0-PFD/cdi-spec.html#init_events ) says: "If
>> other beans [other than the BeanManager ] are injected into an [portable]
>> extension’s observer methods, non-portable behavior results."
>>
>> Rephrased: a portable extension's observer methods must have a minimum of one
>> parameter (the event being observed) and a maximum of two parameters (that
>> plus the BeanManager ), and none other if you want to stay truly portable.
>
> That's correct interpretation.
>
>> For true container lifecycle events, I understand this (you don't have beans
>> to inject yet). But given that a bean must be provided by the container for
>> a portable extension (
>> http://docs.jboss.org/cdi/spec/2.0-PFD/cdi-spec.html#init_events ), wouldn't
>> it be reasonable to permit extra injection points in a portable extension's
>> non -container-lifecycle-event-observing observer methods?
>>
>> Concretely, I'd like to do this:
>>
>> // In my portable extension
>> private static final void doSomethingAtStartup(@Observes
>> @Initialized(ApplicationScoped.class) final Object event, final Frobnicator
>> someBean) {
>> someBean.doSomething();
>> }
>
> While you cannot do this, you can still get hold of BeanManager and use it to resolve your bean.
>
>>
>> ...but that would seem to be in violation of the specification. Could someone

It's not a violation, it's a non-portable behavior. Weld should not 
complain about the injection points of the doSomethingAtStartup() 
observer method.

>> kindly explain why?
>
> Not really sure, perhaps Martin or Antoine can share the details.
> But I would say this could create quite some confusion if in some observer you could inject certain beans and in others you couldn't.

Yes, I think the possible confusion was the only reason.

> Even in your sample, you can only inject AppScoped beans, so imagine you do such observer for, say, SessionScoped, what can you inject there?
> SessionScoped for sure, how about Req? Conversation?
>
>>
>> Thanks,
>> Best,
>> Laird
>>
>> _______________________________________________
>> 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.
>

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


More information about the cdi-dev mailing list