OSGi, Scripting and REST, Building Webapps With Apache Sling

7,267 views

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
7,267
On SlideShare
0
From Embeds
0
Number of Embeds
1,197
Actions
Shares
0
Downloads
207
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

×