【问题标题】:ClassNotFoundException on one of two identical servers (ObjectModelFactory)ClassNotFoundException 在两个相同的服务器之一 (ObjectModelFactory)
【发布时间】:2012-06-19 21:10:40
【问题描述】:

我们有一堆“相同”的 CentOS 6.2 服务器(就 Java 版本、操作系统版本、JBoss AS7 7.1、我们应用程序的 war 文件的版本而言),其中大多数现在在创建 javax.xml.ws 时都失败了。服务。其中一个仍在工作,相同的 JBoss AS7 和 war 文件在我们的开发人员机器 (Mac) 上本地工作。服务存在,它的wsdl位置URL和服务名称在工作盒和非工作盒上是一样的。

我已经区分了整个 JBoss AS7 目录,其中包括所有 JBoss 库、脚本、配置以及我们在工作机器和非工作机器之间的战争。我看到的唯一差异与机器本身的 IP 地址有关。

以下是我们看到的堆栈跟踪的原因,省略了几行:

...a lot of stuff omitted...
Caused by: java.lang.NoClassDefFoundError: org/jboss/xb/binding/ObjectModelFactory
    at org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.<init>(ServiceDelegateImpl.java:137) [jbossws-native-core-3.1.1.GA.jar:3.1.1.GA]
    at org.jboss.ws.core.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:63) [jbossws-native-core-3.1.1.GA.jar:3.1.1.GA]
    at javax.xml.ws.Service.<init>(Service.java:57) [jboss-jaxws-api_2.2_spec-2.0.0.Final.jar:2.0.0.Final]
    at schemas.dynamics.microsoft.nav.system.SystemService.<init>(SystemService.java:41) [navisionws-1001.0-SNAPSHOT.jar:]
    ...our code omitted...
    ... 79 more
Caused by: java.lang.ClassNotFoundException: org.jboss.xb.binding.ObjectModelFactory from [Module "deployment.arinweb_public-1001.0-SNAPSHOT.war:main" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
    ... 86 more

我们尝试了很多方法,包括:

  1. 将整个 jboss 目录从非工作机器移动到它开始工作的工作机器。
  2. 与 #1 相反,在一台机器上工作的 jboss 不再在非工作机器上工作。
  3. 比较了两台机器上的所有环境变量,结果一致。

我想就下一步如何尝试找出问题所在提出建议。无论是那个还是解决方案都会很棒。

编辑 - JBoss 开始部署时的类加载问题:

在 JBoss 开始部署每个应用程序时,我们遇到了一些类加载问题。我已经比较了工作机器和非工作机器之间的这些警告,它们是相同的。这是一个示例(两台服务器上第一个警告类型有 37 个,第二个警告类型有 55 个):

18:20:04,352 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015893: Encountered invalid class name 'implementingClassName=org.jboss.shrinkwrap.impl.base.ConfigurableArchiveImpl' for service type 'org.jboss.shrinkwrap.spi.Configurable'
16:34:16,370 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-40) Class Path entry shrinkwrap-resolver-impl-maven-1.0.0-beta-6.jar in "/content/snipped_war_name.war/WEB-INF/lib/snipped_jar_name.jar"  does not point to a valid jar for a Class-Path reference.

【问题讨论】:

  • 您是否在所有非工作文件中找到 jboss-xml-binding.jar ?这些罐子的校验和检查了吗?非工作的任何引导/类加载问题?
  • 您是否尝试过比较工作服务器和非工作服务器之间的文件和目录权限?
  • @Michael,是的,我们已经比较了 JBoss AS 运行的整个目录。所有校验和都匹配。我已经用我们看到的一些类加载警告更新了这个问题。
  • @gebuh,我们从 RPM 安装,因此两者的权限应该相同。如果我们今天开始讨论,我将研究深入的权限比较。

标签: java jboss centos


【解决方案1】:

谢谢大家的建议。经过大量调试后,我们发现了问题,我将在此处发布详细信息,以防万分之一的人遇到相同问题:

我们在战争中打包的这些罐子是罪魁祸首:

jbossws-native-core-3.1.1.GA.jar 
jbossws-native-jaxws-3.1.1.GA.jar 
jbossws-native-saaj-3.1.1.GA.jar
jbossws-native-jaxrpc-3.1.1.GA.jar 
jbossws-native-jaxws-ext-3.1.1.GA.jar

JBoss AS 7 打包了它自己的版本,比我们打包的版本更新。一旦我们从我们的战争中删除这些罐子并反弹服务器,问题似乎就消失了。

我们消除这些依赖项的长期解决方案是将 JBoss Web 服务从 3.1.1.GA 升级到基于 CXF 的 4.0.1.GA。这涉及大量代码更改,但允许我们删除不良依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多