Hadoop Jersey 与 Wildfly resteasy 发生冲突

Posted

技术标签:

【中文标题】Hadoop Jersey 与 Wildfly resteasy 发生冲突【英文标题】:Hadoop Jersey conflicts with Wildfly resteasy 【发布时间】:2015-10-04 13:22:21 【问题描述】:

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

我的问题是,

有没有不依赖Jersey的hadoop库,我们可以用来做这个操作,或者,

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

感谢您的帮助。

【问题讨论】:

你的意思是Jersey而不是Jetty? 是的,很抱歉错字,我现在将编辑问题。 hadoop-client 2.7.1 似乎排除了泽西岛的依赖关系。你确定依赖来自哪里? 我们使用 hadoop 2.6.0 版本,是的,我确定。 您是否尝试过排除 Jersey 部门?如果 hadoop-client 正在通过 javax.ws.rs API 访问 Jersey 实现,那么它可能会正常工作。 【参考方案1】:

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

基本步骤是:

如果包含 CDI bean,则关闭隐式 bean 归档支持并强制所有 JAR 文件包含 META-INF/beans.xml。一些 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。

【讨论】:

感谢您的回复。我现在不能从这一点回去,但我希望这对其他人有所帮助。 不客气。最后,它与您的解决方案没有什么不同。您需要将 Hadoop 客户端与 JavaEE 部分隔离开来。您使用 JavaSE 应用程序完成,我使用另一个 EAR 完成。希望他们将来能清理这种包装。

以上是关于Hadoop Jersey 与 Wildfly resteasy 发生冲突的主要内容,如果未能解决你的问题,请参考以下文章

配置 Wildfly 10 以使用 Jackson(作为 JSON 提供程序)

当 Jersey ServletContainer 位于“/*”时,websocket 端点上的 404

@DELETE 上的 Jersey 错误:“不支持的 HTTP 方法:DELETE”

笔记:Jersey REST 传输格式

无法从 WildFly 连接到 HBase

Jersey