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

arjan tijms arjan.tijms at gmail.com
Sat Nov 22 09:14:45 EST 2014


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