刚进入卡桑德拉。设置版本2.0.1,服务器运行正常,cqlsh连接并正确执行各种命令,所以我知道基础设施没问题。
我有一个小的Java测试程序。我在OS X 10.8.3(达尔文)上使用最近的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但找不到它。我gret for Abstract,我看到了
org/apache/cassandra/cql/jdbc/AbstractConnection.class
org/apache/cassandra/cql/jdbc/AbstractResultSet.class
org/apache/cassandra/cql/jdbc/AbstractStatement.class
我下载了旧版本的JDBC lib(1.1.2和1.2.1),但他们看不到包含org.apache.cassandra.cql.jdbc.AbstractJdbcType。
google搜索org.apache.cassandra.cql.jdbc.AbstractJdbcType显示它是在cassandra-all / 1.0.0版本中?可能?
我下载了1.2.5源并重新构建它并且无法编译,因为在ManagedConnection.java中没有覆盖getSchema():
class ManagedConnection extends AbstractConnection implements Connection
...
getSchema()是Java 7 java.sql.Connection中的新功能。
我想我混合了错误版本的jar,JDK或者可能是2.0.1而且jdbc 1.2.5不兼容......?任何人都可以将正确的罐子命名为使用JDBC和v2.0.1吗?
答案 0 :(得分:1)
不,不是。
我检查了wiki问题日志。其他人报告说,JDBC 1.2.5对2.0不起作用 此外,似乎很多精力集中在Datastax本机驱动程序及其(最终)JDBC层上。在这项新的努力中,人们对提高性能和删除Thrift感兴趣。看起来这可能是未来与Cassandra 2.0 +的JDBC连接的基础。
答案 1 :(得分:0)
我已经回到了Cassandra apache-cassandra-1.2.18-bin.tar.gz。仍面临同样的问题。我尝试将所有jar * .jar放在apache-cassandra-1.2.18 / lib下的类库中。问题已经解决了。包含一些缺少的库后,问题可能会消失。
我没有时间,但您可以尝试将lib放在/ lib下逐一测试哪一个需要解决问题。
曼帕洪,戴夫 manpakhong@hotmail.com