日々精進

新しく学んだことを書き留めていきます

@EJBアノテーションを付けたフィールドにInjectionする時に「com.ibm.wsspi.injectionengine.InjectionException: CWNEN0030E」エラーが発生する

以下のようなEJBクラスがあったとする。

@Singleton
public class Beans {
    ....
}

以下のように@EJBをつけてオブジェクトをinjectしようとすると、「com.ibm.wsspi.injectionengine.InjectionException: CWNEN0030E」エラーが発生した。

@ManagedBean
@ViewScoped
public class MyController implements Serializable {
    @EJB
    private Beans beans;
    ....
}

原因はBeansクラスのコンストラクタで例外が発生していることだった。 恐らくBeansクラスのインスタンス生成はJSFとは違うスレッドで行われているのでそこで発生した例外はtrace.logに表示されないのだと思われる。InjectionExceptionじゃ原因がわからんよ。。 trace.logをよくよく見てみると、以下のようなログが出ていた。

FDC1015I: FFDC 発生事象が作成されました: "..." ロケーション: ffdc_16.01.22_12.49.38.0.log

ffdcというのは致命的なエラーのエラーメッセージを保存する機能で、JavaEEでなくWebsphere独自の機能っぽい。 trace.logと同じパスにffdcフォルダがありそこに保存されている。 ここを見るとBeansクラスのコンストラクタで発生した例外が記録されていた。 ffdc大事だな。

参考:

http://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/ctrb_ffdclogs.html?lang=ja