我正在创建一个OSGi包,其中Sling servlet需要使用HBase。我收到以下错误。我用谷歌搜索了这个,我发现的答案很模糊,其中一些是矛盾的。我在我的localhost上运行HBase 0.94.6,并且必要的jar是项目中的Maven依赖项。它们也包含在EmbedDependency标记中。我已经尝试在bundle的root中包含hbase-default.xml(即在src / main / resources中),并且我在maven-bundle-plugin的配置/异常标记中有以下内容:
<Include-Resource>{maven-resources}</Include-Resource>
如果我理解正确,这应该导致文件使用bundle构建,我可以在生成的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)
答案 0 :(得分:2)
答案是我必须补充一下:
Thread.currentThread().setContextClassLoader(HBaseConfiguration.class.getClassLoader());
这是在另一个线程中提到的,但那里有几个提出的解决方案。我很早就试过这个,但当时没用。我可能需要重新启动Felix或删除捆绑或其他东西。无论如何,这最终解决了它。