2013-08-14 17 views
5

Bir REST API hizmeti uygulamak için oyun çerçevesi kullanıyorum.java.util.concurrent.Future öğesinden <T> play.libs.F.Promise'a <T>: Java'da nasıl yapılır?

bir görevde ben başka bir hizmete konuşmak için bir java zaman uyumsuz kitaplığı kullanıyorum ve ben bir java.util.concurrent.Future<play.mvc.Result> içine (Guava Futures.transform(~) kullanarak) map bir java.util.concurrent.Future<T> döndürür.

Şimdi play.libs.F.Promise<Result>'u AsyncResult yapabilmem için nasıl yapabilirim?

play.libs.Akka.asPromise(scala.concurrent.Future<T> future) bulunamadı, ancak java birinden bir scala geleceği elde etmek için bir yol bulamıyorum.

DÜZENLEME GEÇİCİ ÇÖZÜM:

Future<T> future = asyncGetTheFuture(); 
Promise<T> promise = Akka.future(new JFutureToPromise<T>(tempFuture)); 

için hiçbir yolu yoktur

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); 
     } 
    } 

cevap

5

olmayan bloke edecek /-pollingly olmayan keyfi bir dönüşümü: İşte ben şu anda kullanıyorum ne jucFuture'ı bir async Future/Promise. Deneyin ve kendiniz görünün :)

+0

Denedim, sadece Promise j.u.c.Future'ı genişletiyor ... bu yüzden umudum vardı. –

+0

Bu yön çok basit; Promise/Future, jucFuture –

+0

'dan kesinlikle daha güçlü/esnek. Sadece Java'nın Geleceği, bir tamamlama dinleyicisi (gözlemci) ise konsepti destekliyorsa, Java'nın Geleceği ve Scala'nın Geleceği ile bir Sözle Gelecek arasında bir köprü oluşturabilirsin ama var ... – cmbaxter

İlgili konular