[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
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
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
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
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
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
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
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