2016-05-22 1 views
1

Ich versuche zu cassandra von Java mit dem jetzt verbinden empfohlen DataStax Java-Treiber 3.0, aber ich bekomme die AusnahmeIllegal in Java-Treiber 3.0 für cassandra trotz jar schattierten Verwendung

Caused by: java.lang.IllegalStateException: Detected Guava issue #1635 which indicates that a version of Guava less than 16.01 is in use. This introduces codec resolution issues and potentially other incompatibility issues in the driver. Please upgrade to Guava 16.01 or later. 
at com.datastax.driver.core.SanityChecks.checkGuava(SanityChecks.java:62) 
at com.datastax.driver.core.SanityChecks.check(SanityChecks.java:36) 
at com.datastax.driver.core.Cluster.<clinit>(Cluster.java:67) 

ich die Zip-Datei heruntergeladen haben, und kompiliert mit maven mvn clean package -Dskiptests Im Zielordner für den Core-Treiber fand ich ein Glas namens java-driver-3.0/cassandra-driver-core-3.0.1-SNAPSHOT-shaded.jar, die ich zu meinen Projekten Bibliotheken hinzugefügt. Der Versuch, das Projekt auszuführen, gibt die obige Ausnahme.

Der Versuch, wie unten

private static Cluster CLUSTER; 
private static Session SESSION; 

public static Cluster createCluster() { 
    CLUSTER = Cluster.builder().addContactPoint("127.0.0.1").build(); 
    SESSION = CLUSTER.connect(); 
    ResultSet rs = SESSION.execute("select release_version from system.local"); 
    Row row = rs.one(); 
    System.out.println(row.getString("relese_version")); 
    return CLUSTER; 
} 

public static Cluster getCluster() { 
    if (null == CLUSTER) { 
     CLUSTER = createCluster(); 
    } 
    return CLUSTER; 
} 

ich die Lösung here vermuten Cluster zu verbinden, aber ich weiß nicht, was soll ich mit dem XML zu tun. Ich bin relativ ein Greenhorn in Maven bitte gehen Sie einfach auf mich. Schließlich hat Hector-Client Unterstützung für Cassandra 3.x Ursache, wenn ich das obige Problem nicht lösen kann, würde ich nichts dagegen haben, Hector verwenden.

Antwort

1

Die schattierte Konfiguration des Java-Treibers schirmt nur Netty-Bibliotheken ab, nicht Guava. Die Hauptmotivation für das Nicht-Schattieren von Guava besteht darin, dass die öffentliche API des Java-Treibers Guave-Klassen wie ListenableFuture und TypeToken an mehreren Stellen verfügbar macht.

Wie laufen Sie Ihren Code? Verwenden Sie maven exec:java oder irgendeine Art von IDE?

Meine Vermutung ist irgendwo in Ihrem Klassenpfad existiert eine Guava-Bibliothek älter als 16.01. Eine Art zu validieren, welches jar verwendet werden kann, besteht darin, eine Klasse daraus zu nehmen und den Quellenort zu drucken. dh man könnte versuchen, dies für ListenableFuture, welcher Teil der Guave-Bibliothek ist:

System.out.println(ListenableFuture.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 

Dadurch wird die Lage des Glases gedruckt wird diese Klasse enthalten, dh:

/Users/username/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar 

Schließlich tut Hector-Client hat Unterstützung für Cassandra 3.x Ursache, wenn ich das obige Problem nicht lösen kann, würde ich nichts dagegen haben, Hector zu verwenden.

Hector ist ein Client über den Spartransport, der seither veraltet ist und in Cassandra 4.0 entfernt wird. Es ist kein aktives Projekt mehr, daher würde ich es nicht empfehlen.

+0

Es tut mir leid für die späte Antwort. Ich habe versucht, diesen Code der contextInitialized-Methode meines ContextListener hinzuzufügen, aber es würde die IDE nicht kompilieren, würde nicht sogar Importe reparieren.Ich benutze Netbeans und Glassfish gebündelt damit. – qualebs

0

Endlich fand ich die Lösung vor mir in Sichtweite. wie auf dieser Seite erklärt. Verzeihen Sie den rohen Link Ich bin auf mobilen Browser ohne js Unterstützung, aber ich werde diese Antwort entsprechend bearbeiten, wenn ich auf meinem Desktop-Browser bin.

https://java.net/jira/browse/GLASSFISH-20850

Glasfischen 4 enthalten Guave 14,0 Glas, die offenbar während der Kompilierung über die die Guave 16,01 oder höher empfohlen für den Fahrer begünstigt wird. Suchen Sie im Verzeichnis WEB-INF auf der Registerkarte Dateien Ihres Projekts sun-web.XML und ändern Sie den Eintrag

, um den Server neu zu starten, und der Fehler sollte verschwinden.

Verwandte Themen