Integro anche la parte sui ManagedBean (JSF),da adesso BB. Gli scope dei BB servono a gestire il ciclo di vita di quest'ultimi in base alle varie richieste (Request) effettuate.
Gli scope dei jsf managedBean sono :
[list=1][*]@RequestScope
Il BB viene ricreato ad ogni richiesta ricevuta. Ergo se dichiare un variabile di instanza all'interno di request BB essa verra ricreata e reinizializzata ad ogni richiesta (Action) che il bb gestirà[*]@SessionScope
Il BB viene creato solamente una volta per HttpSession dell'utente e viene posto nella mappa di sessione, questo vuol dire che il BB deve essere Serializzabile per essere appunto salvato all'interno della mappa. Questo tipo di BB sono spesso usati per mantenere dati che devo condividere il ciclo di vita della Sessione Web per esempio un BB che ha come proprietà l'utente attualmente loggato potrebbe essere un Session Bean[*]@ViewScope
Questo scope è stato introdotto con la specifica di JSF 2 (anche se molte implementazioni di jsf 1, vedi richfaces, già ne facevano uso). Il BB dichiarato come ViewScope viene creato alla prima action che riceve da una JSF View ("Pagina") e continua a mantenere il proprio stato finchè non riceve un action da un'altra pagina oppure se viene effettuata una redirect verso un'altra pagina.
Diciamo che è uno stato intermedio tra un SessionBean e un RequestBean.
Anche questo per mantenere il proprio stato ha bisogno di essere serializzato.[/list=1]
Su quando usare uno stato rispetto ad un'altro non vi è una regola generale ma dipende appunto dal comportamento che il BB deve avere.
Se però posso azzardare un consiglio è quello di limitare (non abbolire) l'uso dei Session Bean in quanto essendo posto nella mappa di sessione vanno ad occupare memoria per tutto il tempo che la sessione sarà attiva e dato che la memoria di un application server è destinata a tutti i client e soprattuto a tutte le web app che sono publicate su di esso, occupare tanta memoria non è una buona cosa, per farti capire ti porto un esempio:
Se la tua app usa 10 mega di sessione e supponiamo che avrai una media di client connessi uguale a 10, la media di memoria occupata sarà di 100 MB il che non è un problema se guardi solamente al tuo applicativo ma se sullo stesso application server ci sono deployate 10 applicazioni che fanno il tuo stesso uso di memoria arriverai ad occupare 1 giga di memoria....