tuplejump / play-cassandra

A Play Plugin for using Cassandra

Version Matrix

Play-Cassandra

A Play Plugin for using Cassandra

The Plugin initializes a Cassandra Session on startup and provides access to session and other properties through the Cassandra object.

The Plugin also provides play-evolutions like functionality if it is not disabled.

####Usage In library dependencies, include

"com.tuplejump" %% "play-cassandra" % "1.0.0-SNAPSHOT"

Now, Cassandra host, port, cluster and session can be accessed through the API exposed by the Plugin. In addition to that, a method loadCQLFile is also available. The API is documented at TODO

Some examples,

  • executing a query
val query = QueryBuilder.select("title")
      .from("music", "playlists")
      .where(QueryBuilder.eq("id", playlistId))
    val queryResult = Cassandra.session.execute(query).toIterable
  • executing a batch statement
val insertQuery: String = "INSERT INTO music.playlists (id, song_id, title, artist, album) VALUES (?, ?, ?, ?, ?)"

    val ps = Cassandra.session.prepare(insertQuery)
    var batch = new BatchStatement()

    songs.foreach {
      s =>
        batch.add(ps.bind(playlistId, s.id, s.title, s.artist, s.album))
    }
    Cassandra.session.execute(batch)
  • loading a CQL statements from a file
Cassandra.loadCQLFile("init.CQL")

Note:The cluster and session exposed are closed by the Plugin when the application is stopped.

#####Evolution

Evolution is enabled by default and the file names are expected to be integers in order, similar to play-evolutions for SQL or SQL-like databases.

The configuration property cassandraPlugin.appName should be set when evolution is enabled. The plugin adds an entry for each appName and the default value is appWithCassandraPlugin

To disable evolution, add the following to conf/application.conf,

cassandraPlugin.evolution.enabled=false

Note: The plugin loads before GlobalSettings, so it is accessible in a custom Global object.

####Configuration The default configuration is,

cassandraPlugin {
  //host and port of where Cassandra is running
  host = "127.0.0.1"    
  port = 9042           
  
  evolution {
    enabled = true
    directory = "evolutions/cassandra/" //directory within conf to look for CQL files
  }
  
  appName = "appWithCassandraPlugin" // appName to be saved in DB when using evolutions
}