Reusable persistence layer for use with Basho's Riak
- Scala 2.8.2 or 2.9.1
- riak-java-client 1.0.5
case class Skateboard(id: String, brand: String, model: String, year: Int)
extends PersistentEntity { def getKey=id }
val riakClient: IRiakClient = RiakFactory.pbcClient("localhost", 8087)
val skateboardDao = new RiakJSONEntityDAO[String, Skateboard]
(new RiakDriver[Skateboard]("skateboards", riakClient))
skateboardDao.addStringIndex("brand")
val skateboard = new Skateboard("1", "Real", "Justin Brock", 2012)
skateboardDao.persist(skateboard.id, skateboard)
case class Guitar(var id: String, make: String, model: String, year: Int) {}
class GuitarDAO(bucket: String, storageDriver: RiakStorageDriver[String, Guitar])
extends AbstractRiakEntityDAO[String, Guitar]("guitars", storageDriver) with Converter[Guitar] {
def fromDomain(guitar: Guitar, vClock: VClock): IRiakObject = {
val dataAsString = generate(guitar)
val data = (dataAsString).map(_.toChar).toCharArray.map(_.toByte)
val iRiakObject = RiakObjectBuilder.newBuilder("guitars", guitar.id).withVClock(vClock)
.withContentType(Constants.CTYPE_JSON)
.withValue(data).build()
iRiakObject.addIndex("make", guitar.make)
}
def toDomain(riakObject: IRiakObject) = {
val data = riakObject.getValueAsString
parse[Guitar](data)
}
}
val riakClient: IRiakClient = RiakFactory.pbcClient("localhost", 8087)
val guitarDao = new GuitarDAO(new RiakDriver[Guitar]("guitars", riakClient))
val jazzMaster = new Guitar("1", "fender", "JazzMaster", 1963)
guitarDao.persist(jazzMaster.id, jazzMaster)
val jazzMaster = new Guitar("1", "fender", "JazzMaster", 1963)
guitarDao.persist(jazzMaster.id, jazzMaster)
guitarDao.getByKey("1")
val jazzMaster = new Guitar("1", "fender", "JazzMaster", 1963)
guitarDao.persist(jazzMaster.id, jazzMaster)
guitarDao.deleteByKey("1")
val jazzMaster = new Guitar("1", "fender", "JazzMaster", 1963)
guitarDao.persist(jazzMaster.id, jazzMaster)
guitarDao.findFor2i("make", "fender")
Copyright (c) 2012 Ray Jenkins
Published under The Apache License, Version 2.0, see LICENSE