jackrabbit-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Jackrabbit Wiki] Update of "SlingProposal" by FelixMeschberger
Date Mon, 02 Jul 2007 14:28:40 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Jackrabbit Wiki" for change notification.

The following page has been changed by FelixMeschberger:

The comment on the change is:
Initial proposal

New page:
= Sling Proposal =

_This is a draft version of a proposal to take the ApacheSling to the [[http://incubator.apache.org/][Apache
Incubator]] with a goal of becoming an [[http://jackrabbit.apache.org/][Apache Jackrabbit]]
subproject. Discuss this proposal on the Jackrabbit Dev List. See the [[http://incubator.apache.org/guides/proposal.html][proposal
guide]] for a description of the expected proposal content._

== Abstract ==

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

== Proposal ==

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 [[http://www.jcp.org/en/jsr/detail?id=170][JSR 170 API]] such as [[http://jackrabbit.apache.org][Apache

== Background ==

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:

; Modularization: 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.
; Components: 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. [[http://jackrabbit.apache.org][Apache Jackrabbit]])
as the store for its content.

By leveraging the [[http://www.osgi.org][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
[[http://felix.apache.org][Apache Felix]] as its OSGi framework to deploy the Sling bundles

== Rationale ==

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 [[http://incubator.apache.org/graffito/jcr-mapping/index.html][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 [[http://www.osgi.org/][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 [[http://felix.apache.org/][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.

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

=== Meritocracy ===

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

=== Community ===

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.

=== Alignment ===

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

=== Homogenous Developers ===

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

   * [[http://jackrabbit.apache.org/][Apache Jackrabbit]]
   * [[http://felix.apache.org/][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.

== Documentation ==


== Initial Source ==


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

== Cryptography ==

   * none

== Required Resources ==

=== Mailing lists ===

   * sling-dev@incubator.apache.org
   * sling-commits@incubator.apache.org
   * sling-private@incubator.apache.org

=== Subversion Directory ===

   * https://svn.apache.org/repos/asf/incubator/sling

=== 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 below ==org.apache.sling==.

=== 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)
   * ... More to be invited ...

== Affiliations ==


== Sponsors ==

=== Champion ===

   * Jukka Zitting (jukka at apache dot org)

=== Nominated Mentors ===

   * Jukka Zitting (jukka at apache dot org)

=== Sponsoring Entity ===

   * Apache Jackrabbit PMC (vote needed)

View raw message