Hadoop Jersey 与 Wildfly resteasy 冲突

Hadoop Jersey conflicts with Wildfly resteasy

在一个 J2EE 项目中,我们使用 Wildfly 来部署项目。我们 运行 在外部服务器上使用 hadoop。我们想连接这个服务器并读取 HDFS 数据。但问题是,我们使用的任何 hadoop 库(hadoop-common、hadoop-hdfs、hadoop-client)都需要 Jersey,但 wildfly 使用 Resteasy。由于这个冲突,Wildfly 没有部署成功。

我的问题是,

是否有任何不依赖于 Jersey 的 hadoop 库,我们可以用于此操作,或者,

我们是否需要用 Jersey 替换 Wildfly 上的 Resteasy。如果这是解决方案,我们该怎么做。我们找不到此解决方案的来源。

感谢您的帮助。

好的,我在 WildFly 9.0.1 中获得了 2.7.1 版中的基本 Hadoop HDFS 内容。详情可见我的博客:http://rick-rainer-ludwig.com/2015/09/01/hadoop-client-in-wildfly-a-difficult-marriage

基本步骤是:

  • 关闭隐式 bean 存档支持并强制所有 JAR 文件包含 META-INF/beans.xml(如果包含 CDI bean)。一些 Hadoop 客户端依赖包含@Inject,这使得 WildFly 在部署过程中失败
  • 为 jersey-server 和 jersey-json 添加额外的依赖项,使项目进入可以编译的状态。 Hadoop 客户端依赖项不是自包含的。因此,需要额外的依赖项来添加一些缺失的 类.
  • 排除 hadoop-mapreduce-client-app 和 hadoop-mapreduce-client-jobclient,因为它们尝试提供的服务由于缺少 WildFly 中的依赖项而无法启动。不知道,它们的用途以及为什么将它们打包在那里。
  • 如果依赖 Jackson 2,则需要将整个 Hadoop 客户端打包到一个自己的 EAR 中,因为 Hadoop 客户端通过打包的 Provider 强制执行 Jackson 1。 EAR 需要提供具有定义良好接口的代理,例如 REST 服务或具有远程接口的 EJB。