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