I'm using slick in a mixed Java/Scala program.
The Java code needs to get some data from the database.
As I understand, the recommended way is to get a Future from the database, but how do I proceed from here? Am I forced to wait for the result (using blocking Await.result)? can I make the Java act similarly to Scala with onComplete?
current (blocking) code:
slick [Scala]:
def getUser(email: String): Option[User] = {
val findUser = users
.filter(_.email === email)
.result
.headOption
Await.result(db.run(findUser), Duration(1000, "millis")) // blocking :-(
}
Java:
if(UsersDataBase.getUser(email).isDefined()) {
...
}
You need to convert (or wrap) Scala Future
to Java Future
. The same with Option
In this days you can use scala-java8-compat
The simple example is:
import scala.compat.java8.FutureConverters._
import java.util.concurrent.CompletionStage
import scala.concurrent.Future
val javaFuture:CompletionStage[String] = Future.successful("ok").toJava