2015-01-06 16 views
5

Sto cercando di imparare come usare Apache Commons VFS2.Come funziona la Commons VFS Cache?

Ho letto tutto il docu che ho trovato e sono già abbastanza familiare con l'API, ma c'è ancora una cosa che non mi è perfettamente chiara.

Come funziona il meccanismo Cache? In particolare:

  • Non ho la differenza tra una strategia di cache e l'interfaccia di FilesCache. Quale viene usato quando?

  • Si dice nel docu qui: http://wiki.apache.org/commons/VfsCacheStrategy ... che ci sono 3 possibili strategie di cache e ognuna è spiegata nei dettagli. Prendo la strategia "on_call" più semplice, ma non le altre due. Ad esempio, se scegliamo una strategia MANUALE, si dice che "devi usare fileObject.refresh() per aggiornare il tuo oggetto con il filesystem". Ma cosa implica esattamente questo? Significa che se scrivo byte ai FileContents di questo FileObject essi non verranno effettivamente scritti fino a quando non chiudo l'oggetto file o non chiamo aggiornamento? Cosa succede se ho 2 FileObject risolti dallo stesso URI e ho eliminato() il primo? Il secondo metodo exist() restituirà comunque true poiché gli oggetti del file sono memorizzati nella cache?

Quando provo a giocare con le diverse strategie di cache localmente sul mio computer, non trovo differenze nel comportamento. Si comportano tutti allo stesso modo e i file sono sempre sincronizzati con la FS (o almeno non è evidente che non lo siano).

risposta

4

Il CacheStrategy controlla fondamentalmente la risincronizzazione dei metadati all'interno di una serie di chiamate multiple tra FileObject. Il FileObject decide quando aggiornare la propria visione del mondo.

Si chiamerà refresh() ogni volta che si resolve, o si chiamerà refresh() prima di ogni chiamata FileObject metodo (via OnCallRefreshFileObject decoratore) o mai automaticamente.

refresh() la maggior parte delle volte imposta lo stato FileObject da disconnettere, quindi viene letto di recente quando la successiva azione controlla con attach().

È principalmente correlato agli attributi di metadati e ai bambini, non penso che ci sia alcun provider di filesystem che memorizza effettivamente il contenuto nella cache.

Il FilesCache è in realtà responsabile per le istanze di memorizzazione nella cache delle chiamate FileObject tra resolveFile(). Quindi, se ti capita di risolvere o navigare verso lo stesso file, otterrai anche la stessa istanza di oggetto java (a meno che tu non usi la NullFilesCache o la cache LRUFilesCache scadute alcune voci).

Problemi correlati