繁体   English   中英

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

[英]Java EE 6 - Stateful REST as Stateful session bean

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

  1. Web服务执行困难且耗时的计算并返回非常大的结果。 因此,此服务仅返回结果数,并且整个结果将保存在有状态bean中的服务器上。
  2. 当结果存在时。 客户可以要求提供现有结果的子集。

我试图通过@Stateful会话bean来做到这一点,但它仍然像@Stateless一样。 现在我想知道它是否可能,因为客户端不接受任何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/方法调用两次时,它应该用404响应。

您应该使用@SessionScoped注释您的资源类,以告知JAX-RS创建具有会话生存期的请求对象,否则默认为@RequestScoped

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM