0
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, P...
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 f...
Web Challenges
• Publish huge amount of information
     – Different types                   JCR

     – Highly dynamic
  ...
Apache Sling – The Fun Is Back
•   Web framework             th
                       5 Winner JAX Innovation Award 2008
...
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...
Content Repository I
• Features of an RDBMS
     – Structure, integrity
     – Query, transactions
• Features of a filesys...
JCR – JSR 170, JSR 283
• Content Repository for Java
  technology API
• (Java) Standard
     – Supported by many vendors
 ...
Sample Application: Slingshot
• Digital Asset Management
     –   Hierarchical storage of pictures
     –   Upload
     – ...
Slingshot Content Structure


                      Travel              Family


                 Europe                  ...
Content Repository II
• Hierarchical content
     – Nodes and properties
• Structured
     – Nodetypes and typed propertie...
The Repository Model
•    Repository: one (or more) workspaces
•    Workspace contains a tree of items
•    Item: Node or ...
Nodes and Properties
                                                 Root


                         Travel              ...
Apache Jackrabbit
• JSR 170, JSR 283 reference
    implementation
• Apache TLP since 2006
• Several releases
• JCR 2.0 imp...
Leverage the standard node types
      • Type hierarchy             • Content
                                     hierarc...
Bottom-up modeling: Node types
slingshot:album > nt:folder        slingshot:tag
- slingshot:description (string)   - sling...
Top-down modeling: Hierarchy


                      Travel              Family


                 Europe                 ...
Apache Sling



3 ROA and REST


22
Resource Oriented Architecutre
• Piece of information is a resource
     – News entry, product, photo...
     – (Descripti...
REST with Apache Sling
• Default behaviour for GET
• Creating/Updating content through
  POST
     – Default behaviour
• A...
Resource
• Sling's abstraction of the thing
  addressed by the request URI
       – Usually mapped to a JCR node
       – ...
Resource-first Request Processing
• URI Decomposition
         – Resource and representation
•        /slingshout/albums/t...
Basic Request Processing Steps
• URI decomposition
• Resolve the resource (using URI)
• Resolve rendering script
     – So...
Resource Resolver I
• Tasks:
     – Finding Resources
     – Getting Resources
     – Simplification of Query Execution


...
Resource Resolver II
• Gateway for resources
• Abstracts the path resolution
• Abstracts access to the persistence
  layer...
Resource-First Request Processing

 request
             Resource Resolver

                     Resource (resource type)
...
Apache Sling



4 Scripting


31
Scripting Inside
• It's your choice
     – JSP, servlet, ESP, Scala
     – javax.script (Apache BSF)
     – own script han...
Script Resolving I
• Path to script is built from ...
     – Configured search paths ( /apps, /libs )
     – Resource type...
Script Resolving Example
• URI:
  /slingshot/albums/travel.print.a4.html
• Resource: /slingshot/albums/travel
• Resource T...
Script Resolving II
• Scripts are searched by best matching
     –   /apps/slingshot/Album/print/a4/html.*
     –   /libs/...
Powerful Scripting with Includes I
 Request: /slingshot/albums/travel.html


             Resource Resolver

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

            Script (/libs/slingshot/Album/h...
Resource-first Request Processing
•    ROA
•    URI decomposition
•    Resource resolving
•    Script resolving
         –...
Apache Sling



5 OSGi


39
Runtime Framework: Requirements
• Modularization – Modularity is key
        – Manage growing complexity
        – Support...
OSGi in 5..ehm..1 Minute

• Specification of a framework
• Module concept (bundles) with lifecycle
• Simple but powerful c...
An OSGi Bundle
• Leverages the Java packaging
  mechanism: JAR files
• Contains Java classes and resources
• Additional me...
Services
• OSGi offers an API to register services
     – Service is registered by its interface
       name(s)
     – Imp...
The OSGi Core
• Minimal but sufficient API for services
     – Minimal overhead: Good for simple
       bundles
     – No ...
Dynamic Services
• OSGi Declarative Services Spec
  – XML Configuration (in a bundle)
  – Publishing services
  – Consumin...
Config Admin and Metatype
• OSGi Config Admin
  –   Configuration Manager
  –   Persistence storage
  –   API to retrieve/...
Apache Felix
• Top-level project (March 2007)
• Healthy and diverse community
• OSGi R4 (R4.2) implementation
  – Framewor...
Contributions to Apache Felix
•   Declarative service
•   Config admin
•   Metatype service
•   Preferences service
•   We...
Apache Sling Runtime
• Uses Apache Felix
• Runtime: Apache Sling Launchpad
    – Might be merged with Felix Karaf
• Two fl...
Standalone Java Application
• One single executable JAR file
• Small Launcher
• Starts OSGi Framework (Apache
  Felix)
• U...
Web Application
• Extends Standalone Application
     – Replaces Main with a Servlet
• Uses a bridge to connect Sling to t...
Facts about Sling
• Sling API
     – No reference to JCR API
     – Uses resource abstraction
• 36 maintained bundles (man...
Apache Sling



6 Outlook


53
Current State
• Apache Sling is a top level project
• New convenience Release
     – Frequent releases of various bundles
...
Development
• Easy to get started
         – Add content, add script, add more
            content
• Very flexible and dyn...
And remember...
• (Nearly) Everything is content
     – Application content
     – HTML pages, CSS and JavaScript files,
 ...
Manage the Web Challenges...
• Publish huge amount of information
      – Different types
      – Highly dynamic
      – D...
with Apache Sling: State of the Art
 • Modularity and dynamics (OSGi)
 • Content Management (JCR)
 • Resource oriented arc...
Apache Sling – The Fun is Back!
•    Web Framework
•    Java Content Repository
•    REST
•    Scripting inside
•    OSGi
...
Apache Sling


     Thanks for your attention!



               Q&A


60
Upcoming SlideShare
Loading in...5
×

OSGi, Scripting and REST, Building Webapps With Apache Sling

6,653

Published on

My Apache Sling presentation from the WJAX 2009 in Munich

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,653
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
195
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "OSGi, Scripting and REST, Building Webapps With Apache Sling"

  1. 1. Carsten Ziegeler | Day Management AG OSGi, Scripting, REST Webapps with Apache Sling cziegeler@apache.org
  2. 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. 3. Agenda – Apache Sling 1 Motivation 2 Content and JCR 3 Web and REST 4 Scripting 5 OSGi 6 Outlook 3
  4. 4. Apache Sling 1 Motivation 4
  5. 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. 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. 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. 8. Apache Sling Powered Site 8
  9. 9. Apache Sling 2 Content/JCR 9
  10. 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. 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. 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. 13. Sample Application: Slingshot • Digital Asset Management – Hierarchical storage of pictures – Upload – Tagging Poor man's flickr... – Searching – Automatic thumbnail generation 13 13
  14. 14. Slingshot Content Structure Travel Family Europe Weddings Amsterdam Basel 2008 2007 City Photo Photo Photo Photo 14
  15. 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. 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. 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. 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. 19. Leverage the standard node types • Type hierarchy • Content hierarchy nt:hierarchyNode nt:folder nt:file nt:linkedFile nt:unstructured 19
  20. 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. 21. Top-down modeling: Hierarchy Travel Family Europe Weddings Amsterdam Basel 2008 2007 City Photo Photo Photo Photo 21
  22. 22. Apache Sling 3 ROA and REST 22
  23. 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. 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. 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. 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. 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. 28. Resource Resolver I • Tasks: – Finding Resources – Getting Resources – Simplification of Query Execution 28
  29. 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. 30. Resource-First Request Processing request Resource Resolver Resource (resource type) Script Resolver Script response 30
  31. 31. Apache Sling 4 Scripting 31
  32. 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. 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. 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. 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. 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. 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. 38. Resource-first Request Processing • ROA • URI decomposition • Resource resolving • Script resolving – Recursion • Flexible script search algorithm 38
  39. 39. Apache Sling 5 OSGi 39
  40. 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. 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. 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. 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. 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. 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. 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. 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. 48. Contributions to Apache Felix • Declarative service • Config admin • Metatype service • Preferences service • Web console (!) • Maven SCR Plugin (!)
  49. 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. 50. Standalone Java Application • One single executable JAR file • Small Launcher • Starts OSGi Framework (Apache Felix) • Uses Jetty in an OSGi Bundle 50
  51. 51. Web Application • Extends Standalone Application – Replaces Main with a Servlet • Uses a bridge to connect Sling to the Servlet Container 51
  52. 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. 53. Apache Sling 6 Outlook 53
  54. 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. 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. 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. 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. 58. with Apache Sling: State of the Art • Modularity and dynamics (OSGi) • Content Management (JCR) • Resource oriented architecture (REST) • Scripting inside 58
  59. 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. 60. Apache Sling Thanks for your attention! Q&A 60
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×