非常に単純なアプリケーションを作成しましたが、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 アノテーションで同じ JNDI 名を使用しても機能しない
wildfly の設定を変更していません。
誰でも助けることができますか?