In einer Play Framework 2.0.1 (Scala) -Anwendung verwenden wir eine Web-Service-Client-Bibliothek, die java.util.concurrent.Future
als Antworten zurückgibt.Wie wickle ich eine java.util.concurrent.Future in eine Akka-Zukunft?
Statt den Play-App auf den get()
Anruf blockieren möchten wir die j.u.c.Future
in einem akka.dispatch.Future
wickeln, so dass wir leicht den AsyncResult
Verarbeitung Spiel Rahmen nutzen können.
Hat jemand das schon einmal gemacht oder eine Bibliothek oder einen Beispielcode?
UPDATE: Das nächste, was wir gefunden haben, ist diese Google Groups Diskussion: https://groups.google.com/forum/#!topic/play-framework/c4DOOtGF50c
... wenn alles, was Sie eine einfache jucFuture ist haben das Beste, was Sie erstellen tun können, um Eine nicht blockierende Lösung besteht darin, jucFuture und ein Versprechen anzunehmen und sie einem Thread zu übergeben, der eine Polling-Schleife ausführt, die das Versprechen mit dem Ergebnis der Zukunft vervollständigt, wenn es fertig ist.
Hat jemand eine Beispielimplementierung davon?
Ein offensichtlicher Nachteil ist, dass im schlimmsten Fall eine hohe Verzögerung der Reaktion verursacht. Wenn Sie zum Beispiel die Standardeinstellungen haben und Ihre Zukunft 1 ms nach der Prüfung abgeschlossen ist, kann es zu einer Verzögerung von etwa 100 ms kommen. Dies kann jedoch durch Einstellen des Schedulers eingestellt werden.tick-duration' Einstellung in der Konfig. – drexin
@drexin wahr, aber eine Tick-Dauer und Poll-Frequenz-Trade-off wird in jeder polling-basierten Lösung vorhanden sein, oder? –
Sicher, aber als du nach Downsides gefragt hast, wollte ich dir nur sagen, dass es nicht nur vom Delay-Parameter des 'scheduleOnce'-Calls abhängt, sondern auch von der Einstellung in der akka config. Wenn Sie mit einer Verzögerung leben können, sollte dies eine brauchbare Lösung sein. – drexin