injectionPoint.getBean() returns null if bean is an EJB bean in Java EE 7 (CDI 1.1)

后端 未结 1 1759
刺人心
刺人心 2021-02-09 15:42

I want to get bean from producer method in order to read its properties. In some scenarios the bean is a EJB Singleton bean.

I\'ve simplified my code to foc

1条回答
  •  天涯浪人
    2021-02-09 16:46

    Using

    injectionPoint.getMember().getDeclaringClass()
    

    works for me in WildFly 10.1.0 and I also quickly tested it in Payara Server 4.1.1.162 #badassfish (build 116). I also did a test on brand new Payara Server 4.1.1.164 #badassfish (build 28). However,I had to change the scope of the producer bean to @ApplicationScoped. Default scope did not work. In my case, it even makes sense :)

    The

    injectionPoint.getBean().getBeanClass()
    

    method worked for me in the old Payara, but not in the new WildFly 10.1.0.Final and new Payara Server 4.1.1.164 #badassfish (build 28).

    If you have a look at Payara, the current new version 164 contains Weld 2.4.0.Final and WildFly 10.1.0Final uses version 2.3.5.Final. In both versions, the classical code does not work !

    The conclusion is, on older CDI implementations (Weld), it works. In some newer Weld (introduced in Payara 161), the behavior changed. I do not know if this is intentional or not.

    However, the solution is to use

    injectionPoint.getMember().getDeclaringClass()
    

    and annotate the producer bean with

    @javax.enterprise.context.ApplicationScoped
    

    annotation.

    0 讨论(0)
提交回复
热议问题