<<<<<<<<<<<
Courtney Robinson [sa...@live.co.uk]

Hello everyone,

I'm sorry if that has been asked already, i've just joined the list.



can anyone provide a quick java example of connecting to cassandra and setting 
up a  keyspace and a column family using thrift.

I know my way around 0.6 and i'm trying to get ready to migrate to 0.7 when its 
stable.



Please and thank you.
<<<<<<<<<<

There is a way to search the email list, and I must add your question is more a 
u...@cassandra than dev.
Here can you search the email list
http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/

And I have done some experiments with 0.7 and Java so I could provide you with 
some help. The most interesting news I think is the secondary indices.

I also post some info a blog on www.justus.st<http://www.justus.st> where I 
format the text a little better than this =)

New about opening the connection, here the important thing is to set the framed 
transport, this is important and is a change that will be the only option in 
later versions.

     /**
     * Open up a new connection to the Cassandra Database.
     *
     * @return the Cassandra Client
     */

    private static Cassandra.Client newCassandraConnection(String address) 
throws TTransportException {
            TTransport tr = new TSocket(adress, 9160);
            TFramedTransport tf = new TFramedTransport(tr);
            TProtocol proto = new TBinaryProtocol(tf);
            Cassandra.Client client = new Cassandra.Client(proto);
            tr.open();
            return client;
    }



In this part it is possible to set all CF definitions when creating the 
keyspace, although it is not necessary so I did it afterwards.

/**
 * @param keyspacename
 * @param replicafactor
 * @throws InvalidRequestException
 * @throws TException
 */
public static void createKeySpace(String keyspacename, int replicafactor ) 
throws InvalidRequestException, TException
{
                            Cassandra.Client c = Connection.lendConnection();
                            try
                            {
                                                         
c.describe_keyspace(keyspacename);
                                                         
System.out.println("Keyspace already exists");
                            }
                            catch (NotFoundException e)
                            {
                                                         
System.out.println("Keyspace not found, creating new "+ keyspacename);
                                                         KsDef k = new KsDef();
                                                         
k.setName(keyspacename);
                                                         
k.setReplication_factor(replicafactor);
                                                         
k.setStrategy_class("org.apache.cassandra.locator.RackUnawareStrategy");
                                                         List<CfDef> cfDefs = 
new ArrayList<CfDef>();
                                                         k.setCf_defs(cfDefs);
                                                         
c.system_add_keyspace(k);
                                                         }
                                                         
Connection.returnConnection(c);
                            }

/**
 * @param keyspacename
 * @param columnname
 * @param columntype
 * @param comparatortype
 * @param subcomparatortype
 * @param row_cache_size
 * @param key_cache_size
 * @param comment
 * @throws InvalidRequestException
 * @throws TException
 * @throws NumberFormatException
 * @throws IOException
 */
public static void createColumnFamily(String keyspacename, String columnname, 
String columntype, String comparatortype,                                       
                                                                                
                                                                                
                    String subcomparatortype, double row_cache_size, double 
key_cache_size, String comment)
throws InvalidRequestException, TException, NumberFormatException, IOException
{
                            CfDef cdef = new CfDef();
                            cdef.setColumn_type(columntype);
                            cdef.setComment(comment);
                            cdef.setComparator_type(comparatortype);
                            cdef.setKey_cache_size(key_cache_size);
                            cdef.setRow_cache_size(row_cache_size);
                            cdef.setSubcomparator_type(subcomparatortype);
                            cdef.setKeyspace(keyspacename);
                            cdef.setName(columnname);

                            Cassandra.Client c = Connection.lendConnection();
                            c.set_keyspace(keyspacename);

                            c.system_add_column_family(cdef);

                            Connection.returnConnection(c);
}

/**
 * @param keyspacename
 * @param columnname
 * @param columntype
 * @param comparatortype
 * @param subcomparatortype
 * @param row_cache_size
 * @param key_cache_size
 * @param comment
 * @param listIndexes
 * @throws InvalidRequestException
 * @throws TException
 * @throws NumberFormatException
 * @throws IOException
 */
public static void createColumnFamilyWithSecondaryIndices(String keyspacename, 
String columnname, String columntype,
                                                                                
                               String comparatortype, String subcomparatortype, 
double row_cache_size,
                                                                                
                               double key_cache_size, String comment, 
ArrayList<SecondaryIndices> listIndexes  )
                                                                                
                               throws InvalidRequestException, TException, 
NumberFormatException, IOException
{
                            CfDef cdef = new CfDef();
                            cdef.setColumn_type(columntype);
                            cdef.setComment(comment);
                            cdef.setComparator_type(comparatortype);
                            cdef.setKey_cache_size(key_cache_size);
                            cdef.setRow_cache_size(row_cache_size);
                            cdef.setSubcomparator_type(subcomparatortype);
                            cdef.setKeyspace(keyspacename);
                            cdef.setName(columnname);

                            for(SecondaryIndices si : listIndexes)
                            {
                                                         
cdef.addToColumn_metadata(si.getCdef());
                            }
                            Cassandra.Client c = Connection.lendConnection();

                            c.set_keyspace(keyspacename);

                            c.system_add_column_family(cdef);

                            Connection.returnConnection(c);
}

public class SecondaryIndices
{
                            private ColumnDef cdef;

                            /**
                             * @param columnkey
                             * @param indexname
                             */
                            public SecondaryIndices(byte[] columnkey, String 
indexname, String validationclass)
                            {
                                                         cdef = new ColumnDef();
                                                         
cdef.setIndex_name(indexname); //borde vara indexnamnet
                                                         
cdef.setName(columnkey);//borde vara columnnamnet
                                                         
cdef.setIndex_type(IndexType.KEYS);
                                                         
cdef.setValidation_class(validationclass);
                            }

                            public ColumnDef getCdef() {
                            return cdef;
                            }
}

I haven't tested the secondary indices yet but I think it is this way it works 
to create, to get there is a method called get_indexed_slices(columnParent, 
clause, slicePredicate, consistency);

//this is fairly easy to understand but IndexOperator.. I leave that for now
IndexExpression expr = new IndexExpression(columnkey, IndexOperator.EQ, 
columnvalue);
//expr made into a fixed list why I do not know, new byte == startkey and 100 
is count. I dont realy know what parameters do yet
IndexClause clause = new IndexClause(Arrays.asList(expr), new byte[]{}, 100);

Hope this helps

Regards
/Justus



AB SVENSKA SPEL
106 10 Stockholm
Sturegatan 11, Sundbyberg
Växel +46 8 757 77 00
http://svenskaspel.se

Reply via email to