首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >phantom-dsl_2.11隐式会话错误

phantom-dsl_2.11隐式会话错误
EN

Stack Overflow用户
提问于 2014-12-16 06:19:54
回答 2查看 913关注 0票数 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上只有phantom-dsl jar在2.11中编译,我不知道是不是有问题?)

我只有一个对幻影的依赖

代码语言:javascript
复制
    <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>

当我编译我的项目时,我得到了这个关于会话的错误:

代码语言:javascript
复制
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上,有一个带有会话的示例:

代码语言:javascript
复制
  implicit val session = SomeCassandraClient.session;

但是我不知道SomeCassandraClient在哪里?

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2015-02-11 02:29:47

您可以从您的连接器(这是您正在寻找的'SomeCassandraClient )中获取会话。

在某个地方您定义了连接器,如下所示:

代码语言:javascript
复制
trait Connector extends SimpleCassandraConnector {
    val keySpace = "your_keyspace"
    // other connection params as needed
}
object Connector extends Connector

然后只需要做一个

代码语言:javascript
复制
implicit val session = Connector.session

这样你就不必多次定义你的连接IP和密匙空间了;-)

票数 2
EN

Stack Overflow用户

发布于 2015-02-28 03:22:05

当您定义一个幻影表时,一种非常常见的做法是使用一个简单的特征注入会话。这正是我们以这种方式创建连接器的原因,因此它们可以通过特征混合/继承自动提供会话。

代码语言:javascript
复制
import com.websudos.phantom.connectors.SimpleCassandraConnector

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

现在,当您定义class MyTable时,您应该定义:

代码语言:javascript
复制
object MyTable extends MyTable with MyConnector {
  def getById(id: String): Future[Option[..]] {
  }
}

您还应该使用更新版本的Phantom,分别为1.5.0。Scala 2.11支持在1.2.7中相对较新,因此可能会出现一些奇怪的问题,但所有这些问题现在都已修复。

您也不需要担心创建多个对象。当使用连接器时,底层的Cassandra连接实际上是全局的,所有相关的锁都就位了。您所做的是为所有表提供完全相同的会话,即使它可能看起来不是这样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27494220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档