2015-06-01 59 views
0

例如,考虑在WildFly运行以下REST资源(或其他的JavaEE应用服务器)实例......使用@Stateless注释Java REST资源时有什么好处/差异?

@Path("/library") 
public class Library { 

    @GET 
    @Path("/books") 
    public String getBooks() {...} 
} 

@Stateless 
@Path("/library") 
public class Library { 

    @GET 
    @Path("/books") 
    public String getBooks() {...} 
} 

什么是如何应用服务器处理的差异这些类何时由客户端程序调用资源?将REST资源注释为无状态有什么好处?

+0

通过使用'@ Stateless'进行注释,您正在使其成为(无状态)'EJB'。 –

回答

2

在Jax-rs 2.0的Jersey实现中,如果不存在注释,则默认值为@RequestScope。

默认生命周期(当没有注释时应用)。在此范围内,将为每个新请求创建资源实例并用于处理此请求。如果资源在请求处理中使用了多次,则始终使用相同的实例。当资源是一个子资源在匹配过程中被多次返回时,会发生这种情况。在这种情况下,只有实例将服务器请求。

如果使用@Stateless注释,您的类将变为无状态EJB。这允许有一个容器管理的实例池。允许重用实例,通常可以提高可伸缩性。