Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NoClassDefFoundError: io/netty/util/Timer

Just wanted to try Cassandra Java driver from eclipse and copied a sample code from "Practical Cassandra"

But faced error below output by eclipse:

Exception in thread "main" java.lang.NoClassDefFoundError: io/netty/util/Timer
    at com.datastax.driver.core.Configuration$Builder.build(Configuration.java:294)
    at com.datastax.driver.core.Cluster$Builder.getConfiguration(Cluster.java:1247)
    at com.datastax.driver.core.Cluster.<init>(Cluster.java:116)
    at com.datastax.driver.core.Cluster.buildFrom(Cluster.java:181)
    at com.datastax.driver.core.Cluster$Builder.build(Cluster.java:1264)
    at SampleApp.connect(SampleApp.java:13)
    at SampleApp.main(SampleApp.java:64)
Caused by: java.lang.ClassNotFoundException: io.netty.util.Timer
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 7 more

here is the sample code:

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Host;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;

public class SampleApp {
private Cluster cluster;
private Session session;

public void connect(String node) {
    cluster = Cluster.builder().addContactPoint(node).build();
    Metadata metadata = cluster.getMetadata();
    System.out.printf("Cluster: %s\n", metadata.getClusterName());
    for ( Host host : metadata.getAllHosts() ) {
        System.out.printf("Host: %s \n",host.getAddress());
    }
    session = cluster.connect();
}
public void close(){
    cluster.close();
}
public void createSchema(){
    session.execute("CREATE KEYSPACE IF NOT EXISTS portfolio_demo " +
        "WITH REPLICATION 5 { ‘class’: ‘SimpleStrategy’, " +
        "'replication_factor’: 1 };");
    session.execute("CREATE TABLE IF NOT EXISTS portfolio_demo.portfolio (" +
            "portfolio_id UUID, ticker TEXT, " +
            "current_price DECIMAL, current_change DECIMAL, " +
            "current_change_percent FLOAT, " +
            "PRIMARY KEY(portfolio_id, ticker));");
}
public void loadData(){
    session.execute("INSERT INTO portfolio_demo.portfolio " +
            "(portfolio_id, ticker, current_price, " +
            " current_change, current_change_percent) VALUES " +
            "(756716f7-2e54-4715-9f00-91dcbea6cf50, ‘GOOG’, " +
            " 889.07, -4.00, -0.45);");

    session.execute("INSERT INTO portfolio_demo.portfolio " +
            "(portfolio_id, ticker, current_price, " +
            " current_change, current_change_percent) VALUES " +
            "(756716f7-2e54-4715-9f00-91dcbea6cf50, ‘AMZN’, " +
            " 297.92, -0.94, -0.31);");
}
public void printResults(){
    ResultSet results = session.execute("SELECT * FROM " +
            "portfolio_demo.portfolio WHERE portfolio_id 5 " +
            "756716f7-2e54-4715-9f00-91dcbea6cf50;");
    for (Row row : results) {
        System.out.println(String.format("%-7s\t%-7s\t%-7s\t%-7s \n%s",
                "Ticker", "Price", "Change", "PCT",
                "........1........1........1........"));
        System.out.println(String.format("%-7s\t%0.2f\t%0.2f\t%0.2f",
                row.getString("ticker"),
                row.getDecimal("current_price"),
                row.getDecimal("current_change"),
                row.getFloat("current_change_percent") ));
    }
}
public static void main(String[] args) {
    SampleApp client = new SampleApp();
    client.connect("127.0.0.1");
    client.createSchema();
    client.loadData();
    client.printResults();
    client.close();
    }
}

And I also added several external JARs which are downloaded or comes with eclipse:

cassandra-driver-core-3.0.0.jar
guava-18.0.jar
netty-3.10.6.Final-20160303.120156-121.jar
org.apache.log4j_1.2.15.v201012070815.jar (from eclipse plugin)
org.slf4j.api_1.7.2.v20121108-1250.jar (from eclipse plugin)
org.slf4j.impl.log4j12_1.7.2.v20131105-2200.jar (from eclipse plugin)

I saw the same questions about the netty error but still could not figure out what was wrong with my code.

Thanks a lot.

like image 543
user1461328 Avatar asked Mar 08 '16 11:03

user1461328


1 Answers

This is the wrong Netty version. Version 3.0.0 of the driver uses 4.0.33.

You can view the driver's dependencies in the POM. The properties such as ${netty.version} are defined in the parent POM.

like image 148
Olivier Michallat Avatar answered Sep 30 '22 01:09

Olivier Michallat