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