Autant que je sache, CDI devrait fonctionner dans les filtres, mais je ne peux pas le faire fonctionner pour moi. Code se présente comme suit:@Inject dans le filtre ne fonctionne pas
@WebFilter(filterName="authFilter",servletNames={"Faces Servlet"})
public class AuthFilter implements Filter {
@Inject UserBean userBean;
public AuthFilter() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
userBean.doSomething(); // Causes NullPointerException
chain.doFilter(request, response);
}
}
UserBean.class
@Stateless
public class UserBean extends JPABean{
// Omitted
}
CDI est activée, et l'injection fonctionne si je le fais manuellement via InitialContext.doLookup() ou dans un Servlet, comme ceci:
@WebServlet(name = "MyServlet", urlPatterns = {"/MyPage"})
@ServletSecurity(@HttpConstraint(rolesAllowed={"somerole"}))
public class MyServlet extends HttpServlet {
@Inject private UserBean userBean;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
userBean.doStuff(); // Works
response.sendRedirect(request.getContextPath());
}
Le CDI ne fonctionne-t-il pas dans les filtres? Dans ce cas, pourquoi pas? Si cela devait arriver, que pourrais-je faire de mal?
Quel conteneur? JBoss AS 6 a un bug très simliar. Cela fonctionne-t-il si vous utilisez juste '@ EJB'? – BalusC
JBoss AS 6 en effet ... @EJB fonctionnerait probablement. Très agaçant, je viens de faire une injection manuelle via InitialContext à la fin, mais bon de savoir la raison. –