【发布时间】:2013-02-01 08:57:09
【问题描述】:
我正在创建需要有状态的 REST Web 服务。考虑以下情况:
- Web 服务执行困难且耗时的计算并返回非常大的结果。所以这个服务只返回一些结果,整个结果以有状态 bean 的形式保存在服务器上。
- 结果存在时。客户可以要求现有结果的子集。
我正在尝试通过 @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 响应。
【问题讨论】:
标签: java web-services rest jakarta-ee web-applications