2

刚刚进入卡桑德拉。设置版本 2.0.1,服务器运行良好,cqlsh 连接并正确执行各种命令,所以我知道基础设施没问题。

我有一个小型 Java 测试程序。我在 OS X 10.8.3 (Darwin) 上使用最新的 Java 7 JDK:

java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

因为 Cassandra 2.0.1 需要 Java 7。我从 jdbc wiki 页面中所述的这些库开始:

cassandra-jdbc-1.2.5.jar
apache-cassandra-thrift-2.0.1.jar
apache-cassandra-clientutil-2.0.1.jar

并在调用此代码时

String driverClass = "org.apache.cassandra.cql.jdbc.CassandraDriver";
Class.forName( driverClass ).newInstance();

// mykeyspace was created in the setup example   
java.sql.Connection conn = DriverManager.getConnection("jdbc:cassandra://localhost:9160/mykeyspace");

getConnection() 为 org/apache/thrift/TEnum 抛出 java.lang.NoClassDefFoundError。没问题——我在 libthrift-0.9.1.jar 中找到了它并将其添加到类路径中。然后我得到 org.apache.cassandra.cql.jdbc.AbstractJdbcType 的 java.lang.NoClassDefFoundError。我为 AbstractJdbcType grep cassandra-jdbc-1.2.5.jar 但找不到。我 grep 抽象,我看到了

org/apache/cassandra/cql/jdbc/AbstractConnection.class
org/apache/cassandra/cql/jdbc/AbstractResultSet.class
org/apache/cassandra/cql/jdbc/AbstractStatement.class

我下载了旧版本的 JDBC 库(1.1.2 和 1.2.1),但它们也看不到包含 org.apache.cassandra.cql.jdbc.AbstractJdbcType。

谷歌搜索 org.apache.cassandra.cql.jdbc.AbstractJdbcType 显示它在 cassandra-all/1.0.0 构建中?也许?

我下载了 1.2.5 源并重新构建它,但它无法编译,因为 getSchema() 在 ManagedConnection.java 中没有被覆盖:

class ManagedConnection extends AbstractConnection implements Connection
...

getSchema() 是 Java 7 java.sql.Connection 中的新功能。

我想我混合了错误版本的 jars、JDK,或者可能是 2.0.1 并且 jdbc 1.2.5 不兼容......?任何人都可以命名正确的 jar 集以使用 JDBC 和 v2.0.1 吗?

4

2 回答 2

1

不它不是。

我检查了 wiki 问题日志。其他人报告说 JDBC 1.2.5 不适用于 2.0。
此外,似乎很多精力都集中在 Datastax 本机驱动程序及其之上的(最终)JDBC 层上。在这项新工作中,人们对更高的性能和删除 Thrift 都很感兴趣。这似乎很可能是 JDBC 连接到 Cassandra 2.0+ 的未来轨迹

于 2013-09-27T14:48:34.103 回答
0

我已经回滚到 Cassandra apache-cassandra-1.2.18-bin.tar.gz。仍然面临同样的问题。我尝试将 apache-cassandra-1.2.18/lib 下的所有 jar *.jar 放入类库中。问题已经解决了。包含一些缺少的库后,问题可能会消失。

我没时间,不过你可以试着把lib一个一个放到/lib下,测试一下需要哪一个来解决问题。

文柏宏,戴夫 manpakhong@hotmail.com

于 2014-07-23T09:01:21.200 回答