Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cassandra Java connection error

I was trying out a simple connection to my Cassandra instance through Java. I made a 'demo' keyspace to cqlsh and created a table in the java program. The code is below:

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

I am getting the following error:

 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

What am i missing? There are no visible errors in the code.

Errors after adding SLF4J jar file:

 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
like image 314
Amit Naik Avatar asked Sep 05 '26 01:09

Amit Naik


1 Answers

I assume, you have dependency conflicts. I had similar problems with a project, where I was using Hadoop, HBase and Cassandra. In my case, problems have been caused by version conflicts with Guava. I figured out, Guava version 16.0.1 has all features, required by the Cassandra 3 driver and still works with HBase (version 1.1.3).

These are my Cassandra related Maven dependencies:

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

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

Below is my dependency tree, after I have removed all Hadoop and HBase dependencies.

[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

You can print out the Maven dependency tree using this command:

mvn dependency:tree

If you are not using Maven or any other dependency manager, then you have to download and add all dependencies listed below com.datastax.cassandra:cassandra-driver-core:jar manually to your CLASSPATH.

like image 95
Olaf H Avatar answered Sep 07 '26 14:09

Olaf H



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!