Używam platformy odtwarzania do wdrożenia usługi REST API.Od java.util.concurrent.Future <T> do play.libs.F.Promise <T>: Jak to zrobić w Javie?
W jednej funkcji Używam asynchronicznej biblioteki Java, aby porozmawiać z inną usługę i zwraca java.util.concurrent.Future<T>
że mapy (za pomocą Guava Futures.transform(~)
) do java.util.concurrent.Future<play.mvc.Result>
.
Jak to zrobić, aby uzyskać play.libs.F.Promise<Result>
, dzięki czemu mogę wykonać AsyncResult
?
Znalazłem play.libs.Akka.asPromise(scala.concurrent.Future<T> future)
, ale nie mogę znaleźć sposobu (w Javie), aby uzyskać przyszłość scala od java.
EDIT rozwiązanie tymczasowe: Oto co używam teraz:
Future<T> future = asyncGetTheFuture();
Promise<T> promise = Akka.future(new JFutureToPromise<T>(tempFuture));
z
class JFutureToPromise<T> implements Callable<T> {
final Future<T> future;
final long time;
final TimeUnit unit;
private JFutureToPromise(Future<T> future, long time, TimeUnit unit) {
this.future = future;
this.time = time;
this.unit = unit;
}
private JFutureToPromise(Future<T> future) {
this(future, 10L, TimeUnit.SECONDS);
}
@Override
public T call() throws Exception {
return future.get(time, unit);
}
}
Próbowałem, to tylko, że Promise rozszerza j.u.c.Future ... więc miałem nadzieję. –
Ten kierunek jest bardzo prosty; Obietnica/Przyszłość jest silniejsza/bardziej elastyczna niż jucFuture –
Jeśli tylko Java's Future wspierałaby koncepcję, jeśli słuchacz ukończenia (obserwator), to będziesz w stanie stworzyć most między Future'em Javy i Future Scala przez obietnicę, ale niestety takie rzeczy nie istnieje ... – cmbaxter