Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Apache Sling : JCR, OSGi, Scripting and REST

17,768 views

Published on

Published in: Technology, Education

Apache Sling : JCR, OSGi, Scripting and REST

  1. 1. OSGi, Scripting & REST Web Development with Apache Sling Carsten Ziegeler | Day Software cziegeler@apache.org
  2. 2. 2 About Carsten Ziegeler • Member of the Apache Software Foundation – Sling, Felix, Cocoon, Portals, Sanselan, Excalibur, Incubator – PMC: Felix, Portals, Cocoon, Incubator, Excalibur (Chair) • RnD Team at Day Software • Article/Book Author, Technical Reviewer, Speaker • JSR 286 Spec Group (Portlet API 2.0) 2
  3. 3. 3 Agenda – Apache Sling 1 Motivation 2 Content and JCR 3 Web and REST 4 Scripting 5 OSGi 6 Outlook 3
  4. 4. 4 1 Motivation 4
  5. 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. 6 Web Challenges • Publish huge amount of information JCR – Different types – Highly dynamic – Different output formats REST ROA • Web 2.0 ready – Collaboration and integration Scripting • Fast changing requirements – Rapid prototyping and development – Dynamic, extensible but maintainable OSGi 6
  7. 7. 7 Apache Sling – The Fun is Back 5th Winner JAX Innovation Award 2008 • Web framework • Java content repository (JCR) • ROA / REST • Scripting inside • OSGi • Apache Open Source project – http://incubator.apache.org/sling 7
  8. 8. 8 Example: Apache Sling Powered Site
  9. 9. 9 2 Content/JCR 9
  10. 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. 11 Content Repository • Generic application data store • Structured and unstructured content • Support small and large-scale data • Locking, transactions, versioning, observation and searching 11
  12. 12. 12 JCR – JSR 170 • 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 – scheduled for 2009 12
  13. 13. 13 Sample Application • Digital Asset Management Poor man's flickr... – Hierarchical storage of pictures – Upload – Tagging – Searching – Automatic thumbnail generation 13
  14. 14. 14 Content Repository Features • Hierarchical content – Nodes and properties • Structured – Nodetypes and typed properties • And/or unstructured • Fine and coarse-grained 14
  15. 15. 15 Sample Content Structure Travel Family Europe Weddings Amsterdam Basel 2008 City Photo Photo 2007 Photo Photo 15
  16. 16. 16 Content Repository Features Query (XPath, SQL) • Export/Import (XML) • Referential Integrity • Authentication • Access Control • Versioning • Observation • Locking and Transactions (JTA) • 16
  17. 17. 17 Comparison • File System – Hierarchical, unstructured • Database – Structured – Referential integrity, transactions • Content Repository – Advantages of a FS and a database – Plus observation, versioning etc. 17
  18. 18. 18 Content Repository )JCR – JSR 170( 18
  19. 19. 19 The Repository Model • Repository: one (or more) workspaces • Workspace contains a tree of items • Item: Node or property • Nodes provide the content structure – May have children • Actual data is stored as values of properties • Types and namespaces! Implementation of JCR 19
  20. 20. 20 Nodes and Properties W o r k s p a c e AC Root = Node o n t e n t R e p o s it o r y = Property a c b g d h e „Once upon -25 a time..“ i j k 6.02x1023 true Implementation of JCR 20
  21. 21. 21 Apache Jackrabbit • JSR 170 reference implementation • Apache TLP since 2006 • Several releases • JCR 2.0 RI later this year • Additional components
  22. 22. 22 Leverage the standard node types • Type hierarchy • Content hierarchy nt:hierarchyNode nt:folder nt:file nt:linkedFile nt:resource 22
  23. 23. 23 Modeling: Content Types my:album > nt:folder my:tag - description (string) - name (string) - date (date) - description (string) my:photo > nt:file - description (string) - location (string) - tags (string[]) my:resource > nt:resource - width, height (long) - format (string) 23
  24. 24. 24 Modeling: Content Hierarchies Travel Family Europe Weddings Amsterdam Basel 2008 City Photo Photo 2007 Photo Photo 24
  25. 25. 25 3 ROA and REST 25
  26. 26. 26 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 26
  27. 27. 27 REST with Apache Sling • Default behaviour for GET • Creating/Updating content through POST – Default behaviour • Additional operations/method • Resource-first request processing! 27
  28. 28. 28 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 28
  29. 29. 29 Resource- rst Request Processing fi • URI Decomposition • /products/sling.print.a4.html • Resource Path Selectors Extension – Resource and representation • Content retrieved from repository • Rendering based on content type 29
  30. 30. 30 Basic Request Processing Steps • URI decomposition • Resolve the resource – Source: request URI • Resolve rendering script – Source: resource type – Scripts are wrapped by a generic script servlet • Create rendering chain – Configurable (servlet) filters – Rendering servlet 30 • Invoke rendering chain
  31. 31. 31 Resource Resolver • Gateway for resources • Abstracts the path resolution • Abstracts access to the persistence layer(s) • Configurable – Mappings (Multi-site mgmt, beautify paths) • Tasks: – Finding Resources – Getting Resources – Simplification of Query Execution 31
  32. 32. 32 Resource-First Request Processing request Resource Resolver Resource (resource type) Script Resolver Script response 32
  33. 33. 33 4 Scripting 33
  34. 34. 34 Scripting Inside • It's your choice – JSP, servlet, ESP – 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 34
  35. 35. 35 Script Resolving I • Path to script is built from ... – Configured search paths ( /apps, /libs ) – Resource type converted to path ( my/photo ) – Selector string ( print/a4) – Request method & MIME Type • GET --> Request URL Extension ( html ) • else --> Method Name ( POST, PUT, ... ) 35
  36. 36. 36 Script Resolving Example • URI: /products/sling.print.a4.html • Resource: /products/sling • Resource Type: myapp:product • Script for GET: – /apps/myapp/product/print/a4/html.* • Script for POST: – /libs/myapp/product/print/a4/POST.* 36
  37. 37. 37 Script Resolving II • Scripts are searched by best matching – /apps/myapp/product/print/a4/html.* – /libs/myapp/product/print/a4/html.* – /apps/myapp/product/html.* – /libs/myapp/product/html.* • Resource has a type and a super type – Script inheritance – Default script (JSON...) 37
  38. 38. 38 Powerful Scripting with Includes I Request: /albums/travel.html Resource Resolver Resource, resource type: my:Album Script Resolver Script: /libs/my/Album/html.jsp Script Generates main html sling:include with selectors response 38
  39. 39. 39 Powerful Scripting with Includes II Request: /albums/travel.html Script (/libs/my/Album/html.jsp) <sling:include resource=quot;<%= current %>quot; addSelectors=quot;treequot;/> … Script Resolver Script: /libs/my/Album/tree.html.jsp Script response
  40. 40. 40 5 OSGi 40
  41. 41. 41 Runtime Framework: Requirements • Modularization – Modularity is key – Manage growing complexity – Support dynamic extensibility • Lifecycle Management • Configuration Management • Dependency Management – Modules – Services • Dynamic System Changes 41
  42. 42. 42 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 42
  43. 43. 43 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 43
  44. 44. 44 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 44
  45. 45. 45 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 45
  46. 46. Dynamic Services • OSGi Declarative Services Specification – XML Configuration • Contained in 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
  47. 47. Confi g 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 47
  48. 48. Apache Felix • Top-level project (March 2007) • Healthy and diverse community • OSGi R4 (R4.1) implementation – Framework (frequent releases) – Services (continued development) – Moving towards upcoming R4.2 • Tools – Maven Plugins, Web Console, iPojo • New sub project – Karaf : Runtime Environment (Service Mix) 48
  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! 49
  50. 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. 51 Web Application • Extends Standalone Application – Replaces Command Line Support with a Servlet • Uses a Bridge to connect Sling to the Servlet Container 51
  52. 52. 52 Facts about Sling • Sling API – No reference to JCR API – Uses resource abstraction • Highly modular and runtime configurable – OSGi framework – Everything is a OSGi bundle • ConfigAdmin, Declarative Services, Metatype • Felix Web Console 52
  53. 53. 53 Modules Sling API jcr/api sling/core sling/event jcr/resource sling/servlet-resolver sling/scheduler jcr/jackrabbit sling/servlets-* sling/threads scripting/api sling/adapter sling/bundleresource scripting/* sling/i18n commons/* Maven 2 Plugins osgi/* 53
  54. 54. 54 6 Outlook 54
  55. 55. 55 Current State • Apache Sling is in the Apache Incubator • Second Release: RSN! :) • Demo Applications • Increasing interest -> Increasing community • Graduating from the incubator to a TLP – sling.apache.org 55
  56. 56. 56 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 :) 56
  57. 57. 57 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. 57
  58. 58. 58 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 58
  59. 59. 59 ...with Apache Sling: State of the Art • Modularity and dynamics (OSGi) • Content Management (JCR) • Resource oriented architecture (REST) • Scripting inside 59
  60. 60. 60 Apache Sling – The Fun is Back! • Web Framework • Java Content Repository • REST • Scripting inside • OSGi • Apache Open Source project • Check it out today! 60
  61. 61. 61 Thanks for your attention! Q&A

×