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 follows:
- 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 required.
- 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 building
- 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
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.
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.
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.
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.
Sling is currently being developed only by Day employees, but we hope that the framework will attract interest from other individuals and companies.
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 project.
Relationships with Other Apache Products
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 ApacheSling.
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.
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.
- sling-dev at incubator.apache dot org
- sling-commits at incubator dot apache dot org
- sling-private at incubator dot apache dot org
- JIRA Sling (SLING)
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 below org.apache.sling.
- 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)
- Karl Pauls (pauls at apache dot org)
- Alexandru Popescu (apopescu at apache dot org)
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)
- Jukka Zitting (jukka at apache dot org)
- Gianugo Rabellino (gianugo at apache dot org)
- J Aaron Farr (farra at apache dot org)
- Apache Jackrabbit PMC