diff --git a/app/cassandra/CassandraConnectionUri.scala b/app/cassandra/CassandraConnectionUri.scala new file mode 100644 index 0000000..b6a7a0f --- /dev/null +++ b/app/cassandra/CassandraConnectionUri.scala @@ -0,0 +1,19 @@ +package cassandra + +import java.net.URI + +case class CassandraConnectionUri(connectionString: String) { + + private val uri = new URI(connectionString) + + private val additionalHosts = Option(uri.getQuery) match { + case Some(query) => query.split('&').map(_.split('=')).filter(param => param(0) == "host").map(param => param(1)).toSeq + case None => Seq.empty + } + + val host = uri.getHost + val hosts = Seq(uri.getHost) ++ additionalHosts + val port = uri.getPort + val keyspace = uri.getPath.substring(1) + +} diff --git a/app/cassandra/CassandraConnector.scala b/app/cassandra/CassandraConnector.scala new file mode 100644 index 0000000..eb0ec46 --- /dev/null +++ b/app/cassandra/CassandraConnector.scala @@ -0,0 +1,19 @@ +package cassandra + +import com.datastax.driver.core._ + +object CassandraConnector { + + def createSessionAndInitKeyspace(uri: CassandraConnectionUri, + defaultConsistencyLevel: ConsistencyLevel = QueryOptions.DEFAULT_CONSISTENCY_LEVEL) = { + val cluster = new Cluster.Builder(). + addContactPoints(uri.hosts.toArray: _*). + withPort(uri.port). + withQueryOptions(new QueryOptions().setConsistencyLevel(defaultConsistencyLevel)).build + + val session = cluster.connect + session.execute(s"USE ${uri.keyspace}") + session + } + +} diff --git a/build.sbt b/build.sbt index ec8a8d6..70e653d 100644 --- a/build.sbt +++ b/build.sbt @@ -10,7 +10,8 @@ libraryDependencies ++= Seq( jdbc, cache, ws, - "org.scalatestplus" %% "play" % "1.4.0-M4" % "test" + "org.scalatestplus" %% "play" % "1.4.0-M4" % "test", + "com.datastax.cassandra" % "cassandra-driver-core" % "2.1.+" ) resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases"