Ich habe ein großes Problem mit meiner Anwendung und dem Speicher. Die Anwendung (Java mit JSF/Richfaces/Facelet) wird von einigen 7000 Benutzern gleichzeitig verwendet.Problem mit NumberOfViewsInSession und mehrere Registerkarten
Standardmäßig ist die Variable com.sun.faces.numberOfViewsInSession in der web.xml auf 15 eingestellt. Diese Variable erstellt einen Baum von Ansichten und jsf ruft eine bestimmte Ansicht während 15 Klicks rückwärts ab.
Zum Beispiel habe ich 3 Bildschirme für eine Anwendung und ich benutze Firefox. Ich gehe im dritten Bildschirm in einem ersten Tab. In einem zweiten Tab habe ich den ersten Bildschirm und ich klicke auf den nächsten Knopf, jsf den ersten Bildschirm und gehe zum zweiten.
Dieser Mechanismus ist großartig, aber es verbraucht viel Speicher (25Mo für Sitzung) und wenn Sie diese Zahl um 7000 multiplizieren, brauche ich 175 Go Speicher, es ist unmöglich.
Also habe ich versucht, com.sun.faces.numberOfViewsInSession gleich 1 (3Mo nach Sitzung) zu setzen.
Aber mit meinem Beispiel, wenn ich auf der nächsten Taste in dem zweiten Registerkarte klicken bekomme ich die nächsten Fehler:
javax.servlet.ServletException: viewId:/private/pages/data/dataView.faces - View /private/pages/data/dataView.faces could not be restored.
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:270)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at fr.generali.mezzo.front.commun.performance.filters.PerformanceFilter.doFilter(PerformanceFilter.java:72)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:420)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
Dieser Fehler ist logisch, weil mein numberOfViewsInSession 1.
So ist mein Frage ist:
Da ich Daten kenne, die in der Ansicht sind (für die zweite Registerkarte), wie kann ich tun, um die Ausnahme abzufangen und eine neue Ansicht für meinen Benutzer erstellen?
Danke für Ihre Hilfe.
Danke für Ihre Antwort sehr lehrreich. Ich kann "client" -Save-Methode verwenden, weil ich viele AJAX-Anfragen habe. Haben Sie ein Tutorial über StateManager API? Ich benutze JSF 1.2 und ich kann die Version jetzt nicht aktualisieren. – Kiva
Es gibt einige Anweisungen in JavaServer Faces die komplette Referenz von Ed Burns, aber ich würde diese nicht ausführlich nennen. Sonst musst du nur um den Begriff rumspielen, den ich dir gegeben habe. –