创建osgi包时使用弹性搜索时出错

时间:2014-02-03 13:33:30

标签: java elasticsearch osgi-bundle

为弹性搜索创建了一个包装器。它作为Java应用程序运行时工作正常。 但是当我创建OSGI包时,它会抛出一个错误。

  org.elasticsearch.env.FailedToResolveConfigException: Failed to resolve config path [names.txt], tried file path [names.txt], path file [/home/local/PAYODA/sidharthan.r/config/names.txt], and classpath
at org.elasticsearch.env.Environment.resolveConfig(Environment.java:207)
at org.elasticsearch.node.internal.InternalSettingsPreparer.prepareSettings(InternalSettingsPreparer.java:118)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:154)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:120)
at com.payoda.commons.elasticsearch.util.GenericEsSearch.getES(GenericEsSearch.java:54)

请帮帮我.. 我正在使用ES版本0.90.10

2 个答案:

答案 0 :(得分:3)

正如您在Environment.resolveConfig()(抛出异常的那个)的实现中所看到的,它使用settings.getClassLoader().getResource(path)来解析文件。默认设置是使用使用Classes.getDefaultClassLoader()的{​​{1}}。作为&#39; names.txt&#39;在elasticsearch * .jar中,org.elasticsearch。*类中的任何ClassLoader都可以:

Thread.getContextClassLoader()

或者,您可以将自己的names.txt文件放在当前工作目录或config目录中(&#39; path.conf&#39;设置或$ home / config默认情况下,$ home为值默认情况下,路径设置或&#39; user.dir&#39;系统属性。

顺便说一下,我自己做了一些弹性搜索和OSGI的实验,所以也许molindo-elasticsync会有所帮助。此外,elasticsearch bundles provided by Servicemix可能会有所帮助。

答案 1 :(得分:0)

将names.txt文件放在bundle.you中,可以在elasticsearch.jar.Add中找到names.txt文件,然后在下面的代码中创建客户端实例。

        Thread.currentThread().setContextClassLoader(*classname*.class.getClassLoader());
        Builder settings = ImmutableSettings.settingsBuilder().put("cluster.name", esHosts);
        settings.put("path.conf", path_of_names.txt);
        TransportClient transportClient = new TransportClient(settings);

我在class_path中添加了2个jar,它们是elasticsearch.jar,lucene.jar。 jars的版本必须与Elasticsearch的版本相同。

现在它就像魅力一样......