我有一个使用akka的scala项目。我希望整个项目都可以使用执行上下文。所以我创建了一个像这样的包对象:
resource_filename
在同一包中,我有这个文件:
.zip
但是,我收到编译器错误,找不到执行上下文或会话。我对package关键字的理解是该对象中的所有内容在整个包中都可用。但这似乎不起作用。感谢您能向我解释!
答案 0 :(得分:1)
您的实现必须是这样的,希望对您有所帮助。
package.scala
package com.app.akka
package object connector {
// Do some codes here..
}
CassandraService.scala
package com.app.akka
import com.app.akka.connector._
object CassandraService {
def selectFromCassandra() = {
// Do some codes here..
}
}
答案 1 :(得分:1)
您的当前代码有两个问题。
编译包对象连接器时,它抛出错误以下
错误:(14,35)递归值执行上下文需要类型 隐式val executeContext = executeContext 问题在于隐式val executeContext = executeContext行 该问题的解决方案如下。
隐式val executeContext = ExecutionContext
当我们编译CassandraService时,它将引发如下错误
错误:(17,13)找不到隐式的ExecutionContext。你可能会通过 方法的(隐式ec:ExecutionContext)参数 或导入scala.concurrent.ExecutionContext.Implicits.global。 rows.map {item =>
错误清楚地表明,我们要么需要将ExecutionContext作为隐式参数传递,要么需要导入scala.concurrent.ExecutionContext.Implicits.global。在我的系统中,两个问题均已解决,并且编译成功。我已附上代码供您参考。
package com.apache.scala
import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import com.datastax.driver.core.Cluster
import scala.concurrent.ExecutionContext
package object connector {
implicit val system = ActorSystem()
implicit val mat = ActorMaterializer()
implicit val executionContext = ExecutionContext
implicit val session = Cluster
.builder
.addContactPoints("localhost")
.withPort(9042)
.build()
.connect()
}
package com.apache.scala.connector
import akka.stream.alpakka.cassandra.scaladsl.CassandraSource
import akka.stream.scaladsl.Sink
import com.datastax.driver.core.{Row, SimpleStatement}
import scala.collection.immutable
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
object CassandraService {
def selectFromCassandra() = {
val statement = new SimpleStatement(s"SELECT * FROM animals.alpakka").setFetchSize(20)
val rows: Future[immutable.Seq[Row]] = CassandraSource(statement).runWith(Sink.seq)
rows.map{item =>
print(item)
}
}
}