JavaEE6-有状态REST作为有状态会话bean
我正在创建需要有状态的RESTWeb服务。考虑以下情况:JavaEE6-有状态REST作为有状态会话bean,java,web-services,rest,jakarta-ee,web-applications,Java,Web Services,Rest,Jakarta Ee,Web Applications,我正在创建需要有状态的RESTWeb服务。考虑以下情况: Web服务执行困难且耗时的计算,并返回非常大的结果。所以这个服务只返回一些结果,整个结果保存在服务器上的有状态bean中 当结果存在时。客户可以要求现有结果的子集 我试图通过@Stateful会话bean实现这一点,但它的行为仍然类似于@Stateless。现在我想知道这是否可能,因为客户端不接受任何Cookie,所以服务器无法识别它 是否可以通过REST访问有状态bean 代码示例: @Path("/similarity/") @Pro
@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());
}
}
}
@Path(“/similarity/”)
@产生({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
@使用({MediaType.APPLICATION\uxml,MediaType.APPLICATION\ujson})
@有状态
@StatefulTimeout(600000)//10分钟
公共类相似资源{
私有列表savedSimilarityResults=new ArrayList();
@职位
@路径(“/atom count/”)
公共列表原子计数相似性(JAXBElement sr){
试一试{
if(this.savedSimilarityResults.isEmpty()){
List similarityResults=acs.findAllSimilar();//耗时
this.savedSimilarityResults=similarityResults;//保存结果
返回相似结果;
}否则{
CompoundResponse cr=新的CompoundResponse(“Hureey stateful bean works!”,404);
抛出新的WebApplicationException(cr.buildResponse());
}
}捕获(复合搜索异常e){
复合响应cr=新的复合响应(500,e);
抛出新的WebApplicationException(cr.buildResponse());
}
}
}
我所期望的是,当我两次调用这个
/atom count/
方法时,它应该以404响应。您应该用@SessionScoped
注释您的资源类,以便告诉JAX-RS创建具有会话生存期的请求对象,否则默认值是@RequestScoped