[cdi-dev] Getting injection point from Bean#create

Arne Limburg arne.limburg at openknowledge.de
Sat Nov 22 10:20:42 EST 2014


Romain did a quick fix and your code will work with that fix as well. So
with OWB trunk your code should work.

But we are currently discussing how this should be done right in OWB.

Cheers,
Arne

Am 22.11.14 15:14 schrieb "arjan tijms" unter <arjan.tijms at gmail.com>:

>Hi
>
>On Sat, Nov 22, 2014 at 11:23 AM, Arne Limburg
><arne.limburg at openknowledge.de> wrote:
>> I¹ve verified, that this is a bug in OpenWebBeans.
>> I've created
>> https://issues.apache.org/jira/browse/OWB-1030
>> and I¹m going to fix it.
>
>Cool, thanks! Btw, didn't Romain already fix something? His last reply
>was:
>
>>PS: BTW should work on OWB 1.5.0-SNAPSHOT now
>
>> Btw.: You have to use the CreationalContext of the bean (the way OWB
>> currently throws the "Inconsistent injection point stack" exception)
>
>Okay, I tested whether that works on Weld too, and it does. So after
>your fix the following should work on both Weld and OWB then:
>
>public class SomeBean implements Bean<Object> {
>
>   BeanManager beanManager;
>
>    @Override
>    public Object create(CreationalContext<Object> creationalContext) {
>
>        Bean<InjectionPoint> bean = (Bean<InjectionPoint>)
>beanManager.resolve(beanManager.getBeans(InjectionPoint.class));
>        InjectionPoint ip = (InjectionPoint)
>beanManager.getReference(bean, InjectionPoint.class,
>creationalContext);
>
>        // ...
>    }
>
>    // ctor assigning beanManager and other methods below
>}
>
>Kind regards,
>Arjan
>
>
>
>
>>
>> Cheers,
>> Arne
>>
>>
>> Am 21.11.14 12:58 schrieb "arjan tijms" unter <arjan.tijms at gmail.com>:
>>
>>>Hi,
>>>
>>>On Fri, Nov 21, 2014 at 10:31 AM, Jozef Hartinger <jharting at redhat.com>
>>>wrote:
>>>> Here is my understanding of Arjan's
>>>> setup:
>>>> [...]
>>>>
>>>> This is no different from a producer method injecting InjectionPoint
>>>> directly.
>>>
>>>That's indeed the exact setup.
>>>
>>>On Fri, Nov 21, 2014 at 11:34 AM, Romain Manni-Bucau
>>><rmannibucau at gmail.com> wrote:
>>>> PS: BTW should work on OWB 1.5.0-SNAPSHOT now
>>>
>>>Wow, I'll look at the latest SNAPSHOT of OWB then. Thanks Romain!
>>>
>>>Kind regards,
>>>Arjan
>>>
>>>
>>>
>>>
>>>>
>>>>
>>>> On 11/21/2014 10:23 AM, Romain Manni-Bucau wrote:
>>>>>
>>>>> yes but what would mean any of the values? Not bound to any injection
>>>>> it doesn't mean anything
>>>>>
>>>>>
>>>>> Romain Manni-Bucau
>>>>> @rmannibucau
>>>>> http://www.tomitribe.com
>>>>> http://rmannibucau.wordpress.com
>>>>> https://github.com/rmannibucau
>>>>>
>>>>>
>>>>> 2014-11-21 10:19 GMT+01:00 Jozef Hartinger <jharting at redhat.com>:
>>>>>>
>>>>>> It means "give me an instance of type InjectionPoint and @Default
>>>>>> qualifier". In default setup this should be served by the built-in
>>>>>> Bean<InjectionPoint>".
>>>>>>
>>>>>>
>>>>>> On 11/21/2014 10:12 AM, Romain Manni-Bucau wrote:
>>>>>>>
>>>>>>> @Jozef: InjectionPoint ip = getBean(InjectionPoint.class); doesn't
>>>>>>> mean anything in the absolute. So why should it be allowed?
>>>>>>>
>>>>>>>
>>>>>>> Romain Manni-Bucau
>>>>>>> @rmannibucau
>>>>>>> http://www.tomitribe.com
>>>>>>> http://rmannibucau.wordpress.com
>>>>>>> https://github.com/rmannibucau
>>>>>>>
>>>>>>>
>>>>>>> 2014-11-21 9:57 GMT+01:00 Jozef Hartinger <jharting at redhat.com>:
>>>>>>>>
>>>>>>>> The workaround is very ugly. Instead of going that path OWB should
>>>>>>>>be
>>>>>>>> fixed
>>>>>>>> to support the simple way.
>>>>>>>>
>>>>>>>>
>>>>>>>> On 11/20/2014 11:22 PM, arjan tijms wrote:
>>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> On Thu, Nov 20, 2014 at 11:07 PM, Romain Manni-Bucau
>>>>>>>>> <rmannibucau at gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>> Not sure what it means actually. InjectionPoint is highly
>>>>>>>>>>contextual
>>>>>>>>>> so
>>>>>>>>>> having an exception (not a npe of course) would make sense to
>>>>>>>>>>me.
>>>>>>>>>>
>>>>>>>>>> Bean#create is a "you know what you do" from my understanding
>>>>>>>>>>since
>>>>>>>>>> interceptors/decorators are not supported for instance so it
>>>>>>>>>>shouldnt
>>>>>>>>>> rely
>>>>>>>>>> of things like that, no?
>>>>>>>>>
>>>>>>>>> Sure, no interceptor/decorators, but the injection point -is-
>>>>>>>>>there of
>>>>>>>>> course. I can see it being set in OWB as a special property on
>>>>>>>>>the
>>>>>>>>> creational context if I walk down the stack trace in a debugger
>>>>>>>>>when
>>>>>>>>> my Bean#create method is being called. An injection point is
>>>>>>>>>something
>>>>>>>>> that implementations of Bean could always need, for instance to
>>>>>>>>> retrieve the name of the field into which injection is taking
>>>>>>>>>place.
>>>>>>>>>
>>>>>>>>> Of course, it being a "you know what you do", it's okay that it's
>>>>>>>>>not
>>>>>>>>> as simple as having it injected into the Bean, and that some
>>>>>>>>>extra
>>>>>>>>> code is needed to obtain it. As long as there is at least -a- way
>>>>>>>>>to
>>>>>>>>> get hold of it.
>>>>>>>>>
>>>>>>>>> The method I posted in the openings post does in fact work, but
>>>>>>>>>it
>>>>>>>>> feels slightly hacky. If that's an acceptable way to get the
>>>>>>>>>injection
>>>>>>>>> point, then so be it. But just wondering if it's not something
>>>>>>>>>that
>>>>>>>>> works by chance and may break later.
>>>>>>>>>
>>>>>>>>> Kind regards,
>>>>>>>>> Arjan
>>>>>>>>> _______________________________________________
>>>>>>>>> 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