2016-06-11 13 views
2

Ich habe eine einfache Verbindung zu meiner Cassandra-Instanz über Java ausprobiert. Ich habe einen "Demo" -Keyspace zu cqlsh gemacht und eine Tabelle im Java-Programm erstellt. Der Code ist unten:Cassandra Java-Verbindungsfehler

import com.datastax.driver.core.Cluster; 
import com.datastax.driver.core.Session; 
import java.lang.*; 
import java.io.*; 

public class GettingStarted { 
    public static void main(String args[]) 
    { 
     Cluster clusters; 
     Session sessions; 

     clusters =Cluster.builder().addContactPoint("127.0.0.1").build(); 
     sessions =clusters.connect("demo"); 

     String query ="CREATE TABLE emp(emp_id int PRIMARY KEY, emp_name text, emp_city text, emp_sal int, emp_phone varint);"; 

     sessions.execute(query); 

     System.out.println("table created"); 
    } 
} 

ich die folgende Fehlermeldung erhalten:

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
    at com.datastax.driver.core.Cluster.<clinit>(Cluster.java:63) 
    at GettingStarted.main(GettingStarted.java:12) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 2 more 

Was bin ich? Es gibt keine sichtbaren Fehler im Code.

Fehler nach SLF4J JAR-Datei hinzufügen:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/util/concurrent/FutureCallback 
    at com.datastax.driver.core.Cluster.<init>(Cluster.java:89) 
    at com.datastax.driver.core.Cluster.buildFrom(Cluster.java:145) 
    at com.datastax.driver.core.Cluster$Builder.build(Cluster.java:981) 
    at GettingStarted.main(GettingStarted.java:12) 
Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.FutureCallback 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 4 more 
+0

Klingt so, als ob Sie SLF4J zur Laufzeit nicht auf Ihrem Klassenpfad haben. –

+0

Ich habe die Datei SLF4J api jar hinzugefügt ... aber es zeigt immer noch einige Fehler .. –

+0

Welche Ausnahmen sehen Sie jetzt? – ck1

Antwort

0

Wenn ich diese Art von Demo-Programm versucht, ich habe mit Bezug Maven Abhängigkeiten hinzugefügt, um die folgenden Github-Repository.

Gehen Sie this page hinunter, um Maven-Abhängigkeiten zu sehen und fügen Sie sie Ihrem Klassenpfad hinzu.

2

Ich nehme an, Sie haben Abhängigkeitskonflikte. Ich hatte ähnliche Probleme mit einem Projekt, bei dem ich Hadoop, HBase und Cassandra verwende. In meinem Fall wurden Probleme durch Versionskonflikte mit Guave verursacht. Ich habe herausgefunden, dass die Guave-Version 16.0.1 über alle Funktionen verfügt, die der Cassandra 3-Treiber benötigt, und weiterhin mit HBase (Version 1.1.3) funktioniert.

Das sind meine Cassandra Zusammenhang Maven Abhängigkeiten:

<!-- Cassandra Dependencies --> 
<dependency> 
    <groupId>com.datastax.cassandra</groupId> 
    <artifactId>cassandra-driver-core</artifactId> 
    <version>3.0.0</version> 
</dependency> 

<!-- Guave (required by Cassandra) --> 
<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>16.0.1</version> 
</dependency> 

Unten ist mein Abhängigkeitsbaum, nachdem ich alle Hadoop und HBase Abhängigkeiten entfernt haben.

[INFO] mygroup:myartifact:jar:1.0-SNAPSHOT 
[INFO] +- com.datastax.cassandra:cassandra-driver-core:jar:3.0.0:compile 
[INFO] | +- io.netty:netty-handler:jar:4.0.33.Final:compile 
[INFO] | | +- io.netty:netty-buffer:jar:4.0.33.Final:compile 
[INFO] | | | \- io.netty:netty-common:jar:4.0.33.Final:compile 
[INFO] | | +- io.netty:netty-transport:jar:4.0.33.Final:compile 
[INFO] | | \- io.netty:netty-codec:jar:4.0.33.Final:compile 
[INFO] | \- io.dropwizard.metrics:metrics-core:jar:3.1.2:compile 
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.7:compile 
[INFO] +- com.google.guava:guava:jar:16.0.1:compile 
[INFO] +- commons-lang:commons-lang:jar:2.6:compile 
[INFO] +- commons-configuration:commons-configuration:jar:1.6:compile 
[INFO] | +- commons-collections:commons-collections:jar:3.2.1:compile 
[INFO] | +- commons-logging:commons-logging:jar:1.1.1:compile 
[INFO] | +- commons-digester:commons-digester:jar:1.8:compile 
[INFO] | | \- commons-beanutils:commons-beanutils:jar:1.7.0:compile 
[INFO] | \- commons-beanutils:commons-beanutils-core:jar:1.8.0:compile 
[INFO] \- junit:junit:jar:4.12:test 
[INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test 

Sie können den Maven Abhängigkeitsbaum mit diesem Befehl ausdrucken:

mvn dependency:tree 

Wenn Sie nicht Maven oder anderen Abhängigkeits-Manager verwenden, dann müssen Sie alle Abhängigkeiten unter aufgeführt herunterladen und hinzufügen com.datastax.cassandra: cassandra-driver-core: jar manuell zu Ihrem CLASSPATH.