2017-12-01 16 views
3

現在の実装をPhantom 1.28.16から2.16.4に移行しようとしていますが、セットアップに問題があります。Phantom 2を既存のCassandraセッションで使用する

私たちのフレームワークは、起動時にPhantomに適合しないようなCassandraセッションオブジェクトを提供しています。私はPhantomに、通常のCassandraConnectionオブジェクトを経由するのではなく、すでにインスタンス化されたセッションを受け入れるようにしています。

私はこのためPhantomデータベースクラスを使用できないと仮定していますが、そのクラスを使用せずにテーブルを設定して使用する方法がまだあることを期待しています。

これは実行可能ですか?

+0

を使用する方法を示していますシンプルなメインプログラムです。たぶんあなたはlagomも使用しています。 lagomも使用している場合は、lagomのタグを追加してください。ありがとう –

+0

いいえ、Lagomを使用していません –

+0

@JohanJ DBクラスを使用すると何が問題になりますか?私はよりよく理解したいと思います。 – flavian

答えて

0

私は、既存の接続でファントムを使用できるように、次をやってしまった:代わりにファントム「テーブル」形質の使用される新しい特性PhantomTableを定義

。彼らはPhantomTable形質を拡張することにより定義された私のテーブル

trait PhantomTable[T <: PhantomTable[T, R], R] extends CassandraTable[T, R] with TableAliases[T, R] 

RootConnectorの除去を除いて同一であり、また、オブジェクトにそれを作りました。ここで私は、暗黙の鍵空間限りFooTableオブジェクトのすべての指名手配の方法を使用することが可能であるとセッションがスコープ内に存在していることを後

... 
import com.outworkers.phantom.macros.TableHelper._ 

final case class Foo(id: String, name: Option[String]) 

sealed class FooTable extends PhantomTable[FooTable, Foo] { 
    override val tableName = "foo" 

    object id    extends StringColumn with PartitionKey 
    object name   extends OptionalStringColumn 
} 

object FooTable extends FooTable 

をコンパイルするために取得するTableHelperマクロのすべてを輸入しなければなりませんでした。

これは、我々はまた、ファントム-DSLでlagomを使用することを必要とする表が

object Main extends App { 
    val ks = "foo_keyspace" 
    val cluster = Cluster.builder().addContactPoints("127.0.0.1").build() 

    implicit val keyspace: KeySpace = KeySpace(ks) 
    implicit val session: Session = cluster.connect(ks) 

    val res = for { 
    _ <- FooTable.create.ifNotExists.future 
    _ <- FooTable.insert.value(_.id, "1").value(_.name, Some("data")).future 
    row <- FooTable.select.where(_.id eqs "1").one 
    } yield row 

    val r = Await.result(res, 10.seconds) 
    println(s"Row: $r") 
} 
関連する問題