以下のような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大事だな。
参考: