5

ファントム scala ドライバーを使用して、cassandra データベース (scala 2.11.2 を使用) に接続しようとしています。

私は彼らのブログでこの記事をフォローしました: http://blog.websudos.com/2014/08/a-series-on-cassandra-part-1-getting-rid-of-the-sql-mentality/

(github には、2.11 でコンパイルされた phantom-dsl jar しかないことに注意してください。問題があるかどうかはわかりません。)

ファントムとの依存関係は1つだけです

    <dependency>
        <groupId>com.websudos</groupId>
        <artifactId>phantom-dsl_2.11</artifactId>
        <version>1.2.7</version>
    </dependency>
    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>2.0.1</version>
    </dependency>

プロジェクトをコンパイルすると、セッションに関する次のエラーが発生します。

Main.scala:32: error: could not find implicit value for parameter session: com.datastax.driver.core.Session
[ERROR]       select.where(_.firstName eqs firstName).limit(5000).fetch()
[ERROR]                                                                ^
[ERROR] one error found
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

彼らの github には、セッションの例があります:

  implicit val session = SomeCassandraClient.session;

しかし、 SomeCassandraClient がどこにあるのかわかりませんか?

何かアドバイス ?

4

2 に答える 2

2

ファントム テーブルを定義する場合、非常に一般的な方法は、セッションに単純なトレイトを挿入することです。まさにそれが、その方法でコネクタを作成した理由であり、トレイト ミックスイン/継承を介して自動的にセッションを提供できるようにします。

import com.websudos.phantom.connectors.SimpleCassandraConnector

trait MyConnector extends SimpleCassandraConnector {
  override val keySpace = "whatever"
}

を定義するときはclass MyTable、次を定義する必要があります。

object MyTable extends MyTable with MyConnector {
  def getById(id: String): Future[Option[..]] {
  }
}

また、Phantom の新しいバージョン、それぞれ 1.5.0 を使用する必要があります。Scala 2.11 のサポートは 1.2.7 で比較的新しくなったため、そのために奇妙な問題が発生する可能性がありますが、現在はすべて修正されています。

また、複数のオブジェクトが作成されることを心配する必要もありません。コネクタを使用する場合、基盤となる Cassandra 接続は実際にはグローバルであり、関連するすべてのロックが適用されます。あなたがしていることは、たとえそうでなくても、すべてのテーブルにまったく同じセッションを提供することです。

于 2015-02-27T19:22:05.353 に答える