2016-06-11 3 views
2

Я пробовал простую связь с экземпляром Cassandra через Java. Я создал «demo» keypace для cqlsh и создал таблицу в java-программе. Код ниже:Ошибка связи Cassandra Java

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"); 
    } 
} 

Я получаю следующее сообщение об ошибке:

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 

Что мне не хватает? В коде отсутствуют видимые ошибки.

Ошибки после добавления файла SLF4J баночку:

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

Похоже, что у вас нет SLF4J на пути к классу во время выполнения. –

+0

Я добавил файл api jar SLF4J, но он все еще показывает некоторые ошибки. –

+0

Какие исключения вы видите сейчас? – ck1

ответ

0

Когда я попробовал этот вид демонстрационной программы, я добавил зависимостей Maven со ссылкой на следующий репозиторий Github.

Спуститесь this page, чтобы увидеть зависимости maven и добавить его в свой путь к классу.

2

Я предполагаю, что у вас есть конфликты зависимости. У меня были схожие проблемы с проектом, где я использую Hadoop, HBase и Cassandra. В моем случае проблемы были вызваны конфликтами версий с Guave. Я понял, что версия Guave 16.0.1 имеет все функции, необходимые для драйвера Cassandra 3, и по-прежнему работает с HBase (версия 1.1.3).

Это мои связанные Cassandra Maven зависимостей:

<!-- 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> 

Ниже мое дерево зависимостей, после того, как я удалил все зависимости Hadoop и Hbase.

[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 

Вы можете распечатать дерево зависимостей Maven с помощью этой команды:

mvn dependency:tree 

Если вы не используете Maven или любой другой менеджер зависимостей, то вы должны загрузить и добавить все зависимости, перечисленные ниже com.datastax.cassandra: cassandra-driver-core: jar вручную для вашего CLASSPATH.