You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bu...@apache.org on 2012/12/12 10:17:17 UTC

svn commit: r841833 [27/28] - in /websites/staging/sling/trunk/content: ./ site/ site/46-line-blog.data/ site/authentication.data/ site/documentation.data/ site/first-steps.data/ site/getting-and-building-sling.data/ site/how-to-manage-events-in-sling....

Added: websites/staging/sling/trunk/content/site/the-sling-launchpad.html
==============================================================================
--- websites/staging/sling/trunk/content/site/the-sling-launchpad.html (added)
+++ websites/staging/sling/trunk/content/site/the-sling-launchpad.html Wed Dec 12 09:16:44 2012
@@ -0,0 +1,386 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<HTML>
+  <HEAD>
+    <TITLE>Apache Sling - The Sling Launchpad</TITLE>
+    <LINK rel="stylesheet" href="http://sling.apache.org/site/media.data/site.css" type="text/css" media="all">
+    <LINK rel="icon" href="http://sling.apache.org/site/media.data/favicon.ico">
+    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
+  </HEAD>
+  <BODY>
+    <DIV class="title">
+      <DIV class="logo">
+        <A href="http://sling.apache.org/site/index.html">
+          <IMG border="0" alt="Apache Sling" src="http://sling.apache.org/site/media.data/logo.png">
+        </A>
+      </DIV>
+      <DIV class="header">
+        <A href="http://www.apache.org/">
+          <IMG border="0" alt="Apache" src="http://sling.apache.org/site/media.data/apache.png">
+        </A>
+      </DIV>
+    </DIV>
+    <DIV class="menu">
+<P><B>Documentation</B><BR class="atl-forced-newline">
+<A href="getting-started.html" title="Getting Started">Getting Started</A><BR class="atl-forced-newline">
+<A href="the-sling-engine.html" title="The Sling Engine">The Sling Engine</A><BR class="atl-forced-newline">
+<A href="development.html" title="Development">Development</A><BR class="atl-forced-newline">
+<A href="bundles.html" title="Bundles">Bundles</A><BR class="atl-forced-newline">
+<A href="tutorials-how-tos.html" title="Tutorials & How-Tos">Tutorials &amp; How&#45;Tos</A><BR class="atl-forced-newline">
+<A href="configuration.html" title="Configuration">Configuration</A><BR class="atl-forced-newline">
+<A href="http://sling.apache.org/apidocs/sling6/index.html" class="external-link" rel="nofollow">API docs</A><BR class="atl-forced-newline">
+<A href="http://s.apache.org/sling.wiki" class="external-link" rel="nofollow">Wiki</A><BR class="atl-forced-newline">
+<A href="http://s.apache.org/sling.faq" class="external-link" rel="nofollow">FAQ</A><BR class="atl-forced-newline"></P>
+
+<P><B>Project info</B><BR class="atl-forced-newline">
+<A href="http://sling.apache.org/site/downloads.cgi" class="external-link" rel="nofollow">Downloads</A><BR class="atl-forced-newline">
+<A href="http://www.apache.org/licenses/" class="external-link" rel="nofollow">License</A><BR class="atl-forced-newline">
+<A href="contributing.html" title="Contributing">Contributing</A><BR class="atl-forced-newline">
+<A href="news.html" title="News">News</A><BR class="atl-forced-newline">
+<A href="links.html" title="Links">Links</A><BR class="atl-forced-newline">
+<A href="project-information.html" title="Project Information">Project Information</A><BR class="atl-forced-newline">
+<A href="https://issues.apache.org/jira/browse/SLING" class="external-link" rel="nofollow">Issue Tracker</A><BR class="atl-forced-newline">
+<A href="http://svn.apache.org/viewvc/sling/trunk" class="external-link" rel="nofollow">Browse Source Repository</A><BR class="atl-forced-newline">
+<A href="security.html" title="Security">Security</A><BR class="atl-forced-newline"></P>
+
+<P><B>Sponsorship</B><BR class="atl-forced-newline">
+<A href="http://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">Thanks</A><BR class="atl-forced-newline">
+<A href="http://www.apache.org/foundation/sponsorship.html" class="external-link" rel="nofollow">Become a Sponsor</A><BR>
+<A href="http://www.apache.org/foundation/buy_stuff.html" class="external-link" rel="nofollow">Buy Stuff</A></P>
+
+
+  <IFRAME src="http://www.apache.org/ads/button.html" style="border-width:0; float: left" frameborder="0" scrolling="no" width="135" height="135"></IFRAME>
+  <P style="height: 135px"></P>
+    </DIV>
+    <DIV class="main">
+        <DIV class="breadcrump" style="font-size: 80%;">
+<A href="apache-sling.html" title="Apache Sling Website">Apache Sling Website</A>&nbsp;&gt;&nbsp;<A href="apache-sling.html" title="Apache Sling">Apache Sling</A>&nbsp;&gt;&nbsp;<A href="documentation.html" title="Documentation">Documentation</A>&nbsp;&gt;&nbsp;<A href="the-sling-engine.html" title="The Sling Engine">The Sling Engine</A>&nbsp;&gt;&nbsp;<A href="" title="The Sling Launchpad">The Sling Launchpad</A>
+        </DIV>
+<H1><A name="TheSlingLaunchpad-TheSlingLaunchpad"></A>The Sling Launchpad</H1>
+
+<DIV>
+<UL>
+    <LI><A href="#TheSlingLaunchpad-SlingHome">Sling Home</A></LI>
+    <LI><A href="#TheSlingLaunchpad-CommandLineOptions">Command Line Options</A></LI>
+<UL>
+    <LI><A href="#TheSlingLaunchpad-ControlPort">Control Port</A></LI>
+</UL>
+    <LI><A href="#TheSlingLaunchpad-ServletParameters">Servlet Parameters</A></LI>
+    <LI><A href="#TheSlingLaunchpad-sling.properties">sling.properties</A></LI>
+    <LI><A href="#TheSlingLaunchpad-Components">Components</A></LI>
+<UL>
+    <LI><A href="#TheSlingLaunchpad-LaunchpadBase">Launchpad Base</A></LI>
+    <LI><A href="#TheSlingLaunchpad-LaunchpadBundles">Launchpad Bundles</A></LI>
+    <LI><A href="#TheSlingLaunchpad-LaunchpadAppandLaunchpadWebApp">Launchpad App and Launchpad WebApp</A></LI>
+</UL>
+</UL></DIV>
+
+<P>This tries to explain how exactly the Sling Launchpad works, what constitutes the Sling Launchpad and how you can use the Sling Launchpad to custom create you Sling launchers. For a view behind the scenes of the Sling Launchpad Base module (the actual launcher) you might want to refer to the <A href="embedding-sling.html" title="Embedding Sling">Embedding Sling</A> page.</P>
+
+
+<H2><A name="TheSlingLaunchpad-SlingHome"></A>Sling Home</H2>
+
+<P>Since Sling requires some space on the filesystem to store various files Sling has to know where this filesystem space is located.</P>
+
+<P>The following is a list of uses for the Sling Home directory:</P>
+
+<UL>
+	<LI><TT>sling.properties</TT> &ndash; The main configuration file used by Sling to launch the framework. It mainly contains OSGi framework configuration and initial configuration for some bundles. This file is read on each startup of <EM>Launcher JAR</EM>. That is, changes to this file require a restart of the <EM>Launcher JAR</EM>.</LI>
+	<LI><TT>org.apache.sling.launchpad.base.jar</TT> &ndash;  This is the <EM>Launcher JAR</EM> file used by the Standalone Application or the Web Application to start the OSGi Framework. This file is initially placed when first starting Sling and may later be updated by updating the system bundle with a new <EM>Launcher JAR</EM>.</LI>
+	<LI><TT>felix</TT> &ndash; The directory into which the Apache Felix Framework places the bundles, which have been installed into the system. This does generally not need to be touched.</LI>
+	<LI><TT>config</TT> &ndash; The directory into which the Apache Felix Configuration Admin Service stores the configurationes. Do not change any files in this directory, since changes will not generally be picked up.</LI>
+	<LI><TT>jackrabbit</TT> &ndash; The directory in which the Apache Jackrabbit JCR repository is started. Amongst other things this also contains the Jackrabbit configuration file <TT>repository.xml</TT>. You may modify this file, but don't forget to restart the Embedded Jackrabbit Repository bundle after doing this.</LI>
+	<LI><TT>logs</TT> &ndash; Contains the log files generated by Sling. By default this contains the error.log and its rotated generations.</LI>
+</UL>
+
+
+
+<H2><A name="TheSlingLaunchpad-CommandLineOptions"></A>Command Line Options</H2>
+
+
+<P>The Java Standalone Application supports a number of command line options, which influence the operation of the launch process.</P>
+
+<DIV class="table-wrap">
+<TABLE class="confluenceTable"><TBODY>
+<TR>
+<TH class="confluenceTh"> Option </TH>
+<TH class="confluenceTh"> Argument </TH>
+<TH class="confluenceTh"> Description </TH>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>start</TT> </TD>
+<TD class="confluenceTd"> &ndash; </TD>
+<TD class="confluenceTd"> Open a TCP/IP server socket when starting Sling. Uses option <TT>-j</TT> to define the local socket address. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>status</TT> </TD>
+<TD class="confluenceTd"> &ndash; </TD>
+<TD class="confluenceTd"> Check whether a (remote) Sling application is running. Uses option <TT>-j</TT> to define the address of the Sling instance to check. Note, that the Sling application terminates after checking for the (remote) Sling status. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>stop</TT> </TD>
+<TD class="confluenceTd"> &ndash; </TD>
+<TD class="confluenceTd"> Stop a (remote) Sling application is running. Uses option <TT>-j</TT> to define the address of the Sling instance to stop. Note, that the Sling application terminates after stopping the (remote) Sling instance. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>-j</TT> </TD>
+<TD class="confluenceTd"> [ host &quot;:&quot; ] port </TD>
+<TD class="confluenceTd">  The socket address to listen on for control connections (<TT>start</TT> or to use as the remote endpoint for the control connection (<TT>status</TT> and <TT>stop</TT>. If this parameter has no arguments or is not specified, the address defaults to any free port on localhost/127.0.0.1. If only the port is specified localhost/127.0.0.1 is used as the host part of the address. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>-c</TT> </TD>
+<TD class="confluenceTd"> slinghome </TD>
+<TD class="confluenceTd"> The directory in which Sling locates its initial configuration file <TT>sling.properties</TT> and where files of Sling itself such as the Apache Felix bundle archive or the JCR repository files are stored. This defaults to the <TT>sling</TT> folder in the current working directory. This is the value which is commonly refered to as <TT>${sling.home}.</TT></TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>-i</TT> </TD>
+<TD class="confluenceTd"> launchpadhome </TD>
+<TD class="confluenceTd">  The launchpad directory. If not set, this is the same as <TT>${sling.home}.</TT> (since Sling Launchpad 2.4.0)  </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>-l</TT> </TD>
+<TD class="confluenceTd"> loglevel </TD>
+<TD class="confluenceTd"> Sets the initial loglevel as an integer in the range 0 to 4 or as one of the well known level strings <TT>ERROR</TT>, <TT>WARN</TT>, <TT>INFO</TT>, or <TT>DEBUG</TT>. This option overwrites the <TT>org.apache.sling.osg.log.level</TT> setting the <TT>sling.properties</TT> file. The default is <TT>INFO</TT>. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>-f</TT> </TD>
+<TD class="confluenceTd"> logfile </TD>
+<TD class="confluenceTd">  The log file to use or <TT>-</TT> to log to standard out. This option overwrites the <TT>org.apache.sling.osg.log.file</TT> setting in the <TT>sling.properties</TT> file. The default is <TT>${sling.home}/logs/error.log</TT>. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>-a</TT> </TD>
+<TD class="confluenceTd"> address </TD>
+<TD class="confluenceTd"> The interfact to bind to (use 0.0.0.0 for any). This option overwrites the <TT>org.apache.felix.http.host</TT> setting in the <TT>sling.properties</TT> file and requires the embedded Http Service implementation to honor this property. (supported since Sling Launchpad 2.4.0) </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>-p</TT> </TD>
+<TD class="confluenceTd"> port </TD>
+<TD class="confluenceTd">  The port to listen (default 8080) to handle HTTP requests. This option overwrites the <TT>org.osgi.service.http.port</TT> setting in the <TT>sling.properties</TT> file. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>-r</TT> </TD>
+<TD class="confluenceTd"> path </TD>
+<TD class="confluenceTd"> The root servlet context path for the Http Service (default is /). This option overwrites the <TT>org.apache.felix.http.context_path</TT> setting in the <TT>sling.properties</TT> file and requires the embedded Http Service implementation to honor this property. (since Sling Launchpad 2.4.0) </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>-D</TT> </TD>
+<TD class="confluenceTd"> n=v </TD>
+<TD class="confluenceTd"> Sets the property <TT>n</TT> to the value <TT>v</TT>. This option can be added repeatedly setting additional properties. Any property set in this manner overwrites same named properties in the <TT>sling.properties</TT> file. (since Sling Launchpad 2.4.0) </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>-h</TT> </TD>
+<TD class="confluenceTd"> &ndash; </TD>
+<TD class="confluenceTd"> Prints a simple usage message listing all available command line options. </TD>
+</TR>
+</TBODY></TABLE>
+</DIV>
+
+
+<P>The Sling Standalone application looks for a definition of the <TT>sling.home</TT> setting in the following locations in order of precendence:</P>
+
+<OL>
+	<LI>The <TT>-c</TT> command line option</LI>
+	<LI>The <TT>sling.home</TT> system property</LI>
+	<LI>The <TT>SLING_HOME</TT> environment variable</LI>
+	<LI>If none of the above resolves to a non-null value, the default value of <TT>sling</TT> is assumed</LI>
+</OL>
+
+
+
+<H3><A name="TheSlingLaunchpad-ControlPort"></A>Control Port</H3>
+
+<P>When starting the Sling Standalone Application with the <TT>start</TT> command line option, a TCP port is opened. The interface and port is configurable with the <TT>-j</TT> command line option. The address of the interface and the actual port used are written to the <TT>${sling.home}/conf/controlport</TT> file. So technically the <TT>-j</TT> option is not required for the <TT>status</TT> and <TT>stop</TT> operations because the port information is just read from this file.</P>
+
+<P>Note that using a control connection for the Sling Standalone Application presents a potential security issue. For this reason the following defaults apply:</P>
+
+<UL>
+	<LI>The server side socket for a running Sling Standalone Application is only created if the application is started with the <TT>start</TT> command line option. If this option is omitted &ndash; the default &ndash; the server side socket is not created and the Sling Standalone Application instance cannot be remotely controlled.</LI>
+	<LI>The default host name for the socket is localhost/127.0.0.1 meaning that the socket is only accessible from the same system as the Sling Standalone Application is running on.</LI>
+	<LI>In addition to the IP address and port on which the control port is listening a nonce is written to the <TT>controlport</TT> file. Any interaction with the server on the control port must include this none.</LI>
+</UL>
+
+
+<P>Suggestions:</P>
+<UL>
+	<LI>Do not allow the control port to be opened on an externally visible interface. Using the localhost/127.0.0.1 is just sufficient.</LI>
+	<LI>Make sure only legitimate users have access to the installation folder of Sling (<TT>${sling.home})</TT>.</LI>
+</UL>
+
+
+
+<H2><A name="TheSlingLaunchpad-ServletParameters"></A>Servlet Parameters</H2>
+
+<P>The Web Application does not require specific servlet parameters. Those which are specified are used to overwrite any properties with the same name from the <TT>sling.properties</TT> file. One exception to this rule is the <TT>sling.home</TT> parameter, which is used to set the value of the <TT>sling.home</TT> property. If no parameter with this name is defined the Sling home directory is derived from the context path at which the Sling Web Application is registered.</P>
+
+<P>The <TT>sling.home</TT> folders for Sling Web Applications without the <TT>sling.home</TT> servlet parameter are all located in the <TT>sling</TT> folder in the current working directory as reported by the <TT>user.dir</TT> system property. The name of the actual directory is derived from the Web Application Context Path by replacing all slash characters <TT>/</TT> by underscore characters <TT>&#95;</TT>. For the root context a single underscore character <TT>&#95;</TT> is used.</P>
+
+<P>Examples:</P>
+
+<DIV class="table-wrap">
+<TABLE class="confluenceTable"><TBODY>
+<TR>
+<TH class="confluenceTh"> Servlet Context </TH>
+<TH class="confluenceTh"> Default <TT>sling.home</TT> </TH>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>root</EM> </TD>
+<TD class="confluenceTd"> <TT>sling/&#95;</TT> </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>/sling</TT> </TD>
+<TD class="confluenceTd"> <TT>sling/&#95;sling</TT> </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>/sling/instance1</TT> </TD>
+<TD class="confluenceTd"> <TT>sling/&#95;sling&#95;instance1</TT> </TD>
+</TR>
+</TBODY></TABLE>
+</DIV>
+
+
+<P>Starting with Launchpad Base 2.2.2 the fixed prefix <TT>sling</TT> is configurable with the <TT>sling.home.prefix</TT> system property. If this property is set the value used as the prefix.</P>
+
+<P>Examples: Assume the <TT>sling.home.prefix</TT> system property is set to <TT>/var/sling</TT></P>
+
+<DIV class="table-wrap">
+<TABLE class="confluenceTable"><TBODY>
+<TR>
+<TH class="confluenceTh"> Servlet Context </TH>
+<TH class="confluenceTh"> Default <TT>sling.home</TT> </TH>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>root</EM> </TD>
+<TD class="confluenceTd"> <TT>/var/sling/&#95;</TT> </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>/sling</TT> </TD>
+<TD class="confluenceTd"> <TT>/var/sling/&#95;sling</TT> </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <TT>/sling/instance1</TT> </TD>
+<TD class="confluenceTd"> <TT>/var/sling/&#95;sling&#95;instance1</TT> </TD>
+</TR>
+</TBODY></TABLE>
+</DIV>
+
+
+
+<H2><A name="TheSlingLaunchpad-sling.properties"></A>sling.properties</H2>
+
+<P>The <TT>sling.properties</TT> file contains the initial setup of the Sling Application and the OSGi framework. Some of the parameters are required and should not be modified without a very good reason. Some parameters may be freely modified to your needs. Please see the inlined comment in the <TT>sling.properties</TT> file installed when Sling is first started.</P>
+
+<P>One thing to note is, that the <TT>sling.properties</TT> file is a simple Java Properties file with support for property references. That is, the value of properties may refer other property values by means of the well known <TT>${name</TT>} notation. Such property references may even be cascaded as in</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+java.packages=${jre-${java.specification.version}}
+</PRE>
+</DIV></DIV>
+
+
+<H2><A name="TheSlingLaunchpad-Components"></A>Components</H2>
+
+<P>The Sling Launchapd consists of <EM>Launchbad Base</EM> project and three additional projects which ultimately create a Standalone Java Application and a Web Appliction with standard parts of Sling.</P>
+
+
+<H3><A name="TheSlingLaunchpad-LaunchpadBase"></A>Launchpad Base</H3>
+
+<P>The <EM>Launchpad Base</EM> projects creates the following artifacts, which are required in actual setups to get a Sling application:</P>
+
+<UL>
+	<LI><B>Launcher JAR</B> &ndash; The primary artifact of the Base project contains the actual support to launch the Apache Felix OSGi Framework and install bundles, which are packaged with the application. It also contains the Apache Felix Framework together with the OSGi R4.1 Core and Compendium libraries as well as the Equinox HttpService bridge and the Servlet API.</LI>
+</UL>
+
+
+<UL>
+	<LI><B>App JAR</B> &ndash; The secondary artifact with classifier <EM>app</EM> is a minimal Standalone Java Application which may be started by simply typing</LI>
+</UL>
+
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+$ java -jar org.apache.sling.launchpad.base-app.jar
+</PRE>
+</DIV></DIV>
+
+<UL>
+	<LI><B>Web App Archive</B> &ndash; The secondary artifact with classifier <EM>webapp</EM> is a minimal Web Application, which may simply be deployed into your favirourite servlet container, provided it supports at least Servlet API 2.4.</LI>
+</UL>
+
+
+<UL>
+	<LI><B>Source JAR</B> &ndash; The secondary artifact with the classifier <EM>sources</EM> is simple the source of the <EM>Launchpad Base</EM> project.</LI>
+</UL>
+
+
+<P>To build a very basic Sling launcher, the <EM>Launchpad Base</EM> is actually all you need. But to really glue this together and get a usable system, some more work is required. Lets see how the additionaly projects <EM>Launchpad Bundles</EM>, <EM>Launchpad App</EM>, and <EM>Launchpad WebApp</EM> get to that.</P>
+
+
+<H3><A name="TheSlingLaunchpad-LaunchpadBundles"></A>Launchpad Bundles</H3>
+
+<P>The second project we want to look at is the <EM>Launchpad Bundles</EM> project. This is a very simple project in that it only collects together a number of OSGi bundles, which will make up the final application. The bundles are stored in a (big) Java Archive in folders whose path is formed with <TT>resources/9</TT> where <TT>9</TT> is a start level which is assigned to the bundles as they are installed. The special start level <TT>0</TT> instructs the installer to not actually assign a specific start level to the bundles contained in that folder.</P>
+
+<P>Currently the following start level assignement is used by the <EM>Launchpad Bundles</EM> project:</P>
+
+<DIV class="table-wrap">
+<TABLE class="confluenceTable"><TBODY>
+<TR>
+<TH class="confluenceTh"> Start Level </TH>
+<TH class="confluenceTh"> Bundle Group </TH>
+<TH class="confluenceTh"> Bundle(s) </TH>
+</TR>
+<TR>
+<TD class="confluenceTd"> 1 </TD>
+<TD class="confluenceTd"> Basic bundles required for the correct operation of Sling </TD>
+<TD class="confluenceTd"> org.apache.sling.commons.log</TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> 5 </TD>
+<TD class="confluenceTd"> Apache Felix Web Console </TD>
+<TD class="confluenceTd"> org.apache.felix.bundlerepository, org.apache.felix.webconsole, org.apache.sling.extensions.threaddump </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> 10 </TD>
+<TD class="confluenceTd"> OSGi Compendium Service Implementations </TD>
+<TD class="confluenceTd"> org.apache.felix.configadmin, org.apache.felix.eventadmin, org.apache.felix.metatype, org.apache.felix.scr </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> 15 </TD>
+<TD class="confluenceTd"> JCR Repository (Jackrabbit) </TD>
+<TD class="confluenceTd"> commons-collections, commons-io-1.4.jar<BR>
+commons-lang, jackrabbit-api, jackrabbit-jcr-commons, org.apache.sling.commons.mime, org.apache.sling.commons.osgi, org.apache.sling.jcr.api, org.apache.sling.jcr.base, org.apache.sling.jcr.jackrabbit.server, org.apache.sling.jcr.webdav </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> 0 </TD>
+<TD class="confluenceTd"> Actual Sling Application bundles </TD>
+<TD class="confluenceTd"> org.apache.sling.adapter, org.apache.sling.api, org.apache.sling.bundleresource.impl, org.apache.sling.commons.json, org.apache.sling.engine, org.apache.sling.extensions.apt.parser, org.apache.sling.extensions.apt.servlet, org.apache.sling.httpauth, org.apache.sling.jcr.classloader, org.apache.sling.jcr.contentloader, org.apache.sling.jcr.ocm, org.apache.sling.jcr.resource, org.apache.sling.launchpad.content, org.apache.sling.samples.path-based.rtp, org.apache.sling.scripting.api, org.apache.sling.scripting.core, org.apache.sling.scripting.javascript, org.apache.sling.scripting.jsp, org.apache.sling.scripting.jsp.taglib, org.apache.sling.servlets.get, org.apache.sling.servlets.post, org.apache.sling.servlets.resolver </TD>
+</TR>
+</TBODY></TABLE>
+</DIV>
+
+
+
+
+<H3><A name="TheSlingLaunchpad-LaunchpadAppandLaunchpadWebApp"></A>Launchpad App and Launchpad WebApp</H3>
+
+<P>The <EM>Launchpad App</EM> and <EM>Launchpad WebApp</EM> bundles are actually projects which just glue together artifacts from the Launchpad projects. There is nothing special about them. Here's what is done:</P>
+
+<UL>
+	<LI>Take the appropriate secondary artifact from the <EM>Launchpad Base</EM> project: <EM>app</EM> for the Standalone Java Application or <EM>webapp</EM> for the Web Application and unpack</LI>
+	<LI>Take the <EM>Launchpad Base</EM> primary artifact and place it under the name <TT>org.apache.sling.launchpad.base.jar</TT> into the <TT>resources</TT> folder</LI>
+	<LI>Take the <EM>Launchpad Bundles</EM> artifact and unpack it</LI>
+	<LI>Finally pack all together into a single big JAR or WAR file</LI>
+</UL>
+
+
+<P>That's it. The resulting artifact may be directly used to launch the Standalone Java Application or may directly be deployed into any Servlet API 2.4 (or later) compliant servlet container.</P>
+        <DIV class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
+Last modified by fmeschbe on Sat May 19 18:35:07 EDT 2012
+        </DIV>
+        <DIV class="trademarkFooter">
+Apache Sling, Sling, Apache, the Apache feather logo, and the Apache Sling project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+        </DIV>
+    </DIV>
+  </BODY>
+</HTML>
+

Added: websites/staging/sling/trunk/content/site/thoughts-on-release-management.html
==============================================================================
--- websites/staging/sling/trunk/content/site/thoughts-on-release-management.html (added)
+++ websites/staging/sling/trunk/content/site/thoughts-on-release-management.html Wed Dec 12 09:16:44 2012
@@ -0,0 +1,137 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<HTML>
+  <HEAD>
+    <TITLE>Apache Sling - Thoughts on Release Management</TITLE>
+    <LINK rel="stylesheet" href="http://incubator.apache.org/sling/site/media.data/site.css" type="text/css" media="all">
+    <LINK rel="icon" href="http://incubator.apache.org/sling/site/media.data/favicon.ico">
+    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
+  </HEAD>
+  <BODY>
+    <DIV class="title">
+      <DIV class="logo">
+        <A href="http://incubator.apache.org/sling/site/index.html">
+          <IMG border="0" alt="Apache Sling" src="http://incubator.apache.org/sling/site/media.data/logo.png">
+        </A>
+      </DIV>
+      <DIV class="header">
+        <A href="http://incubator.apache.org/">
+          <IMG border="0" alt="Apache Incubator" src="http://incubator.apache.org/images/apache-incubator-logo.png">
+        </A>
+      </DIV>
+    </DIV>
+    <DIV class="menu">
+                                    <P>
+
+<UL>
+	<LI><A href="index.html" title="Index">Home</A></LI>
+	<LI><A href="project-information.html" title="Project Information">Project Information</A></LI>
+	<LI><A href="usecases.html" title="UseCases">Use Cases</A></LI>
+	<LI><A href="guides.html" title="Guides">Guides</A></LI>
+	<LI><A href="documentation.html" title="Documentation">Documentation</A></LI>
+	<LI><A href="plugins.html" title="Plugins">Plugins</A></LI>
+	<LI><A href="faq.html" title="FAQ">FAQ</A></LI>
+	<LI><A href="links.html" title="Links">Links</A></LI>
+	<LI><A href="old-documentation.html" title="Old Documentation">Old Documentation</A></LI>
+	<LI><SPAN class="nobr"><A href="http://cwiki.apache.org/confluence/x/GAUB" title="Visit page outside Confluence" rel="nofollow">Wiki<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/thanks.html" title="Visit page outside Confluence" rel="nofollow">Sponsors<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/sponsorship.html" title="Visit page outside Confluence" rel="nofollow">Sponsorship<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+</UL>
+
+
+<P>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </DIV>
+    <DIV class="main">
+<H1><A name="ThoughtsonReleaseManagement-ThoughtsonReleaseManagement"></A>Thoughts on Release Management</H1>
+
+
+
+<P>Status: DRAFT<BR>
+Created: 3. January 2008<BR>
+Author: fmeschbe</P>
+
+
+<P>As we should start thinking about making an initial release of Sling, we should discuss a few issues:</P>
+
+<OL>
+	<LI>How do number releases ?</LI>
+	<LI>What do we release ?</LI>
+	<LI>When do we release ?</LI>
+</OL>
+
+
+<P>In this concept I propose a version numbering scheme as well as my idea for the contents of an initial Sling release and how to release in the future. Comments are very welcome.</P>
+
+
+<H2><A name="ThoughtsonReleaseManagement-VersionNumbers"></A>Version Numbers</H2>
+
+<P>Maven has a very nice concept of <EM>SNAPSHOT</EM> versions. In this concept, a version just has a <TT>-SNAPSHOT</TT> suffix which marks the version as a SNAPSHOT (or non-release) version. OSGi versions on the other hand are simply 4-position numbers, where the parts are separated by dots, first three parts (major, minor, micro) must be numeric and the last part (qualifier) may also contain characters. The Apache Felix Maven Bundle Plugin we use to build the Sling bundles converts Maven version numbers to correct OSGi version numbers. For example, the version <EM>2.0.0-incubator-SNAPSHOT</EM> is converted to <EM>2.0.0.incubator-SNAPSHOT</EM>.</P>
+
+<P>The consequence of this conversion is that a SNAPSHOT version (e.g. <EM>2.0.0.incubator-SNAPSHOT</EM>) would always be assumed more recent than the corresponding release version (<EM>2.0.0.incubator</EM> in this example). Instead of just do hackery with the release version, such as adding a different suffix, I propose the following version numbering concept:</P>
+
+<OL>
+	<LI>Odd micro versions are always SNAPSHOTs, e.g. <EM>2.0.1-SNAPSHOT</EM></LI>
+	<LI>Even micro versions are always releases, e.g. <EM>2.0.2</EM></LI>
+</OL>
+
+
+<P>This way, a release is always more recent than the latest SNAPSHOT from which the release was built. This also means, that there is never an official release with an even micro version and there will never be an &quot;official&quot; SNAPSHOT with an even micro version. Thus both <EM>2.0.2-SNAPSHOT</EM> and <EM>2.0.3</EM> would be incorrect version numbers.</P>
+
+<P>So, when releasing project, the minor version of the release is the next increment to the current SNAPSHOT micro version. The new SNAPSHOT micro version is again the next increment of the release version. For example to release the current SNAPSHOT <EM>2.0.3-SNAPSHOT</EM>, the following version numbers are used:</P>
+
+<UL>
+	<LI>Current SNAPSHOT version: <EM>2.0.3-SNAPSHOT</EM></LI>
+	<LI>Release version: <EM>2.0.4</EM></LI>
+	<LI>Next SNAPSHOT version: <EM>2.0.5-SNAPSHOT</EM></LI>
+</UL>
+
+
+
+<P>The same mechanism applies when we decide to increment the minor or even the major version number: Up to the release, the SNAPSHOT remains with the former minor (or major) version and only on release, are the version numbers incremented. For example to release the current SNAPSHOT <EM>2.0.7-SNAPSHOT</EM> as <EM>2.1.0</EM>, the following numbering is used:</P>
+
+<UL>
+	<LI>Current SNAPSHOT version: <EM>2.0.7-SNAPSHOT</EM></LI>
+	<LI>Release version: <EM>2.1.0</EM></LI>
+	<LI>Next SNAPSHOT version: <EM>2.1.1-SNAPSHOT</EM></LI>
+</UL>
+
+
+
+<P>For branching, the branch always gets an incremented minor version number. For example when branching off <EM>2.1.1-SNAPSHOT</EM> the branch version would be <EM>2.2.1-SNAPSHOT</EM>. The problem then is: What would be the next minor version if <EM>2.1.1-SNAPSHOT</EM> would be released with an incremented minor version ? One solution could be to not only define the branch version number but to also increment the trunk minor version to the next minor version. In the example, this would raise the trunk version number to <EM>2.3.1-SNAPSHOT</EM> (from <EM>2.1.1-SNAPSHOT</EM>). Alternatively, we may just append a suffix indicating the branch, such as <EM>2.1.1.branch-SNAPSHOT</EM>.</P>
+
+<P>Both solutions actually have their drawbacks and maybe we never even need this, because I cannot imagine requiring a branch. The reason for this assumption is, that we release &quot;small&quot; bundles, which may easily and quickly be fixed and fix release be provided equally quickly.</P>
+
+
+<H2><A name="ThoughtsonReleaseManagement-ReleasesofSling"></A>Releases of Sling</H2>
+
+<P>For a starter we will have an initial release of Sling. This release will most probably encompass the following constituents:</P>
+
+<UL>
+	<LI>A standalone Java Application consisting of a single JAR file (or a ZIP) containing all bundles used by Sling</LI>
+	<LI>A web application (WAR file) containing all bundles used by Sling</LI>
+	<LI>All bundles packed into the standalone and web applications</LI>
+	<LI>The parent POM</LI>
+</UL>
+
+
+<P>After the initial release, further releases will only be made of single bundle (or a small number of bundles). Whenever we see a release fit, we will cut it. Some bundles will have longer and some bundles will have shorter release cycles. This all depends on the importance of the fixes and/or the enhancements applied as well as the needs by the user community.</P>
+
+
+<H3><A name="ThoughtsonReleaseManagement-PackagedBundleReleases"></A>Packaged Bundle Releases</H3>
+
+<P>For end users and beginners it is very helpfull to have completely package Sling application (or web application) in their hands to try it out and start build web applications. In addition, such prepackaging also serves well for prototype building and &quot;just testing it&quot;.</P>
+
+<P>For this reason, there will be packaged releases of the standalone and web application once or twice a year. These applications though would just be packagings of already released bundles.</P>
+
+
+<H2><A name="ThoughtsonReleaseManagement-ReferringtootherSlingProjects"></A>Referring to other Sling Projects</H2>
+
+<P>Most Sling projects depend on other Sling projects. After the initial release all Sling projects should only refer to other Sling projects by their release number. Only, if a projects uses non-released functionality of another project, should the SNAPSHOT version be referred to.</P>
+
+<P>Also, the release of a Sling project will not cause the dependencies of Sling projects using the released project to be incremented. That is, each Sling project always refers to the smallest possible version number of other Sling projects.</P>
+
+<P>This helps managing the dependency tree and prevents needless upgrades of bundles in running systems.</P>
+    </DIV>
+  </BODY>
+</HTML>
+

Added: websites/staging/sling/trunk/content/site/thread-handling.html
==============================================================================
--- websites/staging/sling/trunk/content/site/thread-handling.html (added)
+++ websites/staging/sling/trunk/content/site/thread-handling.html Wed Dec 12 09:16:44 2012
@@ -0,0 +1,63 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<HTML>
+  <HEAD>
+    <TITLE>Apache Sling - Thread Handling</TITLE>
+    <LINK rel="stylesheet" href="http://incubator.apache.org/sling/site/media.data/site.css" type="text/css" media="all">
+    <LINK rel="icon" href="http://incubator.apache.org/sling/site/media.data/favicon.ico">
+    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
+  </HEAD>
+  <BODY>
+    <DIV class="title">
+      <DIV class="logo">
+        <A href="http://incubator.apache.org/sling/site/index.html">
+          <IMG border="0" alt="Apache Sling" src="http://incubator.apache.org/sling/site/media.data/logo.png">
+        </A>
+      </DIV>
+      <DIV class="header">
+        <A href="http://incubator.apache.org/">
+          <IMG border="0" alt="Apache Incubator" src="http://incubator.apache.org/images/apache-incubator-logo.png">
+        </A>
+      </DIV>
+    </DIV>
+    <DIV class="menu">
+                                    <P style="display: none"></P>
+
+<UL>
+	<LI><A href="documentation.html" title="Documentation">Documentation</A></LI>
+	<LI><A href="advanced-topics.html" title="Advanced Topics">Advanced Topics</A></LI>
+	<LI><A href="development.html" title="Development">Development</A></LI>
+	<LI><SPAN class="nobr"><A href="http://incubator.apache.org/sling/site/downloads.cgi" title="Visit page outside Confluence" rel="nofollow">Downloads<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><A href="contributing.html" title="Contributing">Contributing</A></LI>
+	<LI><A href="links.html" title="Links">Links</A></LI>
+	<LI><SPAN class="nobr"><A href="http://cwiki.apache.org/SLING/faq.html" title="Visit page outside Confluence" rel="nofollow">FAQ<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://cwiki.apache.org/SLING/" title="Visit page outside Confluence" rel="nofollow">Wiki<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><A href="project-information.html" title="Project Information">Project Information</A></LI>
+	<LI><SPAN class="nobr"><A href="http://incubator.apache.org/sling/apidocs/sling5/index.html" title="Visit page outside Confluence" rel="nofollow">Sling 5 API<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/thanks.html" title="Visit page outside Confluence" rel="nofollow">Sponsors<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/sponsorship.html" title="Visit page outside Confluence" rel="nofollow">Sponsorship<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN>
+
+<IFRAME src="http://www.apache.org/ads/button.html" style="border-width:0; float: left" frameborder="0" scrolling="no" width="135" height="135"></IFRAME>
+<P style="height: 100px"></P>
+</LI>
+</UL>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        </DIV>
+    <DIV class="main">
+        <DIV class="breadcrump" style="font-size: 80%;">
+<A href="apache-sling.html" title="Apache Sling Website">Apache Sling Website</A>&nbsp;&gt;&nbsp;<A href="apache-sling.html" title="Apache Sling">Apache Sling</A>&nbsp;&gt;&nbsp;<A href="documentation.html" title="Documentation">Documentation</A>&nbsp;&gt;&nbsp;<A href="" title="Thread Handling">Thread Handling</A>
+        </DIV>
+<H1><A name="ThreadHandling-ThreadHandling"></A>Thread Handling</H1>
+
+<P>The Sling Threads module provides the concept of thread pools to manage per application thread pools.<BR>
+A thread pool manages a set of threads.</P>
+
+<P>The module is based on the JDK 1.5 thread factory.</P>
+
+<P>TBD</P>
+        <DIV class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
+Last modified by cziegeler@apache.org on 2008-02-18 07:12:03.0
+        </DIV>
+    </DIV>
+  </BODY>
+</HTML>
+

Added: websites/staging/sling/trunk/content/site/tutorials-how-tos.html
==============================================================================
--- websites/staging/sling/trunk/content/site/tutorials-how-tos.html (added)
+++ websites/staging/sling/trunk/content/site/tutorials-how-tos.html Wed Dec 12 09:16:44 2012
@@ -0,0 +1,71 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<HTML>
+  <HEAD>
+    <TITLE>Apache Sling - Tutorials & How-Tos</TITLE>
+    <LINK rel="stylesheet" href="http://sling.apache.org/site/media.data/site.css" type="text/css" media="all">
+    <LINK rel="icon" href="http://sling.apache.org/site/media.data/favicon.ico">
+    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
+  </HEAD>
+  <BODY>
+    <DIV class="title">
+      <DIV class="logo">
+        <A href="http://sling.apache.org/site/index.html">
+          <IMG border="0" alt="Apache Sling" src="http://sling.apache.org/site/media.data/logo.png">
+        </A>
+      </DIV>
+      <DIV class="header">
+        <A href="http://www.apache.org/">
+          <IMG border="0" alt="Apache" src="http://sling.apache.org/site/media.data/apache.png">
+        </A>
+      </DIV>
+    </DIV>
+    <DIV class="menu">
+<P><B>Documentation</B><BR class="atl-forced-newline">
+<A href="getting-started.html" title="Getting Started">Getting Started</A><BR class="atl-forced-newline">
+<A href="the-sling-engine.html" title="The Sling Engine">The Sling Engine</A><BR class="atl-forced-newline">
+<A href="development.html" title="Development">Development</A><BR class="atl-forced-newline">
+<A href="bundles.html" title="Bundles">Bundles</A><BR class="atl-forced-newline">
+<A href="" title="Tutorials & How-Tos">Tutorials &amp; How&#45;Tos</A><BR class="atl-forced-newline">
+<A href="configuration.html" title="Configuration">Configuration</A><BR class="atl-forced-newline">
+<A href="http://sling.apache.org/apidocs/sling6/index.html" class="external-link" rel="nofollow">API docs</A><BR class="atl-forced-newline">
+<A href="http://s.apache.org/sling.wiki" class="external-link" rel="nofollow">Wiki</A><BR class="atl-forced-newline">
+<A href="http://s.apache.org/sling.faq" class="external-link" rel="nofollow">FAQ</A><BR class="atl-forced-newline"></P>
+
+<P><B>Project info</B><BR class="atl-forced-newline">
+<A href="http://sling.apache.org/site/downloads.cgi" class="external-link" rel="nofollow">Downloads</A><BR class="atl-forced-newline">
+<A href="http://www.apache.org/licenses/" class="external-link" rel="nofollow">License</A><BR class="atl-forced-newline">
+<A href="contributing.html" title="Contributing">Contributing</A><BR class="atl-forced-newline">
+<A href="news.html" title="News">News</A><BR class="atl-forced-newline">
+<A href="links.html" title="Links">Links</A><BR class="atl-forced-newline">
+<A href="project-information.html" title="Project Information">Project Information</A><BR class="atl-forced-newline">
+<A href="https://issues.apache.org/jira/browse/SLING" class="external-link" rel="nofollow">Issue Tracker</A><BR class="atl-forced-newline">
+<A href="http://svn.apache.org/viewvc/sling/trunk" class="external-link" rel="nofollow">Browse Source Repository</A><BR class="atl-forced-newline">
+<A href="security.html" title="Security">Security</A><BR class="atl-forced-newline"></P>
+
+<P><B>Sponsorship</B><BR class="atl-forced-newline">
+<A href="http://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">Thanks</A><BR class="atl-forced-newline">
+<A href="http://www.apache.org/foundation/sponsorship.html" class="external-link" rel="nofollow">Become a Sponsor</A><BR>
+<A href="http://www.apache.org/foundation/buy_stuff.html" class="external-link" rel="nofollow">Buy Stuff</A></P>
+
+
+  <IFRAME src="http://www.apache.org/ads/button.html" style="border-width:0; float: left" frameborder="0" scrolling="no" width="135" height="135"></IFRAME>
+  <P style="height: 135px"></P>
+    </DIV>
+    <DIV class="main">
+        <DIV class="breadcrump" style="font-size: 80%;">
+<A href="apache-sling.html" title="Apache Sling Website">Apache Sling Website</A>&nbsp;&gt;&nbsp;<A href="apache-sling.html" title="Apache Sling">Apache Sling</A>&nbsp;&gt;&nbsp;<A href="documentation.html" title="Documentation">Documentation</A>&nbsp;&gt;&nbsp;<A href="" title="Tutorials & How-Tos">Tutorials &amp; How-Tos</A>
+        </DIV>
+<H1><A name="Tutorials%26How-Tos-Tutorials%26HowTos"></A>Tutorials &amp; How-Tos</H1>
+
+<UL><LI><A href="46-line-blog.html" title="46 Line Blog">46 Line Blog</A></LI><LI><A href="getting-resources-and-properties-in-sling.html" title="Getting Resources and Properties in Sling">Getting Resources and Properties in Sling</A></LI><LI><A href="how-to-manage-events-in-sling.html" title="How to Manage Events in Sling">How to Manage Events in Sling</A></LI><LI><A href="installing-and-upgrading-bundles.html" title="Installing and Upgrading Bundles">Installing and Upgrading Bundles</A></LI><LI><A href="jackrabbit-persistence.html" title="Jackrabbit Persistence">Jackrabbit Persistence</A></LI><LI><A href="testing-sling-based-applications.html" title="Testing Sling-based applications">Testing Sling-based applications</A></LI></UL>
+        <DIV class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
+Last modified by mykee on 2009-06-01 08:18:50.0
+        </DIV>
+        <DIV class="trademarkFooter">
+Apache Sling, Sling, Apache, the Apache feather logo, and the Apache Sling project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+        </DIV>
+    </DIV>
+  </BODY>
+</HTML>
+

Added: websites/staging/sling/trunk/content/site/url-decomposition.html
==============================================================================
--- websites/staging/sling/trunk/content/site/url-decomposition.html (added)
+++ websites/staging/sling/trunk/content/site/url-decomposition.html Wed Dec 12 09:16:44 2012
@@ -0,0 +1,204 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<HTML>
+  <HEAD>
+    <TITLE>Apache Sling - URL decomposition</TITLE>
+    <LINK rel="stylesheet" href="http://sling.apache.org/site/media.data/site.css" type="text/css" media="all">
+    <LINK rel="icon" href="http://sling.apache.org/site/media.data/favicon.ico">
+    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
+  </HEAD>
+  <BODY>
+    <DIV class="title">
+      <DIV class="logo">
+        <A href="http://sling.apache.org/site/index.html">
+          <IMG border="0" alt="Apache Sling" src="http://sling.apache.org/site/media.data/logo.png">
+        </A>
+      </DIV>
+      <DIV class="header">
+        <A href="http://www.apache.org/">
+          <IMG border="0" alt="Apache" src="http://sling.apache.org/site/media.data/apache.png">
+        </A>
+      </DIV>
+    </DIV>
+    <DIV class="menu">
+<P><B>Documentation</B><BR class="atl-forced-newline">
+<A href="getting-started.html" title="Getting Started">Getting Started</A><BR class="atl-forced-newline">
+<A href="the-sling-engine.html" title="The Sling Engine">The Sling Engine</A><BR class="atl-forced-newline">
+<A href="development.html" title="Development">Development</A><BR class="atl-forced-newline">
+<A href="bundles.html" title="Bundles">Bundles</A><BR class="atl-forced-newline">
+<A href="tutorials-how-tos.html" title="Tutorials & How-Tos">Tutorials &amp; How&#45;Tos</A><BR class="atl-forced-newline">
+<A href="configuration.html" title="Configuration">Configuration</A><BR class="atl-forced-newline">
+<A href="http://sling.apache.org/apidocs/sling6/index.html" class="external-link" rel="nofollow">API docs</A><BR class="atl-forced-newline">
+<A href="http://s.apache.org/sling.wiki" class="external-link" rel="nofollow">Wiki</A><BR class="atl-forced-newline">
+<A href="http://s.apache.org/sling.faq" class="external-link" rel="nofollow">FAQ</A><BR class="atl-forced-newline"></P>
+
+<P><B>Project info</B><BR class="atl-forced-newline">
+<A href="http://sling.apache.org/site/downloads.cgi" class="external-link" rel="nofollow">Downloads</A><BR class="atl-forced-newline">
+<A href="http://www.apache.org/licenses/" class="external-link" rel="nofollow">License</A><BR class="atl-forced-newline">
+<A href="contributing.html" title="Contributing">Contributing</A><BR class="atl-forced-newline">
+<A href="news.html" title="News">News</A><BR class="atl-forced-newline">
+<A href="links.html" title="Links">Links</A><BR class="atl-forced-newline">
+<A href="project-information.html" title="Project Information">Project Information</A><BR class="atl-forced-newline">
+<A href="https://issues.apache.org/jira/browse/SLING" class="external-link" rel="nofollow">Issue Tracker</A><BR class="atl-forced-newline">
+<A href="http://svn.apache.org/viewvc/sling/trunk" class="external-link" rel="nofollow">Browse Source Repository</A><BR class="atl-forced-newline">
+<A href="security.html" title="Security">Security</A><BR class="atl-forced-newline"></P>
+
+<P><B>Sponsorship</B><BR class="atl-forced-newline">
+<A href="http://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">Thanks</A><BR class="atl-forced-newline">
+<A href="http://www.apache.org/foundation/sponsorship.html" class="external-link" rel="nofollow">Become a Sponsor</A><BR>
+<A href="http://www.apache.org/foundation/buy_stuff.html" class="external-link" rel="nofollow">Buy Stuff</A></P>
+
+
+  <IFRAME src="http://www.apache.org/ads/button.html" style="border-width:0; float: left" frameborder="0" scrolling="no" width="135" height="135"></IFRAME>
+  <P style="height: 135px"></P>
+    </DIV>
+    <DIV class="main">
+        <DIV class="breadcrump" style="font-size: 80%;">
+<A href="apache-sling.html" title="Apache Sling Website">Apache Sling Website</A>&nbsp;&gt;&nbsp;<A href="apache-sling.html" title="Apache Sling">Apache Sling</A>&nbsp;&gt;&nbsp;<A href="documentation.html" title="Documentation">Documentation</A>&nbsp;&gt;&nbsp;<A href="the-sling-engine.html" title="The Sling Engine">The Sling Engine</A>&nbsp;&gt;&nbsp;<A href="" title="URL decomposition">URL decomposition</A>
+        </DIV>
+<H1><A name="URLdecomposition-URLdecomposition"></A>URL decomposition</H1>
+
+<P>During the <EM>Resource Resolution</EM> step, the client request URL is decomposed into the following parts:</P>
+
+<OL>
+	<LI><B>Resource Path</B> -  The longest substring of the request URL such that the resource path is either the complete request URL or the next character in the request URL after the resource path is a dot (<TT>.</TT>).</LI>
+	<LI><B>Selectors</B> -  If the first character in the request URL after the resource path is a dot, the string after the dot up to but not including the last dot before the next slash character or the end of the request URL. If the resource path spans the complete request URL no seletors exist. If only one dot follows the resource path before the end of the request URL or the next slash, also no selectors exist.</LI>
+	<LI><B>Extension</B> -  The string after the last dot after the resource path in the request URL but before the end of the request URL or the next slash after the resource path in the request URL.</LI>
+	<LI><B>Suffix Path</B> -  If the request URL contains a slash character after the resource path and optional selectors and extension, the path starting with the slash up to the end of the request URL is the suffix path. Otherwise, the suffix path is empty. Note, that after the resource path at least a dot must be in the URL to let Sling detect the resource path.</LI>
+</OL>
+
+
+<P>There's a cheat sheet on Day's dev page under <A href="http://dev.day.com/content/docs/en/cq/current/developing/sling_cheatsheet.html" class="external-link" rel="nofollow">http://dev.day.com/content/docs/en/cq/current/developing/sling_cheatsheet.html</A> available to get you familiar with the URL decomposition of Sling.</P>
+
+<P><B>Examples</B>: Assume there is a Resource at <TT>/a/b</TT>, which has no children.</P>
+
+<DIV class="table-wrap">
+<TABLE class="confluenceTable"><TBODY>
+<TR>
+<TH class="confluenceTh"> URI </TH>
+<TH class="confluenceTh"> Resource Path </TH>
+<TH class="confluenceTh"> Selectors </TH>
+<TH class="confluenceTh"> Extension </TH>
+<TH class="confluenceTh"> Suffix </TH>
+<TH class="confluenceTh"> Resource Found </TH>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b                      </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> null  </TD>
+<TD class="confluenceTd"> null </TD>
+<TD class="confluenceTd"> null       </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b.html                 </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> null  </TD>
+<TD class="confluenceTd"> html </TD>
+<TD class="confluenceTd"> null       </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b.s1.html              </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> s1    </TD>
+<TD class="confluenceTd"> html </TD>
+<TD class="confluenceTd"> null       </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b.s1.s2.html           </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> s1.s2 </TD>
+<TD class="confluenceTd"> html </TD>
+<TD class="confluenceTd"> null       </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b/c/d                  </TD>
+<TD class="confluenceTd"> /a/b/c/d </TD>
+<TD class="confluenceTd"> null  </TD>
+<TD class="confluenceTd"> null </TD>
+<TD class="confluenceTd"> null       </TD>
+<TD class="confluenceTd"> no! </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b./c/d                  </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> null  </TD>
+<TD class="confluenceTd"> null </TD>
+<TD class="confluenceTd"> /c/d       </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b.html/c/d             </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> null  </TD>
+<TD class="confluenceTd"> html </TD>
+<TD class="confluenceTd"> /c/d       </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b.s1.html/c/d          </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> s1    </TD>
+<TD class="confluenceTd"> html </TD>
+<TD class="confluenceTd"> /c/d       </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b.s1.s2.html/c/d       </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> s1.s2 </TD>
+<TD class="confluenceTd"> html </TD>
+<TD class="confluenceTd"> /c/d       </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b/c/d.s.txt            </TD>
+<TD class="confluenceTd"> /a/b/c/d </TD>
+<TD class="confluenceTd"> s  </TD>
+<TD class="confluenceTd"> txt </TD>
+<TD class="confluenceTd"> null </TD>
+<TD class="confluenceTd"> no! </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b.html/c/d.s.txt       </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> null  </TD>
+<TD class="confluenceTd"> html </TD>
+<TD class="confluenceTd"> /c/d.s.txt </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b.s1.html/c/d.s.txt    </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> s1    </TD>
+<TD class="confluenceTd"> html </TD>
+<TD class="confluenceTd"> /c/d.s.txt </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> /a/b.s1.s2.html/c/d.s.txt </TD>
+<TD class="confluenceTd"> /a/b </TD>
+<TD class="confluenceTd"> s1.s2 </TD>
+<TD class="confluenceTd"> html </TD>
+<TD class="confluenceTd"> /c/d.s.txt </TD>
+<TD class="confluenceTd"> yes </TD>
+</TR>
+</TBODY></TABLE>
+</DIV>
+
+
+<DIV class="panelMacro"><TABLE class="infoMacro"><COLGROUP><COL width="24"><COL></COLGROUP><TR><TD valign="top"><IMG src="https://cwiki.apache.org/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></TD><TD><B>Automated tests and examples</B><BR>The <A href="http://svn.apache.org/repos/asf/sling/trunk/bundles/engine/src/test/java/org/apache/sling/engine/impl/request/SlingRequestPathInfoTest.java" class="external-link" rel="nofollow">SlingRequestPathInfoTest</A> demonstrates and tests this decomposition. Feel free to suggest additional tests that help clarify how this works!</TD></TR></TABLE></DIV>
+
+        <DIV class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
+Last modified by edn on 2011-07-16 11:22:49.0
+        </DIV>
+        <DIV class="trademarkFooter">
+Apache Sling, Sling, Apache, the Apache feather logo, and the Apache Sling project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+        </DIV>
+    </DIV>
+  </BODY>
+</HTML>
+

Added: websites/staging/sling/trunk/content/site/usecases.html
==============================================================================
--- websites/staging/sling/trunk/content/site/usecases.html (added)
+++ websites/staging/sling/trunk/content/site/usecases.html Wed Dec 12 09:16:44 2012
@@ -0,0 +1,74 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<HTML>
+  <HEAD>
+    <TITLE>Apache Sling - UseCases</TITLE>
+    <LINK rel="stylesheet" href="http://incubator.apache.org/sling/site/media.data/site.css" type="text/css" media="all">
+    <LINK rel="icon" href="http://incubator.apache.org/sling/site/media.data/favicon.ico">
+    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
+  </HEAD>
+  <BODY>
+    <DIV class="title">
+      <DIV class="logo">
+        <A href="http://incubator.apache.org/sling/site/index.html">
+          <IMG border="0" alt="Apache Sling" src="http://incubator.apache.org/sling/site/media.data/logo.png">
+        </A>
+      </DIV>
+      <DIV class="header">
+        <A href="http://incubator.apache.org/">
+          <IMG border="0" alt="Apache Incubator" src="http://incubator.apache.org/images/apache-incubator-logo.png">
+        </A>
+      </DIV>
+    </DIV>
+    <DIV class="menu">
+                                    <P>
+
+<UL>
+	<LI><A href="index.html" title="Index">Home</A></LI>
+	<LI><A href="project-information.html" title="Project Information">Project Information</A></LI>
+	<LI><A href="" title="UseCases">Use Cases</A></LI>
+	<LI><A href="guides.html" title="Guides">Guides</A></LI>
+	<LI><A href="documentation.html" title="Documentation">Documentation</A></LI>
+	<LI><A href="plugins.html" title="Plugins">Plugins</A></LI>
+	<LI><A href="../SLING/faq.html" title="FAQ">FAQ</A></LI>
+	<LI><A href="links.html" title="Links">Links</A></LI>
+	<LI><A href="old-documentation.html" title="Old Documentation">Old Documentation</A></LI>
+	<LI><SPAN class="nobr"><A href="http://cwiki.apache.org/SLING/" title="Visit page outside Confluence" rel="nofollow">Wiki<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/thanks.html" title="Visit page outside Confluence" rel="nofollow">Sponsors<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/sponsorship.html" title="Visit page outside Confluence" rel="nofollow">Sponsorship<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+</UL>
+
+
+<P>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </DIV>
+    <DIV class="main">
+<H1><A name="UseCases-UseCasesforSling"></A>Use Cases for Sling</H1>
+
+<P>This page lists some use cases for Sling.</P>
+
+
+<H2><A name="UseCases-Wiki"></A>Wiki</H2>
+
+<P>Day built a Wiki system on Sling. Each Wiki page is a node (with optional child nodes) in the repository. As a page is requested, the respective node is accessed and through the applying Component is rendered.</P>
+
+<P>Thanks to the JCR Mapping and the resolution of the Component from the mapped Content, the system does not care for what actual node is addressed as long as there is a Content mapping and a Component capable of handling the Content.</P>
+
+<P>Thus in the tradition of REST, the attachement of a Wiki page, which happens to be in a node nested below the wiki page node is easily accessed using the URL of the wiki page attaching the relative path of the attachement  ode. The system resolves the URL to the attachement Content and just calls the attachement's Component to spool the attachement.</P>
+
+
+
+<H2><A name="UseCases-DigitalAssetManagement"></A>Digital Asset Management</H2>
+
+<P>Day has implemented a Digital Asset Management (DAM) Application based on Sling. Thanks to the flexibility of the Content/Component combo as well as the service registration/access functionality offered by OSGi, extending DAM for new content type is merely a matter of implementing one or two interfaces and registering the respective service(s).</P>
+
+<P>Again, the managed assets may be easily spooled by directly accessing them.</P>
+
+
+
+<H2><A name="UseCases-WebContentManagement"></A>Web Content Management</H2>
+
+<P>Last but not least, Sling offers itself very well to implementing a Web Content Management system. Thanks to the flexibility of rendering the output - remmber: the system does not care what to render, as long as the URL resolves to a Content object for which a Component exists, which is called to render the Content - providing support for Web Content authors (not PHP programmers but users out in the field) to build pages to their likings can easily be done.</P>
+    </DIV>
+  </BODY>
+</HTML>
+

Added: websites/staging/sling/trunk/content/site/version-policy.html
==============================================================================
--- websites/staging/sling/trunk/content/site/version-policy.html (added)
+++ websites/staging/sling/trunk/content/site/version-policy.html Wed Dec 12 09:16:44 2012
@@ -0,0 +1,380 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<HTML>
+  <HEAD>
+    <TITLE>Apache Sling - Version Policy</TITLE>
+    <LINK rel="stylesheet" href="http://sling.apache.org/site/media.data/site.css" type="text/css" media="all">
+    <LINK rel="icon" href="http://sling.apache.org/site/media.data/favicon.ico">
+    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
+  </HEAD>
+  <BODY>
+    <DIV class="title">
+      <DIV class="logo">
+        <A href="http://sling.apache.org/site/index.html">
+          <IMG border="0" alt="Apache Sling" src="http://sling.apache.org/site/media.data/logo.png">
+        </A>
+      </DIV>
+      <DIV class="header">
+        <A href="http://www.apache.org/">
+          <IMG border="0" alt="Apache" src="http://sling.apache.org/site/media.data/apache.png">
+        </A>
+      </DIV>
+    </DIV>
+    <DIV class="menu">
+<P><B>Documentation</B><BR class="atl-forced-newline">
+<A href="getting-started.html" title="Getting Started">Getting Started</A><BR class="atl-forced-newline">
+<A href="the-sling-engine.html" title="The Sling Engine">The Sling Engine</A><BR class="atl-forced-newline">
+<A href="development.html" title="Development">Development</A><BR class="atl-forced-newline">
+<A href="bundles.html" title="Bundles">Bundles</A><BR class="atl-forced-newline">
+<A href="tutorials-how-tos.html" title="Tutorials & How-Tos">Tutorials &amp; How&#45;Tos</A><BR class="atl-forced-newline">
+<A href="configuration.html" title="Configuration">Configuration</A><BR class="atl-forced-newline">
+<A href="http://sling.apache.org/apidocs/sling6/index.html" class="external-link" rel="nofollow">API docs</A><BR class="atl-forced-newline">
+<A href="http://s.apache.org/sling.wiki" class="external-link" rel="nofollow">Wiki</A><BR class="atl-forced-newline">
+<A href="http://s.apache.org/sling.faq" class="external-link" rel="nofollow">FAQ</A><BR class="atl-forced-newline"></P>
+
+<P><B>Project info</B><BR class="atl-forced-newline">
+<A href="http://sling.apache.org/site/downloads.cgi" class="external-link" rel="nofollow">Downloads</A><BR class="atl-forced-newline">
+<A href="http://www.apache.org/licenses/" class="external-link" rel="nofollow">License</A><BR class="atl-forced-newline">
+<A href="contributing.html" title="Contributing">Contributing</A><BR class="atl-forced-newline">
+<A href="news.html" title="News">News</A><BR class="atl-forced-newline">
+<A href="links.html" title="Links">Links</A><BR class="atl-forced-newline">
+<A href="project-information.html" title="Project Information">Project Information</A><BR class="atl-forced-newline">
+<A href="https://issues.apache.org/jira/browse/SLING" class="external-link" rel="nofollow">Issue Tracker</A><BR class="atl-forced-newline">
+<A href="http://svn.apache.org/viewvc/sling/trunk" class="external-link" rel="nofollow">Browse Source Repository</A><BR class="atl-forced-newline">
+<A href="security.html" title="Security">Security</A><BR class="atl-forced-newline"></P>
+
+<P><B>Sponsorship</B><BR class="atl-forced-newline">
+<A href="http://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">Thanks</A><BR class="atl-forced-newline">
+<A href="http://www.apache.org/foundation/sponsorship.html" class="external-link" rel="nofollow">Become a Sponsor</A><BR>
+<A href="http://www.apache.org/foundation/buy_stuff.html" class="external-link" rel="nofollow">Buy Stuff</A></P>
+
+
+  <IFRAME src="http://www.apache.org/ads/button.html" style="border-width:0; float: left" frameborder="0" scrolling="no" width="135" height="135"></IFRAME>
+  <P style="height: 135px"></P>
+    </DIV>
+    <DIV class="main">
+        <DIV class="breadcrump" style="font-size: 80%;">
+<A href="apache-sling.html" title="Apache Sling Website">Apache Sling Website</A>&nbsp;&gt;&nbsp;<A href="apache-sling.html" title="Apache Sling">Apache Sling</A>&nbsp;&gt;&nbsp;<A href="documentation.html" title="Documentation">Documentation</A>&nbsp;&gt;&nbsp;<A href="development.html" title="Development">Development</A>&nbsp;&gt;&nbsp;<A href="" title="Version Policy">Version Policy</A>
+        </DIV>
+<H1><A name="VersionPolicy-DRAFTVersionPolicy"></A>DRAFT Version Policy</H1>
+
+<P>This page is about how we assign versions to exported packages and bundles and defines when to increase which part of the version number.</P>
+
+<DIV class="panelMacro"><TABLE class="infoMacro"><COLGROUP><COL width="24"><COL></COLGROUP><TR><TD valign="top"><IMG src="https://cwiki.apache.org/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></TD><TD>Please note that this page is currently in draft stage and still being discussed.</TD></TR></TABLE></DIV>
+
+<DIV>
+<UL>
+    <LI><A href="#VersionPolicy-Introduction">Introduction</A></LI>
+    <LI><A href="#VersionPolicy-VersionNumberSyntax">Version Number Syntax</A></LI>
+    <LI><A href="#VersionPolicy-EvolutionofExportedPackageVersions">Evolution of Exported Package Versions</A></LI>
+    <LI><A href="#VersionPolicy-EvolutionofBundleVersions">Evolution of Bundle Versions</A></LI>
+    <LI><A href="#VersionPolicy-Examples">Examples</A></LI>
+    <LI><A href="#VersionPolicy-ImportingPackages">Importing Packages</A></LI>
+    <LI><A href="#VersionPolicy-References">References</A></LI>
+</UL></DIV>
+
+<H2><A name="VersionPolicy-Introduction"></A>Introduction</H2>
+
+<P>In comments to SLING-1176 Ian Boston wrote:</P>
+
+<BLOCKQUOTE>
+<P>The exports in bundle/api/pom.xml look like they might become problematic from a support point of view, although we probably can't avoid this. [...] [The problem is the] manual maintenance of the version numbers. (not a big problem but needs to be done)</P></BLOCKQUOTE>
+
+<P>I agree, that this is a problem. So let me reasonate on this a bit <IMG class="emoticon" src="https://cwiki.apache.org/confluence/images/icons/emoticons/wink.gif" height="20" width="20" align="absmiddle" alt="" border="0"></P>
+
+<P>As a reference you might want to read <A href="http://blog.meschberger.ch/2009/10/on-version-numbers.html" class="external-link" rel="nofollow">my blog post on version numbers</A> and also what the <A href="http://wiki.eclipse.org/index.php/Version_Numbering" class="external-link" rel="nofollow">Eclipse guys have to say</A> (great read, btw). The OSGi Alliance has come up with a good definition for <A href="http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf" class="external-link" rel="nofollow">Semantic Versioning</A> to which the definitions described below perfectly match.</P>
+
+<P>For Sling we have three kinds of version numbers:</P>
+
+<OL>
+	<LI>Big Sling Releases</LI>
+	<LI>Sling Bundles</LI>
+	<LI>Package Exports</LI>
+</OL>
+
+
+<P><B>Big Sling Releases</B></P>
+
+<P>For <EM>Big Sling releases</EM> we already have an ample solution in that we just use a single number increased from release to release. Just remember that a <EM>Big Sling release</EM> is a convenience release of existing released Sling bundles.</P>
+
+<P><B>Sling Bundles</B></P>
+
+<P>For <EM>Sling Bundles</EM> version numbers are just defined as the <TT>&lt;version&gt;</TT> element of the bundle's POM. The only restriction here is, that we decided to use even numbers for releases and odd numbers for SNAPSHOTs. Whether and when which version part is increased is not explicitly defined yet.</P>
+
+<P><B>Package Exports</B></P>
+
+<P>For <EM>Package Exports</EM> the situation is more problematic since there are a number of places to set exported package version number:</P>
+
+<UL>
+	<LI>In a <TT>packageinfo</TT> file inside the package (picked up by the Maven Bundle Plugin to set the export version)</LI>
+	<LI>Explicitly in the <TT>&lt;Export-Package&gt;</TT> element of the Maven Bundle Plugin configuration</LI>
+	<LI>By reference to the bundle version number using the <TT>${pom.version</TT>} variable.</LI>
+</UL>
+
+
+<P>Upto now, we mostly used the <TT>${pom.version</TT> notation linking the exported package version to the bundle version. Over time this mechanism leads to a number of problems:</P>
+
+<UL>
+	<LI>For bundles with more than one package exported, the exported packages will evolve independently. As a consequence their versionin should also evolve independently. An example of such a bundle is the Sling API bundle of course.</LI>
+	<LI>Linking the package export version number to the bundle version number confuses the actual semantics of both version numbers. The package export version number only indicates the version of the actual package while the bundle version number indicates a development state of the overall bundle. This will generally not be the same.</LI>
+	<LI>The version of the exported package is increased on each bundle release, even though nothing may have changed on the export. In such a situation the version of the export should stay the same.</LI>
+</UL>
+
+
+<P>That said, the reuse of the bundle version as the package export version still is probably the correct thing to do for legacy library wrappers.</P>
+
+<P>Consider for example the Sling API bundle, which exports 9 packages. Each of which may evolve independently. Now the <TT>resource</TT> package is extended causing a minor version increase. Should the version numbers of the other exports also be increased ? Thus acting as if there was some API change ?</P>
+
+<P>I would say, no. Particularly if some API implementation bundle is restricting the import version of the API implemented. Such an implementation would immediately stop working because the version has been increased. But since there has been no change, the implementation would still be correct.</P>
+
+<P>So, I think, we should evolve the exported package versions independently from each other and even independently from the bundle version.</P>
+
+<P>This places more burden on the developer when deciding on the exported package version - in fact this requires such a decision as compared to have Maven take the decision by just setting the bundle version.</P>
+
+<P>The only problem is: Where shall this be noted ? In the POM or in the <TT>packageinfo</TT> file ? If we would place the <TT>packageinfo</TT> file just beneath the class source files, I would say, in the <TT>packageinfo</TT> file.</P>
+
+<P>But this would require defining the class source locations as resource location in the POM (at least for <TT>packageinfo</TT>) files.</P>
+
+<P>I am not sure ....</P>
+
+<P>This has not been discussed at large, but I would assume, that the POM is still the correct place to take note of the version of the exported packages.</P>
+
+<P><B>Future</B></P>
+
+<P>The newest versions of the BND library also support an <TT>@Export</TT> annotation in the <TT>package-info.java</TT> pseudo class file. This pseudo class is supported starting with Java 5 to take package level annotations (like the <TT>@Export</TT> annotation) and as a replacement of the <TT>package-info.html</TT> file.</P>
+
+<P>Using this syntax something like the following would be easily possible:</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+/**
+ * This is the Package Level JavaDoc
+ */
+@Export(version = <SPAN class="code-quote">&quot;1.0&quot;</SPAN>)
+<SPAN class="code-keyword">package</SPAN> org.apache.sling.api.auth;
+<SPAN class="code-keyword">import</SPAN> aQute.bnd.annotation.Export;
+</PRE>
+</DIV></DIV>
+
+<P>See <A href="http://www.aqute.biz/Code/XBnd" class="external-link" rel="nofollow">Bnd Experimental</A> for details. Unfortunately the current Maven Bundle Plugin version does not support updating to the most recent BND library versions due to incompatibilities.</P>
+
+
+<H2><A name="VersionPolicy-VersionNumberSyntax"></A>Version Number Syntax</H2>
+
+<P>As a small reminder, this is how a version number is constructed:  In OSGi version numbers are composed of four (4) segments: 3 integers and a string named major.minor.micro.qualifier.</P>
+
+<P>Each segment captures a different intent:</P>
+
+<UL>
+	<LI>the major segment indicates breakage in the API</LI>
+	<LI>the minor segment indicates <EM>externally visible</EM> changes</LI>
+	<LI>the micro segment indicates bug fixes</LI>
+	<LI>the qualifier segment is not generally used but may be used to convey more information about a particular build, such as a build time or an SVN revision number.</LI>
+</UL>
+
+
+
+<H2><A name="VersionPolicy-EvolutionofExportedPackageVersions"></A>Evolution of Exported Package Versions</H2>
+
+<P>Version numbers of exported packages evolve independently from each other. Depending on the changes applied, the micro, minor, or major segement is increased. Whenever the major segment is increased, the minor and micro segments are reset to zero. Whenever the minor segment is increased, the micro segment is reset to zero.</P>
+
+<P>Segments are increased according to the above listing.</P>
+
+<P>This requires committers to think well about changes they apply to exported packages:</P>
+
+<UL>
+	<LI>Removing interfaces, methods or constants is likely an API breakage and thus requires a major version increase. In Sling we try to prevent this from happening.</LI>
+	<LI>Adding new methods to interfaces is likely just an <EM>externally visible</EM> change and thus requires a minor version increase</LI>
+	<LI>Fixing a bug in an exported class just requires a minor version increase.</LI>
+</UL>
+
+
+<P>JavaDoc updates generally do not constitute a reason to evolve the version number. The exception is that if the JavaDoc update is caused by a API limitation, it might be conceivable to increase the version number of the exported package. A decision on this will have to be taken on a case-by-case basis.</P>
+
+
+<H2><A name="VersionPolicy-EvolutionofBundleVersions"></A>Evolution of Bundle Versions</H2>
+
+<P>Version numbers of bundles evolve depending on the evolution of the exported packages but also depending on the evolution of the private code, which is not exported.</P>
+
+<P>As a rule of thumb, the following reasons apply for increasing the segments of bundle version numbers:</P>
+
+<UL>
+	<LI>Increasing the major version number of any of the exported packages or restructuring the bundle such that major parts are removed from the bundle (and either completely removed or moved to other bundle(s)).</LI>
+	<LI>Increasing the minor version number of any of the exported packages or refactoring the internal code or implementing a package exported by another bundle whose minor (or even major) version number has increased. Also functional extensions of the internal bundle classes consitutes a reason to increase the minor version number.</LI>
+	<LI>Increasing the micro version number of any of the exported packages or bug fixes.</LI>
+</UL>
+
+
+<P>Note, that this definition does not require the bundle and epxorted package version numbers to be synchronized in any way. While doing so might help in a first or second step, over time it will become close to impossible to keep the versions in sync. So rather than trying to keep the versions in sync, we should make sure, we increase the versions correctly.</P>
+
+
+<H2><A name="VersionPolicy-Examples"></A>Examples</H2>
+
+
+<H3><A name="VersionPolicy-PureAPIBundle"></A>Pure API Bundle</H3>
+
+<P>An example of an almost <EM>Pure API Bundle</EM> is the Sling API bundle. This bundle exports 9 packages. Some are really stable &ndash; e.g. the <TT>org.apache.sling.api</TT> package or the <TT>org.apache.sling.wrappers</TT> package &ndash; and some are being worked on at the moment &ndash; e.g. the <TT>org.apache.sling.resource</TT> package.</P>
+
+<P>To not break existing users of the unmodified packages, the exported versions of these packages must not be increased.</P>
+
+<P>To signal to users of evolving packages, that there might be new and interesting functionality, the version number must be increased according to above definition. This also conveys to the implementor(s) of the API, that they have to take some action.</P>
+
+
+<P>A hypothetical evolution of version numbers shown on two packages and the bundle version might be as follows</P>
+
+<DIV class="table-wrap">
+<TABLE class="confluenceTable"><TBODY>
+<TR>
+<TD class="confluenceTd"> Description </TD>
+<TD class="confluenceTd"> <TT>api</TT> package </TD>
+<TD class="confluenceTd"> <TT>resource</TT> package </TD>
+<TD class="confluenceTd"> bundle </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> Initial Release </TD>
+<TD class="confluenceTd"> 1.0.0 </TD>
+<TD class="confluenceTd"> 1.0.0 </TD>
+<TD class="confluenceTd"> 1.0.0 </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> Bug fix in a <TT>resource</TT> class </TD>
+<TD class="confluenceTd"> 1.0.0 </TD>
+<TD class="confluenceTd"> 1.0.2 </TD>
+<TD class="confluenceTd"> 1.0.2 </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> New API in the <TT>resource</TT> package </TD>
+<TD class="confluenceTd"> 1.0.0 </TD>
+<TD class="confluenceTd"> 1.1.0 </TD>
+<TD class="confluenceTd"> 1.1.0 </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> New API in the <TT>api</TT> package </TD>
+<TD class="confluenceTd"> 1.1.0 </TD>
+<TD class="confluenceTd"> 1.1.0 </TD>
+<TD class="confluenceTd"> 1.2.0 </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> API breakage in the <TT>api</TT> package </TD>
+<TD class="confluenceTd"> 2.0.0 </TD>
+<TD class="confluenceTd"> 1.1.0 </TD>
+<TD class="confluenceTd"> 2.0.0 </TD>
+</TR>
+</TBODY></TABLE>
+</DIV>
+
+
+
+<H3><A name="VersionPolicy-ImplementationBundleprovidingAPI"></A>Implementation Bundle providing API</H3>
+
+<P>An example of such a hybrid bundle is the Sling Engine bundle. This bundle exports two packages themselves defining API and contains a number of internal packages which actually implement parts of the Sling API.</P>
+
+<P>A hypothetical evolution of version numbers shown on one exported package and the bundle version might be as follows</P>
+
+<DIV class="table-wrap">
+<TABLE class="confluenceTable"><TBODY>
+<TR>
+<TD class="confluenceTd"> Description </TD>
+<TD class="confluenceTd"> <TT>engine</TT> package </TD>
+<TD class="confluenceTd"> bundle </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> Initial Release </TD>
+<TD class="confluenceTd"> 1.0.0 </TD>
+<TD class="confluenceTd"> 1.0.0 </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> Bug fix in a <TT>engine</TT> class </TD>
+<TD class="confluenceTd"> 1.0.2 </TD>
+<TD class="confluenceTd"> 1.0.2 </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> Bug fix in an internal calss </TD>
+<TD class="confluenceTd"> 1.0.2 </TD>
+<TD class="confluenceTd"> 1.0.4 </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> New API in the <TT>engine</TT> package </TD>
+<TD class="confluenceTd"> 1.1.0 </TD>
+<TD class="confluenceTd"> 1.1.0 </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> Implement new API from <TT>api</TT> 1.1.0 </TD>
+<TD class="confluenceTd"> 1.1.0 </TD>
+<TD class="confluenceTd"> 1.2.0 </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> Refactor internal classes </TD>
+<TD class="confluenceTd"> 1.1.0 </TD>
+<TD class="confluenceTd"> 1.3.0 </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> Implement API from <TT>api</TT> 2.0.0 </TD>
+<TD class="confluenceTd"> 1.1.0 </TD>
+<TD class="confluenceTd"> 2.0.0 </TD>
+</TR>
+</TBODY></TABLE>
+</DIV>
+
+
+
+<H3><A name="VersionPolicy-PureImplementationBundle"></A>Pure Implementation Bundle</H3>
+
+<P>For Pure Implementation Bundles only the bundle version numbers are maintained because there is no exported package whose version number needs to be managed. This makes the decision process of version number evolution very simple.</P>
+
+
+<H2><A name="VersionPolicy-ImportingPackages"></A>Importing Packages</H2>
+
+
+<P>When importing packages a version number will automatically be generated by the Maven Bundle Plugin as follows:</P>
+
+<UL>
+	<LI>If the providing package exports a package with an explicit version number, that exact version number will be used as the lower bound</LI>
+	<LI>If such a lower bound exists, the upper bound is exclusive the next major version number.</LI>
+</UL>
+
+
+<P>For example if importing the <TT>api</TT> package exported at version 1.2.3, the <TT>Import-Package</TT> statement is generated as</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+Import-Package: api;version=[1.2.3,2.0.0)
+</PRE>
+</DIV></DIV>
+
+
+<P>This default works well for consumers of the API, since according to above definitions an API is guaranteed to not contain breakages if the major version number is not increased.</P>
+
+<P>For bundles implementing the API, this default does not work well, since from their point of view an <EM>externally visible</EM> change in fact constitutes a breakage, because the implementation is not complete. So if a bundle implements a package a manually crafted import version should be defined which includes the export version of the defining bundle but excludes the next minor version.</P>
+
+<P>For example implementing the <TT>api</TT> package exported at version 1.2.3, would require the following manually created <TT>Import-Package</TT> statement:</P>
+
+<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
+<PRE class="code-java">
+Import-Package: api;version=[1.2.3,1.3.0)
+</PRE>
+</DIV></DIV>
+
+<P>This allows for the implementation to work correctly with bug fixed package exports but as soon as there are any <EM>externally visible</EM> changes, the implementation bundle has to be adapted &ndash; even if this just means increasing the upper version bound in the <TT>Import-Package</TT> statement thus guaranteeing compliance (again).</P>
+
+<P><B>Future</B></P>
+
+<P>Recent versions of the BND library support automatic differntiation between use and implementation of API and to set the import version ranges accordingly. See <A href="http://www.aqute.biz/Code/XBnd" class="external-link" rel="nofollow">Bnd Experimental</A> for details. Unfortunately the current Maven Bundle Plugin version does not support updating to the most recent BND library versions due to incompatibilities.</P>
+
+<H2><A name="VersionPolicy-References"></A>References</H2>
+
+<P><A href="http://markmail.org/thread/zshobgjwtqrncajt" class="external-link" rel="nofollow">Version Numbers</A> &ndash; The mail thread discussing version numbering<BR>
+<A href="http://blog.meschberger.ch/2009/10/on-version-numbers.html" class="external-link" rel="nofollow">On Version Numbers</A> &ndash; Blog about version numbers<BR>
+<A href="http://wiki.eclipse.org/index.php/Version_Numbering" class="external-link" rel="nofollow">Version Numbering</A> &ndash; An Eclipse paper on assigning version numbers. Very good read.<BR>
+<A href="http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf" class="external-link" rel="nofollow">Semantic Versioning</A> &ndash; An OSGi Alliance paper on semantic versioning.<BR>
+<A href="http://www.aqute.biz/Code/XBnd" class="external-link" rel="nofollow">Bnd Experimental</A> &ndash; Experimental extensions to the BND library; unfortunately these extensions are not yet usable with Maven Bundle Plugin 2.1.0 due to API changes in the BND library not supported by the plugin.</P>
+        <DIV class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
+Last modified by fmeschbe on 2010-08-09 06:28:46.0
+        </DIV>
+        <DIV class="trademarkFooter">
+Apache Sling, Sling, Apache, the Apache feather logo, and the Apache Sling project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
+        </DIV>
+    </DIV>
+  </BODY>
+</HTML>
+