Java EE 5/Servlet 2.5 将 EJB 注入(inject) ServletFilter

标签 java jakarta-ee ejb servlet-filters java-ee-5

我想将 session bean 注入(inject)到我的 ServletFilter 中,这似乎不起作用。你能告诉我如何实现这一点吗?

public class MyExample implements Filter {
    @EJB
    private MyBean someEjb;

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                     FilterChain filterChain) throws IOException, ServletException{
        someEjb.toString();
    }
}

导致 NullPointerException,因为 myEjb 为空。使用的平台是JBoss 5.1 可以从其他 EJB 或 Servlet 正确访问 MyBean。

谢谢。


问题解决了(虽然我不知道为什么):

该应用程序由三个工件组成: - 一个包含 EJB 的 jar - 包含 servlet 的 war - 包含上述两者的耳朵

如果我将 Filter 打包到 jar 中,就会出现问题。如果我将它与 war 中的 servlet 一起打包,则不会出现此问题。

所以,眼前的问题解决了,但没有被理解。

也许有人可以帮助我理解这一点?

最佳答案

如果 servletEJB 不在同一个 ear 文件中,则必须使用 @EJB(mappedName="name")在注入(inject) EJB 时。检查this post了解更多详情。

相关链接:Injection from outside modules

当然,Filter是一种Servlet,因此被称为“Servlet Filter”。而ServletFilter都是web component,属于web archive,.war,不属于Java archive,.jarjar 中的过滤器将不会被扫描以注入(inject)那种注解,并将作为任何其他常规 Java 类处理。

关于Java EE 5/Servlet 2.5 将 EJB 注入(inject) ServletFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10796759/

相关文章:

ejb - 如何将 EJB 注入(inject) SOAPHandler?

java - 如何参数化字符串并替换参数

java/jsf 奇怪的错误 : WARNING: StandardWrapperValve PWC1406: Servlet. service() ...抛出异常 java.lang.NullPointerException

java - 如何在 Eclipse IDE 中集成独立的 Java EE 6

Java 结账练习

jakarta-ee - 添加@Stateful 或@Stateless 注释实际上有什么作用?

java - 为什么我的无状态 session bean 可以作为有状态 session bean 工作?

java - 当我的动态壁纸超过 30 帧时出现内存不足错误

java - 计算汉明权重,在 Java 中也称为 popcount?

java - Maven单片机:add gives error