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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With