totomz / banana-redis

Adapter for redis

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status

WARNING - THIS MODULE IS IN A VERY EARLY STAGE!

I am actively working on it, big changes may happen at any time (and any contribution is welcome!)

banana-redis

This banana (that is, a Bananarama module) contains a simple adapter for redis.io This module does not want to be an ORM; at now, is more something to keep order in the redis keyspace.

Usage

Objects are serialized/deserialized using redis HashSets. Each object is serialized as a value at a key generated by a getter method annotated with org.bananarama.crud.redis.annotations.KeyGenerator; during the deserialization, the key is passed to a setter method to parse the gei and save in a local property the unique identifier for the instance,.

CRUD operations are supported, with some limitations (eg: Read.all() and Read.where() are not supported)

First of all, extend the abstract class org.bananarama.crud.redis.RedisAdapter; the method protected abstract Jedis getJedis(); must be implemented to provide a valid jedis connection.

This is a simple class that can be serialized/desderialized using his banana:

package org.bananarama.redis.entities;

import org.bananarama.annotation.Banana;
import org.bananarama.crud.redis.RedisAdapterImpl;
import org.bananarama.crud.redis.annotations.KeyGenerator;

@Banana(adapter = RedisAdapterImpl.class)
public class Host {
    
    // This field contains the id of the instance. No need to annotat ethis field,
    // in Redis we create the key using other methods
    private String hostname;
            
    private String commonProperty;

    public Host() {
    }

    public Host(String hostname) {
        this.hostname = hostname;
    }

    public String getCommonProperty() {
        return commonProperty;
    }

    public void setCommonProperty(String commonProperty) {
        this.commonProperty = commonProperty;
    }

    // This annotation identify the method to use to convert the instance id to 
    // the string to use as key in redis
    @KeyGenerator
    public String getHostnameKey() {
        return "host:" + hostname;
    }
    
    // We have to annotate both the setter and the getter. 
    @KeyGenerator
    public void setHostnameKey(String key) {
        this.hostname = key.split(":")[1];            
    }

    public String getHostname() {
        return hostname;
    }

    public void setHostname(String hostname) {
        this.hostname = hostname;
    }
    
    
    
}

Inheritance is implemented, see the tests.

METTI UN TEST PER CRUD con bananarama, hai messo solo com'e è annotata la classe! banana.read(GoogleHost.class).fromKeys <-- questo è l'id di host, viene poi tradotto in una chiave dall'adapter

Current limitations

  • Fields are ignored, only public properties are serialized/deserialized
  • An object can have only simple types (no list or objects as properties)
  • Only direct inheritance is supported
  • Instances must be "pojo"s

Roadmap

  • Le classi devono avere setter/getter ed un costruttore vuoto
  • Mappa solo getter/setter, ignora i fields
  • I setter ed i getter devono essere oggetti, non primitive (Double non double)

About

Adapter for redis

License:Apache License 2.0


Languages

Language:Java 100.0%