Hadoop、Jersey 和 JBoss:应用程序无法启动

问题描述 投票:0回答:3

我对 JBoss 几乎一无所知。昨天之前从来没有接触过它,仍然不太了解它。但是,我公司的一个客户正在使用它来部署我们的应用程序,而我们最新的更新破坏了他们的配置,所以我正在努力解决它。

无论如何,这是版本信息:

Hadoop:2.7.2

球衣:2.3

JBoss:6.1

操作系统:Windows(我怀疑这是特定于操作系统的,那只是我正在处理的环境)

我们最近向我们的应用程序添加了一个 Hadoop 连接器模块,这似乎是导致失败的原因。我已经能够重现这个问题,这里是堆栈跟踪:

13:32:39,857 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.deployment.unit."eip.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."eip.war".INSTALL: JBAS018733: Failed to process phase INSTALL of deployment "eip.war"
        at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127) [jboss-as-server-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.4.GA-redhat-1.jar:1.0.4.GA-redhat-1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_65]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_65]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_65]
Caused by: java.lang.LinkageError: Failed to link org/apache/hadoop/hdfs/web/resources/UserProvider (Module "deployment.eip.war:main" from Service Module Loader)
        at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:428) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:261) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:76) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.modules.Module.loadModuleClass(Module.java:548) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:189) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:443) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:431) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:373) [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.web.deployment.ServletContainerInitializerDeploymentProcessor.loadClassInfoSet(ServletContainerInitializerDeploymentProcessor.java:232)
        at org.jboss.as.web.deployment.ServletContainerInitializerDeploymentProcessor.deploy(ServletContainerInitializerDeploymentProcessor.java:161)
        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.NoClassDefFoundError: com/sun/jersey/spi/inject/InjectableProvider
        at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.8.0_65]
        at java.lang.ClassLoader.defineClass(ClassLoader.java:760) [rt.jar:1.8.0_65]
        at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:345) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:423) [jboss-modules.jar:1.3.0.Final-redhat-2]
        ... 16 more
Caused by: java.lang.ClassNotFoundException: com.sun.jersey.spi.inject.InjectableProvider from [Module "deployment.eip.war: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.performLoadClassUnchecked(ConcurrentClassLoader.java:443) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:431) [jboss-modules.jar:1.3.0.Final-redhat-2]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:373) [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]
        ... 20 more

所以这个 UserProvider 类似乎被设置为实现 Jersey 接口。问题是,Jersey 接口是 1.x 接口,而我们的应用程序中有 2.x 库。我们需要为其他组件使用 2.x 库,几个月前实际上有一个很大的迁移来放弃 1.x。

所以我完全迷路了。我已经尝试了我能想到的一切来尝试解决这个问题。我深入研究了有关焊接的文档,但每当我尝试任何基于配置的禁用焊接方法时,我都会遇到一个异常,它不知道如何解析引用焊接的 XML 元素。

JBoss 快把我逼疯了,但这个客户想用它,所以我们得想办法支持它。

所以,这是我真正可以帮助的事情:

  1. 禁用试图加载 UserProvider 的扫描过程。我们没有在我们的应用程序中以任何方式或形式使用这个类,我们甚至不想。

  2. 让 JBoss 更好地与 Jersey 2.3 一起工作。不完全确定那是可能的......

  3. 让这个异常消失的骇人听闻的方法。希望...

  4. 我能做些什么来完成这项工作。

java hadoop jboss
3个回答
0
投票

问题是 Hadoop 2.7 使用 jersey 1.9


0
投票

在此错误中,我必须删除版本中的 hadoop 依赖项:2.6.0-mr1-cdh5.7.4

并添加 jersey-server 一个:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.19.3</version>
</dependency>

0
投票

对我来说,将 solr-solrj 和 solr-core 从 6.2.1 升级到 6.5.1 解决了这个问题,尽管我仍然看到有关 UserService 的警告。这是一个奇怪的错误,因为它一天又一天地出现,没有做任何改变。

© www.soinside.com 2019 - 2024. All rights reserved.