JSFアプリでDIとインターセプターを使用するときに問題が発生します。
JSFイベントを監視し、初期データルックアップを実行するバッキングBeanがあります。JSFページでは、Beanは次のようにイベントリスナーとして登録されます。
<f:event type="preRenderView" listener="#{myBean.loadData}"/>
Beanはかなり前向きで、基本的に次のようになります。
@Named
@RequestScoped
public class MyBean {
@EJB
private SomeDao dao;
public void loadData() { ... }
public void performSomeStuff() { ... }
}
daoは適切に注入され、ここまではすべて問題ありません。ここで、インターセプター内で実行される遅延読み込みを実行したいと思います(インターセプターが呼び出しコンテキストで続行するときに同じ動作が表示されるため、特定のコードは重要ではありません)。したがって、performSomeStuff()を呼び出す前に、すべてのデータがロードされていることを確認したいと思います。
@Interceptors(MyInterceptor.class)
public void performSomeStuff() { ... }
この時点で、EJBは注入されなくなります(NPEが表示されます...)-これに関するアイデアはありますか?
設定:
- GlassFish 3.0.1
- WELD-000900 1.0.1(SP3)
- クロサギ2.0.2(FCS b10)
前もって感謝します!
よろしく、アレックス