Mam duży problem z moją aplikacją i pamięcią. Aplikacja (java z jsf/richfaces/facelet) jest używana przez około 7000 użytkowników jednocześnie.Problem z numberOfViewsInSession i wieloma zakładkami
Domyślnie zmienna com.sun.faces.numberOfViewsInSession jest ustawiona na 15 w pliku web.xml. Ta zmienna tworzy drzewo widoków, a jsf pobiera określony widok podczas 15 kliknięć wstecz.
Na przykład mam 3 ekrany dla aplikacji i używam firefox. Idę na trzecim ekranie w pierwszej zakładce. W drugiej zakładce mam pierwszy ekran i klikam na następny przycisk, jsf pobiera pierwszy ekran i przechodzi do drugiego.
Ten mechanizm jest świetny, ale zużywa dużo pamięci (dla mnie to 25 milionów razy), a gdy pomnożymy tę liczbę przez 7000, potrzebuję pamięci 175 Go, to niemożliwe.
Tak więc próbowałem ustawić com.sun.faces.numberOfViewsInSession równe 1 (3Mo po sesji).
Ale z moim przykładzie, po kliknięciu w drugiej zakładce następnego przycisku pojawia się kolejny błąd:
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)
Ten błąd jest logiczne, ponieważ mój numberOfViewsInSession to 1.
Więc moje Pytanie brzmi:
Biorąc pod uwagę, że znam dane w widoku (dla drugiej karty), jak mogę zrobić, aby uchwycić wyjątek i utworzyć nowy widok dla mojego użytkownika?
Dzięki za pomoc.
Dzięki za odpowiedź bardzo pouczające. Mogę użyć metody "klienta", ponieważ mam wiele żądań ajaxowych. Czy masz samouczek dotyczący api StateManager? Używam jsf 1.2 i nie mogę teraz uaktualnić wersji. – Kiva
W JavaServer jest kilka instrukcji Staje się pełnym odnośnikiem Eda Burnsa, ale nie nazwałbym ich dogłębnie. W przeciwnym razie po prostu musisz mieć Google w pobliżu, podałem termin, który ci podałem. –