È possibile che si verifichi un timeout della sessione se sono caricati diversi file di grandi dimensioni? Immagina di caricare un file da 5 GByte e di impostare un timeout di sessione breve. È possibile che si verifichi il timeout della sessione durante lo streaming del file?Primefaces fileCarico di caricamento e sessione
risposta
Sì, è possibile. Lo servlet specification non impedisce in alcun modo che una sessione possa essere distrutta durante una richiesta attiva. Rischerai quindi un ViewExpiredException
quando un tale caricamento arriva al bean.
Se questa è la vostra preoccupazione, hai diverse opzioni:
Diamo il modulo di upload in modo asincrono il polling al server a intervalli per mantenere viva la sessione. In EL è possibile utilizzare
#{session.maxInactiveInterval}
per ottenere il timeout corrente in secondi.<p:fileUpload ... /> <p:poll interval="#{session.maxInactiveInterval - 10}" async="true" />
La differenza di 10 secondi è proprio per evitare che arriva pochi secondi troppo tardi, perché la pagina stessa può anche richiedere un certo tempo per caricare tutto il codice HTML e per inizializzare il sondaggio. Puoi, se necessario, avviare/rendere condizionatamente il sondaggio all'avvio del caricamento.
Facciamo l'evento "OnStart" della caricati aumentare il timeout di sessione ad un certo limite (ora?) E lasciare che l'evento "onComplete" di caricare rimetterlo.
<p:fileUpload ... onstart="increaseTimeout()" oncomplete="resetTimeout()" /> <p:remoteCommand name="increaseTimeout" listener="#{bean.increaseTimeout}" /> <p:remoteCommand name="resetTimeout" listener="#{bean.resetTimeout}" />
È possibile in uso fagioli
ExternalContext#setSessionMaxInactiveInterval()
per impostare il timeout di sessione in secondi.usare una forma stateless JSF. La vista non scadrà mai, indipendentemente da come si comporta la sessione HTTP.
<f:view transient="true"> ... </f:view>
Nota: qualsiasi vista ambito fagioli legate a una tale prospettiva si comporterà come quelle di richiesta ambito. Per evitare confusione, sostituire le annotazioni se necessario.
Grazie mille. Userò l'opzione 2 perché 'p: fileUpload' non è più visibile nel mio caso quando il caricamento è terminato. È all'interno di una finestra di dialogo che verrà chiusa e il caricamento verrà avviato tramite una chiamata javascript. – opfau
Prego. – BalusC
+1 per la menzione del modulo stateless JSF! : D non lo sapeva fino ad ora. in che versione jsf sarà disponibile? – Fritz