Newsgroup: it.comp.java
Titolo: Repository documentale - JackRabbit

Salve a tutti.
Devo sviluppare un'applicazioncina che come operazione fondamentale ha
quella dell'upload/download di documenti.
Non ho problemi a gestire la cosa salvando gli stessi come BLOB sul db
(Oracle) ma, prima di prendere una scelta definitiva, stavo valutando
l'utilizzo di uno strumento alternativo come Apache JackRabbit.
E' uno strumento che non conosco affatto ma che ho visto essere
utilizzato dalla documentlibrary portlet di Liferay.
Quello che in soldoni effettua è salvare i file sempre come BLOB ma
sul file system.
Vengo dunque a chiedere al ng:
1) quali vantaggi offre?
2) come avviene il collegamento tra oggetto sul file system ed entità
referenziata? con una url da salvare su db?
3) qual è il valore aggiunto rispetto ad un salvataggio su db?
Grazie


Premetto che non sono un esperto, anzi, sto impèarando or ora...
1) Un sistema documentale ha molti plus rispetto alla mera
archiviazione di un documento (a questo scopo sarebbe sufficiente un
FTP server). Oltre, ovviamente, a memorizzare DA QUALCHE PARTE il
documento, un sistema documentale (generalmente) fa:
A) Gestisce i metadati di un documento. Per documento si intende in
genere l'insieme dei bit che lo compongono, ergo nome del file,
posizione, data/utente di inserimento/aggiornamento, MIMEtype, codec,
dimensioni ecc ecc.... si tatta tutti di metadati. Il bello è che i
sistemi documentali ti permettono di creare i tuoi tipi di metadati,
quindi dato un documento tu puoi creare una qualunque tipo di
struttura che ci gira intorno (ad es. puoi avere la possibilità di
costruire un forum sopra di un documento, in modo che il documento
faccia da "oggetto" alla discussione, oppure puoi creare delle
references ad altri documenti, per legare ad esempio un documento
scansionato (immagine) alla sua ricognizione (OCR, ergo testo), o
ancora legare fra di loro diverse versioni di un documento (per es può
trattarsi di uno stesso documento tradotto in diverse lingue)
B) Ti permettono di definire un comportamento sui documenti (puoi
vederla come un trigger)
C) Gestiscono accessi e autorizzazioni sui documeti
D) Forniscono diverse interfacce ai documenti (ad es, Alfresco, altro
sistema documentale molto usato e free, ti permette di accedere ai
documenti via http, ftp, samba, web services, webdav grazie a dei
server ad-hoc che non tengono i documenti su FS, ma li pescano dal
documentale).
E) Permettono modi evoluti di ricerca sui documenti. In genere, oltre
alla classica ricerca per nome del file, hanno la possibilità di farti
fare ricerche per metadati, e per contenuto. In pratica al momento
dell'inserimento/aggiornamento di un documento eso viene letto da un
analizzatore dipendente dal tipo di file, e vengono indicizate tutte
le keywords. Questo fa si che anche file binari come i documenti
office e i pdf possano essere cercati per contenuto.
F) Permette il versionamento del documento e dei suoi metadati
G) Permette di far passare il documento attraverso un motore di
workflow
2) Dipende, in particolare Jackrabbit e Alfresco sono due
implementazioni di una stesso standard java (JCR). Dove memorizzano un
documento dipende MOLTO dalla sua configurazione. Ad es, mi pare di
aver letto che la conf. STANDARD di jackrabbit salvi i files in FS, ma
si può configurare perché li memorizzi su DB. La "genialità" è che i
files non li cerchi con query SQL, ma XPath, per cui un file lo trovi
nello stesso modo (con la stessa query) indipendentemente dal medium
utilizzato per persisterlo. In generale JCR fa per i documenti quello
che JDBC fa con i Database: ti astrae completamente dal COME è
memorizzato un documento, bensì ti offre una API orizzontale per la
gestione dei documenti, in  modo da permetterti di cambiare
implementazione E/O configurazione senza perdere i dati
3) IMHO è meglio la memorizzazione su DB, almeno se sei interssato ad
avere un comportamento ACID... come detto prima, lo puoi fare anche
con JackRabbit...
Pre informazioni aggiuntive, ti consiglio di guardare le specifiche
delle JCR (ovviamente pubbliche) (di cui Jackrabbit è
l'implementazione principale). Sono andato a leggermele in quanto
"disperato", perché i tutorial a riguardo delle JCR non sono IMHO il
massimo di chiarezza... tuttavia sono stato felice di aver tentato
l'approccio, perché a differenza di moltre altre specifiche, le JCR
sono documentate veramente bene, sono facili da leggere, e secondo me
puoi imparare molto (ergo sono + simili a un tutorial che a una
programmer reference)

 On 5 Feb, 12:55, 
pion...@inwind.it
 wrote:
Grazie Alessandro, sei stato molto chiaro e mi hai chiarito parecchi
punti.
Ho fatto giro per Jcr JackRabbit e Alfresco.
Per i miei scopi e la dimensione del progetto, l'uso di Alfresco è
esagerato, quindi utilizzerò JackRabbit.
Vorrà dire che ti terrò presente in caso di ulteriori dubbi...:)
Grazie ancora