因为 hbase 不能作为 osgi-ified 包提供,但我设法使用 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 中使用,该包应该用于获取 hbase 连接和查询数据库。此 osgi-bundle 由 RCP 应用程序使用。
我的问题是,我必须将 hbase-default.xml 放在哪里,以便在启动包时找到它?或者为什么它没有意识到文件存在?
谢谢你的任何提示。
- 编辑
我找到了一个反编译器,因此我可以查看执行配置加载的源(hadoop-core,它不通过 maven 提供任何源),现在我看到使用了 Threads contextClassLoader(如果不可用,则配置类本身),所以在我看来它找不到资源,但是,根据描述,它应该也检查父母(但OSGi环境中的父母是谁?)?
我测试了从应该使用 hbase 的 OSGi 捆绑包中获取资源,我将 hbase-default.xml 添加到创建的 jar 文件中(见上文),当我获得线程的 contextClassLoader 时,我得到了一个资源。当我进一步研究代码时,我意识到没有办法为 HBaseConfiguration 设置类加载器(虽然可以为“简单”hadoop-Configuration 设置类加载器,HBaseConfiguration 继承自,但创建过程HBaseConfiguration 不允许这样做,因为它只是在 create() 方法中创建一个新对象。
我真的希望你知道如何启动和运行它:)