The document provides examples of how different types of content and applications can be modeled and stored in a JCR repository as a tree of nodes and properties. It shows folders for assets, workflows, orders and more, demonstrating how the JCR can be used to build content-based applications and manage content lifecycles.
How to Troubleshoot Apps for the Modern Connected Worker
A JCR view of the world - everything is content, everything is a tree
1. 1A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
a-jcr-node
propertyA : Nodes have 0..N properties
anotherProperty : Another value
a-subfolder
a-jcr-folder
A JCR view of the world
Everything is content, everything is a tree
Bertrand Delacretaz, Senior Developer, Adobe CQ5 team.
Apache Software Foundation member and (current) director
@bdelacretaz - http://grep.codeconsult.ch
Berlin Buzzwords 2012
Powered by Apache Sling (content and rendering) and deck.js
(presentation)
2. 2A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
JCR?
Java API for content repositories (JSR 283)
A big tree of nodes and properties.
Rich infrastructure for content-based applications.
3. 3A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
JCR Explorer
Java API for content repositories (JSR 283)
A big tree of nodes and properties.
Rich infrastructure for content-based applications.
4. 4A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
image_1.jpg
image_2.jpg
images
jcr:content
jcr:text : This is the text of the page.
jcr:title : Title of my page
my-page
A basic website page
The jcr:content subnode will later act as a container for more
complex content structures.
5. 5A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
block_1
block_2
content-blocks
original.jpg
first-image-212x43.jpg
first-image-512x83.jpg
renditions
first-image.jpg
images
jcr:content
jcr:title : Title of my page
/content/my-site/my-page
A more realistic page
Uses JCR observation to generate renditions when original image is
uploaded.
The first-image node is a folder, not just a file. A "micro-tree" of
content.
6. 6A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
printjob_20120524 _1502
incoming
done
printjob_20120524 _1458
canonMP640
Laserjet5M
printers
printjob_20120524 _1458
rejected
print-queue-example
A print queue
Jobs arrive under "incoming" and move under a printer's node while
they are executed. Remember unix spooling?
The "rejected" folder holds jobs that could not be executed.
7. 7A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
www_geometrixx_de
sling:internalRedirect : /content/geometrixx/de
sling:match : www.geometrixx.de/$
www_geometrixx_fr
sling:internalRedirect : /content/geometrixx/fr
sling:match : www.geometrixx.fr/$
/etc/map/http
Defining virtual hosts
Obvious, transparent...no explanation needed
8. 8A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
geometrixx_en
content
config
install
wcm/mobile
libs
install
wcm/mobile
apps
virtual-hosts
etc
compiled-scripts
var
Adobe CQ5's content structure
Looks familiar?
9. 9A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
a-bundle.jar
sling.get.servlet.jar
install
o.a.sling.GET.config
config
o.a.sling.logging.config
config.dev
/apps/my-app
Code and configurations
Sling's JCR installer detects and installs bundles, configs and other
resources.
Scary? Extremely useful - with access controls of course.
10. 10A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
preconditions
transitions
state_1
preconditions
transitions
state_2
states
/etc/workflow/models/my-model
jcr:description : Please approve...
jcr:title : Content Approval
A workflow model
Useful JCR features: versioning, access control, observation, ...
Semi-generic editor is relatively easy to implement.
11. 11A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
wf_45f23c
modelPath : /etc/models/approve_content
wf_45f23d
day24
wf_6534ef
day25
month03
year2012
year2011
/var/workflow/instances
Workflow instances
Under /var for distinct access control and lifecycle.
Purge old workflows? Delete year2011 folder.
12. 12A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
some_image.jpg
invalid.pdf
/var/public/incoming
image-to-check.jpg
/var/assets/to-validate
validated_image.jpg
month04
year2012
/content/assets
other_invalid.pdf
/var/readonly/rejected
Ingesting assets
Watch the incoming folder using JCR observation
Validate , accept and route assets based on content, filenames, etc.
Only incoming folder needs to be writable by users.
13. 13A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
order_b45627
order_f32136
confirmed-orders
private
order_c325421
coffeeType : espresso
cupSize : tall
public
/content/slingbucks
Slingbucks sample: ordering coffee
Access control requirements for the private/public folders is obvious.
Orders move from public to private, as if passed over the counter
(using JCR observation).
14. 14A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
capuccino
espresso
coffee-type
small
medium
price_factor : 1.4
name_fr : Moyenne
name_en : Medium
cup-type
/content/slingbucks
Slingbucks sample: coffee options
Options are defined in content, updates are dynamically applied.
Access control defines who can modify options.
15. 15A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html
Thanks for your attention - I'm @bdelacretaz
16. 16A JCR view of the world
1 juin 2012 14:18:09http://localhost:4502/content/bb12.html