SlideShare a Scribd company logo
1 of 60
Download to read offline
Carsten Ziegeler | Day Management AG


OSGi, Scripting, REST
Webapps with Apache Sling
  cziegeler@apache.org
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
Agenda – Apache Sling
1   Motivation
2   Content and JCR
3   Web and REST
4   Scripting
5   OSGi
6   Outlook




    3
Apache Sling



1 Motivation


4
Web Challenges
• Publish huge amount of information
     – Different types
     – Highly dynamic
     – Different output formats
• Web 2.0 ready
     – Collaboration and integration
• Fast changing requirements
     – Rapid prototyping and development
     – Dynamic, extensible but maintainable

 5
Web Challenges
• Publish huge amount of information
     – Different types                   JCR

     – Highly dynamic
     – Different output formats         REST
                                        ROA
• Web 2.0 ready
     – Collaboration and integration
• Fast changing requirements           Scripting

     – Rapid prototyping and development
     – Dynamic, extensible but maintainable
                                        OSGi


 6
Apache Sling – The Fun Is Back
•   Web framework             th
                       5 Winner JAX Innovation Award 2008

•   Java content repository (JCR)
•   ROA / REST
•   Scripting inside
•   OSGi
•   Apache Open Source top level project
        – http://sling.apache.org
• Driving force behind several OSGi
   related projects at Apache
    7
Apache Sling Powered Site




8
Apache Sling



2 Content/JCR


9
Content Is Important
• Apache Sling makes handling content
  easy
• Java content repository (JCR)
     – Several different sources possible
• Direct mapping: URL -> content
     – Configurable
     – http://myserver.domain/products/sling
        .html
• Flexible rendering

10
Content Repository I
• Features of an RDBMS
     – Structure, integrity
     – Query, transactions
• Features of a filesystem
     – Hierarchy, binaries
     – Locking, access control
• All the other good stuff
     – Observation, versioning
     – Unstructured
     – Multi values, sort order, full text
• Single repository for all content!
11
JCR – JSR 170, JSR 283
• Content Repository for Java
  technology API
• (Java) Standard
     – 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?
              JSR 283 – Version 2.0 – Final since September 09

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




                                                        13
13
Slingshot Content Structure


                      Travel              Family


                 Europe                            Weddings


     Amsterdam            Basel                         2008


     2007                      City                 Photo      Photo


      Photo                           Photo



14
Content Repository II
• Hierarchical content
     – Nodes and properties
• Structured
     – Nodetypes and typed properties
• And/or unstructured
• Fine and coarse-grained
• Single repository for all content!



15
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!


    16
Nodes and Properties
                                                 Root


                         Travel                   Family


                    Europe        “Images from
                                  Europe“
                                                           Weddings


     Amsterdam               Basel                              2008


     2007                           City                    Photo      Photo


      Photo                                 Photo

              „Once
              upon a
              time..“



                             Properties
                                  Implementation of JCR


17
Apache Jackrabbit
• JSR 170, JSR 283 reference
    implementation
• Apache TLP since 2006
• Several releases
• JCR 2.0 implementation end of 2009
• Additional components




18
Leverage the standard node types
      • Type hierarchy             • Content
                                     hierarchy
      nt:hierarchyNode

                     nt:folder

                         nt:file

                   nt:linkedFile

      nt:unstructured




 19
Bottom-up modeling: Node types
slingshot:album > nt:folder        slingshot:tag
- slingshot:description (string)   - slingshot:description (string)
- slingshot:date (date)



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




20
Top-down modeling: Hierarchy


                      Travel              Family


                 Europe                            Weddings


     Amsterdam            Basel                         2008


     2007                      City                 Photo      Photo


      Photo                           Photo



21
Apache Sling



3 ROA and REST


22
Resource Oriented Architecutre
• Piece of information is a resource
     – News entry, product, photo...
     – (Descriptive) URI
• Stateless
     – Request contains all relevant
        information
• Use HTTP
     – Methods (GET, POST) for operations



23
REST with Apache Sling
• Default behaviour for GET
• Creating/Updating content through
  POST
     – Default behaviour
• Additional operations/method
• Resource-first request processing!




24
Resource
• Sling's abstraction of the thing
  addressed by the request URI
       – Usually mapped to a JCR node
       – File system, database...
• Properties of resources
     – Path, e.g. JCR Item path
     – Type, e.g. JCR node type
     – Metadata, e.g. last modification date



25
Resource-first Request Processing
• URI Decomposition
         – Resource and representation
•        /slingshout/albums/travel.print.a4.html

             Resource Path       Selectors   Extension
• Content retrieved from repository
• Rendering based on content type




    26
Basic Request Processing Steps
• URI decomposition
• Resolve the resource (using URI)
• Resolve rendering script
     – Source: resource type
     – Scripts wrapped by generic servlet
• Create rendering chain
       – Configurable (servlet) filters
       – Rendering servlet
• Invoke rendering chain
27
Resource Resolver I
• Tasks:
     – Finding Resources
     – Getting Resources
     – Simplification of Query Execution




28
Resource Resolver II
• Gateway for resources
• Abstracts the path resolution
• Abstracts access to the persistence
  layer(s)
• Configurable
     – Mappings (Multi-site mgmt, beautify
        paths)




29
Resource-First Request Processing

 request
             Resource Resolver

                     Resource (resource type)
              Script Resolver


                 Script


  response


  30
Apache Sling



4 Scripting


31
Scripting Inside
• It's your choice
     – JSP, servlet, ESP, Scala
     – javax.script (Apache BSF)
     – own script handlers
• Scripts stored in OSGi bundles or repository
• Scripts are searched at configurable locatiosn
• Default servlets (or scripts)
        – JSON, XML
     – Registerable
     – Fallback / Last Ressort



32
Script Resolving I
• Path to script is built from ...
     – Configured search paths ( /apps, /libs )
     – Resource type converted to path
       ( slingshot/Album )
     – Selector string ( print/a4)
     – Request method & extension
       • GET --> Request URL Extension ( html )
       • else --> Method Name ( POST, PUT, ... )




33
Script Resolving Example
• URI:
  /slingshot/albums/travel.print.a4.html
• Resource: /slingshot/albums/travel
• Resource Type: slingshot:Album
• Script for GET:
     – /apps/slingshot/Album/print/a4/html.*
• Script for POST:
     – /libs/slingshot/Album/print/a4/POST.*


34
Script Resolving II
• Scripts are searched by best matching
     –   /apps/slingshot/Album/print/a4/html.*
     –   /libs/slingshot/Album/print/a4/html.*
     –   /apps/slingshot/Album/html.*
     –   /libs/slingshot/Album/html.*
• Resource has a type and a super type
     – Script inheritance
     – Default script (JSON...)



35
Powerful Scripting with Includes I
 Request: /slingshot/albums/travel.html


             Resource Resolver

                      Resource, resource type: slingshot:Album
              Script Resolver
                      Script: /libs/slingshot/Album/html.jsp
                 Script
                      Generates main html
                      sling:include with selectors
  response

  36
Powerful Scripting with Includes II
   Request: /slingshot/albums/travel.html

            Script (/libs/slingshot/Album/html.jsp)
   for(current : ChildResources)
       <sling:include resource="<%= current %>" addSelectors="main"/>
       …



                   Script Resolver

                 Script: /libs/slingshot/Photo/tree.html.jsp

                                Script
  response
  37
Resource-first Request Processing
•    ROA
•    URI decomposition
•    Resource resolving
•    Script resolving
         – Recursion
• Flexible script search algorithm




    38
Apache Sling



5 OSGi


39
Runtime Framework: Requirements
• Modularization – Modularity is key
        – Manage growing complexity
        – Support (dynamic) extensibility
• Lifecycle management
• Configuration management
• Dependency management
      – Modules, services
      – Different distributions
• Dynamic System Changes
 40
OSGi in 5..ehm..1 Minute

• Specification of a framework
• Module concept (bundles) with lifecycle
• Simple but powerful component model
       – Lifecycle management
       – Publish/Find/Bind service registration
• Dynamic!
• Uses the concept of bundles


  41
An OSGi Bundle
• Leverages the Java packaging
  mechanism: JAR files
• Contains Java classes and resources
• Additional meta-data
     – Implicit dependencies to other bundles
     – Package imports/exports




42
Services
• OSGi offers an API to register services
     – Service is registered by its interface
       name(s)
     – Implementation is bundle private
     – Several components for same service
       possible (from different bundles)
• Bundles can query services
     – By interface names
     – With additional filters


43
The OSGi Core
• Minimal but sufficient API for services
     – Minimal overhead: Good for simple
       bundles
     – No support for component management
     – No support for configuration management
     – Requires sometimes a lot of Java coding
• Additional (optional) OSGi extensions
     – Declarative Service Specification
     – Configuration Admin Service Specification


44
Dynamic Services
• OSGi Declarative Services Spec
  – XML Configuration (in a bundle)
  – Publishing services
  – Consuming services
    • Policy (static,dynamic), cardinality (0..1, 1..1,
      0..n)
  – Default configuration
  – Service Lifecycle management
• Various Implementations
  – Apache Felix SCR
Config Admin and Metatype
• OSGi Config Admin
  –   Configuration Manager
  –   Persistence storage
  –   API to retrieve/update/remove configs
  –   Works with Declarative Services
• OSGi Metatype Service
  – Description of bundle metadata
  – Description of service configurations
• Various Implementations
  – Apache Felix (Reference Implementation)
Apache Felix
• Top-level project (March 2007)
• Healthy and diverse community
• OSGi R4 (R4.2) implementation
  – Framework (frequent releases)
  – Services (continued development)
• Tools
  – Maven Plugins, Web Console, iPojo
• New sub project
    – Karaf : Runtime Environment (OSGi Kernel)
    – Sigil: OSGi tooling
Contributions to Apache Felix
•   Declarative service
•   Config admin
•   Metatype service
•   Preferences service
•   Web console (!)
•   Maven SCR Plugin (!)
Apache Sling Runtime
• Uses Apache Felix
• Runtime: Apache Sling Launchpad
    – Might be merged with Felix Karaf
• Two flavours
    – Standalone Java Application
    – Web application
• But Sling can be deployed in any
   OSGi framework!
Standalone Java Application
• One single executable JAR file
• Small Launcher
• Starts OSGi Framework (Apache
  Felix)
• Uses Jetty in an OSGi Bundle




50
Web Application
• Extends Standalone Application
     – Replaces Main with a Servlet
• Uses a bridge to connect Sling to the
  Servlet Container




51
Facts about Sling
• Sling API
     – No reference to JCR API
     – Uses resource abstraction
• 36 maintained bundles (many optional)
       – Over 25 additional bundles
• Highly modular and runtime configurable
     – OSGi framework
     – Everything is a OSGi bundle
• ConfigAdmin, Declarative Services, Metatype
• Felix Web Console


52
Apache Sling



6 Outlook


53
Current State
• Apache Sling is a top level project
• New convenience Release
     – Frequent releases of various bundles
• Demo Applications
• Increasing interest -> Increasing
  community




54
Development
• Easy to get started
         – Add content, add script, add more
            content
• Very flexible and dynamic
• Tooling
     –   Maven Plugins
     –   Apache Felix SCR Plugin
     –   Additional Sling Plugins
     –   But not tied to Maven of course :)

55
And remember...
• (Nearly) Everything is content
     – Application content
     – HTML pages, CSS and JavaScript files,
       static images
     – Documentation, resource bundles, etc.
     – With versioning, export/import, full text
       search, etc.




56
Manage the Web Challenges...
• Publish huge amount of information
      – Different types
      – Highly dynamic
      – Different output formats
• Web 2.0 ready
      – Collaboration and integration
• Fast changing requirements
      – Rapid prototyping and development
      – Dynamic, extensible but maintainable

 57
with Apache Sling: State of the Art
 • Modularity and dynamics (OSGi)
 • Content Management (JCR)
 • Resource oriented architecture
   (REST)
 • Scripting inside




  58
Apache Sling – The Fun is Back!
•    Web Framework
•    Java Content Repository
•    REST
•    Scripting inside
•    OSGi
•    Apache Open Source project
•    Check it out today!



    59
Apache Sling


     Thanks for your attention!



               Q&A


60

More Related Content

What's hot

Content Storage With Apache Jackrabbit
Content Storage With Apache JackrabbitContent Storage With Apache Jackrabbit
Content Storage With Apache JackrabbitJukka Zitting
 
Type script - advanced usage and practices
Type script  - advanced usage and practicesType script  - advanced usage and practices
Type script - advanced usage and practicesIwan van der Kleijn
 
Angular Best Practices - Perfomatix
Angular Best Practices - PerfomatixAngular Best Practices - Perfomatix
Angular Best Practices - PerfomatixPerfomatix Solutions
 
AEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser CachingAEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser CachingAndrew Khoury
 
Aem dispatcher – tips & tricks
Aem dispatcher – tips & tricksAem dispatcher – tips & tricks
Aem dispatcher – tips & tricksAshokkumar T A
 
Angular directives and pipes
Angular directives and pipesAngular directives and pipes
Angular directives and pipesKnoldus Inc.
 
Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 formsEyal Vardi
 
Integration patterns in AEM 6
Integration patterns in AEM 6Integration patterns in AEM 6
Integration patterns in AEM 6Yuval Ararat
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript ProgrammingSehwan Noh
 
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Christian Schneider
 

What's hot (20)

Content Storage With Apache Jackrabbit
Content Storage With Apache JackrabbitContent Storage With Apache Jackrabbit
Content Storage With Apache Jackrabbit
 
Type script - advanced usage and practices
Type script  - advanced usage and practicesType script  - advanced usage and practices
Type script - advanced usage and practices
 
Angular Best Practices - Perfomatix
Angular Best Practices - PerfomatixAngular Best Practices - Perfomatix
Angular Best Practices - Perfomatix
 
Angular 9
Angular 9 Angular 9
Angular 9
 
django
djangodjango
django
 
AEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser CachingAEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser Caching
 
Aem dispatcher – tips & tricks
Aem dispatcher – tips & tricksAem dispatcher – tips & tricks
Aem dispatcher – tips & tricks
 
Angular directives and pipes
Angular directives and pipesAngular directives and pipes
Angular directives and pipes
 
Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 forms
 
Integration patterns in AEM 6
Integration patterns in AEM 6Integration patterns in AEM 6
Integration patterns in AEM 6
 
AngularJS
AngularJS AngularJS
AngularJS
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript Programming
 
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
Surviving the Java Deserialization Apocalypse // OWASP AppSecEU 2016
 
AtoM Implementations
AtoM ImplementationsAtoM Implementations
AtoM Implementations
 
jQuery
jQueryjQuery
jQuery
 
Ajax Presentation
Ajax PresentationAjax Presentation
Ajax Presentation
 
SQLite database in android
SQLite database in androidSQLite database in android
SQLite database in android
 
Css floats
Css floatsCss floats
Css floats
 
3. Java Script
3. Java Script3. Java Script
3. Java Script
 
Angular
AngularAngular
Angular
 

Viewers also liked

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
 
Lean Microservices with OSGi - Christian Schneider
Lean Microservices with OSGi - Christian SchneiderLean Microservices with OSGi - Christian Schneider
Lean Microservices with OSGi - Christian Schneidermfrancis
 
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchev
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho DelchevWebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchev
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchevmfrancis
 
OSGi for outsiders - Milen Dyankov
OSGi for outsiders - Milen DyankovOSGi for outsiders - Milen Dyankov
OSGi for outsiders - Milen Dyankovmfrancis
 
Distributed Eventing in OSGi - Carsten Ziegeler
Distributed Eventing in OSGi - Carsten ZiegelerDistributed Eventing in OSGi - Carsten Ziegeler
Distributed Eventing in OSGi - Carsten Ziegelermfrancis
 
Programming WebSockets - OSCON 2010
Programming WebSockets - OSCON 2010Programming WebSockets - OSCON 2010
Programming WebSockets - OSCON 2010sullis
 
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...mfrancis
 
OSGi Specification Evolution - BJ Hargrave
OSGi Specification Evolution - BJ HargraveOSGi Specification Evolution - BJ Hargrave
OSGi Specification Evolution - BJ Hargravemfrancis
 
Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGiCarsten Ziegeler
 
OSGi Best Practices - Tim Ward
OSGi Best Practices - Tim WardOSGi Best Practices - Tim Ward
OSGi Best Practices - Tim Wardmfrancis
 
RESTful Web Applications with Apache Sling
RESTful Web Applications with Apache SlingRESTful Web Applications with Apache Sling
RESTful Web Applications with Apache SlingBertrand Delacretaz
 
Distributed Eventing in OSGi
Distributed Eventing in OSGiDistributed Eventing in OSGi
Distributed Eventing in OSGiCarsten Ziegeler
 
OSGi toolchain from the ground up - Matteo Rulli
OSGi toolchain from the ground up - Matteo RulliOSGi toolchain from the ground up - Matteo Rulli
OSGi toolchain from the ground up - Matteo Rullimfrancis
 
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
 
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Yevgeniy Brikman
 

Viewers also liked (17)

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
 
Lean Microservices with OSGi - Christian Schneider
Lean Microservices with OSGi - Christian SchneiderLean Microservices with OSGi - Christian Schneider
Lean Microservices with OSGi - Christian Schneider
 
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchev
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho DelchevWebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchev
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchev
 
OSGi for outsiders - Milen Dyankov
OSGi for outsiders - Milen DyankovOSGi for outsiders - Milen Dyankov
OSGi for outsiders - Milen Dyankov
 
Distributed Eventing in OSGi - Carsten Ziegeler
Distributed Eventing in OSGi - Carsten ZiegelerDistributed Eventing in OSGi - Carsten Ziegeler
Distributed Eventing in OSGi - Carsten Ziegeler
 
Programming WebSockets - OSCON 2010
Programming WebSockets - OSCON 2010Programming WebSockets - OSCON 2010
Programming WebSockets - OSCON 2010
 
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
Getting to the Next Level with Eclipse Concierge - Jan Rellermeyer + Tim Verb...
 
Reactive applications
Reactive applicationsReactive applications
Reactive applications
 
OSGi Specification Evolution - BJ Hargrave
OSGi Specification Evolution - BJ HargraveOSGi Specification Evolution - BJ Hargrave
OSGi Specification Evolution - BJ Hargrave
 
Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGi
 
OSGi Best Practices - Tim Ward
OSGi Best Practices - Tim WardOSGi Best Practices - Tim Ward
OSGi Best Practices - Tim Ward
 
RESTful Web Applications with Apache Sling
RESTful Web Applications with Apache SlingRESTful Web Applications with Apache Sling
RESTful Web Applications with Apache Sling
 
Distributed Eventing in OSGi
Distributed Eventing in OSGiDistributed Eventing in OSGi
Distributed Eventing in OSGi
 
OSGi toolchain from the ground up - Matteo Rulli
OSGi toolchain from the ground up - Matteo RulliOSGi toolchain from the ground up - Matteo Rulli
OSGi toolchain from the ground up - Matteo Rulli
 
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)
 
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
 
The AI Rush
The AI RushThe AI Rush
The AI Rush
 

Similar to OSGi, Scripting and REST, Building Webapps With Apache Sling

JCR - Java Content Repositories
JCR - Java Content RepositoriesJCR - Java Content Repositories
JCR - Java Content RepositoriesCarsten Ziegeler
 
Melbourne User Group OAK and MongoDB
Melbourne User Group OAK and MongoDBMelbourne User Group OAK and MongoDB
Melbourne User Group OAK and MongoDBYuval Ararat
 
Rails - getting started
Rails - getting startedRails - getting started
Rails - getting startedTrue North
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Railsiradarji
 
JCR In Action (ApacheCon US 2009)
JCR In Action (ApacheCon US 2009)JCR In Action (ApacheCon US 2009)
JCR In Action (ApacheCon US 2009)Carsten Ziegeler
 
Spider进化论
Spider进化论Spider进化论
Spider进化论cjhacker
 
Data Science at Scale: Using Apache Spark for Data Science at Bitly
Data Science at Scale: Using Apache Spark for Data Science at BitlyData Science at Scale: Using Apache Spark for Data Science at Bitly
Data Science at Scale: Using Apache Spark for Data Science at BitlySarah Guido
 
Rails 3.1 Asset pipeline
Rails 3.1 Asset pipelineRails 3.1 Asset pipeline
Rails 3.1 Asset pipelinejeremyolliver
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and ActivatorKevin Webber
 
Drupal and Apache Stanbol
Drupal and Apache StanbolDrupal and Apache Stanbol
Drupal and Apache StanbolAlkuvoima
 
Programming the Semantic Web
Programming the Semantic WebProgramming the Semantic Web
Programming the Semantic WebLuigi De Russis
 
Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Florent Guillaume
 
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...Oleksiy Panchenko
 
Introduction to Riak and Ripple (KC.rb)
Introduction to Riak and Ripple (KC.rb)Introduction to Riak and Ripple (KC.rb)
Introduction to Riak and Ripple (KC.rb)Sean Cribbs
 
Open shift enterprise 3.1 paas on kubernetes
Open shift enterprise 3.1   paas on kubernetesOpen shift enterprise 3.1   paas on kubernetes
Open shift enterprise 3.1 paas on kubernetesSamuel Terburg
 
NoSQL, Apache SOLR and Apache Hadoop
NoSQL, Apache SOLR and Apache HadoopNoSQL, Apache SOLR and Apache Hadoop
NoSQL, Apache SOLR and Apache HadoopDmitry Kan
 

Similar to OSGi, Scripting and REST, Building Webapps With Apache Sling (20)

JCR - Java Content Repositories
JCR - Java Content RepositoriesJCR - Java Content Repositories
JCR - Java Content Repositories
 
Melbourne User Group OAK and MongoDB
Melbourne User Group OAK and MongoDBMelbourne User Group OAK and MongoDB
Melbourne User Group OAK and MongoDB
 
Rails - getting started
Rails - getting startedRails - getting started
Rails - getting started
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
JCR In Action (ApacheCon US 2009)
JCR In Action (ApacheCon US 2009)JCR In Action (ApacheCon US 2009)
JCR In Action (ApacheCon US 2009)
 
Spider进化论
Spider进化论Spider进化论
Spider进化论
 
Introduction to CQ5
Introduction to CQ5Introduction to CQ5
Introduction to CQ5
 
Data Science at Scale: Using Apache Spark for Data Science at Bitly
Data Science at Scale: Using Apache Spark for Data Science at BitlyData Science at Scale: Using Apache Spark for Data Science at Bitly
Data Science at Scale: Using Apache Spark for Data Science at Bitly
 
Rails 3.1 Asset pipeline
Rails 3.1 Asset pipelineRails 3.1 Asset pipeline
Rails 3.1 Asset pipeline
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 
RDFauthor (EKAW)
RDFauthor (EKAW)RDFauthor (EKAW)
RDFauthor (EKAW)
 
Drupal and Apache Stanbol
Drupal and Apache StanbolDrupal and Apache Stanbol
Drupal and Apache Stanbol
 
Publishing Linked Data from RDB
Publishing Linked Data from RDBPublishing Linked Data from RDB
Publishing Linked Data from RDB
 
Programming the Semantic Web
Programming the Semantic WebProgramming the Semantic Web
Programming the Semantic Web
 
Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)Eclipse Enterprise Content Repository (ECR)
Eclipse Enterprise Content Repository (ECR)
 
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...
Elasticsearch, Logstash, Kibana. Cool search, analytics, data mining and more...
 
Apache Spark in Industry
Apache Spark in IndustryApache Spark in Industry
Apache Spark in Industry
 
Introduction to Riak and Ripple (KC.rb)
Introduction to Riak and Ripple (KC.rb)Introduction to Riak and Ripple (KC.rb)
Introduction to Riak and Ripple (KC.rb)
 
Open shift enterprise 3.1 paas on kubernetes
Open shift enterprise 3.1   paas on kubernetesOpen shift enterprise 3.1   paas on kubernetes
Open shift enterprise 3.1 paas on kubernetes
 
NoSQL, Apache SOLR and Apache Hadoop
NoSQL, Apache SOLR and Apache HadoopNoSQL, Apache SOLR and Apache Hadoop
NoSQL, Apache SOLR and Apache Hadoop
 

More from 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
 
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 (13)

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

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Recently uploaded (20)

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

OSGi, Scripting and REST, Building Webapps With Apache Sling

  • 1. Carsten Ziegeler | Day Management AG OSGi, Scripting, REST Webapps with Apache Sling cziegeler@apache.org
  • 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. Agenda – Apache Sling 1 Motivation 2 Content and JCR 3 Web and REST 4 Scripting 5 OSGi 6 Outlook 3
  • 5. Web Challenges • Publish huge amount of information – Different types – Highly dynamic – Different output formats • Web 2.0 ready – Collaboration and integration • Fast changing requirements – Rapid prototyping and development – Dynamic, extensible but maintainable 5
  • 6. Web Challenges • Publish huge amount of information – Different types JCR – Highly dynamic – Different output formats REST ROA • Web 2.0 ready – Collaboration and integration • Fast changing requirements Scripting – Rapid prototyping and development – Dynamic, extensible but maintainable OSGi 6
  • 7. Apache Sling – The Fun Is Back • Web framework th 5 Winner JAX Innovation Award 2008 • Java content repository (JCR) • ROA / REST • Scripting inside • OSGi • Apache Open Source top level project – http://sling.apache.org • Driving force behind several OSGi related projects at Apache 7
  • 10. Content Is Important • Apache Sling makes handling content easy • Java content repository (JCR) – Several different sources possible • Direct mapping: URL -> content – Configurable – http://myserver.domain/products/sling .html • Flexible rendering 10
  • 11. Content Repository I • Features of an RDBMS – Structure, integrity – Query, transactions • Features of a filesystem – Hierarchy, binaries – Locking, access control • All the other good stuff – Observation, versioning – Unstructured – Multi values, sort order, full text • Single repository for all content! 11
  • 12. JCR – JSR 170, JSR 283 • Content Repository for Java technology API • (Java) Standard – 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? JSR 283 – Version 2.0 – Final since September 09 12
  • 13. Sample Application: Slingshot • Digital Asset Management – Hierarchical storage of pictures – Upload – Tagging Poor man's flickr... – Searching – Automatic thumbnail generation 13 13
  • 14. Slingshot Content Structure Travel Family Europe Weddings Amsterdam Basel 2008 2007 City Photo Photo Photo Photo 14
  • 15. Content Repository II • Hierarchical content – Nodes and properties • Structured – Nodetypes and typed properties • And/or unstructured • Fine and coarse-grained • Single repository for all content! 15
  • 16. 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! 16
  • 17. Nodes and Properties Root Travel Family Europe “Images from Europe“ Weddings Amsterdam Basel 2008 2007 City Photo Photo Photo Photo „Once upon a time..“ Properties Implementation of JCR 17
  • 18. Apache Jackrabbit • JSR 170, JSR 283 reference implementation • Apache TLP since 2006 • Several releases • JCR 2.0 implementation end of 2009 • Additional components 18
  • 19. Leverage the standard node types • Type hierarchy • Content hierarchy nt:hierarchyNode nt:folder nt:file nt:linkedFile nt:unstructured 19
  • 20. Bottom-up modeling: Node types slingshot:album > nt:folder slingshot:tag - slingshot:description (string) - slingshot:description (string) - slingshot:date (date) slingshot:photo > nt:file - slingshot:description (string) - slingshot:location (string) - slingshot:tags (string[]) 20
  • 21. Top-down modeling: Hierarchy Travel Family Europe Weddings Amsterdam Basel 2008 2007 City Photo Photo Photo Photo 21
  • 22. Apache Sling 3 ROA and REST 22
  • 23. Resource Oriented Architecutre • Piece of information is a resource – News entry, product, photo... – (Descriptive) URI • Stateless – Request contains all relevant information • Use HTTP – Methods (GET, POST) for operations 23
  • 24. REST with Apache Sling • Default behaviour for GET • Creating/Updating content through POST – Default behaviour • Additional operations/method • Resource-first request processing! 24
  • 25. Resource • Sling's abstraction of the thing addressed by the request URI – Usually mapped to a JCR node – File system, database... • Properties of resources – Path, e.g. JCR Item path – Type, e.g. JCR node type – Metadata, e.g. last modification date 25
  • 26. Resource-first Request Processing • URI Decomposition – Resource and representation • /slingshout/albums/travel.print.a4.html Resource Path Selectors Extension • Content retrieved from repository • Rendering based on content type 26
  • 27. Basic Request Processing Steps • URI decomposition • Resolve the resource (using URI) • Resolve rendering script – Source: resource type – Scripts wrapped by generic servlet • Create rendering chain – Configurable (servlet) filters – Rendering servlet • Invoke rendering chain 27
  • 28. Resource Resolver I • Tasks: – Finding Resources – Getting Resources – Simplification of Query Execution 28
  • 29. Resource Resolver II • Gateway for resources • Abstracts the path resolution • Abstracts access to the persistence layer(s) • Configurable – Mappings (Multi-site mgmt, beautify paths) 29
  • 30. Resource-First Request Processing request Resource Resolver Resource (resource type) Script Resolver Script response 30
  • 32. Scripting Inside • It's your choice – JSP, servlet, ESP, Scala – javax.script (Apache BSF) – own script handlers • Scripts stored in OSGi bundles or repository • Scripts are searched at configurable locatiosn • Default servlets (or scripts) – JSON, XML – Registerable – Fallback / Last Ressort 32
  • 33. Script Resolving I • Path to script is built from ... – Configured search paths ( /apps, /libs ) – Resource type converted to path ( slingshot/Album ) – Selector string ( print/a4) – Request method & extension • GET --> Request URL Extension ( html ) • else --> Method Name ( POST, PUT, ... ) 33
  • 34. Script Resolving Example • URI: /slingshot/albums/travel.print.a4.html • Resource: /slingshot/albums/travel • Resource Type: slingshot:Album • Script for GET: – /apps/slingshot/Album/print/a4/html.* • Script for POST: – /libs/slingshot/Album/print/a4/POST.* 34
  • 35. Script Resolving II • Scripts are searched by best matching – /apps/slingshot/Album/print/a4/html.* – /libs/slingshot/Album/print/a4/html.* – /apps/slingshot/Album/html.* – /libs/slingshot/Album/html.* • Resource has a type and a super type – Script inheritance – Default script (JSON...) 35
  • 36. Powerful Scripting with Includes I Request: /slingshot/albums/travel.html Resource Resolver Resource, resource type: slingshot:Album Script Resolver Script: /libs/slingshot/Album/html.jsp Script Generates main html sling:include with selectors response 36
  • 37. Powerful Scripting with Includes II Request: /slingshot/albums/travel.html Script (/libs/slingshot/Album/html.jsp) for(current : ChildResources) <sling:include resource="<%= current %>" addSelectors="main"/> … Script Resolver Script: /libs/slingshot/Photo/tree.html.jsp Script response 37
  • 38. Resource-first Request Processing • ROA • URI decomposition • Resource resolving • Script resolving – Recursion • Flexible script search algorithm 38
  • 40. Runtime Framework: Requirements • Modularization – Modularity is key – Manage growing complexity – Support (dynamic) extensibility • Lifecycle management • Configuration management • Dependency management – Modules, services – Different distributions • Dynamic System Changes 40
  • 41. OSGi in 5..ehm..1 Minute • Specification of a framework • Module concept (bundles) with lifecycle • Simple but powerful component model – Lifecycle management – Publish/Find/Bind service registration • Dynamic! • Uses the concept of bundles 41
  • 42. An OSGi Bundle • Leverages the Java packaging mechanism: JAR files • Contains Java classes and resources • Additional meta-data – Implicit dependencies to other bundles – Package imports/exports 42
  • 43. Services • OSGi offers an API to register services – Service is registered by its interface name(s) – Implementation is bundle private – Several components for same service possible (from different bundles) • Bundles can query services – By interface names – With additional filters 43
  • 44. The OSGi Core • Minimal but sufficient API for services – Minimal overhead: Good for simple bundles – No support for component management – No support for configuration management – Requires sometimes a lot of Java coding • Additional (optional) OSGi extensions – Declarative Service Specification – Configuration Admin Service Specification 44
  • 45. Dynamic Services • OSGi Declarative Services Spec – XML Configuration (in a bundle) – Publishing services – Consuming services • Policy (static,dynamic), cardinality (0..1, 1..1, 0..n) – Default configuration – Service Lifecycle management • Various Implementations – Apache Felix SCR
  • 46. Config Admin and Metatype • OSGi Config Admin – Configuration Manager – Persistence storage – API to retrieve/update/remove configs – Works with Declarative Services • OSGi Metatype Service – Description of bundle metadata – Description of service configurations • Various Implementations – Apache Felix (Reference Implementation)
  • 47. Apache Felix • Top-level project (March 2007) • Healthy and diverse community • OSGi R4 (R4.2) implementation – Framework (frequent releases) – Services (continued development) • Tools – Maven Plugins, Web Console, iPojo • New sub project – Karaf : Runtime Environment (OSGi Kernel) – Sigil: OSGi tooling
  • 48. Contributions to Apache Felix • Declarative service • Config admin • Metatype service • Preferences service • Web console (!) • Maven SCR Plugin (!)
  • 49. Apache Sling Runtime • Uses Apache Felix • Runtime: Apache Sling Launchpad – Might be merged with Felix Karaf • Two flavours – Standalone Java Application – Web application • But Sling can be deployed in any OSGi framework!
  • 50. Standalone Java Application • One single executable JAR file • Small Launcher • Starts OSGi Framework (Apache Felix) • Uses Jetty in an OSGi Bundle 50
  • 51. Web Application • Extends Standalone Application – Replaces Main with a Servlet • Uses a bridge to connect Sling to the Servlet Container 51
  • 52. Facts about Sling • Sling API – No reference to JCR API – Uses resource abstraction • 36 maintained bundles (many optional) – Over 25 additional bundles • Highly modular and runtime configurable – OSGi framework – Everything is a OSGi bundle • ConfigAdmin, Declarative Services, Metatype • Felix Web Console 52
  • 54. Current State • Apache Sling is a top level project • New convenience Release – Frequent releases of various bundles • Demo Applications • Increasing interest -> Increasing community 54
  • 55. Development • Easy to get started – Add content, add script, add more content • Very flexible and dynamic • Tooling – Maven Plugins – Apache Felix SCR Plugin – Additional Sling Plugins – But not tied to Maven of course :) 55
  • 56. And remember... • (Nearly) Everything is content – Application content – HTML pages, CSS and JavaScript files, static images – Documentation, resource bundles, etc. – With versioning, export/import, full text search, etc. 56
  • 57. Manage the Web Challenges... • Publish huge amount of information – Different types – Highly dynamic – Different output formats • Web 2.0 ready – Collaboration and integration • Fast changing requirements – Rapid prototyping and development – Dynamic, extensible but maintainable 57
  • 58. with Apache Sling: State of the Art • Modularity and dynamics (OSGi) • Content Management (JCR) • Resource oriented architecture (REST) • Scripting inside 58
  • 59. Apache Sling – The Fun is Back! • Web Framework • Java Content Repository • REST • Scripting inside • OSGi • Apache Open Source project • Check it out today! 59
  • 60. Apache Sling Thanks for your attention! Q&A 60