JBoss:即使存在类,部署也会因ClassNotFoundException失败-JaxrsScanningProcessor

Jak*_*oly 5 deployment jboss jax-rs

我有一个带有REST服务的WAR文件。它可以在独立模式下在JBoss EAP 6.2(对应于AS 7.something)上很好地部署,但是有时 -但经常-在域模式下会失败,对于我的JAX-RS Application类的子类来说是ClassNotFoundException。处于战争中(嗯,它是独立运行的)。由于它有时可以工作,因此我怀疑存在一些并发问题,导致JBoss尝试在看到类之前加载该类。

这是错误:

错误[org.jboss.msc.service.fail](MSC服务线程1-1)MSC000001:无法启动
 服务jboss.deployment.unit.myapp.POST_MODULE:中的org.jboss.msc.service.StartException
 服务jboss.deployment.unit.myapp.POST_MODULE:JBAS018733:无法处理部署“ myapp”的阶段POST_MODULE
        在org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127)
        ...
引起原因:org.jboss.as.server.deployment.DeploymentUnitProcessingException:JBAS011230:无法加载JAX-RS应用程序类
        在org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:218)
        在org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.deploy(JaxrsScanningProcessor.java:100)
        在org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:120)
           [jboss-as-server-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
        ...另外5个
由以下原因引起:java.lang.ClassNotFoundException:来自[来自服务模块加载程序的模块“ deployment.myapp:main”中的myapp.rs.RestApplication
        在org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
           [jboss-modules.jar:1.3.0.Final-redhat-2]
        ...
        在org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:118)[jboss-modules.jar:1.3.0.Final-redhat-2]
        在org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:214)
        ...另外7个

该类在那里:

[jboss / domain] $解压缩-l data / content / 6c / 0ffc675ff1c2254540b6e8caffc0d2605ed549 / content | grep RestApp
     2262 02-13-14 09:05 WEB-INF / classes / myapp / rs / RestApplication.class

这就是我的部署方式(我的用户!=运行jboss的用户,如果有区别的话):

me$ /opt/jboss/bin/jboss-cli.sh -c --controller=0.0.0.0:49999 --user=admin --password=***
[domain@0.0.0.0:49999 /] deploy /vagrant/myapp.war --all-server-groups
Run Code Online (Sandbox Code Playgroud)

通过Web管理控制台执行时,部署以相同的方式失败。通过将.war复制到standalone/deployments/目录中,可以完成独立部署。

有小费吗?

配置信息

  1. JBoss EAP 6.2
  2. Rest Easy 3.0.6(替换默认的2.x模块)
  3. web.xml除了resteasy.servlet.mapping.prefix上下文参数外,我们没有JAX-RS内容。我们使用resteasy-servlet-initializer库而不是在那里手动配置servlet或类似的东西

Jak*_*oly 5

似乎我已经通过从 WAR 文件的WEB-INF/lib/.

我注意到战争包含许多它不应该包含的库,例如 resteasy-jaxrs-3.0.6.Final.jar、jboss-jaxr-api_1.0_spec-1.0.0.Final.jar(顺便说一句,与 Rest Easy 冲突3.0.6)、javax.servlet-api-3.1.0.jar 等。

所以我猜类加载器没有看到/找到类,因为类路径地狱,服务器和 web 应用程序使用相同库的不同“实例”。(不知道为什么它在 JBoss Standalone 下工作;但 Standalone 具有开箱即用的配置,而 domain 已进行了大量调整)。

我有时也包括--runtime-name=myapp在部署命令中,这似乎是错误的,我应该使用--runtime-name=myapp.war(包括结尾)。