JAVASERVERFACES-3947的解决方法

时间:2016-02-25 17:02:25

标签: spring jsf-2 memory-leaks

有谁知道https://java.net/jira/browse/JAVASERVERFACES-3947的解决方法? 在我的项目中,我使用的是primefaces 5.3,mojarra 2.2.12 wilfly 8.2.1

我分析了应用程序,我看到ViewScopedManaged bean没有被收集,并且堆不断增加和增加,直到内存泄漏

在faces-config中,我将其与Spring集成:

<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>

我认为我的问题与https://java.net/jira/browse/JAVASERVERFACES-3947有关。有没有人知道解决方法?我认为有一些jsf参数来配置memnory中scopbed bean的最大视图数量?它会成功吗?

这是bean类的一个例子:

@ManagedBean
@ViewScoped
@Data
public class JSFBean {
    //springBeanImpl is a Spring bean 
    @ManagedProperty(value = "#{springBeanImpl }")
   private SpringBean springBean;
}

1 个答案:

答案 0 :(得分:0)

在我们上一个JSF项目中,我们做了以下工作:

@ManagedBean
@ViewScoped
public class CountryBean extends SpringBeanAutowiringSupport {

    @Autowired // you can also use @Inject
    private SpringBean springBean;

}

因此,您不要使用较新的CDI注释,而应使用JSF中的“旧”注释。通过从SpringBeanAutowiringSupport扩展您的类,Spring将处理依赖注入。我想有一天会删除JSF注释并完全被CDI注释取代。所以这可能不适用于JSF的未来版本。

关于垃圾收集 - 你确定它们有时不被删除吗?请注意,默认情况下,最后25个视图保留在内存中。这个链接JSF 2.2 Memory Consumption: Why does Mojarra keep the ViewScoped Beans of the last 25 Views in Memory?解释了一下。希望这些参数在JSF 2.3中有更好的记录。

无论如何,正如balusc所提到的 - Spring和JSF目前不是最好的组合,因为JSF越来越依赖CDI。我个人认为目前的情况就是这样,真可惜。这是我们在新项目中停止使用JSF的主要原因之一。目前还不清楚JSF和Spring在即将发布的版本中是否会更少或更兼容。