In un'applicazione Play Framework 2.0.1 (Scala), stiamo utilizzando una libreria client di servizi Web che restituisce java.util.concurrent.Future
come risposte.Come faccio a racchiudere un java.util.concurrent.Future in un futuro Akka?
Invece di bloccare Play app sulla chiamata get()
, vorremmo avvolgere il j.u.c.Future
in un akka.dispatch.Future
, in modo da poter usare facilmente AsyncResult
di elaborazione del quadro di gioco.
Qualcuno ha già eseguito questa operazione o dispone di una libreria o di un codice di esempio?
UPDATE: La cosa più vicina che abbiamo trovato è questa discussione gruppi di Google: https://groups.google.com/forum/#!topic/play-framework/c4DOOtGF50c
... se tutto quello che hai è un jucFuture pianura il meglio che si può fare per creare una soluzione non bloccante è prendere jucFuture e una Promessa e assegnarli a qualche thread che esegue un ciclo di polling che completerà la Promessa con il risultato del Futuro una volta terminato.
Qualcuno ha un'implementazione di esempio di questo?
Uno svantaggio evidente è, che nella peggiore delle ipotesi questo causerà un alto ritardo della risposta. Se ad esempio hai le impostazioni predefinite e il tuo futuro completa 1 ms dopo il controllo, può causare un ritardo di circa 100ms. Questo può tuttavia essere regolato impostando 'scheduler.impostazione tick-duration' nella config. – drexin
@drexin true, ma in qualsiasi soluzione basata sul polling saranno presenti una durata della battito e un compromesso della frequenza dei sondaggi, giusto? –
Certo, ma come hai chiesto degli svantaggi, volevo solo dirti che non dipende solo dal parametro delay della chiamata 'scheduleOnce', ma anche dall'impostazione nella configurazione di akka. Se riesci a vivere con un ritardo, questa dovrebbe essere una soluzione utilizzabile. – drexin