1

我正在创建一个 Sling servlet 需要使用 HBase 的 OSGi 包。我收到以下错误。我用谷歌搜索了这个,我发现的答案很模糊,其中一些是矛盾的。我在本地主机上运行 HBase 0.94.6,必要的 jar 是项目中的 Maven 依赖项。它们也包含在 EmbedDependency 标记中。我尝试在包的根目录中包含 hbase-default.xml(即在 src/main/resources 中),并且在 maven-bundle-plugin 的配置/异常标记中包含以下内容:

<Include-Resource>{maven-resources}</Include-Resource>

如果我理解正确,这应该会导致使用捆绑包构建文件,并且我可以在生成的 jar 文件中看到它。但是在部署捆绑包时,我仍然从 Felix 收到以下错误。有谁知道如何让这个消息消失?

java.lang.RuntimeException: hbase-default.xml file seems to be for and old version of HBase (null), this version is 0.94.6-cdh4.3.0 
  at org.apache.hadoop.hbase.HBaseConfiguration.checkDefaultsVersion(HBaseConfiguration.java:68)
  at org.apache.hadoop.hbase.HBaseConfiguration.addHbaseResources(HBaseConfiguration.java:100)
  at org.apache.hadoop.hbase.HBaseConfiguration.create(HBaseConfiguration.java:111)
  at com.adobe.corona.repo.acquisition.TestServlet.activate(TestServlet.java:46)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
4

1 回答 1

2

答案是我必须添加这个:

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

这在另一个线程中提到过,但那里有几个建议的解决方案。我很早就尝试过这个,但当时没有用。我可能需要重新启动 Felix 或删除捆绑包或其他东西。无论如何,这终于解决了。

于 2013-09-03T18:40:16.393 回答