Tomcat 7 偶然的 NoClassDefFoundError cxf BaseUrlHelper

Tomcat 7 aleatory NoClassDefFoundError cxf BaseUrlHelper

我有很多 CXF WS 要部署(13 wars),有时其中一个给我这个错误:

    java.lang.NoClassDefFoundError: org/apache/cxf/transport/servlet/BaseUrlHelper    
        org.apache.cxf.transport.servlet.ServletController.getBaseURL(ServletController.java:74)
        org.apache.cxf.transport.servlet.ServletController.updateDestination(ServletController.java:83)
        org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:196)
        org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
        org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
        org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:290)
        org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:209)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
        org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:265)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52

包含此 class 的 jar 在每个 lib 应用程序中:cxf-rt-transports-http-3.0.2.jar

当我重新加载 tomcat 管理器不工作的那个时,我不再有问题,并且当我重新启动服务器时它再次出现(在另一个 war 上随机出现)。缺少的class总是一样的。

我用的是Cxf 3.0.2版本

看来是进程打开的文件数量有问题。 tomcat 的 class 加载程序打开了太多文件,因为每个 application/war 的库中都有许多库 WEB-INF/lib。

当 ClassLoader 由于此限制而无法打开 java class 文件时,它不会抛出任何异常:它只是不会加载 class。 .. 所以当我调用我的应用程序时,第一个被调用但未加载的 class 是 BaseUrlHelper...

我已经在 tomcat/lib 中添加了一些库(并且我已经从库中删除了它们 WEB-INF/lib)并且应用程序运行良好。 如果你在你的 unix 系统中有管理员访问权限,我看到命令 ulimit ..

也有问题

您还可以将您的应用程序放在更多 tomcat 中。