java - 从 java.util.concurrent.Future<T> 到 play.libs.F.Promise<T> : How to do that in Java?

标签 java asynchronous playframework akka

我正在使用 play 框架来实现 REST API 服务。

在一个函数中,我使用 java 异步库与另一个服务通信,它返回一个 java.util.concurrent.Future<T>我将(使用 Guava Futures.transform(~) )映射到 java.util.concurrent.Future<play.mvc.Result> 中.

现在,我如何将其设为 play.libs.F.Promise<Result>这样我就可以制作AsyncResult

我找到了 play.libs.Akka.asPromise(scala.concurrent.Future<T> future)但我找不到一种方法(在 Java 中)从 Java 中获得 Scala 的 future 。

编辑临时解决方案: 这是我现在正在使用的:

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

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

最佳答案

没有办法以非阻塞方式/非轮询方式将任意 j.u.c.Future 转换为异步 Future/Promise。 自己试试看:)

关于java - 从 java.util.concurrent.Future<T> 到 play.libs.F.Promise<T> : How to do that in Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18230172/

相关文章:

java - 使用 log4j 编程 API 设置根记录器附加器模式

database - 为什么各大数据库供应商不提供真正异步的API?

playframework - 在 play 框架 2 中从数据库生成实体类

javascript - 在 Scala Play Framework View 中使用键检索映射值

java - 如何将任何输入的 XML 文件转换为类似的 Java 对象结构?

java - 处理许多记录的一般事务问题

java - 如何在当前目录中保存文件?

java - GAE - 我应该链接异步回调吗?

javascript - 如何跟踪最新的请求异步调用

templates - 玩! Framework 2.0 - 循环遍历 scala 模板中的 map ?