8
をマッピングしました。私は手動で与えられたEJBはそのサーブレットでを働いているのweb.xml にマッピングを作成する場合はは私がdinamicallyサーブレットクラスをマッピングしていますフィルタを有するサーブレット
@EJB
private I18nManager i18nManager;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
I18nManager i18n = i18nManager; //null
}
。 実行時にサーブレットを登録しようとしているという事実が、そのサーブレットを管理対象として考慮していないのではないかと思います。
その場合、フィルタを使ってディナミカルに登録されている方法を変更せずに、EJBをサーブレットに挿入する適切な方法は何ですか?
JNDI経由でEJBを注入する唯一の方法はありますか?
EDIT 1: 私はweb.xml
に次のコードを使用して「ウィル」により示唆されるようServletContextListener
クラスを実装しようとしている:
<listener>
<listener-class>com.megafone.web.filter.convention.InitServlet</listener-class>
</listener>
と実装の関連部分:
...
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext servletContext = sce.getServletContext();
FileSystemInspector fileInspector = new FileSystemInspector();
Set<ActionInfoData> actions = fileInspector.getActions(getConventionDirectory());
for (ActionInfoData action : actions) {
servletContext
.addServlet(action.getServletName(), action.getClassName())
.addMapping(action.getServletMapping());
}
}
...
残念ながら、コンテナにはEJBが挿入されず、nullポインタが残っています。私は現在、サービスに対するカスタム型の安全なJNDI検索を行っています。明らかに、これは適切な注入を使用するよりもはるかに高価です(私が間違っている場合は私を修正し、まだ性能に関して実験を行っていません)。
使用:
のJava EE 6つの
のJBoss AS 7.1
非常に良い質問! – acdcjunior