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

MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングMicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングLINE Corporation
 
RedisConf17 - Internet Archive - Preventing Cache Stampede with Redis and XFetch
RedisConf17 - Internet Archive - Preventing Cache Stampede with Redis and XFetchRedisConf17 - Internet Archive - Preventing Cache Stampede with Redis and XFetch
RedisConf17 - Internet Archive - Preventing Cache Stampede with Redis and XFetchRedis Labs
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Kohei Saito
 
JPC2018[F4]超入門! やさしい Microsoft Dynamics 365 の世界 (tech編)
JPC2018[F4]超入門! やさしい Microsoft  Dynamics 365 の世界 (tech編)JPC2018[F4]超入門! やさしい Microsoft  Dynamics 365 の世界 (tech編)
JPC2018[F4]超入門! やさしい Microsoft Dynamics 365 の世界 (tech編)MPN Japan
 
Terraform Enterprise: Clustering & cost estimation webinar
Terraform Enterprise: Clustering & cost estimation webinarTerraform Enterprise: Clustering & cost estimation webinar
Terraform Enterprise: Clustering & cost estimation webinarMitchell Pronschinske
 
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Scott Wlaschin
 
Api design best practice
Api design best practiceApi design best practice
Api design best practiceRed Hat
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけらAtsushi Nakamura
 
REST API マスターへの道 - Office 365 パワーユーザー向け
REST API マスターへの道 - Office 365 パワーユーザー向けREST API マスターへの道 - Office 365 パワーユーザー向け
REST API マスターへの道 - Office 365 パワーユーザー向けHirofumi Ota
 
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~拓将 平林
 
Addressables で大量のリソース管理・困りどころと解消法
Addressables で大量のリソース管理・困りどころと解消法Addressables で大量のリソース管理・困りどころと解消法
Addressables で大量のリソース管理・困りどころと解消法Kenta Nagai
 
シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図akipii Oga
 
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"Ryo Suzuki
 
脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよMasakazu Ikeda
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線MeetupMasatoshi Tada
 
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry confluent
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService PrincipalToru Makabe
 
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門Unity Technologies Japan K.K.
 
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Platform - Japan
 
Component basedgameenginedesign
Component basedgameenginedesign Component basedgameenginedesign
Component basedgameenginedesign DADA246
 

What's hot (20)

MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリングMicrometerとPrometheusによる LINEファミリーアプリのモニタリング
MicrometerとPrometheusによる LINEファミリーアプリのモニタリング
 
RedisConf17 - Internet Archive - Preventing Cache Stampede with Redis and XFetch
RedisConf17 - Internet Archive - Preventing Cache Stampede with Redis and XFetchRedisConf17 - Internet Archive - Preventing Cache Stampede with Redis and XFetch
RedisConf17 - Internet Archive - Preventing Cache Stampede with Redis and XFetch
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
 
JPC2018[F4]超入門! やさしい Microsoft Dynamics 365 の世界 (tech編)
JPC2018[F4]超入門! やさしい Microsoft  Dynamics 365 の世界 (tech編)JPC2018[F4]超入門! やさしい Microsoft  Dynamics 365 の世界 (tech編)
JPC2018[F4]超入門! やさしい Microsoft Dynamics 365 の世界 (tech編)
 
Terraform Enterprise: Clustering & cost estimation webinar
Terraform Enterprise: Clustering & cost estimation webinarTerraform Enterprise: Clustering & cost estimation webinar
Terraform Enterprise: Clustering & cost estimation webinar
 
Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)Reinventing the Transaction Script (NDC London 2020)
Reinventing the Transaction Script (NDC London 2020)
 
Api design best practice
Api design best practiceApi design best practice
Api design best practice
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
REST API マスターへの道 - Office 365 パワーユーザー向け
REST API マスターへの道 - Office 365 パワーユーザー向けREST API マスターへの道 - Office 365 パワーユーザー向け
REST API マスターへの道 - Office 365 パワーユーザー向け
 
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~
サーバーレスWebアプリケーションを作ろう~AWSと比べてみる~
 
Addressables で大量のリソース管理・困りどころと解消法
Addressables で大量のリソース管理・困りどころと解消法Addressables で大量のリソース管理・困りどころと解消法
Addressables で大量のリソース管理・困りどころと解消法
 
シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図シーケンス図とアクティビティ図と状態遷移図
シーケンス図とアクティビティ図と状態遷移図
 
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"
CG 論文講読会 2013/5/20 "Clustered deferred and forward shading"
 
脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ脆弱性検査ツールってどうよ
脆弱性検査ツールってどうよ
 
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetupこれで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
これで怖くない!?コードリーディングで学ぶSpring Security #中央線Meetup
 
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
 
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
 
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
Google Cloud Game Servers 徹底入門 | 第 10 回 Google Cloud INSIDE Games & Apps Online
 
Component basedgameenginedesign
Component basedgameenginedesign Component basedgameenginedesign
Component basedgameenginedesign
 

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

Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfOverkill Security
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 

Recently uploaded (20)

Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.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