| www.jaxitalia.com |
Proprio in questi giorni mi sono trovato ad intervenire su un applicativo con lo scopo di uniformare la produzione dei log e dare così la possibilità di redarre successivamente alcune statistiche. In quest'ottica è emersa la domanda di cui poi il titolo di questo breve articolo.
Ma facciamo un passo alla volta e partiamo prima dalle definizioni.
L'application scope è uno spazio di memoria dove è possibile salvare oggetti che sono poi accessibli da qualunque sessione dello stesso applicativo. Quindi una sola istanza di un oggetto visibile a tutti.
Il session scope è anch'esso uno spazio di memoria dove è possibile salvare oggetti ma, in questo caso, questi saranno visibili solo dalle servlet e dalle jsp della stessa sessione. Quindi un'istanza per ogni sessione.
Uso tipico del session scope è quello di immagazzinarvi le informazioni relative al livello di autorizzazione dell'utente. In questo modo, qualunque servlet o jsp necessiti di controllare il livello di accesso ad una data risorsa può recuperare l'informazione dalla sessione senza bisogno di accedere nuovamente alla base dati.
Tornando all'esempio pratico, nell'applicativo in questione è stato implementato un oggetto chiamato LoggerManager. Questo riceve in input delle stringhe, accede al file di log e scrive le informazioni sul filesystem.
Ecco quindi la domanda "dove salvare questo oggetto".
La risposta è facile: nell'application scope.
Questo per due ragioni. In primo luogo perch? l'oggetto in questione non ha nessun legame con l'utente che utilizza l'applicativo (e quindi nessun legame con una singola sessione); in secondo luogo, ma più importante, per una questione di accesso esclusivo al file di log.
Infatti, qualora il LoggerManager fosse salvato a livello di sessione e qualora due utenti si trovassero a utilizzare contemporaneamente l'applicativo, ci troveremmo ad avere due istanze di LoggerManager con una conseguente alta probabilità che queste cerchino di accedere contemporanemente al file di log.
Al contrario, ponendo LoggerManager a livello di application scope, avremo una sola istanza (comune a tutte le sessioni) e quindi un solo oggetto che accede al file di log (assicurandoci così un accesso esclusivo allo stesso).
di Luca Busnelli.