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