En una aplicación Play Framework 2.0.1 (Scala), estamos utilizando una biblioteca cliente del servicio web que devuelve java.util.concurrent.Future
como respuestas.¿Cómo envuelvo un java.util.concurrent.Future en un Akka Future?
En lugar de bloquear la aplicación Play en la llamada get()
, nos gustaría envolver el j.u.c.Future
en un akka.dispatch.Future
, por lo que podemos utilizar simplemente el procesamiento del marco juego AsyncResult
.
¿Alguien ha hecho esto antes, o tiene una biblioteca o código de ejemplo?
ACTUALIZACIÓN: Lo más parecido que hemos encontrado es este grupo de debate de Google: https://groups.google.com/forum/#!topic/play-framework/c4DOOtGF50c
... si todo lo que tiene es una llanura jucFuture lo mejor que puede hacer para crear una solución que no bloquea es tomar jucFuture y Promise, y darles un hilo que ejecute un ciclo de sondeo que completará la promesa con el resultado del futuro cuando esté listo.
¿Alguien tiene un ejemplo de implementación de esto?
Una desventaja obvia es, que en el peor de los casos esto causará un alto retardo de la respuesta. Si tiene, por ejemplo, la configuración predeterminada y su futuro completa 1 ms después de la verificación, puede causar un retraso de aproximadamente 100 ms. Sin embargo, esto se puede ajustar configurando el 'programador.tick-duration' en la configuración. – drexin
@drexin cierto, pero una duración de tilde y una compensación de frecuencia de sondeo estarán presentes en cualquier solución basada en sondeo, ¿verdad? –
Claro, pero como usted pidió inconvenientes, solo quería decirle que no solo depende del parámetro de retardo de la llamada 'scheduleOnce', sino también del ajuste en la configuración de akka. Si puede vivir con un retraso, esta debería ser una solución utilizable. – drexin