Я не мог использовать API-интерфейс elasticsearch Java через JSP. В дальнейшем я попытался объяснить, что я сделал. : |Elasticsearch Java API из веб-приложения-ошибки: java.lang.NoClassDefFoundError: не удалось инициализировать класс org.elasticsearch.threadpool.ThreadPool
Я установил упругий элемент 2.3.3 на свою систему, выполнив инструкцию по упругости и запустив ее из командной строки. все работает отлично. Может быть, полезно сказать, что я изменил параметры ниже elasticsearch.yml.
cluster.name: cluster_233
node.name: node_233
bootstrap.mlockall: true
network.host: 127.0.0.1
Затем с Netbeans, я создал проект Maven -> проект веб-приложения и установить ниже зависимость в pom.xml:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.3</version>
<type>jar</type>
</dependency>
Также я добавил зависимость гуавы версии 18 в проекте а затем загрузите все зависимости проекта, щелкнув правой кнопкой мыши на Зависимости и выберите Скачать Зарегестрированные имена. Затем создал класс Java и писать ниже код:
package com.mycompany.esmaven;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.node.Node;
import org.elasticsearch.node.NodeBuilder;
public class aClass {
public String test() throws Exception {
String str = tryToIndex();
String dfd = "";
return str;
}
public String tryToIndex() throws Exception {
Node node = NodeBuilder.nodeBuilder().settings(
Settings.builder()
.put("path.home", "d:/elasticsearch-2.3.3")
.put("cluster.home", "cluster_233")
).node();
Client client = node.client();
client.prepareIndex("kodcucom", "article", "1")
.setSource(putJsonDocument("ElasticSearch: Java API",
"ElasticSearch provides the Java API, all operations "
+ "can be executed asynchronously using a client object.",
new Date(),
new String[]{"elasticsearch"},
"Hüseyin Akdoğan")).execute().actionGet();
node.close();
return "Done";
}
public static Map<String, Object> putJsonDocument(String title,
String content, Date postDate, String[] tags, String author) {
Map<String, Object> jsonDocument = new HashMap<String, Object>();
jsonDocument.put("title", title);
jsonDocument.put("conten", content);
jsonDocument.put("postDate", postDate);
jsonDocument.put("tags", tags);
jsonDocument.put("author", author);
return jsonDocument;
}
}
И через страницу Jsp пытались вызвать функцию тест() (я собираюсь интегрировать elasticsearch с веб-приложения). Всегда после сборки проекта при первой загрузке появится ниже сообщение об ошибке:
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
и после обновления страницы контекст ошибки изменится:
java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.threadpool.ThreadPool
Это POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ISTEX</groupId>
<artifactId>mvnESwebapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>mvnESwebapp</name>
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
Кроме того, я хотел бы упомянуть, что с этим POM я могу проиндексировать мой JSON из функции main
. Но проблема в том, что я не знал, как запустить приложение через JSP
страниц.
Я очень ценю вас за то, что поделился своими знаниями.
С уважением, Амин
use TransportClient – xeye
Thanks @xeye. Я попробовал ваше предложение, как показано ниже. Тем не менее, я получил ту же ошибку. Настройки settings = Settings.builder() .put ("path.home", "d: /elasticsearch-2.3.3") .put ("cluster.home", "cluster_233") .build() ; Client клиент = TransportClient.builder(). Настройки (настройки) .build() .addTransportAddress (новый InetSocketTransportAddress (InetAddress.getByName ("127.0.0.1"), 9300)) .addTransportAddress (новый InetSocketTransportAddress (InetAddress.getByName («127.0.0.1»), 9200)); – Amin