我实际上面临与使用memory leak
和JSF2.2(Mojarra)
的{{1}}相关的问题,我将继续详细说明:
Tomcat7
,并且有一些选项可以选择和导出数据。一切都存储在datatables
中(我重新考虑了JSF的所有良好实践,但在这种情况下我被迫使用它)...不幸的是,所有session
都是强制性的我知道这会消耗太多记忆,但我试着用datatables
在15分钟内面对它。但即使使用它,内存也会增长到session-timeout
允许的最大值,并且永远不会将内存释放回服务器,即使在数小时后也是如此。Tomcat7
。尝试实现的目的是释放已经超时的会话内存。
我有点怀疑问题与会话超时时出现的memory leak
有关,并且您尝试在应用中执行某些操作,在日志上打印出来:
de nov。 16,2017 2:55:46 PM org.springframework.web.context.request.FacesRequestAttributes registerDestructionCallback警告:无法注册销毁 的回调 [org.springframework.beans.factory.support.DisposableBeanAdapter@532ecd5b] 对于属性' mainBean'因为FacesRequestAttributes没有 支持这样的回调
de nov。 16,2017 2:55:46 PM org.springframework.web.context.request.FacesRequestAttributes registerDestructionCallback警告:无法注册销毁 的回调 [org.springframework.beans.factory.support.DisposableBeanAdapter@5d5d8e9e] 对于属性' otherBean'因为FacesRequestAttributes没有 支持这样的回调
WARNING
其他bean的主bean,所有bean都在会话@Autowire
范围内:mainBean.java
@Scope=("session")
otherBean.java
@Component
@Scope("session")
@Qualifier("mainBean")
public class MainBean {
@Autowired
private OtherBeanClass otherBean;
...
}
WEB-INF的web.xml(我知道我可以添加监听器@Component
@Scope("session")
@Qualifier("otherBean")
public class OtherBean {
...
}
,但结果为org.springframework.web.context.RequestContextListener
)
ClassNotFoundException
Tomcat的web.xml(因为它是一个非常大的文件,我只把我认为与我的问题有关):
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>MainApp v3.3.0</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>MyWebApp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyWebApp</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>client</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>main-css</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>resources.application</param-value>
</context-param>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<context-param>
<param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
<param-value>/WEB-INF/resources</param-value>
</context-param>
</web-app>
如果您希望我展示更多内容以获得更好的方法,请询问。
感谢阅读,希望你能帮助我。
编辑:在kolossus的帮助小费之后 我设法在<session-config>
<session-timeout>10</session-timeout>
</session-config>
内找到了RequestContextListener
正确的声明:
(注意:org.springframework.web-3.0.6.release.jar
而非.context.request.RequestContextListener
)
.context.RequestContextListener
最后调用了我的 <listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
方法,但我的服务器内存仍然是最大允许的。