O Easy-Cassandra é um framework ORM e um alto cliente para o Apache Cassandra em java, com ele é possível persistir objetos java de uma maneira muito fácil. Para isso é necessário adicionar anotações em sua Classe. Ele funciona como uma camada de abstração para o Thrift realizando as chamadas para o Cassandra.

O Easy-Cassandra usa a implementação do Thrift e tem como principal objetivo é ter um uso simples. Ele precisa do jdk 7 ou acima para rodar, isso acontece devido há algumas parte de seu código utilizar invokedynamic ao invés do Reflection, assim terá uma resposta ainda mais rápida. O Easy-Cassandra foi o primeiro framework compatível com versões do Cassandra acima da versão 0.8 e 1.0.0, o primeiro a usar o CQL (Cassandra Query Language) além de usar o invokedynamic, que é cerca de quinze vezes mais rápido que o Reflection.

CARACTERÍSTICAS

· Uma espécie de ORM para o Cassandra.
· Precisa apenas de anotações na classe para persistir informações.
· Persiste muito objetos java de uma maneira bastante fácil.
· Escreve e ler no Cassandra com Level Consistency.
· O primeiro compatível com versões acima do Cassandra 0.8.
· Compatível com CQL 2.0.
· O primeiro a usar invokedynamic ao invés de Reflection.
· Sob a licença Apache versão 2.0.

OBJETOS SUPORTADOS

O Easy-Cassandra tem suporte para os seguintes Objetos java:

· todos os tipos primitivos (int, long, float, double, short, byte, boolean)
· java.lang.Boolean
· java.util.Date
· java.lang.Double
· java.lang.Float
· java.lang.Integer
· java.lang.Long
· java.lang.String
· java.lang.Boolean
· java.lang.Byte
· java.lang.Short
· java.lang.Character
· java.nio.file.Path

HISTÓRICO DAS VERSÕES

Versão: 1.0.8

· Seleciona chave pelo comando CQL 'in'
· Cria automaticamente Familia de Coluna em tempo real
· Cria automaticamente índice secundário em tempo real
· Suporte com o CQL 2.0
· Não é necessário criar Família de colunas ou índices secundário. O Easy-Cassandra poderá criar automaticamente em tempo de execução

Versão: 1.0.7

 · atualizada para cassandra-thrift to 1.0.7

Version: 1.0.6

· Correção de Bugs para persistência de Arquivos
· Suporte Calendar interface

Version: 1.0.5

· Agora pode armazenar arquivos
· Suporte java.io.File e java.nio.file.Path

Version: 1.0.4

· Maior performance
· menos memory
· Agora suporta todos os tipos primitivos
· Agora suporta Byte, character, Short, BigInteger e BigDecimal

Version: 1.0.3

· Correções de Bugs com resultados
· Atualização para o cassandra-thrift to 1.0.6
· Agora utilizando java.util.loggin

Version: 1.0.2

· Correções de bugs Boolean's Object

Version: 1.0.1

· Permitido usar ColumnValue e ColumnFamilyValue no modo padrão neste modo será usado o nome do campo ou objeto
· Correções de Bugs

O QUE ESPERAR NAS PRÓXIMAS VERSÕES ?

· Notificações quando não se tem anotações no índice ou chave na Classe
· Recurso de selecionar 'in' no CQL comando
· Cria automaticamente ColumnFamily e em tempo de execução
· Cria automaticamente IndexValue e em tempo de execução
· Suporte de um ou maios índices
· Alimenta objetos a partir de uma Query

Exemplo:


List persons= cassandraQuery.executeQuery("select * from Person").getResultList();

SIMPLES EXEMPLO


 @ColumnFamilyValue(nome = "person")
public class Person implements Serializable { 

private static final long serialVersionUID = 3L;

@KeyValue(auto=false)
private Long id;

@IndexValue
@ColumnValue(nome = "name")
private String name; 

@ColumnValue(nome = "year")
private Integer year;

@EnumeratedValue(nome="sex")
private Sex sex;

@EmbeddedValue
private Address address;
//getter and setter
}
Um exemplo simples de anotações em uma classe :


public class PersonDAO {

private Persistence persistence;

public PersonDAO() {
persistence = EasyCassandraManager.getPersistence("javabahia", "localhost", 9160);
}

public void create(Person bean) {

   persistence.insert(bean);
}

public void remove(Person bean) {
   persistence.delete(bean);
}

public void remove(Long id){
    persistence.deleteByKeyValue(id, Person.class);
} 

public void update(Person bean) {

   persistence.update(bean);
}
public Person retrieve(Object id) {

   return(Person) persistence.findByKey(id, Person.class);
}
@SuppressWarnings("unchecked")
public List listAll() {

  return persistence.findAll(Person.class);
}

@SuppressWarnings("unchecked")
public List listByIndex(Object index) {
   return persistence.findByIndex(index, Person.class);
}
}

Um simples DAO realizando chamadas no cassandra

MAIS INFORMAÇÕES

Para saber mais veja: https://github.com/otaviojava/Easy-Cassandra
Wiki: https://github.com/otaviojava/Easy-Cassandra/wiki
Download: https://github.com/otaviojava/Easy-Cassandra/downloads

Se você deseja realizar alguma pergunta, contribuir, compartilhar experiência, fazer alguma coisa no projeto. Faça parte do Google Groups https://groups.google.com/group/easy- cassandra/