JCR 2.0: (Rapid) Content-Driven Application Development

1,278 views
1,242 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,278
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
30
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

JCR 2.0: (Rapid) Content-Driven Application Development

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 14. Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  15. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 41. http://bmule.posterous.com Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010
  42. 42. GRAZIE PER L’ATTENZIONE! contatti: mario.cartia@codebase.it Mario Cartia – mario.cartia@codebase.it - JUG Sicilia Javaday IV – Roma – 30 gennaio 2010

×