【发布时间】:2016-04-07 12:20:15
【问题描述】:
我有一个带有 @ViewScoped bean 的 JSF 应用程序。是viewScoped,因为我做了一些ajax请求。
我将大量数据加载到视图中并将其显示给用户。
今天我进行了负载测试,遇到了OutOfMemoryException。事实证明,当我打开页面时,@PostConstruct 被调用
bean created. ID = @54a35e23
现在我导航到另一个页面并再次返回(@PreDestroy 未被调用)然后我得到
bean created. ID = @fee0948
我在负载测试中重新做了一遍。几个小时后,我收到了OutOfMemoryException
当我导航到另一个页面时,我能否以某种方式强制 JSF 销毁我的 ViewScoped bean?
【问题讨论】:
-
您使用 CDI 还是愿意接受? OmniFaces
@ViewScoped在加载期间显式销毁 bean 和关联的 JSF 视图状态。但它需要CDI。另见showcase.omnifaces.org/cdi/ViewScoped -
我使用 java ee 6 并且没有 CDI。此外,我非常接近上线,所以我不想改变很多。没有别的办法吗?
-
JSF (Mojarra) 在会话中最多保留 25 个视图范围的 bean。更改内存空间。或者,引入二级 JPA 缓存(如果您使用的是 JPA)。
-
我能以某种方式将 25 减少到 3 吗?
-
并非没有破解 impl。没有公开设置。
标签: jsf jsf-2 primefaces