2

I am trying to index my data at cassandra to elastic-search hosted in cloud. I am able to connect and index dummy data with elastic-search easily using transport client. But, when I add datastax driver dependency in my pom file to connect to cassandra I get following exeptions. Weird thing is I am not even connecting to the cassandra clusters. Thanks in advance

Exception in thread "main" java.lang.AbstractMethodError: io.netty.util.concurrent.MultithreadEventExecutorGroup.newChild(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Lio/netty/util/concurrent/EventExecutor; at io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:84) at io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:58) at io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:47) at io.netty.channel.MultithreadEventLoopGroup.(MultithreadEventLoopGroup.java:49) at io.netty.channel.nio.NioEventLoopGroup.(NioEventLoopGroup.java:68) at io.netty.channel.nio.NioEventLoopGroup.(NioEventLoopGroup.java:63) at io.netty.channel.nio.NioEventLoopGroup.(NioEventLoopGroup.java:54) at org.elasticsearch.transport.netty4.Netty4Transport.createBootstrap(Netty4Transport.java:201) at org.elasticsearch.transport.netty4.Netty4Transport.doStart(Netty4Transport.java:172) at org.elasticsearch.xpack.security.transport.netty4.SecurityNetty4Transport.doStart(SecurityNetty4Transport.java:74) at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69) at org.elasticsearch.transport.TransportService.doStart(TransportService.java:196) at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69) at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:208) at org.elasticsearch.client.transport.TransportClient.(TransportClient.java:268) at org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:125) at org.elasticsearch.xpack.client.PreBuiltXPackTransportClient.(PreBuiltXPackTransportClient.java:55) at org.elasticsearch.xpack.client.PreBuiltXPackTransportClient.(PreBuiltXPackTransportClient.java:50) at org.elasticsearch.xpack.client.PreBuiltXPackTransportClient.(PreBuiltXPackTransportClient.java:46)

Erick Ramirez
  • 13,964
  • 1
  • 18
  • 23
Aromadz
  • 173
  • 2
  • 13
  • the root is : http://stackoverflow.com/questions/17969365/why-i-am-getting-java-lang-abstractmethoderror-errors. i have no answer why but i guess there is a mismatch with compile time dependency and runtime dependency – Henning Luther Mar 31 '17 at 16:12
  • Yeah, check your downloaded JAR's for potential conflicts. You may have two different versions of the Elastic dependencies (perhaps cassandra depends on something older or newer than you are including specifically?) A problem like this can be a real nuisance. – Steve Harris Mar 31 '17 at 17:18

2 Answers2

5

To get around potential conflicts between DataStax java driver's dependency of Netty and other libraries' dependencies on maven, you could use the 'shaded' classifier of the driver jar as described in the driver docs on the 'Using the shaded jar' page:

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>3.2.0</version>
    <classifier>shaded</classifier>
    <!-- Because the shaded JAR uses the original POM, you still need
        to exclude this dependency explicitly: -->
    <exclusions>
        <exclusion>
        <groupId>io.netty</groupId>
        <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Note if you aren't using maven, other build tools like gradle should have a way of specifying the classifier, otherwise you can download the shaded jar directly from maven.

Andy Tolbert
  • 11,418
  • 1
  • 30
  • 45
-1

I use this pom.xml and and this works for me

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>mavenproject2</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
         <cassandra-driver-core.version>3.1.2</cassandra-driver-core.version>
        <cassandra-unit.version>3.1.1.0</cassandra-unit.version>
        <datastax-cassandra.version>4.1.0</datastax-cassandra.version>
    </properties>
    <dependencies>
       
            <dependency>
            <groupId>com.datastax.cassandra</groupId>
            <artifactId>cassandra-driver-core</artifactId>
            <version>${cassandra-driver-core.version}</version>
            <optional>true</optional>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
                 <exclusion>
        <groupId>io.netty</groupId>
        <artifactId>*</artifactId>
        </exclusion>
            </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.cassandraunit/cassandra-unit -->
        <dependency>
            <groupId>org.cassandraunit</groupId>
            <artifactId>cassandra-unit</artifactId>
            <version>${cassandra-unit.version}</version>
                <exclusions>
        <exclusion>
        <groupId>io.netty</groupId>
        <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
        </dependency>
        <!-- DataStax Cassandra -->
        <dependency>
           <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>3.2.0</version>
    <classifier>shaded</classifier>
    <!-- Because the shaded JAR uses the original POM, you still need
        to exclude this dependency explicitly: -->
    <exclusions>
        <exclusion>
        <groupId>io.netty</groupId>
        <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
        </dependency>
        <dependency>
            <groupId>com.datastax.oss</groupId>
            <artifactId>java-driver-query-builder</artifactId>
            <version>${datastax-cassandra.version}</version>
        </dependency>
         <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>1.7.5</version>
   </dependency>
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.6.4</version>
   </dependency>
 <dependency>
  <groupId>com.datastax.oss</groupId>
  <artifactId>java-driver-core-shaded</artifactId>
  <version>4.5.1</version>
</dependency>

    </dependencies>
    
</project>