我有一个JSF应用程序,在托管bean中,从远程有状态会话bean(EJB 3.0)调用业务逻辑。
现在有一个HttpSessionListener在该有状态会话bean上调用@Remove带注释的方法,这样一旦HttpSession被破坏,容器就可以删除有状态会话bean。
现在我想知道如果我不调用@Remove带注释的方法并且HttpSession被破坏会发生什么。有状态会话bean的客户端当时没有loger存在。容器是否会删除有状态会话bean?或者它会永远存在导致某种泄漏(内存/磁盘)?
答案 0 :(得分:9)
是的,容器将在超时时删除未使用的有状态会话bean。无论如何,当不再需要bean的状态时调用@Remove带注释的方法是要遵循的模式。
可以在应用程序服务器的设置中设置有状态会话Bean的删除超时。
答案 1 :(得分:4)
如果未指定@Remove
注释,则有状态bean将保留在上下文中,直到指定的超时时间为止。它不会直接调用泄漏,但如果您没有正确管理依赖项并且还有一些引用,那么您可能会发生潜在的内存泄漏。因此建议使用@Remove
注释。