Has anybody managed to get the Cassandra JDBC 1.0.5 to work with Cassandra 1.1+?
Using these "schemas":
CREATE KEYSPACE mutatio WITH strategy_class = 'SimpleStrategy' AND strategy_options:replication_factor = 1;
USE mutatio;
CREATE COLUMNFAMILY blogPosts (
id bigint PRIMARY KEY,
userID int,
title varchar,
body text,
created timestamp,
edited timestamp
);
And query like so (connecting to Cassandra is fine):
try {
PreparedStatement stmtInsertPost = cassandra.prepareStatement("UPDATE blogPosts SET userID=?, title=?, body=?, created=?, edited=? WHERE id=?");
byte i = 0;
stmtInsertPost.setInt(i++, post.userID);
stmtInsertPost.setString(i++, post.title);
stmtInsertPost.setString(i++, post.body);
stmtInsertPost.setString(i++, post.created);
stmtInsertPost.setString(i++, post.edited);
stmtInsertPost.setLong(i++, post.id);
stmtInsertPost.executeUpdate();
} catch (Exception ex) {
writer.println(ex.toString());
}
Example object:
{
"id" : 2339993644662819568,
"userID" : 1,
"created" : "2012-03-29 19:15:46+0100",
"edited" : "2012-03-29 19:15:46+0100",
"body" : "<p>Hello World!</p>",
"title" : "Test Blog Post",
"tags" : [ "test", "testing" ]
}
I get a generic SQL exception in the Java application (I'm using Apache DBCP) and by running ./cassandra -f I can see this exception:
ERROR 19:02:01,587 Error occurred during processing of message.
java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at org.apache.cassandra.cql.Term.getByteBuffer(Term.java:99)
at org.apache.cassandra.cql.UpdateStatement.prepareRowMutations(UpdateStatement.java:163)
at org.apache.cassandra.cql.UpdateStatement.prepareRowMutations(UpdateStatement.java:127)
at org.apache.cassandra.cql.QueryProcessor.batchUpdate(QueryProcessor.java:252)
at org.apache.cassandra.cql.QueryProcessor.processStatement(QueryProcessor.java:591)
at org.apache.cassandra.cql.QueryProcessor.process(QueryProcessor.java:873)
at org.apache.cassandra.thrift.CassandraServer.execute_cql_query(CassandraServer.java:1226)
at org.apache.cassandra.thrift.Cassandra$Processor$execute_cql_query.getResult(Cassandra.java:3458)
at org.apache.cassandra.thrift.Cassandra$Processor$execute_cql_query.getResult(Cassandra.java:3446)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:184)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Has anybody experienced this and discovered a solution or is it simply a mismatch of edge build of Cassandra conflicting with the Cassandra-JDBC which doesn't seem to get updated all that often?
