TomEE可以加载在战争中部署的过滤器类吗?

时间:2016-01-26 11:21:01

标签: java-ee dependencies servlet-filters tomee

我在RESTful Web应用程序中添加了一个过滤器。此应用程序使用JavaEE 6并部署在Apache TomEE服务器1.7.3中。

我添加的过滤器类如下所示:

package com.company.filter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.Response;

public class LoggingFilter implements Filter {

    private static final Logger LOG = LoggerFactory.getLogger("std");

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

        LOG.info("Initializing filter");
    }

    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain filterChain)
        throws IOException, ServletException {

        LOG.info("Processing a request...");

        // filter logic
    }

    public void destroy() {
        LOG.info("Destroying filter");
    }
}

web.xml(特定于应用程序,并在应用程序内部部署),如下所示:

<filter>
    <filter-name>LoggingFilter</filter-name>
    <filter-class>com.company.filter.LoggingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LoggingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我没有修改conf文件夹中的主web.xml。

当我部署应用程序并启动TomEE服务器时,我在catalina.log中看到以下错误:

SEVERE: Unable to deploy collapsed ear in war     StandardEngine[Catalina].StandardHost[localhost].StandardContext[/vw-ws-rest]
org.apache.openejb.OpenEJBException: Unable to load servlet filter class: com.company.filter.LoggingFilter: com.company.filter.LoggingFilter
at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:2141)
at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1843)
at org.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer.java:360)

注意:包和类名是正确的。

如果我将过滤器类打包在一个单独的jar中,并将该jar放在libs目录中,那么应用程序会加载过滤器类,并且它可以正常工作。

但我不想生成另一个工件,并部署该工件,因为它会使部署过程更加复杂。

我的问题是:无法让TomEE加载应用程序大战中包含的过滤器?如果可以,那么我做错了什么? (看起来TomEE在初始化时无法看到过滤器类)

0 个答案:

没有答案