我想将会话bean注入到我的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为null。使用的平台是JBoss 5.1EJB,可以从其他EJB或Servlets正确地访问MyBean。
谢谢。
问题解决了(虽然我不知道原因):
应用程序由三个构件组成:-一个包含EJB的jar -包含servlet的war -包含上述两种内容的ear
如果我将过滤器打包到jar中,就会出现问题。如果我将它与war中的servlet一起打包,问题就不会发生。
因此,眼前的问题解决了,但不被理解。
也许有人能帮我理解这一点?
发布于 2012-05-30 03:15:31
如果servlet和EJB都不在单个ear文件中,则在注入EJB时必须使用@EJB(mappedName="name")。有关更多细节,请查看这个职位。
相关链接:外部模块注入
当然,Filter是一种Servlet,因此被称为"Servlet过滤器“。Servlet和Filter都是web组件,因此属于web存档,.war,而不是.jar。jar中的过滤器不会被扫描以注入这种注释,并且将作为任何其他常规的Java类来处理。
发布于 2016-08-04 06:10:16
我们面临着一个类似的问题,我们有一些@WebFilter和@WebListener组件打包在一个没有被读取的Jar中(注释没有被处理)。
其目的是告诉容器扫描其他jars,寻找其他带注释的组件。
我们实现了将属性metadata-complete添加到web.xml声明中的目标。示例:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="false">
...NORMAL_CONTENT_HERE...
</web-app>
希望能帮上忙。
https://stackoverflow.com/questions/10796759
复制相似问题