Play Frame work 2.2并发执行的工作原理

时间:2013-09-30 14:38:58

标签: playframework-2.1 playframework-2.2

最近,我们开始使用play 2.2。以前我们正在玩游戏2.1.3。 在play 2.2中,它显示Akka.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中为上述两种方法实施弃用的方法?

1 个答案:

答案 0 :(得分: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承诺的一个非常好的功能现在你可以精确控制代码运行的执行上下文,这样你就可以创建自己的执行上下文,或者从Akka中获取一个,从而控制到多少,在您的情况下,并发数据库操作同时在整个应用程序中运行。