我编写了一个非常简单的应用程序,但 CDI 没有按预期工作:
定义
@EJB private CustomerProviderSessionBeanLocal customerProvider;
不会导致 bean 的实例。
我的无状态会话 bean 的定义
@Local
public interface CustomerProviderSessionBeanLocal { ... }
@Stateless
@EJB(name="ejb/CustomerProvider", beanInterface = CustomerProviderSessionBeanLocal.class, beanName = "CustomerProviderSessionBean")
public class CustomerProviderSessionBean implements
CustomerProviderSessionBeanLocal ...
控制器 Bean(用于 JSF):
@SessionScoped @ManagedBean
public class BackingBean {
@EJB private CustomerProviderSessionBeanLocal customerProvider;
JBoss 产生:
java:global/2017_JEE_App_1_war_exploded/CustomerProviderSessionBean!beans.CustomerProviderSessionBeanLocal
java:app/2017_JEE_App_1_war_exploded/CustomerProviderSessionBean!beans.CustomerProviderSessionBeanLocal
java:module/CustomerProviderSessionBean!beans.CustomerProviderSessionBeanLocal
java:global/2017_JEE_App_1_war_exploded/CustomerProviderSessionBean
java:app/2017_JEE_App_1_war_exploded/CustomerProviderSessionBean
java:module/CustomerProviderSessionBean
尽管如此,customerProvider 属性仍未初始化。构造函数已被调用(可以在日志文件中看到)。我尝试了几种变体(有/无名称、本地界面等)。使用 JNDI-Lookup 确实有效:
initialContext = new InitialContext();
Object o = initialContext.lookup("java:app/2017_JEE_App_1_war_exploded/CustomerProviderSessionBean");
在 @EJB-annotation 中使用相同的 JNDI-Name 不起作用
我没有更改wildfly配置!
任何人都可以帮忙吗?