Java EE 6的 - 状态REST作为有状态会话bean(Java EE 6 - Statefu

2019-08-16 23:54发布

我创建需要有状态REST Web服务。 请考虑以下情况:

  1. Web服务执行困难和耗时的计算,并返回非常大的结果。 因此,只有结果的数量由服务返回和整个结果保存在状态bean在服务器上。
  2. 当结果存在。 客户可以要求对现有成果的一个子集。

我试图通过这样做@Stateful会话bean,但它仍然就像@Stateless 。 现在我想知道羯羊,甚至有可能,因为客户不接受任何的Cookie所以服务器不能识别它。

是否有可能必须通过REST accesed状态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/方法两次,它应该与404的响应。

Answer 1:

你应该注释与资源类@SessionScoped为了告诉JAX-RS创建具有会话有效期的请求对象,否则默认为@RequestScoped



文章来源: Java EE 6 - Stateful REST as Stateful session bean