6

我有一个 JSF 应用程序,它在托管 bean 中从远程有状态会话 bean (EJB 3.0) 调用业务逻辑。

现在有一个 HttpSessionListener 调用该有状态会话 bean 上的 @Remove 注释方法,因此一旦 HttpSession 被销毁,容器就可以删除有状态会话 bean。

现在我想知道如果我不调用 @Remove 注释方法并且 HttpSession 被破坏会发生什么。有状态会话 bean 的客户端此时不存在记录器。容器是否会移除有状态会话 bean?还是它会永远存在导致某种泄漏(内存/磁盘)?

4

2 回答 2

9

是的,容器将在超时时删除未使用的有状态会话 bean。无论如何,当不再需要 bean 的状态时调用 @Remove 注释方法是要遵循的模式。

可以在应用程序服务器的设置中设置有状态会话 bean 的删除超时。

于 2012-09-04T09:30:57.720 回答
4

如果@Remove未指定注释,则有状态 bean 将保留在上下文中,直到指定的超时时间。它不会直接调用泄漏,但如果您没有正确管理依赖项并且还存在一些引用,那么您可能会有潜在的内存泄漏。所以建议使用@Remove注解。

于 2012-09-04T09:35:36.343 回答