简体   繁体   中英

Creating a table in Cassandra using Phantom in Scala

I am following the tutorial here: http://blog.websudos.com/2015/04/04/a-series-on-phantom-part-1-getting-started-with-phantom/

Cassandra version: 2.1.8

PhatomVersion 1.10.1

Scala version: 2.11.2

sbt-version: 0.13.8

In addition to the code given in the article I have the following:

object App {
  def main(args: Array[String]) {
    val user = new User(UUID.fromString("00000000-0000-0000-0000-000000000000"), "test@test.com", "Dan", DateTime.now)
   val resultSetFuture = Users.store(user)
   Await.result(resultSetFuture, Duration.Inf)
  }
}

When I run the program from sbt I get the following error (here is the head of the stack trace):

[error] (run-main-0) com.datastax.driver.core.exceptions.SyntaxError: line 1:157 no viable alternative at input 'CONSISTENCY' (..., 'Dan', 1437914728864) USING [CONSISTENCY]...)
com.datastax.driver.core.exceptions.SyntaxError: line 1:157 no viable alternative at input 'CONSISTENCY' (..., 'Dan', 1437914728864) USING [CONSISTENCY]...)

I have checked the csqlsh and the namespace has been created but no table has been created.

Any help much appreciated.

Here is the build.sbt in case it is useful:

name := "Something"

organization := "danmisun.github.com"

version := "0.1.0-SNAPSHOT"

scalaVersion := "2.11.2"

crossScalaVersions := Seq("2.10.4", "2.11.2")

val PhantomVersion = "1.10.1"

libraryDependencies ++= Seq(
  "org.scalatest" %% "scalatest" % "2.2.1" % "test",
  "org.scalacheck" %% "scalacheck" % "1.11.5" % "test",
  "com.websudos" % "phantom_2.11" % PhantomVersion,
  "com.websudos" % "phantom-dsl_2.11" % PhantomVersion,
  "com.websudos" % "phantom-testkit_2.11" % PhantomVersion % "test,   provided"
)

resolvers ++= Seq(
  "Typesafe repository snapshots" at "http://repo.typesafe.com/typesafe/snapshots/",
  "Typesafe repository releases" at "http://repo.typesafe.com/typesafe/releases/",
  "Sonatype repo"                    at "https://oss.sonatype.org/content/groups/scala-tools/",
  "Sonatype releases"                at "https://oss.sonatype.org/content/repositories/releases",
  "Sonatype snapshots"               at "https://oss.sonatype.org/content/repositories/snapshots",
  "Sonatype staging"                 at "http://oss.sonatype.org/content/repositories/staging",
  "Java.net Maven2 Repository"       at "http://download.java.net/maven/2/",
  "Twitter Repository"               at "http://maven.twttr.com",
  Resolver.bintrayRepo("websudos", "oss-releases")
)

initialCommands := "import something._"

What does Users.store return? If it's returning Future[ResultSet] , then wait for the future to complete. Try putting the await and check.

import scala.concurrent.{ Await, Future }
import scala.concurrent.duration.Duration

val resultSetFuture = Users.store(user)
Await.result(resultSetFuture, Duration.Inf) 

First you need to create table: (comment after first run or you will receive "table already exists exception :P)

Await.result(Users.create.future(), 5000 millis)

Then remove .consistencyLevel_=(ConsistencyLevel.ALL) as phantom library seems to be very behind changes in cassandra which say that ConsistencyLevel is now defined per session not per request.

Now that should work but this library doesn't look too promising I would say.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM