SlideShare a Scribd company logo
1 of 55
Download to read offline
JCR in Action

Content-based Applications with
      Apache Jackrabbit

      Carsten Ziegeler
      cziegeler@apache.org

      Apache Con US Presentation – November 2009 - Oakland
About
• Member of the ASF
  – Sling, Felix, Cocoon, Portals, Sanselan,
    Excalibur, Incubator
  – PMC: Felix, Portals, Sling, Incubator,
    Excalibur (Chair)
• RnD Team at Day Software
• Article/Book Author, Technical Reviewer
• JSR 286 Spec Group (Portlet API 2.0)

                                               2
Motivation
• Tried and trusted NOSQL solution
• Standard Java API
  – First spec released in May 2005
• Open Source Implementation
  – 1.0 Release in April 2006
• Think about your data storage use
  cases
  – JCR might help

                                      3
Agenda
•   JCR and Apache Jackrabbit
•   Basic Content Modeling
•   References and Search
•   Advanced Features
•   Demo: Sample Application
•   Summary and Questions



                                4
Content Repository




                     5
Content Storage
• Hierarchical content
  – Nodes and properties
• Structured
  – Nodetypes and typed properties
• And/or unstructured
• Fine and coarse-grained



                                     6
Sample Application
• Digital Asset Management
  – Hierarchical storage of pictures
  – Upload
  – Tagging                   Poor man's flickr...
  – Searching
  – Automatic thumbnail generation




                                                     7
Sample Content Structure


                 Travel              Family


            Europe                            Weddings


Amsterdam            Basel                         2008


2007                      City                 Photo      Photo


 Photo                           Photo


                                                                  8
Sample Application
• Java web application
• Uses Apache Sling as web framework
• Content repository managed by
  Apache Jackrabbit
• Interaction through the JCR API




                                       9
JSR 170: Content Repository
 for JavaTM technology API
• (Java) Standard – Version 1.0
  – Supported by many vendors
  – Used by many products and projects
  – Several open source solutions
• How do you connect to a CR?
• How do you interact with a CR?




                                         10
JSR 283 : JCR 2.0 is final
• New features
• Improved specification
  – Cleaned up API (deprecation)
  – Revised specification document
• Binary compatible
  – JSR 170 apps run without modification
• More later...


                                            11
CR : Combines Advantages




                           12
Content Repository Features
•   Query (XPath, SQL)
•   Export/Import (XML)
•   Referential Integrity
•   Authentication
•   Access Control
•   Versioning
•   Observation
•   Locking and Transactions (JTA)
                                     13
The Repository Model
•   Repository: one (or more) workspaces
•   Workspace contains a tree of items
•   Item: Node or property
•   Nodes provide the content structure
    – May have children
• Actual data is stored as values of
  properties
• Types and namespaces!

                Implementation of JCR   14
Nodes and Properties
                                   Root




                                                           W
= Node




                                                            or



                                                                       C
                                                              ks



                                                                        on
                                                                pa



                                                                          te
                                                                  ce



                                                                            nt
= Property




                                                                            R
                                                                  A



                                                                             ep
                                                                               os
                                                                                 it o
                       a




                                                                                     ry
                                                     c
                                       b




                                           g
         d    e                                            h


                                               „Once
                                               upon a           -25
                                               time..“
 i                j   k



             true          6.02x1023




                                   Implementation of JCR

                                                                                      15
Connecting to the Repository

                     JCR 1.0




                               16
Connecting to the Repository
• JCR 2.0 provides RepositoryFactory
• Uses Service Provider Mechanism
    • META-INF/services/javax.jcr.RepositoryFactory
• Just use
    • RepositoryFactory.getRepository(null)
• Or specify connection parameters
    • RepositoryFactory.getRepository(Map)




                                                17
Working with the Repository




                              18
Traverse the Hierarchy




                         19
Retrieve a Property




                      20
Interaction Summary
• Get the repository
• Login to a workspace
  – Provides a session
• Use the session to
  – Access nodes and their properties
  – Change and save them




                                        21
22


           Apache Jackrabbit
– JSR 170 and 283 reference
  implementation
– Apache TLP since 2006
– Releases
    • 1.6 (JSR 170 based)
    • 2.0 Beta 2 is out (nearly)
    • 2.0 Final (end of 2009)
    • announce-
      subscribe@jackrabbit.apache.org
– Components
    • Commons, API
    • RMI, WebDAV, WebApp, JCA
    • OCM
    • And more...                       http://jackrabbit.apache.org/



                                                                        22
Words of Advice
• Read (or browse) the JCR specification
  – jcr-1.0.jar/jcr-2.0.jar included
• Getting started with Jackrabbit
  – jackrabbit-webapp: Drop-in deployment
  – First Hops: Embedded repository
  – Take your time
  – Think about your use cases
• Have a look at Apache Sling

                                            23
Agenda
•   JCR and Apache Jackrabbit
•   Basic Content Modeling
•   References and Search
•   Advanced Features
•   Demo: Sample Application
•   Summary and Questions



                                24
Starting point: Leverage the
     standard node types
• Type hierarchy             • Content hierarchy


nt:hierarchyNode

               nt:folder

                   nt:file

             nt:linkedFile

nt:unstructured




                                                   25
Bottom-up modeling:
                Content types

my:album > nt:folder                      my:tag
- description (string)                    - name (string)
- date (date)                             - description (string)


      my:photo > nt:file
      - description (string)
      - location (string)
      - tags (string[])

              my:resource > nt:resource
              - width, height (long)
              - format (string)


                                                                   26
Top-down modeling: Content
       hierarchies

                  Travel              Family


             Europe                            Weddings


 Amsterdam            Basel                         2008


 2007                      City                 Photo      Photo


  Photo                           Photo


                                                                   27
Content Modeling: Words of
         advice
• Namespaces
  – Use a single namespace per company or
    application
  – Use a reasonably unique namespace prefix
  – Prefixed names for structured content
  – Default namespace for unstructured
    content




                                         28
Content Modeling: Words of
         advice
• Use an application root node
  – /my:content
  – Good for searching, backup, and migration
• Avoid flat hierarchies
  – User interface complexity
• Content-driven design
  – Design your content before your application



                                           29
Content Modeling: Words of
         advice
• Checkout Apache Jackrabbit wiki and
  mailing lists
  – "Davids Model"
• Look at existing node types
• Mixin node types possible




                                        30
David‘s Model
• Rule #1: Data First, Structure Later.
  Maybe
• Rule #2: Drive the content hierarchy,
  don‘t let it happen
• Rule #6: Files are Files are Files
• Look at http://wiki.apache.org/jackrabbit/
  DavidsModel


                                         31
Agenda
•   JCR and Apache Jackrabbit
•   Basic Content Modeling
•   References and Search
•   Advanced Features
•   Demo: Sample Application
•   Summary and Questions



                                32
Alternative Views:
                        References


       Tags                      Album                       Favorites


Bird          Tree          Photo                       Top 10          Picks


                                    Photo           link         link           link


                     API:
                     Node.getReferences():PropertyIterator
                     Property.getNode():Node
                     Node.setProperty(String name, Node)

                                                                                33
Sample – Alternative Views
• Reference by name

  my:photo > nt:file       my:tag
  - description (string)   - name (string)
  - location (string)      - description (string)
  - tags (string[])




                                                    34
Sample - Alternative Views
• Reference by path
                                         /

  my:photo > nt:file
  - description (string)                Tags
  - location (string)
  - tags (string[])
                           /Tags/bird
                                         bird




                                                35
Alternative Views: Search
Looking     XPath                                SQL
for
Latest      /                                  SELECT * FROM my:photo
photos      jcr:root/my:albums//element(*,my:p WHERE
            hoto)
                                               jcr:path LIKE ‘/my:albums/%’
            [@data > xs:dateTime(‘…’)]
                                               AND date > DATE ‘…’

Favorites   /                                    SELECT * FROM my:favorites
with        jcr:root/my:albums//element(*,my:f   WHERE
keywords    avorite)
                                                 jcr:path LIKE ‘/my:albums/%’
            /jcr:content[jcr:contains(.,’…’)]
                                                 AND CONTAINS(*,‘…’)

            API:
            Session.getWorkspace().getQueryManager():QueryManager
            QueryManager.createQuery(String stmt, String
            language):Query;
            Query.execute():QueryResult
                                                                              36
Alternative Views: Words of
            advice
• Moderate use of references
  – Circular references only within a subtree
  – Plan for backup and content migration
• Best search performance when
  selecting a small subset of content
• References, path or name property




                                            37
Agenda
•   JCR and Apache Jackrabbit
•   Basic Content Modeling
•   References and Search
•   Advanced Features
•   Demo: Sample Application
•   Summary and Questions



                                38
Observation
• Optional feature of the JCR specification
• Enables applications to register interest
  in events
• Monitor events
• Respond to events
          API:
          ObservationManager:
          addEventListener(EventListener listener,
            int eventTypes,
            java.lang.String absPath, boolean isDeep,
            java.lang.String[] uuid,
            java.lang.String[] nodeTypeName, boolean noLocal)

               Advanced JCR Features                     39
Event Types
• Events can be of 5 different types
  – Node added
  – Node removed
  – Property added
  – Property removed
  – Property changed




              Advanced JCR Features    40
Observation Events
• Describe changes to a workspace
• Dispatched on persistent change
• Provide the path of the item
• Provide the user ID
• Only provided to sessions with
  sufficient access privileges
• Events may not be complete!
    – Example: removal of a tree of nodes

                Advanced JCR Features       41
Event Listeners
• Registered with a workspace
• Registration with optional filters
  – Like node types, paths
• Receive events for every change


      API:
      public void onEvent(EventIterator events);




                   Advanced JCR Features           42
Events Advice
• Events occur after a save
  – Modification based on events is a new
    operation
  – Such events can be filtered
• Events may not tell the complete story
  – Tree removal, copy, move
• Most common pattern
  – Node added, removed, changed


              Advanced JCR Features         43
Staged Publishing:
    Versioning
          Version store




Staging                   Live




                                 44
Jackrabbit Configuration
• Workspace configuration
  – XML configuration
  – Persistence Managers
  – Query index configuration (Lucene)
  – File system configuration
• Check out the documentation




                                         45
Agenda
•   JCR and Apache Jackrabbit
•   Basic Content Modeling
•   References and Search
•   Advanced Features
•   Demo: Sample Application
•   Summary and Questions



                                46
Getting Content
• Get the repository
• Login to a workspace
  – Returns a session
• Starting with the session
  – Navigate to the desired content
  – Get the query manager and search




                                       47
Writing Content
• Get the repository
• Login to a workspace
  – Returns a session
• Navigate to the correct node
  – To change it
  – To add new nodes/properties
  – To remove nodes/properties
• Persist changes

                                  48
Advanced Development
• Apache Sling
  – REST based web framework
  – Powered by OSGi
  – Scripting Inside
• Apache Jackrabbit OCM
  – Map content to Java objects and vice
    versa
  – Similar to database ORMs


                                           49
JCR 2.0 Features
• Abstract Query Model
    – Java Query Object Model / SQL
• ACL and Access Control Policies
    – Plus Retention Policies and Hold
•   Nodetype Registry
•   New Property Types and Nodetypes
•   Shareable Nodes (Graph)
•   Journalling Observation

                                         50
Agenda
•   JCR and Apache Jackrabbit
•   Basic Content Modeling
•   References and Search
•   Advanced Features
•   Demo: Sample Application
•   Summary and Questions



                                51
(Nearly) Everthing is Content
• Application Domain Specific Content
• Presentation Support (HTML, CSS,
  JavaScript, Images)
• Documentation, Translations
• ...




                                        52
Conclusion
• Content Repositories
  – Combine advantages from FS and DB
  – Add important features
  – Structure/Access your data the way your
    domain requires it
• JCR – The Java API
• Apache Jackrabbit – The Implementation



                                              53
Famous Last Words
• Read the specification
• JCR in your application?
• Join the Jackrabbit community!
• Seriously consider Apache Sling for
  web applications
• Check for additional stuff like OCM



                                        54
Q&A




      55

More Related Content

What's hot

Mri anatomy of knee Dr. Muhammad Bin Zulfiqar
Mri anatomy of knee Dr. Muhammad Bin ZulfiqarMri anatomy of knee Dr. Muhammad Bin Zulfiqar
Mri anatomy of knee Dr. Muhammad Bin ZulfiqarDr. Muhammad Bin Zulfiqar
 
Histology- Cell structure
Histology- Cell structure Histology- Cell structure
Histology- Cell structure Dr. Devi Shankar
 
Radiological anatomy of the brain
Radiological anatomy of the brainRadiological anatomy of the brain
Radiological anatomy of the brainMohamed Shaaban
 
Histology of Uterus
Histology of Uterus Histology of Uterus
Histology of Uterus Ali Mehdi
 
Neonatal transcranial ultrasound
Neonatal transcranial ultrasound   Neonatal transcranial ultrasound
Neonatal transcranial ultrasound Ahmed Bahnassy
 
Breast cancer diagnosis staging screening....koustav
Breast cancer diagnosis staging screening....koustavBreast cancer diagnosis staging screening....koustav
Breast cancer diagnosis staging screening....koustavKoustav Majumder
 
Eyeball Anatomy with histology
Eyeball  Anatomy with histologyEyeball  Anatomy with histology
Eyeball Anatomy with histologyMukesh Dhital
 
Orbital pathologies radiology
Orbital pathologies radiologyOrbital pathologies radiology
Orbital pathologies radiologyDr. Mohit Goel
 
Frcr 2a before exxam
Frcr 2a before exxamFrcr 2a before exxam
Frcr 2a before exxamMahmoud Rezk
 

What's hot (14)

Ct anatomy of orbit
Ct anatomy of orbitCt anatomy of orbit
Ct anatomy of orbit
 
Mri anatomy of knee Dr. Muhammad Bin Zulfiqar
Mri anatomy of knee Dr. Muhammad Bin ZulfiqarMri anatomy of knee Dr. Muhammad Bin Zulfiqar
Mri anatomy of knee Dr. Muhammad Bin Zulfiqar
 
Histology- Cell structure
Histology- Cell structure Histology- Cell structure
Histology- Cell structure
 
Spotters ppt 1
Spotters ppt 1Spotters ppt 1
Spotters ppt 1
 
Radiological anatomy of the brain
Radiological anatomy of the brainRadiological anatomy of the brain
Radiological anatomy of the brain
 
Histology of Uterus
Histology of Uterus Histology of Uterus
Histology of Uterus
 
Neonatal transcranial ultrasound
Neonatal transcranial ultrasound   Neonatal transcranial ultrasound
Neonatal transcranial ultrasound
 
Breast cancer diagnosis staging screening....koustav
Breast cancer diagnosis staging screening....koustavBreast cancer diagnosis staging screening....koustav
Breast cancer diagnosis staging screening....koustav
 
Eyeball Anatomy with histology
Eyeball  Anatomy with histologyEyeball  Anatomy with histology
Eyeball Anatomy with histology
 
Orbital pathologies radiology
Orbital pathologies radiologyOrbital pathologies radiology
Orbital pathologies radiology
 
Frcr 2a before exxam
Frcr 2a before exxamFrcr 2a before exxam
Frcr 2a before exxam
 
Retroperitoneum
RetroperitoneumRetroperitoneum
Retroperitoneum
 
Isquiofemoral Impingement
Isquiofemoral ImpingementIsquiofemoral Impingement
Isquiofemoral Impingement
 
Mri anatomy of orbit & pns
Mri anatomy of orbit & pnsMri anatomy of orbit & pns
Mri anatomy of orbit & pns
 

Viewers also liked

Hippo get together workshop automatic export
Hippo get together   workshop automatic exportHippo get together   workshop automatic export
Hippo get together workshop automatic exportHippo
 
Web Applications Development
Web Applications DevelopmentWeb Applications Development
Web Applications Developmentriround
 
Introducing Apricot, The Eclipse Content Management Platform
Introducing Apricot, The Eclipse Content Management PlatformIntroducing Apricot, The Eclipse Content Management Platform
Introducing Apricot, The Eclipse Content Management PlatformNuxeo
 
The Java Content Repository
The Java Content RepositoryThe Java Content Repository
The Java Content Repositorynobby
 
App and web with Hippo CMS and AngularJS
App and web with Hippo CMS and AngularJS App and web with Hippo CMS and AngularJS
App and web with Hippo CMS and AngularJS Peter Broekroelofs
 
Cms integration of apache solr how we did it.
Cms integration of apache solr   how we did it.Cms integration of apache solr   how we did it.
Cms integration of apache solr how we did it.lucenerevolution
 
Introducing Hippo CMS 10.2
Introducing Hippo CMS 10.2Introducing Hippo CMS 10.2
Introducing Hippo CMS 10.2Hippo
 
JCR - Java Content Repositories
JCR - Java Content RepositoriesJCR - Java Content Repositories
JCR - Java Content RepositoriesCarsten Ziegeler
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBob Paulin
 
Hippo gettogether april 2012 faceted navigation a tale of daemons
Hippo gettogether april 2012 faceted navigation   a tale of daemonsHippo gettogether april 2012 faceted navigation   a tale of daemons
Hippo gettogether april 2012 faceted navigation a tale of daemonsHippo
 
The Zero Bullshit Architecture
The Zero Bullshit ArchitectureThe Zero Bullshit Architecture
The Zero Bullshit ArchitectureLars Trieloff
 
Hippo get together presentation solr integration
Hippo get together presentation   solr integrationHippo get together presentation   solr integration
Hippo get together presentation solr integrationHippo
 
Hippo CMS Integration Patterns
Hippo CMS Integration PatternsHippo CMS Integration Patterns
Hippo CMS Integration PatternsJeroen Reijn
 

Viewers also liked (20)

JCR and ModeShape
JCR and ModeShapeJCR and ModeShape
JCR and ModeShape
 
Hippo CMS at OpenCo Amsterdam 2014
Hippo CMS at OpenCo Amsterdam 2014Hippo CMS at OpenCo Amsterdam 2014
Hippo CMS at OpenCo Amsterdam 2014
 
Hippo Presentation Jboye Study tour
Hippo Presentation Jboye Study tourHippo Presentation Jboye Study tour
Hippo Presentation Jboye Study tour
 
Hippo get together workshop automatic export
Hippo get together   workshop automatic exportHippo get together   workshop automatic export
Hippo get together workshop automatic export
 
Web Applications Development
Web Applications DevelopmentWeb Applications Development
Web Applications Development
 
What's new in JSR-283?
What's new in JSR-283?What's new in JSR-283?
What's new in JSR-283?
 
2008-12 OJUG JCR Demo
2008-12 OJUG JCR Demo2008-12 OJUG JCR Demo
2008-12 OJUG JCR Demo
 
Introducing Apricot, The Eclipse Content Management Platform
Introducing Apricot, The Eclipse Content Management PlatformIntroducing Apricot, The Eclipse Content Management Platform
Introducing Apricot, The Eclipse Content Management Platform
 
The Java Content Repository
The Java Content RepositoryThe Java Content Repository
The Java Content Repository
 
App and web with Hippo CMS and AngularJS
App and web with Hippo CMS and AngularJS App and web with Hippo CMS and AngularJS
App and web with Hippo CMS and AngularJS
 
Cms integration of apache solr how we did it.
Cms integration of apache solr   how we did it.Cms integration of apache solr   how we did it.
Cms integration of apache solr how we did it.
 
Introducing Hippo CMS 10.2
Introducing Hippo CMS 10.2Introducing Hippo CMS 10.2
Introducing Hippo CMS 10.2
 
JCR - Java Content Repositories
JCR - Java Content RepositoriesJCR - Java Content Repositories
JCR - Java Content Repositories
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache Sling
 
Hippo gettogether april 2012 faceted navigation a tale of daemons
Hippo gettogether april 2012 faceted navigation   a tale of daemonsHippo gettogether april 2012 faceted navigation   a tale of daemons
Hippo gettogether april 2012 faceted navigation a tale of daemons
 
The Zero Bullshit Architecture
The Zero Bullshit ArchitectureThe Zero Bullshit Architecture
The Zero Bullshit Architecture
 
Hippo get together presentation solr integration
Hippo get together presentation   solr integrationHippo get together presentation   solr integration
Hippo get together presentation solr integration
 
Hippo CMS Integration Patterns
Hippo CMS Integration PatternsHippo CMS Integration Patterns
Hippo CMS Integration Patterns
 
Hippo CMS - A first look
Hippo CMS - A first lookHippo CMS - A first look
Hippo CMS - A first look
 
Introduction to JCR
Introduction to JCR Introduction to JCR
Introduction to JCR
 

Similar to JCR In Action (ApacheCon US 2009)

Apache Con Us2007 Jcr In Action
Apache Con Us2007 Jcr In ActionApache Con Us2007 Jcr In Action
Apache Con Us2007 Jcr In Actionday
 
Adding Riak to your NoSQL Bag of Tricks
Adding Riak to your NoSQL Bag of TricksAdding Riak to your NoSQL Bag of Tricks
Adding Riak to your NoSQL Bag of Trickssiculars
 
OSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache SlingOSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache SlingCarsten Ziegeler
 
Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updatesVinay H G
 
Scala at Treasure Data
Scala at Treasure DataScala at Treasure Data
Scala at Treasure DataTaro L. Saito
 
ログ収集プラットフォーム開発におけるElasticsearchの運用
ログ収集プラットフォーム開発におけるElasticsearchの運用ログ収集プラットフォーム開発におけるElasticsearchの運用
ログ収集プラットフォーム開発におけるElasticsearchの運用LINE Corporation
 
Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門Wen-Tien Chang
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
[DLHacks]Introduction to ChainerCV
[DLHacks]Introduction to ChainerCV[DLHacks]Introduction to ChainerCV
[DLHacks]Introduction to ChainerCVDeep Learning JP
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Ryan Cuprak
 
Implementing a JavaScript Engine
Implementing a JavaScript EngineImplementing a JavaScript Engine
Implementing a JavaScript EngineKris Mok
 
Open stack and k8s(v4)
Open stack and k8s(v4)Open stack and k8s(v4)
Open stack and k8s(v4)H K Yoon
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin ProgrammingAtlassian
 
Performance van Java 8 en verder - Jeroen Borgers
Performance van Java 8 en verder - Jeroen BorgersPerformance van Java 8 en verder - Jeroen Borgers
Performance van Java 8 en verder - Jeroen BorgersNLJUG
 
Lecture 5 JSTL, custom tags, maven
Lecture 5   JSTL, custom tags, mavenLecture 5   JSTL, custom tags, maven
Lecture 5 JSTL, custom tags, mavenFahad Golra
 
Stacktician - CloudStack Collab Conference 2014
Stacktician - CloudStack Collab Conference 2014Stacktician - CloudStack Collab Conference 2014
Stacktician - CloudStack Collab Conference 2014amoghvk
 
Introduction to Napa.js
Introduction to Napa.jsIntroduction to Napa.js
Introduction to Napa.jsDaiyi Peng
 
Apache Spark MLlib 2.0 Preview: Data Science and Production
Apache Spark MLlib 2.0 Preview: Data Science and ProductionApache Spark MLlib 2.0 Preview: Data Science and Production
Apache Spark MLlib 2.0 Preview: Data Science and ProductionDatabricks
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and ActivatorKevin Webber
 

Similar to JCR In Action (ApacheCon US 2009) (20)

Apache Con Us2007 Jcr In Action
Apache Con Us2007 Jcr In ActionApache Con Us2007 Jcr In Action
Apache Con Us2007 Jcr In Action
 
Introduction to CQ5
Introduction to CQ5Introduction to CQ5
Introduction to CQ5
 
Adding Riak to your NoSQL Bag of Tricks
Adding Riak to your NoSQL Bag of TricksAdding Riak to your NoSQL Bag of Tricks
Adding Riak to your NoSQL Bag of Tricks
 
OSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache SlingOSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache Sling
 
Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updates
 
Scala at Treasure Data
Scala at Treasure DataScala at Treasure Data
Scala at Treasure Data
 
ログ収集プラットフォーム開発におけるElasticsearchの運用
ログ収集プラットフォーム開発におけるElasticsearchの運用ログ収集プラットフォーム開発におけるElasticsearchの運用
ログ収集プラットフォーム開発におけるElasticsearchの運用
 
Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
[DLHacks]Introduction to ChainerCV
[DLHacks]Introduction to ChainerCV[DLHacks]Introduction to ChainerCV
[DLHacks]Introduction to ChainerCV
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)
 
Implementing a JavaScript Engine
Implementing a JavaScript EngineImplementing a JavaScript Engine
Implementing a JavaScript Engine
 
Open stack and k8s(v4)
Open stack and k8s(v4)Open stack and k8s(v4)
Open stack and k8s(v4)
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin Programming
 
Performance van Java 8 en verder - Jeroen Borgers
Performance van Java 8 en verder - Jeroen BorgersPerformance van Java 8 en verder - Jeroen Borgers
Performance van Java 8 en verder - Jeroen Borgers
 
Lecture 5 JSTL, custom tags, maven
Lecture 5   JSTL, custom tags, mavenLecture 5   JSTL, custom tags, maven
Lecture 5 JSTL, custom tags, maven
 
Stacktician - CloudStack Collab Conference 2014
Stacktician - CloudStack Collab Conference 2014Stacktician - CloudStack Collab Conference 2014
Stacktician - CloudStack Collab Conference 2014
 
Introduction to Napa.js
Introduction to Napa.jsIntroduction to Napa.js
Introduction to Napa.js
 
Apache Spark MLlib 2.0 Preview: Data Science and Production
Apache Spark MLlib 2.0 Preview: Data Science and ProductionApache Spark MLlib 2.0 Preview: Data Science and Production
Apache Spark MLlib 2.0 Preview: Data Science and Production
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 

More from Carsten Ziegeler

Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGiCarsten Ziegeler
 
Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Carsten Ziegeler
 
What's cool in the new and updated OSGi Specs
What's cool in the new and updated OSGi SpecsWhat's cool in the new and updated OSGi Specs
What's cool in the new and updated OSGi SpecsCarsten Ziegeler
 
What's cool in the new and updated OSGi specs
What's cool in the new and updated OSGi specsWhat's cool in the new and updated OSGi specs
What's cool in the new and updated OSGi specsCarsten Ziegeler
 
Monitoring OSGi Applications with the Web Console
Monitoring OSGi Applications with the Web ConsoleMonitoring OSGi Applications with the Web Console
Monitoring OSGi Applications with the Web ConsoleCarsten Ziegeler
 
Distributed Eventing in OSGi
Distributed Eventing in OSGiDistributed Eventing in OSGi
Distributed Eventing in OSGiCarsten Ziegeler
 
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)Carsten Ziegeler
 
Adobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingAdobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingCarsten Ziegeler
 
Embrace Change - Embrace OSGi
Embrace Change - Embrace OSGiEmbrace Change - Embrace OSGi
Embrace Change - Embrace OSGiCarsten Ziegeler
 
Apache Sling : JCR, OSGi, Scripting and REST
Apache Sling : JCR, OSGi, Scripting and RESTApache Sling : JCR, OSGi, Scripting and REST
Apache Sling : JCR, OSGi, Scripting and RESTCarsten Ziegeler
 
Apache Sanselan (ApacheCon US 2007 FFT)
Apache Sanselan (ApacheCon US 2007 FFT)Apache Sanselan (ApacheCon US 2007 FFT)
Apache Sanselan (ApacheCon US 2007 FFT)Carsten Ziegeler
 
Apache iBatis (ApacheCon US 2007)
Apache iBatis (ApacheCon US 2007)Apache iBatis (ApacheCon US 2007)
Apache iBatis (ApacheCon US 2007)Carsten Ziegeler
 
JCR In Action (ApacheCon US 2007)
JCR In Action (ApacheCon US 2007)JCR In Action (ApacheCon US 2007)
JCR In Action (ApacheCon US 2007)Carsten Ziegeler
 
Apache Portals Panel (ApacheCon US 2007)
Apache Portals Panel (ApacheCon US 2007)Apache Portals Panel (ApacheCon US 2007)
Apache Portals Panel (ApacheCon US 2007)Carsten Ziegeler
 
JCR In Action (ApacheCon EU 2008)
JCR In Action (ApacheCon EU 2008)JCR In Action (ApacheCon EU 2008)
JCR In Action (ApacheCon EU 2008)Carsten Ziegeler
 
Maven SCR Plugin (ApacheCon EU 2008 - FFT)
Maven SCR Plugin (ApacheCon EU 2008 - FFT)Maven SCR Plugin (ApacheCon EU 2008 - FFT)
Maven SCR Plugin (ApacheCon EU 2008 - FFT)Carsten Ziegeler
 

More from Carsten Ziegeler (17)

Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGi
 
Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)
 
What's cool in the new and updated OSGi Specs
What's cool in the new and updated OSGi SpecsWhat's cool in the new and updated OSGi Specs
What's cool in the new and updated OSGi Specs
 
What's cool in the new and updated OSGi specs
What's cool in the new and updated OSGi specsWhat's cool in the new and updated OSGi specs
What's cool in the new and updated OSGi specs
 
Monitoring OSGi Applications with the Web Console
Monitoring OSGi Applications with the Web ConsoleMonitoring OSGi Applications with the Web Console
Monitoring OSGi Applications with the Web Console
 
Distributed Eventing in OSGi
Distributed Eventing in OSGiDistributed Eventing in OSGi
Distributed Eventing in OSGi
 
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)
 
Adobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingAdobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job Processing
 
Embrace Change - Embrace OSGi
Embrace Change - Embrace OSGiEmbrace Change - Embrace OSGi
Embrace Change - Embrace OSGi
 
Apache Sling : JCR, OSGi, Scripting and REST
Apache Sling : JCR, OSGi, Scripting and RESTApache Sling : JCR, OSGi, Scripting and REST
Apache Sling : JCR, OSGi, Scripting and REST
 
Embrace OSGi
Embrace OSGiEmbrace OSGi
Embrace OSGi
 
Apache Sanselan (ApacheCon US 2007 FFT)
Apache Sanselan (ApacheCon US 2007 FFT)Apache Sanselan (ApacheCon US 2007 FFT)
Apache Sanselan (ApacheCon US 2007 FFT)
 
Apache iBatis (ApacheCon US 2007)
Apache iBatis (ApacheCon US 2007)Apache iBatis (ApacheCon US 2007)
Apache iBatis (ApacheCon US 2007)
 
JCR In Action (ApacheCon US 2007)
JCR In Action (ApacheCon US 2007)JCR In Action (ApacheCon US 2007)
JCR In Action (ApacheCon US 2007)
 
Apache Portals Panel (ApacheCon US 2007)
Apache Portals Panel (ApacheCon US 2007)Apache Portals Panel (ApacheCon US 2007)
Apache Portals Panel (ApacheCon US 2007)
 
JCR In Action (ApacheCon EU 2008)
JCR In Action (ApacheCon EU 2008)JCR In Action (ApacheCon EU 2008)
JCR In Action (ApacheCon EU 2008)
 
Maven SCR Plugin (ApacheCon EU 2008 - FFT)
Maven SCR Plugin (ApacheCon EU 2008 - FFT)Maven SCR Plugin (ApacheCon EU 2008 - FFT)
Maven SCR Plugin (ApacheCon EU 2008 - FFT)
 

Recently uploaded

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 

Recently uploaded (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

JCR In Action (ApacheCon US 2009)

  • 1. JCR in Action Content-based Applications with Apache Jackrabbit Carsten Ziegeler cziegeler@apache.org Apache Con US Presentation – November 2009 - Oakland
  • 2. About • Member of the ASF – Sling, Felix, Cocoon, Portals, Sanselan, Excalibur, Incubator – PMC: Felix, Portals, Sling, Incubator, Excalibur (Chair) • RnD Team at Day Software • Article/Book Author, Technical Reviewer • JSR 286 Spec Group (Portlet API 2.0) 2
  • 3. Motivation • Tried and trusted NOSQL solution • Standard Java API – First spec released in May 2005 • Open Source Implementation – 1.0 Release in April 2006 • Think about your data storage use cases – JCR might help 3
  • 4. Agenda • JCR and Apache Jackrabbit • Basic Content Modeling • References and Search • Advanced Features • Demo: Sample Application • Summary and Questions 4
  • 6. Content Storage • Hierarchical content – Nodes and properties • Structured – Nodetypes and typed properties • And/or unstructured • Fine and coarse-grained 6
  • 7. Sample Application • Digital Asset Management – Hierarchical storage of pictures – Upload – Tagging Poor man's flickr... – Searching – Automatic thumbnail generation 7
  • 8. Sample Content Structure Travel Family Europe Weddings Amsterdam Basel 2008 2007 City Photo Photo Photo Photo 8
  • 9. Sample Application • Java web application • Uses Apache Sling as web framework • Content repository managed by Apache Jackrabbit • Interaction through the JCR API 9
  • 10. JSR 170: Content Repository for JavaTM technology API • (Java) Standard – Version 1.0 – Supported by many vendors – Used by many products and projects – Several open source solutions • How do you connect to a CR? • How do you interact with a CR? 10
  • 11. JSR 283 : JCR 2.0 is final • New features • Improved specification – Cleaned up API (deprecation) – Revised specification document • Binary compatible – JSR 170 apps run without modification • More later... 11
  • 12. CR : Combines Advantages 12
  • 13. Content Repository Features • Query (XPath, SQL) • Export/Import (XML) • Referential Integrity • Authentication • Access Control • Versioning • Observation • Locking and Transactions (JTA) 13
  • 14. The Repository Model • Repository: one (or more) workspaces • Workspace contains a tree of items • Item: Node or property • Nodes provide the content structure – May have children • Actual data is stored as values of properties • Types and namespaces! Implementation of JCR 14
  • 15. Nodes and Properties Root W = Node or C ks on pa te ce nt = Property R A ep os it o a ry c b g d e h „Once upon a -25 time..“ i j k true 6.02x1023 Implementation of JCR 15
  • 16. Connecting to the Repository JCR 1.0 16
  • 17. Connecting to the Repository • JCR 2.0 provides RepositoryFactory • Uses Service Provider Mechanism • META-INF/services/javax.jcr.RepositoryFactory • Just use • RepositoryFactory.getRepository(null) • Or specify connection parameters • RepositoryFactory.getRepository(Map) 17
  • 18. Working with the Repository 18
  • 21. Interaction Summary • Get the repository • Login to a workspace – Provides a session • Use the session to – Access nodes and their properties – Change and save them 21
  • 22. 22 Apache Jackrabbit – JSR 170 and 283 reference implementation – Apache TLP since 2006 – Releases • 1.6 (JSR 170 based) • 2.0 Beta 2 is out (nearly) • 2.0 Final (end of 2009) • announce- subscribe@jackrabbit.apache.org – Components • Commons, API • RMI, WebDAV, WebApp, JCA • OCM • And more... http://jackrabbit.apache.org/ 22
  • 23. Words of Advice • Read (or browse) the JCR specification – jcr-1.0.jar/jcr-2.0.jar included • Getting started with Jackrabbit – jackrabbit-webapp: Drop-in deployment – First Hops: Embedded repository – Take your time – Think about your use cases • Have a look at Apache Sling 23
  • 24. Agenda • JCR and Apache Jackrabbit • Basic Content Modeling • References and Search • Advanced Features • Demo: Sample Application • Summary and Questions 24
  • 25. Starting point: Leverage the standard node types • Type hierarchy • Content hierarchy nt:hierarchyNode nt:folder nt:file nt:linkedFile nt:unstructured 25
  • 26. Bottom-up modeling: Content types my:album > nt:folder my:tag - description (string) - name (string) - date (date) - description (string) my:photo > nt:file - description (string) - location (string) - tags (string[]) my:resource > nt:resource - width, height (long) - format (string) 26
  • 27. Top-down modeling: Content hierarchies Travel Family Europe Weddings Amsterdam Basel 2008 2007 City Photo Photo Photo Photo 27
  • 28. Content Modeling: Words of advice • Namespaces – Use a single namespace per company or application – Use a reasonably unique namespace prefix – Prefixed names for structured content – Default namespace for unstructured content 28
  • 29. Content Modeling: Words of advice • Use an application root node – /my:content – Good for searching, backup, and migration • Avoid flat hierarchies – User interface complexity • Content-driven design – Design your content before your application 29
  • 30. Content Modeling: Words of advice • Checkout Apache Jackrabbit wiki and mailing lists – "Davids Model" • Look at existing node types • Mixin node types possible 30
  • 31. David‘s Model • Rule #1: Data First, Structure Later. Maybe • Rule #2: Drive the content hierarchy, don‘t let it happen • Rule #6: Files are Files are Files • Look at http://wiki.apache.org/jackrabbit/ DavidsModel 31
  • 32. Agenda • JCR and Apache Jackrabbit • Basic Content Modeling • References and Search • Advanced Features • Demo: Sample Application • Summary and Questions 32
  • 33. Alternative Views: References Tags Album Favorites Bird Tree Photo Top 10 Picks Photo link link link API: Node.getReferences():PropertyIterator Property.getNode():Node Node.setProperty(String name, Node) 33
  • 34. Sample – Alternative Views • Reference by name my:photo > nt:file my:tag - description (string) - name (string) - location (string) - description (string) - tags (string[]) 34
  • 35. Sample - Alternative Views • Reference by path / my:photo > nt:file - description (string) Tags - location (string) - tags (string[]) /Tags/bird bird 35
  • 36. Alternative Views: Search Looking XPath SQL for Latest / SELECT * FROM my:photo photos jcr:root/my:albums//element(*,my:p WHERE hoto) jcr:path LIKE ‘/my:albums/%’ [@data > xs:dateTime(‘…’)] AND date > DATE ‘…’ Favorites / SELECT * FROM my:favorites with jcr:root/my:albums//element(*,my:f WHERE keywords avorite) jcr:path LIKE ‘/my:albums/%’ /jcr:content[jcr:contains(.,’…’)] AND CONTAINS(*,‘…’) API: Session.getWorkspace().getQueryManager():QueryManager QueryManager.createQuery(String stmt, String language):Query; Query.execute():QueryResult 36
  • 37. Alternative Views: Words of advice • Moderate use of references – Circular references only within a subtree – Plan for backup and content migration • Best search performance when selecting a small subset of content • References, path or name property 37
  • 38. Agenda • JCR and Apache Jackrabbit • Basic Content Modeling • References and Search • Advanced Features • Demo: Sample Application • Summary and Questions 38
  • 39. Observation • Optional feature of the JCR specification • Enables applications to register interest in events • Monitor events • Respond to events API: ObservationManager: addEventListener(EventListener listener, int eventTypes, java.lang.String absPath, boolean isDeep, java.lang.String[] uuid, java.lang.String[] nodeTypeName, boolean noLocal) Advanced JCR Features 39
  • 40. Event Types • Events can be of 5 different types – Node added – Node removed – Property added – Property removed – Property changed Advanced JCR Features 40
  • 41. Observation Events • Describe changes to a workspace • Dispatched on persistent change • Provide the path of the item • Provide the user ID • Only provided to sessions with sufficient access privileges • Events may not be complete! – Example: removal of a tree of nodes Advanced JCR Features 41
  • 42. Event Listeners • Registered with a workspace • Registration with optional filters – Like node types, paths • Receive events for every change API: public void onEvent(EventIterator events); Advanced JCR Features 42
  • 43. Events Advice • Events occur after a save – Modification based on events is a new operation – Such events can be filtered • Events may not tell the complete story – Tree removal, copy, move • Most common pattern – Node added, removed, changed Advanced JCR Features 43
  • 44. Staged Publishing: Versioning Version store Staging Live 44
  • 45. Jackrabbit Configuration • Workspace configuration – XML configuration – Persistence Managers – Query index configuration (Lucene) – File system configuration • Check out the documentation 45
  • 46. Agenda • JCR and Apache Jackrabbit • Basic Content Modeling • References and Search • Advanced Features • Demo: Sample Application • Summary and Questions 46
  • 47. Getting Content • Get the repository • Login to a workspace – Returns a session • Starting with the session – Navigate to the desired content – Get the query manager and search 47
  • 48. Writing Content • Get the repository • Login to a workspace – Returns a session • Navigate to the correct node – To change it – To add new nodes/properties – To remove nodes/properties • Persist changes 48
  • 49. Advanced Development • Apache Sling – REST based web framework – Powered by OSGi – Scripting Inside • Apache Jackrabbit OCM – Map content to Java objects and vice versa – Similar to database ORMs 49
  • 50. JCR 2.0 Features • Abstract Query Model – Java Query Object Model / SQL • ACL and Access Control Policies – Plus Retention Policies and Hold • Nodetype Registry • New Property Types and Nodetypes • Shareable Nodes (Graph) • Journalling Observation 50
  • 51. Agenda • JCR and Apache Jackrabbit • Basic Content Modeling • References and Search • Advanced Features • Demo: Sample Application • Summary and Questions 51
  • 52. (Nearly) Everthing is Content • Application Domain Specific Content • Presentation Support (HTML, CSS, JavaScript, Images) • Documentation, Translations • ... 52
  • 53. Conclusion • Content Repositories – Combine advantages from FS and DB – Add important features – Structure/Access your data the way your domain requires it • JCR – The Java API • Apache Jackrabbit – The Implementation 53
  • 54. Famous Last Words • Read the specification • JCR in your application? • Join the Jackrabbit community! • Seriously consider Apache Sling for web applications • Check for additional stuff like OCM 54
  • 55. Q&A 55