2016-02-25 52 views
2

有没有人知道https://java.net/jira/browse/JAVASERVERFACES-3947的解决方法? 在我的项目,我使用primefaces 5.3,钻嘴鱼科2.2.12 wilfly 8.2.1解决方法适用于JAVASERVERFACES-3947

我分析的应用程序,我看到ViewScopedManaged豆不garbaged收集和堆不断提高和增加,直到有一个内存泄露

在脸上,配置,我有这与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; 
} 
+0

你是用Spring代替JSF/CDI来管理bean吗?为什么不是CDI,因为它是由WildFly提供的,没有任何额外的配置? – BalusC

+0

我不确定bean是由spring还是JSF管理。我现在建议不要混合使用JSF和Spring,但要回去现在它不是一个真正的选择。这些bean用“ViewScoped”注解(import javax.faces.bean.ViewScoped),我认为SpringBeanFacesELResolver是通过“ManagedProperty”注释将spring bean注入JSF bean – Deibys

回答

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是否会在即将发布的版本中更少或更兼容。