在Tomcat 8.0服务器上部署应用程序时获取NoClassDefFoundError

时间:2019-05-14 19:35:29

标签: java spring tomcat ejb noclassdeffounderror

我正在尝试通过vswhere文件将我们的应用程序部署到新服务器(RHEL 6.9)上的Tomcat中,并遇到war。我们已经在其他现有服务器上部署了相同的应用程序版本,并且在这些服务器上没有问题。

这是一台新服务器,我们将首次部署此java.lang.NoClassDefFoundError: com/ibm/security/certclient/util/PkSsCertFactory。 我们在war下确实有一些自定义库,并确保其下的jar文件版本与我们现有的其他服务器相同。

为了提供更多上下文,该应用程序与其他EJB应用程序进行了对话,提到的bean ApplicationNameServiceMonitor 用于检查与其中一个EJB应用程序的连接。

我试图获取包含此类的jar文件并对其进行深入研究以进行进一步的故障排除,同时考虑将问题发布到此处以寻求帮助。

以下是详细信息:

  

Tomcat版本:8.0.x
  Java主页:*** / Tomcat8 / reference / jdk1.7.0_121 / jre
  JVM版本:1.7.0_121-b32

包含此bean的Spring应用程序上下文文件>> resources / appcheck / monitor.xml

***/Tomcat8/catalinabasedirs/catalinabase0/customlib

Stacktrace

<beans profile="xyz,abc,applicationname">
    <bean id="ApplicationNameServiceMonitor" class="com.mycomany.bbs.group.xy.monitor.MonitorFactory" factory-method="createMonitor" init-method="registerMonitor" c:type="wasejb">
        <property name="disable" value="${applicationnameservice.monitor.disable}" />
        <property name="service" value="${applicationnameservice.name}" />
        <property name="contextFactory" value="${applicationnameservice.ejb.jndi.factory}" />
        <property name="url" value="${applicationnameservice.ejb.jndi.url}" />
        <property name="version" value="#{'${applicationnameservice.ejb.address}'.substring(8,16).replace('/','.') + '${applicationnameservice.ejb.address}'.substring(16)}" />
        <property name="ejbs" value="#{'${applicationnameservice.monitor.services}'.split(',')}" />
        <property name="monitorSecurityConfig" ref="monitorSecurityConfigBean"/>
    </bean>
</beans>

1 个答案:

答案 0 :(得分:0)

解决了问题。事实证明这是完全不同的问题。在 jvm参数中被称为 keystore truststore jks文件的路径不正确,并且这导致代码流经过特殊的场景,在这种场景下,它试图加载某些类(这就是我得出的结论),而缺少的jar导致了异常。由于上述jar的pom依赖关系被指定为provided,因此它在构建等过程中从不抱怨,并且仅在发生此特定情况时失败。