How do I wrap a java.util.concurrent.Future in an Akka Future?
By : mnassri ahmed
Date : March 29 2020, 07:55 AM
I think the issue was by ths following , @Viktor Klang: We understand that j.u.c.Future is an abomination. But that's what we're getting back from a piece of software we must accept as given for the time being. So far, this is what we've hacked together: code :
def wrapJavaFutureInAkkaFuture[T](javaFuture: java.util.concurrent.Future[T], maybeTimeout: Option[Duration] = None)(implicit system: ActorSystem): akka.dispatch.Future[T] = {
val promise = new akka.dispatch.DefaultPromise[T]
pollJavaFutureUntilDoneOrCancelled(javaFuture, promise, maybeTimeout.map(_.fromNow))
promise
}
def pollJavaFutureUntilDoneOrCancelled[T](javaFuture: java.util.concurrent.Future[T], promise: akka.dispatch.Promise[T], maybeDeadline: Option[Deadline] = None)(implicit system: ActorSystem) {
if (maybeDeadline.exists(_.isOverdue)) javaFuture.cancel(true);
if (javaFuture.isDone || javaFuture.isCancelled) {
promise.complete(allCatch either { javaFuture.get })
} else {
Play.maybeApplication.foreach { implicit app =>
system.scheduler.scheduleOnce(50 milliseconds) {
pollJavaFutureUntilDoneOrCancelled(javaFuture, promise, maybeDeadline)
}
}
}
}
|
type mismatch; found : scala.concurrent.Future[play.api.libs.ws.Response] required: play.api.libs.ws.Response
By : S. Scott
Date : March 29 2020, 07:55 AM
I wish this helpful for you The request you are making with post is asynchronous. That call returns immediately, but does not return a Response object. Instead, it returns a Future[Response] object, which will contain the Response object once the http request is completed asynchronously. If you want to block execution until the request is completed, do: code :
val f = Ws.url(...).post(...)
Await.result(f)
|
Error replacing play.api.libs.concurrent.Promise with scala.concurrent.Promise
By : IluminatyCraft
Date : March 29 2020, 07:55 AM
wish helps you The joined iteratee/enumerator pair that I posted on my blog post is now available in Play 2.2.0 as play.api.libs.iteratee.Concurrent.joined. Switch to that and you can delete the above code from your code base. To fix your code by the way, modify the method on line 24 to accept an implicit ExecutionContext. Play 2.2 changed the iteratee API so that many things now accept exception contexts: code :
def fold[C](folder: (Step[A, B]) => Future[C])(implicit ec: ExecutionContext)
|
Found java.util.concurrent.Future Required scala.concurrent.Future
By : Gowtham Subramaniam
Date : March 29 2020, 07:55 AM
To fix this issue You could leverage Cake's Scala based Kafka client, which will do the work of running Java futures and giving you Scala futures back. Once you make sure you create a cakesolutions.kafka.KafkaProducer instead of a org.apache.kafka.clients.producer.KafkaProducer, the rest of your code should practically stay the same. Alternatively, you can sort this out leveraging Reactive Kafka whilst keeping using the high level Akka HTTP DSL. You can do it by running your producer record to a Kafka Sink, this way: code :
val producerSink = Producer.plainSink(producerSettings)
...
// inside the route
val producerRecord =
new ProducerRecord[Array[Byte], String]("topic1", "some message")
onComplete(Source.single(producerRecord).runWith(producerSink)) { _ =>
complete(ToResponseMarshallable((StatusCodes.Created, u)))
}
|
scala.concurrent.Future wrapper for java.util.concurrent.Future
By : Dhul Wells
Date : March 29 2020, 07:55 AM
seems to work fine I'm using Play Framework 2.1.1 with an external java library that produces a java.util.concurrent.Future result. I'm using the scala future's as opposed to Akka which I think is the right thing to do as of Play 2.1. How can I wrap the java.util.concurrent.Future up into a scala.concurrent.Future while still keeping the code non-blocking?
|