incubator-general mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felix Meschberger <>
Subject [Proposal] Sling
Date Wed, 08 Aug 2007 13:23:27 GMT
Hi all,

I would like to propose a new Apache project named Sling. The proposal
text is attached to this message and can also be found at [1].

More information on Sling may be found in the Jackrabbit Wiki at [2].

I would like to have the discussion on this proposal to go on in
parallel in the Jackrabbit Developers and Incubator General mailing
lists to gather as much feedback as possible. The vote for submission of
the project will be held on the Jackrabbit Developers list.

Of course we still welcome people willing to contribute to Sling or
merely serve as additional mentors.



Sling Proposal

This is a draft version of a proposal to take the ApacheSling to the
Apache Incubator with a goal of becoming an Apache Jackrabbit
subproject. Discuss this proposal on the Jackrabbit Dev List. See the
proposal guide for a description of the expected proposal content. 

Sling is a framework to develop content centric web applications based
on the idea of modularizing the rendering of HTTP resources. 

Sling allows easy development of web application which are centered
around content which is acted upon. As such each request URL addresses a
Content object which in turn resolves to a Component, which finally is
responsible for handling the request and providing a response. Though
Content is a Java abstraction, the main source of data is a Java Content
Repository conforming to the JSR 170 API such as Apache Jackrabbit. 

Sling came to live in an effort to rewrite the central request
processing engine of Day Communiqué 4.0 and make it available for other
applications requiring an easy to use and flexible web application
framework. As such, the guidelines to develop Sling can be summarized as

        Functional blocks of the processing engine should be split to
        enable independent upgrade and replacement. At the same time
        some degree of dependency management amongst the modules is
Runtime Management:
        Modules must enabled to be separatly started and stopped as well
        as installed, upgraded and removed. 
        Recognizing the need to componentize development of Web
        Applications and have easy mix and match for such components to
        build web pages, the basic building blocks of web pages are
        called components. 
Content Repository:
        Leading the Java Content Repository (JCR) initiative a new
        request processing engine must natively support JCR (e.g. Apache
        Jackrabbit) as the store for its content. 

By leveraging the OSGi core service platform specification the
modularization and runtime management goals can be more than met. Sling
is therefore built as a set of bundles. Additionally Sling provides a
standalone application launcher and a web application to launch Apache
Felix as its OSGi framework to deploy the Sling bundles into. 

Content repositories, as defined in the Content Repository for Java
Technology API (JCR), are well suited to work as content stores of web
applications. However, the JCR API deals with generic Nodes and
Properties and not with business objects that would be more meaningful
to application developers. Therefore one of the building blocks of Sling
is the integration of a content mapping infrastructure, namely
Jackrabbit Object Content Mapping. 

Another cause of regular headaches in current web application frameworks
is managing the life cycle of long-running applications: Add new
functionality, fix bugs, starting and stopping modules. This is where
the OSGi service platform comes into play. This specification provides
both help in the area of modularization and lifecycle management (and
more, actually) and definitions of services, so called Compendium
Services, which help concentrate on the core application and not worry
about issues such as logging, configuration management etc. Sling uses
Apache Felix as the OSGi framework. 

Third, a request will generally not be handled by a single Component but
a series Components. The idea is that a request URL addresses a Content
object, which is mapped from a JCR Node and which is serviced by a
Component. The Component may then access child Content objects, aka
child nodes, and have Sling service those Content objects through their
Components again. Using this mechanism, each Component only contributes
to part of the final web page. 

The advantage of this mechanism is, that Sling does not require tons of
templates or scripts to render different pages. Rather the developer may
provide a tool box of Components which may be mix-and-matched as
required. In addition this even allows for easy content authoring. 

In short, the main features of Sling may be summarized as follows: 

      * Uses a JCR Repository as its data store 
      * Uses Jackrabbit OCM to map Repository Items to Java Objects 
      * Internally deals with Java Objects 
      * Built as OSGi Bundles supporting any compliant OSGi framework 
      * Provides integration into Apache Felix for launching and OSGi
        services support 
      * Componentized data model allowing flexible web application
      * Based on standard Servlet API 
      * Open to allow support for web application complying with REST
        architectural style 
      * Each Node for which a valid Jackrabbit OCM mapping exists may be
        addressed by URL 
Initial Goals
Establish Sling as the content centric web application framework for JCR
repositories. As such, it is intended for Sling to mature into a
subproject of Apache Jackrabbit. 

Current Status
We plan to do everything possible to encourage an environment that
supports a meritocracy. 

By proposing this project to the Incubator for inclusion as subproject
of Apache Jackrabbit we hope grow Sling into first class web application
framework which leverages the know-how of the Apache community. 

Core Developers
The project was founded be Felix Meschberger in late 2006 at Day.
Currently only Day employees work on this project, though this will
change as soon as we get a chance to invite more people to join this
effort. In fact the initial committer list already contains several
people not related to Day. 

Sling is targeted to be deployed into any compliant OSGi framework. To
support HTTP requests Sling interoperates with the OSGi HttpService.
This allows deployment of the framework inside a Servlet API compliant
servlet container given appropriate bridging or the framework may be run
as a standalone application, where an implementation of the OSGi
HttpService handling the HTTP requests is deployed. 

To access content addressed by URLs, Sling depends on any compliant
implementation of the JCR API, such as Jackrabbit, plus the Jackrabbit
Object Content Mapping. 

Known Risks
Orphaned products
This is an active project within Day Software and will be the basis of
ongoing work of Day's own content management products, such as Digital
Asset Manager. In addition, it is foreseen, that Web services of
Jackrabbit may be ported to Sling. 

Inexperience with Open Source
All committers have experience working on open source projects and
several are veterans at Apache. 

Homogenous Developers
Sling is currently being developed only by Day employees, but we hope
that the framework will attract interest from other individuals and

Reliance on Salaried Developers
Most of the developers are paid by their employer to contribute to this
project, but given the anticipation from the Java community for Sling
the committers' sense of ownership for the code, the project would
continue without issue if no salaried developers contributed to the

Relationships with Other Apache Products
      * Apache Jackrabbit 
      * Apache Felix 
A Excessive Fascination with the Apache Brand
Day actively contributes to Apache Jackrabbit and other Apache projects,
and the individuals behind the Sling project feel that an Apache
community would be the best environment for the codebase to grow and
attract new users and contributors. 

Initial Documentation is made available on the Jackrabbit Wiki pages at

Initial Source
Currently Sling is a closed source project. For this reason the source
can only be opened upon the acceptance of the project as an Apache
Incubator project by the IPMC. Upon the acceptance of the project and
submission of the Software Grant by Day, the source code will be
committed to the Apache SVN repository. 

Source and Intellectual Property Submission Plan
The code base will be licensed to the ASF using a software grant from
Day, allowing Apache to relicense as pure Apache License 2.0 code.

External Dependencies
Besides depending on two Apache projects, namely Jackrabbit and Felix,
Sling depends on the OSGi API libraries, which are made available as
part of the Apache Felix project under the Apache License 2.0. 

      * none 
Required Resources

Mailing lists
      * sling-dev at incubator.apache dot org 
      * sling-commits at incubator dot apache dot org 
      * sling-private at incubator dot apache dot org 
Subversion Directory
Issue Tracking
      * JIRA Sling (SLING) 
Java Packaging
      * All Sling classes live inside and below sling. It is foreseen to
        root sling at org.apache such as to have all Sling classes at or
Other Resources
      * none 
Initial Committers
      * Felix Meschberger (fmeschbe at apache dot org) 
      * Carsten Ziegeler (cziegeler at apache dot org) 
      * Bertrand Delacretaz (bdelacretaz at apache dot org) 
      * Christophe Lombart (clombart at apache dot org) 
      * Juan José Vázquez Delgado (juanjo dot vazquez at gmail dot com) 
      * ... More to be invited ... 
Of the committers Felix, Carsten and Bertrand are tasked by Day to work
on Sling. All of them have a professional as well as an personal
interest to further develop this project. Neither of the other initial
committers is affiliated with Day in any way. 


      * Jukka Zitting (jukka at apache dot org) 
Nominated Mentors
      * Jukka Zitting (jukka at apache dot org) 
Sponsoring Entity
      * Apache Jackrabbit PMC (vote needed) 

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message