ステートフルにする必要がある REST Web サービスを作成しています。次の状況を考慮してください。
- Web サービスは、困難で時間のかかる計算を実行し、非常に大きな結果を返します。したがって、このサービスによって返される結果の数のみが返され、結果全体がサーバー上のステートフル Bean に保存されます。
- 結果が存在する場合。クライアントは、既存の結果のサブセットを要求できます。
セッション 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 で応答するはずです。