SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
JCR 2.0: (Rapid) Content-Driven Application
               Development

               Mario Cartia
                  JUG Sicilia
            mario.cartia@codebase.it


                                Mario Cartia – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - JUG Sicilia
                                           Javaday IV – Roma – 30 gennaio 2010
Level 2 : Accesso read-write



                        • Creazione e gestione
                        completa informazioni
                        strutturate e non
                        strutturate
                        •…




       Mario Cartia – mario.cartia@codebase.it - JUG Sicilia
                    Javaday IV – Roma – 30 gennaio 2010
Opzioni avanzate



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




                       Mario Cartia – mario.cartia@codebase.it - JUG Sicilia
                                    Javaday IV – Roma – 30 gennaio 2010
Mario Cartia – mario.cartia@codebase.it - JUG Sicilia
             Javaday IV – Roma – 30 gennaio 2010
Workspace
grafo orientato di items

                                   • String
                                   • Boolean
                                   • Long
                                   • Double
                                   • Date
                                   • URI
          • Strutturati            • Reference
          • Non strutturati        •…


                              Mario Cartia – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - JUG Sicilia
                                           Javaday IV – Roma – 30 gennaio 2010
Repository r=RepositoryFactory.getRepository(Map parameters);


Oppure alla “vecchia maniera”


InitialContext ctx = ...
Repository repository = (Repository)ctx.lookup("myrepo");




                                   Mario Cartia – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 Node
PropertyIterator pi=node.getProperties();
Property p=pi.nextProperty();

                              Mario Cartia – mario.cartia@codebase.it - JUG Sicilia
                                           Javaday IV – Roma – 30 gennaio 2010
Property Types   •BINARY
•STRING          •DATE
•URI             •NAME
•BOOLEAN         •PATH
•LONG            •WEAKREFERENCE
•DOUBLE          •REFERENCE
•DECIMAL         •UNDEFINED (optional)

                    Mario Cartia – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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:uuid
  che rappresenta l’identificativo del nodo.

                                   Mario Cartia – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - JUG Sicilia
                                             Javaday IV – Roma – 30 gennaio 2010
Versioning basics
Il versionamento di un nodo si effettua in modo molto
   semplice:
n.checkout();
n.setProperty(“my:field", “Hello JCR!");
n.save();
n.checkin();


                                    Mario Cartia – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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, EventListene
  r listener, boolean noLocal, EventSelector
   selector) throws RepositoryException;
                              Mario Cartia – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - JUG Sicilia
                                          Javaday IV – Roma – 30 gennaio 2010
…
PressRelease pressRelease = new PressRelease();
pressRelease.setPath("/newtutorial");
pressRelease.setTitle("This is the first tutorial on 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - JUG Sicilia
                                                       Javaday IV – Roma – 30 gennaio 2010
• L’estensione JCR ha una struttura molto simile a quella
  dei package ORM appartenenti alla distribuzione Spring
  ufficiale 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 – mario.cartia@codebase.it - 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 – mario.cartia@codebase.it - JUG Sicilia
                                            Javaday IV – Roma – 30 gennaio 2010
http://bmule.posterous.com

Mario Cartia – mario.cartia@codebase.it - JUG Sicilia
             Javaday IV – Roma – 30 gennaio 2010
GRAZIE PER L’ATTENZIONE!


           contatti:
   mario.cartia@codebase.it


                       Mario Cartia – mario.cartia@codebase.it - JUG Sicilia
                                    Javaday IV – Roma – 30 gennaio 2010

Contenu connexe

Similaire à JCR 2.0: (Rapid) Content-Driven Application Development

Sistemi lezione i - Presentazione - hardware
Sistemi   lezione i - Presentazione - hardwareSistemi   lezione i - Presentazione - hardware
Sistemi lezione i - Presentazione - hardwareUniversity of Catania
 
Web 2.0 e Intelligenza Artificiale
Web 2.0 e Intelligenza ArtificialeWeb 2.0 e Intelligenza Artificiale
Web 2.0 e Intelligenza ArtificialeinfoFACTORY
 
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...Codemotion
 
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...Federico Feroldi
 
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...Codemotion
 
Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...Riccardo Solimena
 

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

Android
AndroidAndroid
Android
 
Sistemi lezione i - Presentazione - hardware
Sistemi   lezione i - Presentazione - hardwareSistemi   lezione i - Presentazione - hardware
Sistemi lezione i - Presentazione - hardware
 
Web 2.0 e Intelligenza Artificiale
Web 2.0 e Intelligenza ArtificialeWeb 2.0 e Intelligenza Artificiale
Web 2.0 e Intelligenza Artificiale
 
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...
Una PA agile, funzionale e serverless: si può fare! by Federico Feroldi and D...
 
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...
Una Pubblica Amministrazione Agile, Funzionale e Serverless: si può fare! - C...
 
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...
Una PA agile, funzionale e serverless: si può fare! - Danilo Spinelli - Codem...
 
Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...Lo sbarco di Google nel pianeta Mobile Internet:  primo impatto ed esempi pra...
Lo sbarco di Google nel pianeta Mobile Internet: primo impatto ed esempi pra...
 

JCR 2.0: (Rapid) Content-Driven Application Development

  • 1. JCR 2.0: (Rapid) Content-Driven Application Development Mario Cartia JUG Sicilia mario.cartia@codebase.it Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 2. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 3. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 4. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 5. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 6. ...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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 7. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 8. • 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 9. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 10. • 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 11. Level 1 : Accesso read-only • Display Portlet • Template CMS • Reportistica • Applicazioni con funzioni di ricerca e visualizzazione in generale •… Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 12. Level 2 : Accesso read-write • Creazione e gestione completa informazioni strutturate e non strutturate •… Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 13. Opzioni avanzate • ECM • Gestione documentale avanzata • Source control management •… Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 14. Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 15. Workspace grafo orientato di items • String • Boolean • Long • Double • Date • URI • Strutturati • Reference • Non strutturati •… Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 16. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 17. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 18. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 19. Repository r=RepositoryFactory.getRepository(Map parameters); Oppure alla “vecchia maniera” InitialContext ctx = ... Repository repository = (Repository)ctx.lookup("myrepo"); Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 20. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 21. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 22. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 23. Una Property si ottiene, come intuibile, dal Node Property p=node.getProperty(String relPath); ...o iterando il Node PropertyIterator pi=node.getProperties(); Property p=pi.nextProperty(); Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 24. Property Types •BINARY •STRING •DATE •URI •NAME •BOOLEAN •PATH •LONG •WEAKREFERENCE •DOUBLE •REFERENCE •DECIMAL •UNDEFINED (optional) Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 25. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 26. 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:uuid che rappresenta l’identificativo del nodo. Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 27. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 28. Versioning basics Il versionamento di un nodo si effettua in modo molto semplice: n.checkout(); n.setProperty(“my:field", “Hello JCR!"); n.save(); n.checkin(); Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 29. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 30. 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, EventListene r listener, boolean noLocal, EventSelector selector) throws RepositoryException; Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 31. • Migliorata gestione delle query: AQM, JQOM, SQL bindings; • Gestione delle JOIN nelle query; • Gestione delle ACL; • Retention policies dei dati; Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 32. • 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 33. • 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 34. • 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 35. • 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 36. @Node public class PressRelease { @Field(path=true) String path; @Field String title; @Field Date pubDate; @Field String content; … Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 37. … PressRelease pressRelease = new PressRelease(); pressRelease.setPath("/newtutorial"); pressRelease.setTitle("This is the first tutorial on 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 38. “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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 39. • L’estensione JCR ha una struttura molto simile a quella dei package ORM appartenenti alla distribuzione Spring ufficiale 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 40. 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 – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 41. http://bmule.posterous.com Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  • 42. GRAZIE PER L’ATTENZIONE! contatti: mario.cartia@codebase.it Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010