jcr 2.0: (rapid) content-driven application development

42
Mario Cartia – [email protected] - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010 JCR 2.0: (Rapid) Content-Driven Application Development Mario Cartia JUG Sicilia [email protected]

Upload: mario-cartia

Post on 17-May-2015

1.180 views

Category:

Technology


1 download

DESCRIPTION

Dagli anni ’50 ad oggi abbiamo assistito ad una costante evoluzione degli strumenti per l'elaborazione delle informazioni; queste ultime sono cambiate, durante gli anni, nella forma e nella quantità: semplici “numeri” inizialmente, generici “dati” successivamente fino ai “contenuti” che oggi le applicazioni devono essere in grado di gestire. In quantità spesso molto elevate. L'intervento partirà dalle motivazioni che hanno spinto alla creazione della prima specifica “Content Repository for JavaTM technology API” (JSR 170) per illustrare i vantaggi dal punto di vista dello sviluppatore derivanti dall'utilizzo della stessa, fino ad elencare le novità della versione 2.0 (JSR 283). Durante l'intervento verranno illustrati degli esempi di codice basati sulla reference implementation open source della specifica (il progetto Apache Jackrabbit) nonchè alcuni “case history” reali.

TRANSCRIPT

Page 1: JCR 2.0: (Rapid) Content-Driven Application Development

Mario Cartia – [email protected] - JUG Sicilia

Javaday IV – Roma – 30 gennaio 2010

JCR 2.0: (Rapid) Content-Driven Application Development

Mario CartiaJUG Sicilia

[email protected]

Page 2: JCR 2.0: (Rapid) Content-Driven Application Development

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.

Page 3: JCR 2.0: (Rapid) Content-Driven Application Development

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.

Page 4: JCR 2.0: (Rapid) Content-Driven Application Development

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)

Page 5: JCR 2.0: (Rapid) Content-Driven Application Development

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

Page 6: JCR 2.0: (Rapid) Content-Driven Application Development

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

• …

Page 7: JCR 2.0: (Rapid) Content-Driven Application Development

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

Page 8: JCR 2.0: (Rapid) Content-Driven Application Development

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…

Page 9: JCR 2.0: (Rapid) Content-Driven Application Development

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, …

Page 10: JCR 2.0: (Rapid) Content-Driven Application Development

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)

Page 11: JCR 2.0: (Rapid) Content-Driven Application Development

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• …

Page 12: JCR 2.0: (Rapid) Content-Driven Application Development

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• …

Page 13: JCR 2.0: (Rapid) Content-Driven Application Development

Mario Cartia – [email protected] - JUG Sicilia

Javaday IV – Roma – 30 gennaio 2010

Opzioni avanzate

• ECM• Gestione documentale avanzata• Source control management• …

Page 14: JCR 2.0: (Rapid) Content-Driven Application Development

Mario Cartia – [email protected] - JUG Sicilia

Javaday IV – Roma – 30 gennaio 2010

Page 15: JCR 2.0: (Rapid) Content-Driven Application Development

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• …

Page 16: JCR 2.0: (Rapid) Content-Driven Application Development

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().

Page 17: JCR 2.0: (Rapid) Content-Driven Application Development

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

Page 18: JCR 2.0: (Rapid) Content-Driven Application Development

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

Page 19: JCR 2.0: (Rapid) Content-Driven Application Development

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");

Page 20: JCR 2.0: (Rapid) Content-Driven Application Development

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

Page 21: JCR 2.0: (Rapid) Content-Driven Application Development

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)

Page 22: JCR 2.0: (Rapid) Content-Driven Application Development

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);

Page 23: JCR 2.0: (Rapid) Content-Driven Application Development

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();

Page 24: JCR 2.0: (Rapid) Content-Driven Application Development

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)

Page 25: JCR 2.0: (Rapid) Content-Driven Application Development

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.

Page 26: JCR 2.0: (Rapid) Content-Driven Application Development

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.

Page 27: JCR 2.0: (Rapid) Content-Driven Application Development

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.

Page 28: JCR 2.0: (Rapid) Content-Driven Application Development

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();

Page 29: JCR 2.0: (Rapid) Content-Driven Application Development

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(); …

Page 30: JCR 2.0: (Rapid) Content-Driven Application Development

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 ;

Page 31: JCR 2.0: (Rapid) Content-Driven Application Development

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;

Page 32: JCR 2.0: (Rapid) Content-Driven Application Development

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;

Page 33: JCR 2.0: (Rapid) Content-Driven Application Development

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;

• …

Page 34: JCR 2.0: (Rapid) Content-Driven Application Development

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)

Page 35: JCR 2.0: (Rapid) Content-Driven Application Development

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

Page 36: JCR 2.0: (Rapid) Content-Driven Application Development

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; …

Page 37: JCR 2.0: (Rapid) Content-Driven Application Development

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();

Page 38: JCR 2.0: (Rapid) Content-Driven Application Development

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

Page 39: JCR 2.0: (Rapid) Content-Driven Application Development

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/

Page 40: JCR 2.0: (Rapid) Content-Driven Application Development

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).

Page 41: JCR 2.0: (Rapid) Content-Driven Application Development

Mario Cartia – [email protected] - JUG Sicilia

Javaday IV – Roma – 30 gennaio 2010

http://bmule.posterous.com

Page 42: JCR 2.0: (Rapid) Content-Driven Application Development

Mario Cartia – [email protected] - JUG Sicilia

Javaday IV – Roma – 30 gennaio 2010

GRAZIE PER L’ATTENZIONE!

contatti:

[email protected]