Glassfish 3.1.1 Jersey 1.8如何让Glassfish为每个请求创建新会话?
我有以下无状态会话bean作为JAX-RS资源公开。 VehicleResource包含在WAR中,其他EJB包含在EJB-JAR中。整个应用程序打包并部署为EAR。
@Stateless
@Path("/")
@DeclareRoles({"production"})
public class VehicleResource {
private static final Logger logger = Logger.getLogger(VehicleResource.class.getName());
private static final long serialVersionUID = 1L;
@Context
private UriInfo uriInfo;
@EJB
private VehicleManagementLocal vehicles;
@EJB
private VehicleAliases aliases;
....
我有一个泽西岛客户向宁静的服务提出请求。会话是为每个请求创建的。这是正常的/预期的吗?有很多请求,服务器很快就会耗尽内存。为什么会发生这种情况,并且是否有任何配置/代码更改可以阻止每个请求的新会话?
编辑 实际上,只创建了一个会话bean实例。我通过反复点击一个URI来模拟一个负载。我已将会话超时更改为5分钟(从30开始)。会话现在到期,可以快速收集垃圾,以防止服务器内存不足。玻璃鱼监测部分的“Web容器:会话统计”显示我有约50,000个活动会话。
我几乎键入相同的答案,但开始思考关于设计的不安如何创造一个新线索。游泳池耗尽且下一次请求进入时会发生什么?客户看到什么? – Preston
当池耗尽时,容器会等待更长时间,以便将未使用的实例返回到可用于提供请求的池中。但是,如果容器找不到这样的实例,例如30秒(这是可配置的),它将超时并且请求将不会被提供。 – Behrang
客户端是否收到404错误或其他内容? – Preston