2013-09-27 58 views
2

刚进入卡桑德拉。设置版本2.0.1和服务器运行正常,并且cqlsh连接并正确执行各种命令,所以我知道基础设施是好的。CQL JDBC 1.2.5是否与cassandra-thrift-2.0.1和cassandra-clientutil-2.0.1兼容?

我有一个小的Java测试程序。我使用的是最新的Java JDK 7的OS X 10.8.3(达尔文):

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) 

因为卡桑德拉2.0.1需要Java 7,我开始用这些库作为JDBC维基页面注意:

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()抛出一个java.lang.NoClassDefFoundError用于组织/阿帕奇/节俭/ TEnum。没问题 - 我发现在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 LIB(1.1.2和1.2.1),但他们没有看到遏制org.apache.cassandra.cql.jdbc。 AbstractJdbcType也是。

谷歌搜索org.apache.cassandra.cql.jdbc.AbstractJdbcType揭示了它在卡桑德拉 - 所有/ 1.0.0构建?也许?

我下载了1.2.5源和重建它,它不能编译,因为的getSchema()不ManagedConnection.java覆盖:

class ManagedConnection extends AbstractConnection implements Connection 
... 

的getSchema()在Java 7中的java.sql是新的。连接。

我想我的混合罐,JDK的错误版本,或可能2.0.1和1.2.5 JDBC不兼容...?任何人都可以命名适当的一组jar来使用JDBC和v2.0.1吗?

回答

1

不,它不是。

我查问题日志维基。其他人报告说JDBC 1.2.5不支持2.0。
此外,似乎有很多精力集中在Datastax本地驱动程序及其最终的JDBC层上。在这项新的努力中,对性能更高以及节省费用感兴趣。这很可能是这将是JDBC连接的未来轨迹卡桑德拉2.0+

0

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

我没有时间,但你可以尝试通过一个放的lib/lib下一个测试哪一个是需要解决的问题。

Man Pak Hong,Dave [email protected]