3

ステートフルにする必要がある REST Web サービスを作成しています。次の状況を考慮してください。

  1. Web サービスは、困難で時間のかかる計算を実行し、非常に大きな結果を返します。したがって、このサービスによって返される結果の数のみが返され、結果全体がサーバー上のステートフル Bean に保存されます。
  2. 結果が存在する場合。クライアントは、既存の結果のサブセットを要求できます。

セッション Beanを介してこれを実行しようとしてい@Statefulますが、それでも@Stateless. クライアントがCookieを受け入れていないため、サーバーがCookieを識別できないため、可能かどうか疑問に思っています。

REST 経由でステートフル Bean にアクセスすることは可能ですか?

コードサンプル:

@Path("/similarity/")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Stateful
@StatefulTimeout(600000) // 10 minutes
public class SimilarityResource {

    private List<SimilarityResult> savedSimilarityResults = new ArrayList<SimilarityResult>();

    @POST
    @Path("/atom-count/")
    public List<SimilarityResult> atomCountSimilarity(JAXBElement<SimilarityRequestXML> sr) {

        try {
            if (this.savedSimilarityResults.isEmpty()) {

                List<SimilarityResult> similarityResults = acs.findAllSimilar(); // Time consuming

                this.savedSimilarityResults = similarityResults; // Save results
                return similarityResults;
            } else {
                CompoundResponse cr = new CompoundResponse("Hureeey stateful bean works!.", 404);
                throw new WebApplicationException(cr.buildResponse());
            }

        } catch (CompoundSearchException e) {
            CompoundResponse cr = new CompoundResponse(500, e);
            throw new WebApplicationException(cr.buildResponse());
        }
    }

}

私が期待しているのは、この/atom-count/メソッドを 2 回呼び出すと、404 で応答するはずです。

4

1 に答える 1

6

@SessionScopedJAX-RS にセッション ライフタイムでリクエスト オブジェクトを作成するように指示するには、リソース クラスに でアノテーションを付ける必要があります。それ以外の場合、デフォルトは@RequestScopedです。

于 2013-02-16T13:49:10.393 に答える