0

最近,我们开始与play 2.2. 以前我们使用 play 2.1.3。其中play 2.2Akka.future,异步方法被视为已弃用。此外,当我们尝试fetchSample()通过循环在一段代码下面运行时,在play 2.2.

那么我们如何用最新的代码替换下面不推荐使用的代码呢?

private static Promise<SampleDBResponseBean> fetchSample(
        final Document sampleDoc) throws Exception {

    Promise<SampleBean> promiseOfSampleJson = Akka.future(

    new Callable<SampleBean>() {

        public SampleBean call() throws Exception

        {
            return doSomeCalc(sampleDoc);
        }
    });
}

private Result getAsyncResult(final SampleResponseBean sampleDbResponseBean) {

    List<F.Promise<? extends SampleDBResponseBean>> promiseList = sampleDbResponseBean
            .getSampleHelperList();

    Promise<List<SampleDBResponseBean>> promiseJsonObjLists = Promise
            .sequence(promiseList);

    return async(

    promiseJsonObjLists.map(

    new Function<List<SampleDBResponseBean>, Result>() {

        public Result apply(List<SampleDBResponseBean> sampleList) {

            SampleResponseBean sampleResponseBean = new SampleResponseBean();

            sampleResponseBean.setStatus("success");

            sampleResponseBean.setSampleList(sampleList);

            JsonNode jsNodeResponse = Json.toJson(sampleResponseBean);

            return ok(jsNodeResponse);
        }
    }));
}

我搜索了很多地方都没有找到任何解决方案。与2.1.3.

任何想法我们如何实现上述两种方法的弃用方法play 2.2

4

1 回答 1

1

正如迁移文档中指出的那样:

http://www.playframework.com/documentation/2.2.x/Migration22

你想用Promise.promise. 这也在文档中进行了描述:

http://www.playframework.com/documentation/2.2.x/JavaAsync

当然在 API 文档中:

http://www.playframework.com/documentation/2.2.x/api/java/play/libs/F.Promise.html#promise(play.libs.F.Function0)

Play 2.2 Java Promise 的一大优点是现在您可以准确控制代码在哪个执行上下文中运行,因此您可以创建自己的执行上下文,或者从 Akka 获取一个,这样就可以准确控制多少个,在您的情况下,并发数据库操作同时在整个应用程序中运行。

于 2013-09-30T16:00:01.250 回答