Ich konnte die Elasticsearch-Java-API nicht über JSP verwenden. Im Folgenden habe ich versucht zu erklären, was ich getan habe. : |Elasticsearch Java-API aus Webanwendungsfehler: java.lang.NoClassDefFoundError: Konnte die Klasse nicht initialisieren org.elasticsearch.threadpool.ThreadPool
Ich habe elasticseach 2.3.3 auf meinem System installiert, indem ich die Anweisung elastic befolgt habe und sie von der Eingabeaufforderung aus starte. Alles funktioniert perfekt. Es kann nützlich sein zu sagen, ich habe die Parameter von elasticsearch.yml geändert.
cluster.name: cluster_233
node.name: node_233
bootstrap.mlockall: true
network.host: 127.0.0.1
Dann mit Netbeans, ich habe ein Maven-Projekt erstellt -> webanwendungsanwendungsprojekt und die unter Abhängigkeit in pom.xml gesetzt:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.3</version>
<type>jar</type>
</dependency>
Auch habe ich die Guava Version 18 Abhängigkeit in Projekt hinzugefügt und dann laden Sie alle Projektabhängigkeiten herunter, indem Sie mit der rechten Maustaste auf Abhängigkeiten klicken und herunterladen Deklarierte Abhängigkeiten. Dann erstellt eine Java-Klasse und schreibt unten Code:
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;
}
}
Und durch eine jsp Seite versucht, die test() Funktion aufzurufen (Ich werde mit einer Web-Anwendung integrieren Elasticsearch). Immer nach dem Projekt bei der ersten Belastung Aufbau die folgenden Fehler angezeigt:
java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
und nach der Seite der Kontext der Fehler Auffrischen ändert sich zu:
java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.threadpool.ThreadPool
Dies ist das 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>
Auch möchte ich erwähnen, mit diesem POM kann ich meine JSON von der main
Funktion indexieren. Aber das Problem ist, ich wusste nicht, wie man die Anwendung durch JSP
Seiten laufen lässt.
Ich schätze Sie wirklich für das Teilen Ihres Wissens.
Grüße, Amin
Verwenden Sie TransportClient – xeye
Danke @xeye. Ich habe Ihren Vorschlag wie folgt ausprobiert. Trotzdem habe ich den gleichen Fehler. Einstellungen Einstellungen = Settings.builder() .put ("path.home", "d: /elasticsearch-2.3.3") .put ("cluster.home", "cluster_233") .build() ; Client-client = TransportClient.builder(). Einstellungen (Einstellungen) .build() .addTransportAddress (neu InetSocketTransportAddress (InetAddress.getByName ("127.0.0.1"), 9300)) .addTransportAddress (neu InetSocketTransportAddress (InetAddress.getByName ("127.0.0.1"), 9200)); – Amin