刚刚进入卡桑德拉。设置版本 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 吗?