Cassandra0.7 挿入のサンプルコード

読み出し側についてはすでに
http://blog.ik.am/entry/view/id/52/title/Cassandra0.7.0%E3%81%AEJava+API%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB/
こちらに丁寧なサンプルがあります。

ですが、書き込みについてはそのようなものがぱっと見つからなかったので、私が最初0.6を使うときに参考にした、
第4回 JavaでCassandraにアクセスする:Cassandraのはじめ方─手を動かしてNoSQLを体感しよう|gihyo.jp … 技術評論社
↑こちらのコードを0.7版に翻訳する要領で書いてみました。

package examples;

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;

import org.apache.cassandra.thrift.Cassandra;
import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.ColumnParent;
import org.apache.cassandra.thrift.ConsistencyLevel;
import org.apache.cassandra.thrift.InvalidRequestException;
import org.apache.cassandra.thrift.TimedOutException;
import org.apache.cassandra.thrift.UnavailableException;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;

/**
 * シンプルなインサート 0.7版
 *
 */
public class SimpleInsert {

    public static final String KEYSPACE = "Keyspace1";
    // READMEの記載に合わせてcolumn family名を変更
    public static final String COLUMN_FAMILY = "Users";

    public static void main(String[] args) {
        // ThriftはFramedモードで使用する
        // さもないとTTransportExceptionでハマる
        // (参考:https://issues.apache.org/jira/browse/CASSANDRA-1333)
        TTransport transport = new TFramedTransport(new TSocket("localhost", 9160));
        TProtocol protocol = new TBinaryProtocol(transport);
        try {
            transport.open();
        } catch (TTransportException e) {
            throw new RuntimeException(e);
        }
        Cassandra.Client client = new Cassandra.Client(protocol);
        try {
            // keyspaceはあらかじめセットする
            client.set_keyspace(KEYSPACE);
            // keyはByteBufferになった
            final ByteBuffer key = ByteBuffer.wrap("sample1".getBytes("UTF-8"));
            final String columnName = "hoge";
            final String value = "sample_value";
            // あらかじめカラムと値とタイムスタンプをColumnクラスに入れて、それを使う
            Column column = new Column(ByteBuffer.wrap(columnName.getBytes("UTF-8")),
                    ByteBuffer.wrap(value.getBytes("UTF-8")),System.currentTimeMillis());
            // ColumnPathは挿入側では使わず、ColumnParentをそのまま使う
            final ColumnParent columnParent = new ColumnParent(COLUMN_FAMILY);
            // インサート
            client.insert(key, columnParent, column, ConsistencyLevel.ONE);
        } catch (InvalidRequestException e) {
            throw new RuntimeException(e);
        } catch (UnavailableException e) {
            throw new RuntimeException(e);
        } catch (TimedOutException e) {
            throw new RuntimeException(e);
        } catch (TException e) {
            throw new RuntimeException(e);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                transport.flush();
            } catch (TTransportException e) {
                throw new RuntimeException(e);
            } finally {
                transport.close();
            }
        }
        System.out.println("1件インサート完了.");
    }
}

ひとまず動くようですが、おかしなところがあったらぜひご指摘くださいませ。