
Server-side OSGi with
Apache Sling
Felix Meschberger
Day Management AG
124
2

About Felix Meschberger
> Senior Developer, Day Management AG
> fmeschbe@day.com
> http://blog.meschberger.ch
> VP Apache Sling
> Apache Felix
> Apache Jackrabbit
3

Agenda
> Apache Sling
> Why OSGi ?
> What parts of OSGi ?
> Advantages and Problems
> Demo
4

Apache Sling
> REST based web framework
> Content-driven (JCR, JSR-170/283)
> Powered by OSGi
> Scripting inside (Java Scripting, JSR-223)
> Apache Open Source Projekt (http://sling.apache.org)
5

Sling Architecture
OSGi Framework
Felix
Web Console
WebDAV
Server
browserfilesystemdebuggerHTTP
JSR-170/283 API
JCR
repository
resource
resolution
servlet
resolution
standard
servlets
custom
servlets
JSR223
Scripting
JSP
javascript
etc.
6

Sling URL Decomposition
/content/cars/audi/s4.details.html
7

Sling is RESTful
> URLs map to Resources
– Items in the JCR Repository
– Files in the Filesystem
– Content of Bundles
> HTTP Methods map to Script Names
– e.g. cars/POST.jsp
– GET for reading only
– Dilution: POST allowed for any changes (Create, Update, Delete)
> Content Negotiation
– Request URL extension
– Accept request header currently ignored
8

Sling is Object Oriented Web
> Resources are the Object
> Resources maintained in Resource Tree
> Resources accessed by path in the Resource Tree
> Request Method, Extension and Selectors define „Method“ to call
> Resources are typed:
– Resource Type
– Resource Super Type
– „Root Type“: sling/servlet/default
9

Functionality Out-Of-the-Box
> Default Implementations for GET
– Plain Text
– JSON
– XML
> Default Implementation for POST
– Create, Update, Modify content
– Extensible
10

Sling in Action
> Day Communiqué 5 (http://www.day.com/cq5)
> Sakai 3 (http://www.sakaiproject.org)
> Tuberculosis Project
> Idium Web (http://www.idium.no/no/idium_web)
http://cwiki.apache.org/SLING/who-is-using-sling-.html
11

Agenda
> Apache Sling
> Why OSGi ?
> What parts of OSGi ?
> Advantages and Problems
> Demo
12

Requirements for Sling
> Modular and Extensible System
> Declared Dependencies
> Intermodule Communication
> Lightweight Framework
13

Variants
> Do It Yourself
– Well, don't we have other problems to solve ? ;-)
> Spring (before Spring DM)
– First Favourite due to declarative nature
– Systems not really dynamic
– Static application descriptor
> OSGi
– Perfect match to all requirements
14

Agenda
> Apache Sling
> Why OSGi ?
> What parts of OSGi ?
> Advantages and Problems
> Demo
15

OSGi Elements Used
> Framework
> Configuration Admin Service
> Meta Type Service
> Declarative Services
> Event Admin Service
> Log Service
> HTTP Service
16

Launching Sling
> Standalone or Web Application
> Small Footprint Launcher (~30K)
> Framework in its own ClassLoader
> Restart of Framework
> Update of Framework
> Application is Container Agnostic
– Interaction only within the OSGi Framework
– Http Service implementation is the key
17

Configuration Admin Service
> Provides an API to manage Configurations
> Provides functionality to pass configuration to consumers
> Hides persistance problems
> Uses in Sling
– Web Console configuraition editor
– JCR Install updates through repository
18

Metatype Service
> Descriptor to generate GUI for Configuration Management
> Use in Sling
– Descriptor generated by Maven SCR Plugin
– Configuration Admin GUI in Web Console supports Metatype Service
descriptors
19

Declarative Services
> Replace boiler-plate code by descriptors
– Service Registration
– Configuration support
– Service Access
> Dependency Injection
> One of many OSGi Core Extensions:
– Apache Felix Dependency Manager (Predecessor)
– Apache Felix iPOJO (Successor)
– Blueprint (OSGi Compendium Specification R 4.2)
– Peaberry
20

Event Admin Service
> Whiteboard Pattern oriented eventing
> Support for synchronous and asynchronous events
> Uses in Sling
– Base Mechnism to implement Job Scheduling
– Extended to allow for event distribution in Cluster
21

Log Service
> Sling's own implementation
> Based on SLF4J API
> Provides
– OSGi LogService
– SLF4J Logging
– Commons Logging
– Log4F Logging
> Dynamically Configurable (by Configuration Admin Service)
> Log Levels and Log Format per Logger
> Multiple Log Files with size and time rotation
22

Http Service
> Registering Servlets (and Resources) dynamically
> Real Implementation
– Includes Servlet Container
> Bridged Implementation
– Used for Web Application Launcher
– Bridges Servlet Container to OSGi
> Implementation transparent to registered Servlets
23

Extensions
> Apache Felix Web Console
– Extensible Web Based Management
– Jquery UI Based (as of Version 3.0)
> Maven SCR Plugin
– Generates
 Declarative Services Descriptors
 Metatype Service Descriptors
– Supports
 JavaDoc Tags (@scr.component, etc.)
 Java 5 Annotations (@Component, etc.)
> JCR Install
– Deploy Bundles via JCR Repository
– Deploy Configuration Admin configurations via JCR Repository
24

Agenda
> Apache Sling
> Why OSGi ?
> What parts of OSGi ?
> Advantages and Problems
> Demo
25

Advantages
> Declared Dependencies
> Better Isolution through explicit exports and private classes
> Classloader Isolation
> Extensibility built-in, not built-atop
> Dynamism
26

Problems
> Steep Learning Curve
– OSGi Specifications Themselves
– Modularization vs. Monolithic
> Uptime vs. Startup Time
> Legacy Specs und ClassLoader
– JDBC, XML, etc.
> Scripting und ClassLoader
– BundleClassLoaderProxy approach
> Application Packaging
– CRX Content Packages (Day proprietary)
– Karaf features (Sling provides feature.xml)
27

Agenda
> Apache Sling
> Why OSGi ?
> What parts of OSGi ?
> Advantages and Problems
> Demo
29

Links
> Apache Sling – The JCR (Web) Application Framework
http://sling.apache.org
> Apache Felix – OSGi Framework and Compendium Service implementations
http://felix.apache.org
> Apache Jackrabbit – The JCR (JSR-170/283) Reference Implementation
http://jackrabbit.apache.org
> Day Developer's Home
http://dev.day.com
30

Questions
31

Thank you very much !

Felix Meschberger http://www.day.com
Day Management AG fmeschbe@day.com

Server-side OSGi with Apache Sling (Jazoon 2010)

  • 1.
     Server-side OSGi with ApacheSling Felix Meschberger Day Management AG 124
  • 2.
    2  About Felix Meschberger >Senior Developer, Day Management AG > fmeschbe@day.com > http://blog.meschberger.ch > VP Apache Sling > Apache Felix > Apache Jackrabbit
  • 3.
    3  Agenda > Apache Sling >Why OSGi ? > What parts of OSGi ? > Advantages and Problems > Demo
  • 4.
    4  Apache Sling > RESTbased web framework > Content-driven (JCR, JSR-170/283) > Powered by OSGi > Scripting inside (Java Scripting, JSR-223) > Apache Open Source Projekt (http://sling.apache.org)
  • 5.
    5  Sling Architecture OSGi Framework Felix WebConsole WebDAV Server browserfilesystemdebuggerHTTP JSR-170/283 API JCR repository resource resolution servlet resolution standard servlets custom servlets JSR223 Scripting JSP javascript etc.
  • 6.
  • 7.
    7  Sling is RESTful >URLs map to Resources – Items in the JCR Repository – Files in the Filesystem – Content of Bundles > HTTP Methods map to Script Names – e.g. cars/POST.jsp – GET for reading only – Dilution: POST allowed for any changes (Create, Update, Delete) > Content Negotiation – Request URL extension – Accept request header currently ignored
  • 8.
    8  Sling is ObjectOriented Web > Resources are the Object > Resources maintained in Resource Tree > Resources accessed by path in the Resource Tree > Request Method, Extension and Selectors define „Method“ to call > Resources are typed: – Resource Type – Resource Super Type – „Root Type“: sling/servlet/default
  • 9.
    9  Functionality Out-Of-the-Box > DefaultImplementations for GET – Plain Text – JSON – XML > Default Implementation for POST – Create, Update, Modify content – Extensible
  • 10.
    10  Sling in Action >Day Communiqué 5 (http://www.day.com/cq5) > Sakai 3 (http://www.sakaiproject.org) > Tuberculosis Project > Idium Web (http://www.idium.no/no/idium_web) http://cwiki.apache.org/SLING/who-is-using-sling-.html
  • 11.
    11  Agenda > Apache Sling >Why OSGi ? > What parts of OSGi ? > Advantages and Problems > Demo
  • 12.
    12  Requirements for Sling >Modular and Extensible System > Declared Dependencies > Intermodule Communication > Lightweight Framework
  • 13.
    13  Variants > Do ItYourself – Well, don't we have other problems to solve ? ;-) > Spring (before Spring DM) – First Favourite due to declarative nature – Systems not really dynamic – Static application descriptor > OSGi – Perfect match to all requirements
  • 14.
    14  Agenda > Apache Sling >Why OSGi ? > What parts of OSGi ? > Advantages and Problems > Demo
  • 15.
    15  OSGi Elements Used >Framework > Configuration Admin Service > Meta Type Service > Declarative Services > Event Admin Service > Log Service > HTTP Service
  • 16.
    16  Launching Sling > Standaloneor Web Application > Small Footprint Launcher (~30K) > Framework in its own ClassLoader > Restart of Framework > Update of Framework > Application is Container Agnostic – Interaction only within the OSGi Framework – Http Service implementation is the key
  • 17.
    17  Configuration Admin Service >Provides an API to manage Configurations > Provides functionality to pass configuration to consumers > Hides persistance problems > Uses in Sling – Web Console configuraition editor – JCR Install updates through repository
  • 18.
    18  Metatype Service > Descriptorto generate GUI for Configuration Management > Use in Sling – Descriptor generated by Maven SCR Plugin – Configuration Admin GUI in Web Console supports Metatype Service descriptors
  • 19.
    19  Declarative Services > Replaceboiler-plate code by descriptors – Service Registration – Configuration support – Service Access > Dependency Injection > One of many OSGi Core Extensions: – Apache Felix Dependency Manager (Predecessor) – Apache Felix iPOJO (Successor) – Blueprint (OSGi Compendium Specification R 4.2) – Peaberry
  • 20.
    20  Event Admin Service >Whiteboard Pattern oriented eventing > Support for synchronous and asynchronous events > Uses in Sling – Base Mechnism to implement Job Scheduling – Extended to allow for event distribution in Cluster
  • 21.
    21  Log Service > Sling'sown implementation > Based on SLF4J API > Provides – OSGi LogService – SLF4J Logging – Commons Logging – Log4F Logging > Dynamically Configurable (by Configuration Admin Service) > Log Levels and Log Format per Logger > Multiple Log Files with size and time rotation
  • 22.
    22  Http Service > RegisteringServlets (and Resources) dynamically > Real Implementation – Includes Servlet Container > Bridged Implementation – Used for Web Application Launcher – Bridges Servlet Container to OSGi > Implementation transparent to registered Servlets
  • 23.
    23  Extensions > Apache FelixWeb Console – Extensible Web Based Management – Jquery UI Based (as of Version 3.0) > Maven SCR Plugin – Generates  Declarative Services Descriptors  Metatype Service Descriptors – Supports  JavaDoc Tags (@scr.component, etc.)  Java 5 Annotations (@Component, etc.) > JCR Install – Deploy Bundles via JCR Repository – Deploy Configuration Admin configurations via JCR Repository
  • 24.
    24  Agenda > Apache Sling >Why OSGi ? > What parts of OSGi ? > Advantages and Problems > Demo
  • 25.
    25  Advantages > Declared Dependencies >Better Isolution through explicit exports and private classes > Classloader Isolation > Extensibility built-in, not built-atop > Dynamism
  • 26.
    26  Problems > Steep LearningCurve – OSGi Specifications Themselves – Modularization vs. Monolithic > Uptime vs. Startup Time > Legacy Specs und ClassLoader – JDBC, XML, etc. > Scripting und ClassLoader – BundleClassLoaderProxy approach > Application Packaging – CRX Content Packages (Day proprietary) – Karaf features (Sling provides feature.xml)
  • 27.
    27  Agenda > Apache Sling >Why OSGi ? > What parts of OSGi ? > Advantages and Problems > Demo
  • 28.
    29  Links > Apache Sling– The JCR (Web) Application Framework http://sling.apache.org > Apache Felix – OSGi Framework and Compendium Service implementations http://felix.apache.org > Apache Jackrabbit – The JCR (JSR-170/283) Reference Implementation http://jackrabbit.apache.org > Day Developer's Home http://dev.day.com
  • 29.
  • 30.
  • 31.