Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
JCR 2.0: (Rapid) Content-Driven Application Development
Mario CartiaJUG Sicilia
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
A parte l'abaco, che è il più antico strumento di calcolo usato dall'uomo, le prime macchine costruite per effettuare meccanicamente operazioni di calcolo, tali che ad un variabile input dell'utente producessero un corrispondente output come effetto di un processo dei dati immessi determinato da una regola matematica o logica, sono molto antiche.
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Le prime importanti esigenze di calcolo riguardarono principalmente l'astronomia, disciplina legata da un verso a concezioni religiose o comunque spiritualiste, e per altro verso ad applicazioni estremamente pratiche come quelle per la navigazione marittima.
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Agli albori dell'era informatica (anni ’50), un computer era considerato semplicemente una macchina per fare i conti superveloce, la naturale evoluzione delle calcolatrici usate durante la seconda guerra mondiale.
(fonte Wikipedia)
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
I database sono stati utilizzati fin dall'inizio della storia dell'informatica per la memorizzazione di grosse quantità di dati (stringhe, numeri, date, …)
• Anni ~ ’60 : Database Navigazionali
• Anni ~ ’70 : Database Relazionali
• Anni ~ ’80 : Database multidimensionali / ad oggetti
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
...necessità attuali• archiviare documenti di natura più
disparata
• indicizzarne il contenuto per poter effettuare ricerche full-text
• implementare meccanismi di versioning e tracciatura delle modifiche
• …
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Content Repository API for Java (JCR) è una specifica API per la piattaforma Java che consente l’accesso a sistemi di gestione contenuti in maniera standardizzata e vendor-independent
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
• JSR-170 Expert Group
Apache Software Foundation, Art Technology Group, BEA Systems, Day Software, Fujitsu Limited, Hewlett-Packard, IBM, Mediasurface, Novell, Oracle, SAP AG, SAS Institute, Sun Microsystems, Vignette
• JSR-283 Expert Group
40+ aziende…
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Prodotti opensource basati su JCR
JBoss Portal, Liferay Portal, Magnolia, SUN’s OpenPortal, Nuxeo 5, OpenKM, Hippo ECM, …
Prodotti commerciali basati su JCR
Day CQ5, BEA WebLogic Portal, IBM WWCM, Oracle WebCenter Suite, …
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
• La prima versione della specifica, JSR-170, era strutturata su più livelli al fine di agevolare i vendor e metterli in condizione di implementarla in maniera graduale (giu 2005)
• La nuova versione, JSR-283, è pienamente retrocompatibile ed è pensata come una estensione della vecchia API (sett 2009)
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Level 1 : Accesso read-only
• Display Portlet• Template CMS• Reportistica• Applicazioni con funzioni di ricerca e visualizzazione in generale• …
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Level 2 : Accesso read-write
• Creazione e gestione completa informazioni strutturate e non strutturate• …
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Opzioni avanzate
• ECM• Gestione documentale avanzata• Source control management• …
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Workspace
grafo orientato di items
• Strutturati• Non strutturati
• String• Boolean• Long• Double• Date• URI• Reference• …
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
David's model blueprints
David Nüscheler’s seven simple rules:
1.Data First, Structure Later. Maybe.
2.Drive the content hierarchy, don't let it happen.
3.Workspaces are for clone(), merge() and update().
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
David's model blueprints
4.Beware of Same Name Siblings.
5.References considered harmful.
6.Files are Files are Files.
7.ID's are evil.
http://wiki.apache.org/jackrabbit/DavidsModel
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Un po’ di codice…
La prima versione della specifica non definiva alcun metodo per ottenere un oggetto Repository.
La JSR-283 introduce l’oggetto RepositoryFactory che, installato come estensione sulla piattaforma
Java, si occupa di questo compito
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Repository r=RepositoryFactory.getRepository(Map pa rameters);
Oppure alla “vecchia maniera”
InitialContext ctx = ...
Repository repository = (Repository)ctx.lookup("myr epo");
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
L’interazione con il Repository avviene mediante acquisizione di una Session tipicamente fornendo delle credenziali per un determinato Workspace
Session s=repository.login(Credentials credentials,
String workspaceName);
L’implementazione potrebbe prevedere un metodo login() che non fornisce credenziali. In questo caso tipicamente si vuole utilizzare JAAS o un altro meccanismo di autenticazione esterno
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Una Session è bindata sempre e solo ad un singolo (persistent) Workspace che è possibile ottenere utilizzando:
Workspace w=session.getWorkspace();
Session e Workspace pur essendo in corrispondenza 1:1 sono definiti su interfacce differenti perché implementano comportamenti in scrittura differenti (transient vs. immediately)
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Il Node radice del Workspace si ottiene direttamente dalla Session
Node n=session.getRootNode();
qualsiasi altro Node è raggiungibile dal path o dallo UUID
Node n=session.getNode(String absPath);
Node n=session.getNodeByUUID(String uuid);
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Una Property si ottiene, come intuibile, dal Node
Property p=node.getProperty(String relPath);
...o iterando il NodePropertyIterator pi=node.getProperties();
Property p=pi.nextProperty();
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Property Types
•STRING
•URI
•BOOLEAN
•LONG
•DOUBLE
•DECIMAL
•BINARY
•DATE
•NAME
•PATH
•WEAKREFERENCE
•REFERENCE
•UNDEFINED (optional)
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Node Types
Ogni nodo possiede un node type primario che definisce nomi, tipi e caratteristiche delle properties ed dei nodi figlio che esso può o deve possedere. Ogni nodo ha una property speciale jcr:primaryType che contiene il nome del tipo primario dello stesso.
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Mixin Node Types
I mixin node types sono utilizzati per aggiungere specifiche properties o nodi figlio ad uno specifico Node, tipicamente per esporre caratteristiche che sono specifiche del repository. Ad esempio per rendere un nodo referenziabile si aggiunge il mixin type mix:referenceable che definisce la property jcr:uuidche rappresenta l’identificativo del nodo.
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Node Types e Mixin Types supportano l’ereditarietà
E’ possibile definire tipi di nodo in maniera astratta . Questi possono essere utilizzati per definire altri tipi di nodo (o mixin) ma non assegnati in maniera diretta.
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Versioning basicsIl versionamento di un nodo si effettua in modo molto
semplice:
n.checkout();
n.setProperty(“my:field", “Hello JCR!");
n.save();
n.checkin();
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Lo storico delle versioni è accessibile mediante la classe VersionHistory che si ottiene a partire dal Node
VersionHistory vh = n.getVersionHistory(); VersionIterator vi = vh.getAllVersions();
…
while (vi.hasNext()) {
Version v = vi.nextVersion(); …
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Mediante l’ObservationManager è possibile registrare dei listener per specifici eventi. Molto utile, ad esempio, per implementare operazioni di auditing
public void addEventListener( long eventTypes, String absPath, int depth, EventListener listener, boolean noLocal, EventSelector
selector) throws RepositoryException ;
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
• Migliorata gestione delle query: AQM, JQOM, SQL bindings;
• Gestione delle JOIN nelle query;
• Gestione delle ACL;
• Retention policies dei dati;
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
• Meccanismo di versioning semplificato;
• Funzionalità BPM;
• Meccanismo per la gestione dei Nodetypes;
• Aggiunti nuovi tipi di nodo e di property;
• Metodo standardizzato per la creazione/rimozione dei workspaces;
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
• Modello a “grafo” che consente ad un nodo di avere più di un genitore;
• Meccanismo per ottenere la lista delle modifiche effettuate dopo l’ultimo check-in;
• …
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
• E’ la reference implementation opensource della specifica JSR-170 e JSR-283
• La versione 2.0, rilasciata da pochi giorni, è pienamente compatibile con la specifica JCR 2.0 (JSR- 283)
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
• Il modulo OCM (Object to Content Mapping) consente di salvare oggetti su un repository JCR utilizzando lo stesso metodo comunemente implementato nei motori ORM
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
@Node public class PressRelease {
@Field(path=true) String path;
@Field String title;
@Field Date pubDate;
@Field String content; …
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
…PressRelease pressRelease = new PressRelease(); pressRelease.setPath("/newtutorial"); pressRelease.setTitle("This is the first tutorial o n OCM"); pressRelease.setPubDate(new Date()); pressRelease.setContent("Many Jackrabbit users ask to the dev team to make a tutorial on OCM");
ocm.insert(pressRelease);
ocm.save();
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
“ Apache Sling is an innovative web framework that is intended to bring back the fun to web development. (http://sling.apache.org)”
• Apache Sling è un framework basato su JCR che utilizza un repository per la memorizzazion e la gestione di contenuti
• Le applicazioni Sling utilizzano semplici script o servlet per processare le richieste HTTP in modalità RESTful
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
• L’estensione JCR ha una struttura molto simile a quella dei package ORM appartenenti alla distribuzione Springufficiale in modo tale da consentire agli sviluppatori di riusare il proprio know-how potendo usufruire subito dei vantaggi della API per la gestione dei contenuti
http://se-jcr.sourceforge.net/
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
Content Management Interoperability Services
is a proposed standard for improving interoperability between Enterprise Content Management systems. It proposes a data model plus a set of generic services and several protocol bindings for these services, including:SOAP and Representational State Transfer (REST)/(Atom).
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
http://bmule.posterous.com
Mario Cartia – [email protected] - JUG Sicilia
Javaday IV – Roma – 30 gennaio 2010
GRAZIE PER L’ATTENZIONE!
contatti: