deployment - JBoss:即使类存在,部署也会失败并出现 ClassNotFoundException - JaxrsScanningProcessor

标签 deployment jboss jax-rs

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

这是错误:

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start
 service jboss.deployment.unit.myapp.POST_MODULE: org.jboss.msc.service.StartException in
 service jboss.deployment.unit.myapp.POST_MODULE: JBAS018733: Failed to process phase POST_MODULE of deployment "myapp"
        at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127)
        ...
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS011230: Could not load JAX-RS Application class
        at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:218)
        at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.deploy(JaxrsScanningProcessor.java:100)
        at 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 more
Caused by: java.lang.ClassNotFoundException: myapp.rs.RestApplication from [Module "deployment.myapp:main" from Service Module Loader]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
           [jboss-modules.jar:1.3.0.Final-redhat-2]
        ...
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:118) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.as.jaxrs.deployment.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:214)
        ... 7 more

The class is there:

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

This is how I deployed it (my user != the user running jboss, if that makes a difference):

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

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

有小费吗?

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

    看来我已经通过从 WAR 文件的 WEB-INF/lib/ 中删除所有 resteasy/jaxrs/jboss 库解决了这个问题。 .

    我注意到 war 包含许多它不应该包含的库,例如 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 等

    所以我猜类加载器没有看到/找到类,因为类路径 hell ,服务器和 webapp 使用相同库的不同“实例”。 (不知道为什么它在 JBoss 独立下工作;但独立具有开箱即用的配置,而域已经调整了很多)。

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

    关于deployment - JBoss:即使类存在,部署也会失败并出现 ClassNotFoundException - JaxrsScanningProcessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777286/

    相关文章:

    maven - 在 Maven 部署期间失去对 webapps 的权限

    java - 具有多个同名参数的 JAX-RS 查询

    java - 带有嵌入式 jetty 和 Jersey 的服务器端自定义 header

    java - 不支持的媒体类型 (415)- 放入 java 列表

    Python 结构错误

    python - 使用 Heroku 在 Django 应用程序中部署时出现错误

    java - 指向 env var 的 jboss 缓存位置

    jboss - WELD-000119 由于底层类加载错误,未从 "Clazz"生成任何 bean 定义

    java - 在应用程序级别实现 WS-Security

    ubuntu - 用另一个目录的构建替换 docker 镜像