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

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 ofthe 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 – ApacheSling 1 Motivation 2 Content and JCR 3 Web and REST 4 Scripting 5 OSGi 6 Outlook 3
  • 4.
  • 5.
    Web Challenges • Publishhuge 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 • Publishhuge 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
  • 8.
  • 9.
  • 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 – JSR170, 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 • JSR170, JSR 283 reference implementation • Apache TLP since 2006 • Several releases • JCR 2.0 implementation end of 2009 • Additional components 18
  • 19.
    Leverage the standardnode types • Type hierarchy • Content hierarchy nt:hierarchyNode nt:folder nt:file nt:linkedFile nt:unstructured 19
  • 20.
    Bottom-up modeling: Nodetypes 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 ROAand 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 ApacheSling • Default behaviour for GET • Creating/Updating content through POST – Default behaviour • Additional operations/method • Resource-first request processing! 24
  • 25.
    Resource • Sling's abstractionof 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 ProcessingSteps • 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
  • 31.
  • 32.
    Scripting Inside • It'syour 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 withIncludes 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 withIncludes 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
  • 39.
  • 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..1Minute • 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 offersan 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 • OSGiDeclarative 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 andMetatype • 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-levelproject (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 ApacheFelix • 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 • ExtendsStandalone 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
  • 53.
  • 54.
    Current State • ApacheSling is a top level project • New convenience Release – Frequent releases of various bundles • Demo Applications • Increasing interest -> Increasing community 54
  • 55.
    Development • Easy toget 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 WebChallenges... • 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