gpt4 book ai didi

maven - hbase 和 osgi - 找不到 hbase-default.xml

转载 作者:可可西里 更新时间:2023-11-01 14:32:15 25 4
gpt4 key购买 nike

由于 hbase 不能作为 osgi 化的包使用,但我设法使用 maven felix 插件(hbase 0.92 和相应的 hadoop-core 1.0.0)创建了包,并且两个包都在 OSGi 中启动:)

还将 hbase-default.xml 添加到生成的包中。在生成的 osgi-jar 中,当我打开它时,结构如下所示:

  • 组织/
  • 元信息
  • hbase-default.xml

这是通过 <Include-Resource>@${pkgArtifactId}-${pkgVersion}.jar!/hbase-default.xml</Include-Resource> 实现的

当我真正想要连接到 hbase 时,问题出现了。找不到 hbase-default.xml,因此我无法创建任何配置文件。

hbase osgi 包在另一个 osgi-bundle 中使用,该 osgi-bundle 应该用于获取 hbase 连接和查询数据库。此 osgi-bundle 由 RCP 应用程序使用。

我的问题是,我必须将我的 hbase-default.xml 放在哪里,以便在启动 bundle 时找到它?或者为什么它没有意识到该文件已存在?

感谢您的任何提示。

-- 编辑

我找到了一个反编译器,所以我可以查看执行配置加载的源代码(hadoop-core 不通过 maven 提供任何源代码),我现在看到使用了 Threads contextClassLoader(如果不可用, Configuration 类本身的 classLoader),所以在我看来它找不到资源,但是,根据描述,它应该也检查父级(但谁是 OSGi 环境中的父级?)?

我测试从应该使用 hbase 的 OSGi-bundle 中获取资源,我在其中将 hbase-default.xml 添加到创建的 jar 文件中(见上文),当我获取线。当我进一步研究代码时,我意识到没有办法为 HBaseConfiguration 设置类加载器(尽管可以为“简单的”hadoop-Configuration 设置类加载器,HBaseConfiguration 继承自,但是创建过程HBaseConfiguration 不允许这样做,因为它只是在 create() 方法中创建一个新对象。

我真的希望你知道如何启动和运行它:)

最佳答案

Thread.currentThread().setContextClassLoader(HBaseConfiguration.class.getClassLoader());

确保 HBaseConfiguration 加载到您的 OSGI bundle.hbase 中的类将使用线程上下文类加载器,以加载资源(hbase-default.xml 和 hbase-site.xml)。设置 TCCL 将允许您加载默认值并在以后覆盖它们。

关于maven - hbase 和 osgi - 找不到 hbase-default.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10191512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com