2

DataStax Java Driver을 사용하여 Java에서 Cassandra에 연결하려고하면이 오류가 발생합니다. 나는 몇 가지 대답을 읽었습니다. Here Guava 19.0에 com.google.common.util.concurrent.FutureFallback is deprecated이라고 표시되어 있으며 Guava 20.0 이후로 제거되었습니다. 따라서 구아바 20.0 이상은 사용하지 마십시오.클래스가 없습니다. com/google/common/util/concurrent/FutureFallback

더욱이 구아바 20.0이 필요한 Pmml-Evaluator을 사용하고 있습니다. 카산드라에 연결하는 코드를 제거하면 코드가 제대로 작동합니다. 그래서, 어떻게 해결할 수 있을까요?

의 pom.xml 종속 관계 :

<dependencies> 

    <dependency> 
     <groupId>org.jpmml</groupId> 
     <artifactId>pmml-model</artifactId> 
     <version>1.3.4</version> 
    </dependency> 

    <dependency> 
     <groupId>com.beust</groupId> 
     <artifactId>jcommander</artifactId> 
     <version>1.48</version> 
     </dependency> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jpmml</groupId> 
     <artifactId>pmml-evaluator</artifactId> 
     <version>1.3.4</version> 
     </dependency> 

    <dependency> 
     <groupId>io.grpc</groupId> 
     <artifactId>grpc-netty</artifactId> 
     <version>1.1.2</version> 
    </dependency> 

    <dependency> 
    <groupId>io.grpc</groupId> 
    <artifactId>grpc-protobuf</artifactId> 
    <version>1.1.2</version> 
    </dependency> 

    <dependency> 
    <groupId>io.grpc</groupId> 
    <artifactId>grpc-stub</artifactId> 
    <version>1.1.2</version> 
    </dependency> 

    <dependency> 
    <groupId>io.netty</groupId> 
    <artifactId>netty-handler</artifactId> 
    <version>4.1.8.Final</version> 
</dependency> 

    <dependency> 
     <groupId>com.datastax.cassandra</groupId> 
     <artifactId>cassandra-driver-core</artifactId> 
     <version>3.1.4</version> 
    </dependency> 

    </dependencies> 

등급 :

package com.cw.predictive; 

import com.datastax.driver.core.Session; 
import com.datastax.driver.core.Cluster; 

public class CassandraSession { 

    private static Session session; 

    private CassandraSession(){} 

    public static Session getCassandraSessionInstance(String[] CONTACT_POINTS, int PORT){ 

     if(session == null){      
      synchronized (Session.class) { 
       if(session == null){     
        try{           
         Cluster cluster = Cluster.builder() 
         .addContactPoints(CONTACT_POINTS).withPort(PORT) 
         .build();            
         session = cluster.connect(); 
        } 
        catch(Exception ex) { 
         System.out.println("Error occurred"); 
         return null;    
        }    
       }    
      }   
     }  
     return session; 
    } 
} 

오류 :

Exception in thread "grpc-default-executor-0" java.lang.NoClassDefFoundError: com/google/common/util/concurrent/FutureFallback 
     at com.cw.predictive.CassandraSession.getCassandraSessionInstance(CassandraSession.java:18) 
     at com.cw.predictive.PredictiveScore$LeadScoreImpl.getLeadScore(PredictiveScore.java:136) 
     at com.cw.predicitivegrpc.LeadScoreGrpc$MethodHandlers.invoke(LeadScoreGrpc.java:234) 
     at io.grpc.stub.ServerCalls$1$1.onHalfClose(ServerCalls.java:148) 
     at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:263) 
     at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$2.runInContext(ServerImpl.java:586) 
     at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:52) 
     at io.grpc.internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:152) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
    Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.FutureFallback 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 11 more 

답변

9

당신이 가지고있는 encounte red, Apache Cassandra 용 DataStax Java Driver는 Guava 20 및 21을 아직 지원하지 않습니다 (JAVA-1328 참조).

그러나 Guava 16.01, 17.0, 18.0, 19.0, 20.0 및 21.0에 대해 테스트 된 working PR이 있으며이 수정을 위해 버전 3.2.0을 대상으로합니다. 당신이 무엇을 할 수 있는지

<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>[14.0, 20.0]</version> 
</dependency> 

이 org.jpmml, 즉의 종속성으로 구아바을 제외 할 수 있습니다 :

난 그냥 당신이 공유 PMML - 평가자의 pom.xml 파일이 [14.0, 20.0] 지원되는 버전의 범위를 보여줍니다 것으로 나타났습니다 :

<dependency> 
    <groupId>org.jpmml</groupId> 
    <artifactId>pmml-evaluator</artifactId> 
    <version>1.3.4</version> 
    <exclusions> 
    <exclusion> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

이 대신 자바 드라이버 전이 의존성 비아 당겨질 것이다 PMML 평가 기 구아바 16.01 종속성 해결의 결과로 당겨지는 것을 구아바 20.0 방지한다.

+0

자바 드라이버 3.2.0이 릴리스되었습니다. 이제는 구아바 16.01에서 22.0 –

+0

까지 지원됩니다. 구아바 21.0은 22.0이 아직 지원되지 않았기 때문에 지원되는 최대 버전입니다. –