gpt4 book ai didi

Java EE 6 - 作为有状态 session bean 的有状态 REST

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:50:02 28 4
gpt4 key购买 nike

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

  1. Web 服务执行困难且耗时的计算并返回非常大的结果。因此,此服务仅返回一些结果,整个结果以有状态 bean 的形式保存在服务器上。
  2. 当结果存在时。客户可以要求现有结果的一部分。

我正在尝试通过 @Stateful session 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 创建具有 session 生命周期的请求对象,否则默认为 @RequestScoped

关于Java EE 6 - 作为有状态 session bean 的有状态 REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14910710/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com