0

最近、私たちは と仕事を始めましたplay 2.2。以前は play で作業していました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

上記の 2 つのメソッドの廃止予定のメソッドを実装するにはどうすればよい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 promises の本当に素晴らしい点の 1 つは、コードが実行される実行コンテキストを正確に制御できるようになったことです。そのため、独自の実行コンテキストを作成するか、Akka から取得して、ケースの数を正確に制御できます。 、並行 DB 操作はアプリ全体で同時に実行されます。

于 2013-09-30T16:00:01.250 に答える