JSF è una tecnologia utile, ma puoi sicuramente impiccarti.
Sembra, o si sta gonfiando la dimensione dello stato di visualizzazione (impostando grandi valori sui componenti) o si stanno perdendo i riferimenti ai componenti in altri stati di sessione (che sarebbe male). Un altro potenziale colpevole sarebbe una visione eccessivamente ampia (ho visto che la facilità con cui le persone possono costruire alberi dell'interfaccia utente portano a grafici di controllo molto grandi con tabelle di dati ovunque). So che IBM fornisce controlli di testo e fogli di calcolo avanzati: non posso commentare quale effetto avrà l'uso di questi su dimensioni dello stato.
Il frutto di sospensione basso controlla i bean gestiti configurati per l'ambito di sessione in faces-config.xml.
JSF salva due cose tra le richieste:
- la vista (tutti i controlli sulla pagina)
- lo stato di visualizzazione (lo stato dei controlli)
Questi sono separati a causa alcuni controlli, come i figli di una tabella di dati, possono avere più stati (uno per ogni riga). Lo stato può essere salvato in un campo nascosto nel modulo (che, se non crittografato, può costituire un grosso rischio per la sicurezza) o nella sessione. Al fine di ospitare più finestre del browser che condividono la stessa sessione (e, in alcune implementazioni, il supporto del pulsante indietro), vengono memorizzate più viste.
- Ci dovrebbe essere un'opzione di configurazione per impostare il numero di stati di visualizzazione che l'app manterrà nella sessione per un dato utente in qualsiasi momento.
- È possibile misurare la dimensione dello stato di visualizzazione fornendo un StateManager che misura la dimensione della vista/stato salvati (configurare uno StateManager in faces-config.xml con un costruttore pubblico che accetta uno StateManager - vedi i PDF JSF spec per maggiori dettagli; lo stato è serializzabile e puoi controllarne le dimensioni scaricandolo in un flusso).
La maggior parte delle app JSF create da IDE dispongono di backing bean. Sarebbe possibile, tramite il bean di sessione, mantenere lo stato più a lungo di quanto si desideri, mettendo a dura prova la sessione. Poiché tende ad esserci un backing bean per pagina, più pagine hai, più grande sarà il problema. Controlla il tuo faces-config.xml per vedere se questa è una potenziale fonte di problemi.
Un'altra cosa che potresti fare sarebbe configurare un HttpSessionAttributeListener nel tuo web.xml. Puoi ottenere un stack trace per identificare le aree problematiche nella tua app.
solo un'opinione personale, ma penso che il difetto risieda nell'IBM e nella loro implementazione JSF. Non riesco a giustificare i miei sentimenti :) – guyumu
Quello che ho visto fallito utilizzava la JVM Sun e l'implementazione JSF di Apache. Apache è pesantemente IBM, quindi non posso dire come i due siano diversi. Penso che sia il modello JSF: mi sembra molto pesante. – duffymo