Modified: websites/staging/sling/trunk/content/documentation/the-sling-engine/the-sling-launchpad.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/the-sling-engine/the-sling-launchpad.html (original) +++ websites/staging/sling/trunk/content/documentation/the-sling-engine/the-sling-launchpad.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - The Sling Launchpad</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,7 +101,18 @@ <h1>The Sling Launchpad</h1> - <div class="toc"> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<div class="toc"> <ul> <li><a href="#sling-home">Sling Home</a></li> <li><a href="#command-line-options">Command Line Options</a><ul> @@ -109,7 +131,7 @@ </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="/documentation/development/embedding-sling.html">Embedding Sling</a> page.</p> -<h2 id="sling-home">Sling Home</h2> +<h2 id="sling-home">Sling Home<a class="headerlink" href="#sling-home" title="Permanent link">¶</a></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> @@ -121,9 +143,9 @@ <li><code>oak</code> - The directory in which the Apache Jackrabbit Oak JCR Repository is started ( only applicable when using Apache Jackrabbit Oak with the SegmentNodeStoreBackend ).</li> <li><code>logs</code> -- Contains the log files generated by Sling. By default this contains the error.log and its rotated generations.</li> </ul> -<h2 id="command-line-options">Command Line Options</h2> +<h2 id="command-line-options">Command Line Options<a class="headerlink" href="#command-line-options" title="Permanent link">¶</a></h2> <p>The Java Standalone Application supports a number of command line options, which influence the operation of the launch process.</p> -<table> +<table class="table"> <thead> <tr> <th>Option</th> @@ -211,7 +233,7 @@ <li>The <code>SLING_HOME</code> environment variable</li> <li>If none of the above resolves to a non-null value, the default value of <code>sling</code> is assumed</li> </ol> -<h3 id="control-port">Control Port</h3> +<h3 id="control-port">Control Port<a class="headerlink" href="#control-port" title="Permanent link">¶</a></h3> <p>When starting the Sling Standalone Application with the <code>start</code> command line option, a TCP port is opened. The interface and port is configurable with the <code>-j</code> command line option. The address of the interface and the actual port used are written to the <code>$\{sling.home}/conf/controlport</code> file. So technically the <code>-j</code> option is not required for the <code>status</code> and <code>stop</code> 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> @@ -222,7 +244,7 @@ <p>Suggestions: <em> Do not allow the control port to be opened on an externally visible interface. Using the localhost/127.0.0.1 is just sufficient. </em> Make sure only legitimate users have access to the installation folder of Sling (<code>${sling.home}</code>).</p> -<h3 id="shutdown-hook">Shutdown Hook</h3> +<h3 id="shutdown-hook">Shutdown Hook<a class="headerlink" href="#shutdown-hook" title="Permanent link">¶</a></h3> <p>By default the Sling Launchpad standalone application installs a Shutdown Hook with the Java Runtime to make sure the framework is properly terminated in case of a Java termination. In some situations or setups you want to control shutdown of Sling yourselves, so Sling supports a command line option <code>-n</code> to prevent the installation of a shutdown hook.</p> @@ -230,11 +252,11 @@ line option <code>-n</code> to prevent t the shutdown hook is installed as expected. If the property is set to anything other than <code>true</code>, e.g. <code>false</code>, the shutdown hook is not installed.</p> <p>If you are embedding the Sling Launchpad application's <code>Main</code> class, the <code>sling.shutdown.hook</code> property can also be set as a member of the <code>props</code> map handed to the <code>Main</code> constructor.</p> -<h2 id="servlet-parameters">Servlet Parameters</h2> +<h2 id="servlet-parameters">Servlet Parameters<a class="headerlink" href="#servlet-parameters" title="Permanent link">¶</a></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 <code>sling.properties</code> file. One exception to this rule is the <code>sling.home</code> parameter, which is used to set the value of the <code>sling.home</code> 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 <code>sling.home</code> folders for Sling Web Applications without the <code>sling.home</code> servlet parameter are all located in the <code>sling</code> folder in the current working directory as reported by the <code>user.dir</code> system property. The name of the actual directory is derived from the Web Application Context Path by replacing all slash characters <code>/</code> by underscore characters <code>_</code>. For the root context a single underscore character <code>_</code> is used.</p> <p>Examples:</p> -<table> +<table class="table"> <thead> <tr> <th>Servlet Context</th> @@ -258,7 +280,7 @@ handed to the <code>Main</code> construc </table> <p>Starting with Launchpad Base 2.2.2 the fixed prefix <code>sling</code> is configurable with the <code>sling.home.prefix</code> system property. If this property is set the value used as the prefix.</p> <p>Examples: Assume the <code>sling.home.prefix</code> system property is set to <code>/var/sling</code></p> -<table> +<table class="table"> <thead> <tr> <th>Servlet Context</th> @@ -280,16 +302,16 @@ handed to the <code>Main</code> construc </tr> </tbody> </table> -<h2 id="slingproperties">sling.properties</h2> +<h2 id="slingproperties">sling.properties<a class="headerlink" href="#slingproperties" title="Permanent link">¶</a></h2> <p>The <code>sling.properties</code> 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 <code>sling.properties</code> file installed when Sling is first started.</p> <p>One thing to note is, that the <code>sling.properties</code> 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 <code>${name}</code> notation. Such property references may even be nested as in</p> <div class="codehilite"><pre>java.packages=<span class="cp">${</span><span class="n">jre</span><span class="o">-</span><span class="err">$</span><span class="p">{</span><span class="n">java</span><span class="o">.</span><span class="n">specification</span><span class="o">.</span><span class="n">version</span><span class="cp">}</span>} </pre></div> -<h2 id="components">Components</h2> +<h2 id="components">Components<a class="headerlink" href="#components" title="Permanent link">¶</a></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 id="launchpad-base">Launchpad Base</h3> +<h3 id="launchpad-base">Launchpad Base<a class="headerlink" href="#launchpad-base" title="Permanent link">¶</a></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> @@ -307,10 +329,10 @@ handed to the <code>Main</code> construc </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 id="launchpad-bundles">Launchpad Bundles</h3> +<h3 id="launchpad-bundles">Launchpad Bundles<a class="headerlink" href="#launchpad-bundles" title="Permanent link">¶</a></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 <code>resources/9</code> where <code>9</code> is a start level which is assigned to the bundles as they are installed. The special start level <code>0</code> 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> -<table> +<table class="table"> <thead> <tr> <th>Start Level</th> @@ -346,7 +368,7 @@ handed to the <code>Main</code> construc </tr> </tbody> </table> -<h3 id="launchpad-app-and-launchpad-webapp">Launchpad App and Launchpad WebApp</h3> +<h3 id="launchpad-app-and-launchpad-webapp">Launchpad App and Launchpad WebApp<a class="headerlink" href="#launchpad-app-and-launchpad-webapp" title="Permanent link">¶</a></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>
Modified: websites/staging/sling/trunk/content/documentation/the-sling-engine/url-decomposition.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/the-sling-engine/url-decomposition.html (original) +++ websites/staging/sling/trunk/content/documentation/the-sling-engine/url-decomposition.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - URL decomposition</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,7 +101,18 @@ <h1>URL decomposition</h1> - <p>During the <em>Resource Resolution</em> step, the client request URL is decomposed into the following parts:</p> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p>During the <em>Resource Resolution</em> step, the client request URL is decomposed into the following parts:</p> <ol> <li><strong>Resource Path</strong> - 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 (<code>.</code>).</li> <li><strong>Selectors</strong> - 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> @@ -99,7 +121,7 @@ </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">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><em>Examples</em>: Assume there is a Resource at <code>/a/b</code>, which has no children.</p> -<table> +<table class="table"> <thead> <tr> <th>URI</th> Modified: websites/staging/sling/trunk/content/documentation/the-sling-engine/url-to-script-resolution.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/the-sling-engine/url-to-script-resolution.html (original) +++ websites/staging/sling/trunk/content/documentation/the-sling-engine/url-to-script-resolution.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - URL to Script Resolution</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,7 +101,18 @@ <h1>URL to Script Resolution</h1> - <div class="toc"> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<div class="toc"> <ul> <li><a href="#fundamental-scripts-and-servlets-are-equal">Fundamental: Scripts and Servlets are equal</a></li> <li><a href="#base-resource-type-inheritance">Base: Resource Type Inheritance</a></li> @@ -113,13 +135,13 @@ JCR repository, the resource type in a s <p>For the Whole Truth about script resolution, see the <a href="http://svn.apache.org/repos/asf/sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/helper/ScriptSelectionTest.java">ScriptSelectionTest</a> class. If you see interesting cases that are not covered there, please let us know via the Sling users mailing list.</p> <p>TODO: explain super types, servlet path mappings, node type resource types (<code>my:type -> my/type</code>) </p> -<h2 id="fundamental-scripts-and-servlets-are-equal">Fundamental: Scripts and Servlets are equal</h2> +<h2 id="fundamental-scripts-and-servlets-are-equal">Fundamental: Scripts and Servlets are equal<a class="headerlink" href="#fundamental-scripts-and-servlets-are-equal" title="Permanent link">¶</a></h2> <p>In the following discussion, I will write about scripts. This will always include servlets as well. In fact, internally, Sling only handles with Servlets, whereas scripts are packed inside a Servlet wrapping and representing the script. </p> -<h2 id="base-resource-type-inheritance">Base: Resource Type Inheritance</h2> +<h2 id="base-resource-type-inheritance">Base: Resource Type Inheritance<a class="headerlink" href="#base-resource-type-inheritance" title="Permanent link">¶</a></h2> <p>While not exactly part of our discussion, resource type inheritance as implemented for <a href="https://issues.apache.org/jira/browse/SLING-278">SLING-278</a> plays a vital role in script resolution. </p> <p>Each resource type may have a resource super type, which may be defined in various ways. One example is having a <code>sling:resourceSuperType</code> property in the node addressed by the resource type. See <a href="http://www.mail-archive.com/sling-dev@incubator.apache.org/msg02365.html">http://www.mail-archive.com/sling-dev@incubator.apache.org/msg02365.html</a> and <a href="http://issues.apache.org/jira/browse/SLING-278">SLING-278</a> for more details. </p> <p>If a resource type has no explicit resource super type, the resource super type is assumed to be "sling/servlet/default". That is the resource type used for default script selection is also acting as a basic resource type much like java.lang.Object does for other types in the Java language. </p> -<h2 id="script-locations">Script Locations</h2> +<h2 id="script-locations">Script Locations<a class="headerlink" href="#script-locations" title="Permanent link">¶</a></h2> <p>Scripts are looked up in a series of locations defined by the ResourceResolver.getSearchPath() and the resource type (and resource super types) of the requested resource: </p> <div class="codehilite"><pre><span class="p">{</span><span class="n">scriptPathPrefix</span><span class="p">}</span><span class="o">/</span><span class="p">{</span><span class="n">resourceTypePath</span><span class="p">}</span> </pre></div> @@ -145,10 +167,10 @@ covered there, please let us know via th </pre></div> -<h2 id="all-requests-are-not-equal">All requests are NOT equal</h2> +<h2 id="all-requests-are-not-equal">All requests are NOT equal<a class="headerlink" href="#all-requests-are-not-equal" title="Permanent link">¶</a></h2> <p>GET and HEAD request methods are treated differently than the other request methods. Only for GET and HEAD requests will the request selectors and extension be considered for script selection. For other requests the servlet or script name (without the script extension) must exactly match the request method. </p> <p>That is for a PUT request, the script must be PUT.esp or PUT.jsp. For a GET request with a request extension of html, the script name may be html.esp or GET.esp. </p> -<h2 id="scripts-for-get-requests">Scripts for GET requests</h2> +<h2 id="scripts-for-get-requests">Scripts for GET requests<a class="headerlink" href="#scripts-for-get-requests" title="Permanent link">¶</a></h2> <p>Apart for supporting scripts named after the request method, scripts handling GET and HEAD requests may be named differently for Sling to support a more elaborate processing order. </p> <p>Depending on whether request selectors are considered, a script may have two forms: </p> <ul> @@ -162,14 +184,14 @@ covered there, please let us know via th <li><code>{scriptExtension}</code> - The extension, e.g. "esp" or "jsp", identifying the scripting langauage used. </li> <li><code>{selectorStringPath}</code> - The selector string converted to a path, along the lines of <code>selectorString.replace('.', '/')</code>. If less selectors are specified in the script name than given in the request, the script will only be taken into consideration if the given selectors are the <strong>first</strong> selectors in the request. This means <em>sel1/sel2.html.jsp</em> will be a candidate for the request url <em>/content/test.sel1.sel2.sel3.html</em> but not for <em>/content/test.sel3.sel1.sel2.html</em>. So the order of selectors is relevant!</li> </ul> -<h2 id="priority">Priority</h2> +<h2 id="priority">Priority<a class="headerlink" href="#priority" title="Permanent link">¶</a></h2> <p>The rules for script path priorization is defined as follows: </p> <ul> <li>The more request selectors are matched, the better </li> <li>A script including the request extension matches better than one without a request extension (for html only) </li> <li>A script found earlier matches better than a script found later in the processing order. This means, that script closer to the original resource type in the resource type hierarchy is considered earlier. </li> </ul> -<h2 id="examples">Examples</h2> +<h2 id="examples">Examples<a class="headerlink" href="#examples" title="Permanent link">¶</a></h2> <p>Let's consider the following script paths for a request of a resource whose resource type is <code>sling\sample</code> and the request selectors are <em>print.a4</em> and the request extension is <em>html</em>: </p> <ul> <li>(0) GET.esp </li> Modified: websites/staging/sling/trunk/content/documentation/the-sling-engine/wrap-or-decorate-resources.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/the-sling-engine/wrap-or-decorate-resources.html (original) +++ websites/staging/sling/trunk/content/documentation/the-sling-engine/wrap-or-decorate-resources.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - Wrap or Decorate Resources</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> Modified: websites/staging/sling/trunk/content/documentation/tutorials-how-tos.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/tutorials-how-tos.html (original) +++ websites/staging/sling/trunk/content/documentation/tutorials-how-tos.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - Tutorials & How-Tos</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,7 +101,18 @@ <h1>Tutorials & How-Tos</h1> - <ul> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<ul> <li><a href="/documentation/tutorials-how-tos/46-line-blog.html">46 Line Blog</a></li> <li><a href="/documentation/tutorials-how-tos/getting-resources-and-properties-in-sling.html">Getting Resources and Properties in Sling</a></li> <li><a href="/documentation/tutorials-how-tos/how-to-manage-events-in-sling.html">How to Manage Job in Sling</a></li> Modified: websites/staging/sling/trunk/content/documentation/tutorials-how-tos/46-line-blog.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/tutorials-how-tos/46-line-blog.html (original) +++ websites/staging/sling/trunk/content/documentation/tutorials-how-tos/46-line-blog.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - 46 Line Blog</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,16 +101,27 @@ <h1>46 Line Blog</h1> - <p>This tutorial is based on the first <em>Sling Gems</em> on dev.day.com: The <a href="http://dev.day.com/microsling/content/blogs/main/sling-46-lines-blog.html">Sling gems: a blog in 46 lines of code</a>. It has slightly been adapted to fit here.</p> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p>This tutorial is based on the first <em>Sling Gems</em> on dev.day.com: The <a href="http://dev.day.com/microsling/content/blogs/main/sling-46-lines-blog.html">Sling gems: a blog in 46 lines of code</a>. It has slightly been adapted to fit here.</p> <p>In this tutorial, the SlingPostServlet and the sling.js library are brought together using 46 (no kidding: <em>fourty-six</em>) lines of code to create a simple blog (or let's say <em>bloggish</em>) application.</p> <p>I used this example in my <a href="http://www.slideshare.net/bdelacretaz/rapid-jcr-applications-development-with-sling-1196003">Rapid JCR application development with Apache Sling</a> presentation at ApacheCon US 09 in Oakland (slides will be available soon), and I think it's a good testimony to the power and simplicity of Sling.</p> -<h2 id="audience">Audience</h2> +<h2 id="audience">Audience<a class="headerlink" href="#audience" title="Permanent link">¶</a></h2> <p>Although this is a simple sample, it requires some custom settings to work. If you're just starting with Sling, <a href="/documentation/getting-started/discover-sling-in-15-minutes.html">Discover Sling in 15 minutes</a> might be a better choice.</p> -<h2 id="step-0-start-configure-and-login-to-sling">Step 0: Start, configure and login to Sling</h2> +<h2 id="step-0-start-configure-and-login-to-sling">Step 0: Start, configure and login to Sling<a class="headerlink" href="#step-0-start-configure-and-login-to-sling" title="Permanent link">¶</a></h2> <p>See <a href="/documentation/development/getting-and-building-sling.html">Getting and Building Sling</a> for how to start Sling. Start it on port 8888 for the below links to work.</p> <p>For this sample we need the optional <em>org.apache.sling.samples.path-based.rtp</em> bundle, if it's not present in the <a href="http://localhost:8888/system/console/bundles">OSGi console</a>, install and start it. That bundle is not released yet so you might need to build it yourself, from its <a href="http://svn.apache.org/repos/asf/sling/trunk/samples/path-based-rtp">source</a>. The bundle must then appear in the <a href="http://localhost:8888/system/console/bundles">OSGI console's list of bundles</a>, with name = <em>org.apache.sling.samples.path-based.rtp</em> and status = <em>Active</em>.</p> <p>Then, login using <a href="http://localhost:8888/?sling:authRequestLogin=1">http://localhost:8888/?sling:authRequestLogin=1</a> which should prompt you for a username and password, use <em>admin</em> and <em>admin</em>. Once that's done, <a href="http://localhost:8888/index.html">http://localhost:8888/index.html</a> should say <em>You are currently logged in as user </em>admin<em> to workspace </em>default**.</p> -<h2 id="step-1-creating-content">Step 1: Creating content</h2> +<h2 id="step-1-creating-content">Step 1: Creating content<a class="headerlink" href="#step-1-creating-content" title="Permanent link">¶</a></h2> <p>The easiest way to create content in Sling is to use an HTTP POST request, let's use a simple HTML form:</p> <div class="codehilite"><pre><span class="nt"><html></span> <span class="nt"><body></span> @@ -136,7 +158,7 @@ If you get an error saying _javax.jcr.Ac </div> <p>At this point you're probably looking at an empty form with an URL ending in <em>foo</em>, if you used that for the title. Or <em>foo_0</em> or <em>foo_1</em> if other _foo_s already existed. Don't worry about not seeing your content, we'll fix that right away.</p> -<h2 id="step-2-wheres-my-content">Step 2: Where's my content?</h2> +<h2 id="step-2-wheres-my-content">Step 2: Where's my content?<a class="headerlink" href="#step-2-wheres-my-content" title="Permanent link">¶</a></h2> <p>To verify that our content has been created, we can have a look at the JSON data at <a href="http://localhost:8888/content/blog/foo.tidy.json">http://localhost:8888/content/blog/foo.tidy.json</a>, which should display our new node's values:</p> <div class="codehilite"><pre><span class="p">{</span> "<span class="n">jcr</span><span class="p">:</span><span class="n">primaryType</span>"<span class="p">:</span> "<span class="n">nt</span><span class="p">:</span><span class="n">unstructured</span>"<span class="p">,</span> @@ -162,7 +184,7 @@ If you get an error saying _javax.jcr.Ac <p>Reloading the form at <code>http://localhost:8888/content/blog/*.html</code> and creating a new post should now redirect to an editable version of the post, with the form fields correctly initialized.</p> <p>We can now create and edit posts; let's add some navigation, using more of the <em>sling.js</em> functionality. </p> -<h2 id="step-3-navigation">Step 3: Navigation</h2> +<h2 id="step-3-navigation">Step 3: Navigation<a class="headerlink" href="#step-3-navigation" title="Permanent link">¶</a></h2> <p>The <em>sling.js</em> library provides utilities to access and manipulate content. For our blog, we'll use the <code>getContent(path)</code> method to list the siblings of the current node.</p> <p>Add the following code to your script, after the <code>Sling.wizard()</code> call that was added in step 2:</p> <div class="codehilite"><pre><span class="nt"><h3></span>Navigation<span class="nt"></h3></span> @@ -185,7 +207,7 @@ If you get an error saying _javax.jcr.Ac <p>The rest of the javascript runs client-side, as it is not embedded in <code><% %></code> code markers, calls the <code>sling.getContent</code> method to get two levels of node data below <code>/content/blog</code>, and displays links to nodes that it finds.</p> <p>That's a basic navigation, of course, in a real blog we'd need some paging and contextualization to cope with large numbers of posts.</p> <p>Nevertheless, with this addition our ESP script allows us to create, edit and navigate blog posts - not bad for 46 lines of code, including comments, whitespace and output formatting.</p> -<h2 id="step-4-data-first-structure-later">Step 4: Data first, structure later</h2> +<h2 id="step-4-data-first-structure-later">Step 4: Data first, structure later<a class="headerlink" href="#step-4-data-first-structure-later" title="Permanent link">¶</a></h2> <p>You might have heard this mantra, which we apply in many areas of Sling.</p> <p>In this case, adding a new field to our blog posts could not be easier: just add an input field to the form, and Sling will do the rest.</p> <p>Adding this inside our script's <code><form></code> element, for example:</p> @@ -195,11 +217,11 @@ If you get an error saying _javax.jcr.Ac <p>Allows us to add an author name to our blog posts. No need to define anything at the repository level, as Sling is using it in unstructured mode in this case, and no need to migrate existing data, the author field of existing posts will simply be empty.</p> -<h2 id="i-want-my-esp">I want my ESP!</h2> +<h2 id="i-want-my-esp">I want my ESP!<a class="headerlink" href="#i-want-my-esp" title="Permanent link">¶</a></h2> <p>Now wait...we said we were going to create an ESP script, but our "application" is just static HTML and some client javascript at this point.</p> <p>That's correct - as we are using only Sling client-facing features at this point (HTTP POST and <code>sling.js</code>), we do not necessarily need to use ESP code.</p> <p>To keep things simple, we'll refrain from adding ESP-based features at this point, but you can of course use any ESP code in the <em>blog.esp</em> "script".</p> -<h2 id="thats-the-power-of-sling">That's the power of Sling</h2> +<h2 id="thats-the-power-of-sling">That's the power of Sling<a class="headerlink" href="#thats-the-power-of-sling" title="Permanent link">¶</a></h2> <p>The 46-line blog is a good example of the power of Sling. It leverages the <a href="/documentation/bundles/manipulating-content-the-slingpostservlet-servlets-post.html">SlingPostServlet</a>, which handles POST requests in a form-friendly way, and the <a href="http://svn.apache.org/repos/asf/sling/trunk/bundles/servlets/post/src/main/resources/system/sling.js"><code>sling.js</code></a> client library, which provides high-level functionality on the client side.</p> <div class="footnote"> <hr /> Modified: websites/staging/sling/trunk/content/documentation/tutorials-how-tos/getting-resources-and-properties-in-sling.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/tutorials-how-tos/getting-resources-and-properties-in-sling.html (original) +++ websites/staging/sling/trunk/content/documentation/tutorials-how-tos/getting-resources-and-properties-in-sling.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - Getting Resources and Properties in Sling</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,10 +101,21 @@ <h1>Getting Resources and Properties in Sling</h1> - <p>The Resource is one of the central parts of Sling. Extending from JCR's Everything is Content, Sling assumes Everthing is a Resource. Thus Sling is maintaining a virtual tree of resources, which is a merger of the actual contents in the JCR Repository and resources provided by so called resource providers. By doing this Sling fits very well in the paradigm of the REST architecture.</p> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p>The Resource is one of the central parts of Sling. Extending from JCR's Everything is Content, Sling assumes Everthing is a Resource. Thus Sling is maintaining a virtual tree of resources, which is a merger of the actual contents in the JCR Repository and resources provided by so called resource providers. By doing this Sling fits very well in the paradigm of the REST architecture.</p> <p>In this article we will explore a few ways to programmatically map a resource path (String) to a resource object (Resource) and its properties in Sling, from within an OSGI service, a servlet and a JSP.</p> <p>The whole game consists in first getting a <code>ResourceResolver</code> and then getting the <code>Resource</code> itself.</p> -<h2 id="within-an-osgi-servicecompoment">Within an OSGI Service/Compoment</h2> +<h2 id="within-an-osgi-servicecompoment">Within an OSGI Service/Compoment<a class="headerlink" href="#within-an-osgi-servicecompoment" title="Permanent link">¶</a></h2> <p>You can access a resource through the <code>ResourceResolverFactory</code> service:</p> <table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 2 @@ -127,7 +149,7 @@ </pre></div> </td></tr></table> -<h2 id="within-a-servlet">Within a Servlet</h2> +<h2 id="within-a-servlet">Within a Servlet<a class="headerlink" href="#within-a-servlet" title="Permanent link">¶</a></h2> <p>You can access the resource defined by the request URL through the <code>SlingHttpServletRequest</code>:</p> <table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1 2</pre></div></td><td class="code"><div class="codehilite"><pre><span class="c1">// req is the SlingHttpServletRequest</span> @@ -146,7 +168,7 @@ </pre></div> </td></tr></table> -<h2 id="within-a-jsp-file">Within a JSP file</h2> +<h2 id="within-a-jsp-file">Within a JSP file<a class="headerlink" href="#within-a-jsp-file" title="Permanent link">¶</a></h2> <p>When you use the <code><sling:defineObjects></code> tag in a JSP file, you have access to a few handy objects, one of them is <code>resource</code>, the resource that is resolved from the URL. Another one is <code>resourceResolver</code>, the <code>ResourceResolver</code> defined through the <code>SlingHttpServletRequest</code>. </p> <p>To access a resource:</p> <table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1 @@ -167,7 +189,7 @@ </td></tr></table> <p>Note: <code>resource.adaptTo(Node.class)</code> may return null if the resource is not backed by a JCR node. This is particularly the case for <code>NonExistingResource</code> resources or resource provided by a non-JCR resource provider.</p> -<h2 id="accessing-a-property">Accessing a Property</h2> +<h2 id="accessing-a-property">Accessing a Property<a class="headerlink" href="#accessing-a-property" title="Permanent link">¶</a></h2> <p>The <code>ValueMap</code> is an easy way to access properties of a resource. With most resources you can use <code>Adaptable.adaptTo(Class)</code> to adapt the resource to a value map:</p> <table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1 2</pre></div></td><td class="code"><div class="codehilite"><pre><span class="c1">// res is the Resource</span> Modified: websites/staging/sling/trunk/content/documentation/tutorials-how-tos/how-to-manage-events-in-sling.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/tutorials-how-tos/how-to-manage-events-in-sling.html (original) +++ websites/staging/sling/trunk/content/documentation/tutorials-how-tos/how-to-manage-events-in-sling.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - How to Manage Job in Sling</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,7 +101,18 @@ <h1>How to Manage Job in Sling</h1> - <p>Apache Sling supports the execution of jobs with the guarantee of processing the job at most once. This can be seen as an extensions of the OSGi event admin, although jobs are not started or processed by OSGi events leveraging the OSGi event admin.</p> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p>Apache Sling supports the execution of jobs with the guarantee of processing the job at most once. This can be seen as an extensions of the OSGi event admin, although jobs are not started or processed by OSGi events leveraging the OSGi event admin.</p> <p>For more details please refer to the following resources:</p> <ul> <li><a href="">Eventing, Jobs and Scheduling section</a> to get detailed information on the eventing mechanisms in Sling.</li> @@ -98,7 +120,7 @@ <li>Package <a href="/apidocs/sling6/org/apache/sling/event/package-summary.html">org.apache.sling.event</a> of the Sling API.</li> </ul> <p>This page drives you through the implementation of two services that rely on the Sling job mechanism. The services implement the following use case: whenever a file is uploaded to a temporary location in your web application, the file is moved to a specific location according to its MIME type.</p> -<h2 id="introduction">Introduction</h2> +<h2 id="introduction">Introduction<a class="headerlink" href="#introduction" title="Permanent link">¶</a></h2> <p>You will now implement the logic to listen to files posted to <em>/tmp/dropbox</em> and to move them to the appropriate locations depending on the MIME type:</p> <ul> <li>images (.png) are moved to <strong>/dropbox/images/</strong></li> @@ -116,7 +138,7 @@ <li>Processes the former jobs</li> <li>Moves the file according to its extension.</li> </ul> -<h2 id="listening-to-osgi-events">Listening to OSGI Events</h2> +<h2 id="listening-to-osgi-events">Listening to OSGI Events<a class="headerlink" href="#listening-to-osgi-events" title="Permanent link">¶</a></h2> <p>To listen to OSGi events in Sling you just need to register an <strong>org.osgi.service.event.EventHandler</strong> service with an <strong>event.topics</strong> property that describes which event topics the handler is interested in.</p> <p>To listen to a Sling <strong>resource added</strong> events, for example, you'll set the <em>event.topics</em> property to @@ -129,7 +151,7 @@ an <strong>event.topics</strong> propert <p>The javadocs of the TOPIC_ constants in the <a href="/apidocs/sling6/org/apache/sling/api/SlingConstants.html">org.apache.sling.api.SlingConstants</a> class lists and explains the available event topics available in Sling.</p> -<h2 id="starting-a-job">Starting a job</h2> +<h2 id="starting-a-job">Starting a job<a class="headerlink" href="#starting-a-job" title="Permanent link">¶</a></h2> <p>To start a job, the <em>JobManager</em> service can be used. It needs a job topic and a payload. In our case we define our dropbox job topic and give the resource path as the payload:</p> <div class="codehilite"><pre> <span class="kd">final</span> <span class="n">String</span> <span class="n">resourcePath</span> <span class="o">=</span> <span class="o">...;</span> <span class="c1">// path to the resource to handle</span> <span class="kd">final</span> <span class="n">Map</span><span class="o"><</span><span class="n">String</span><span class="o">,</span> <span class="n">Object</span><span class="o">></span> <span class="n">payload</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HashMap</span><span class="o"><</span><span class="n">String</span><span class="o">,</span> <span class="n">Object</span><span class="o">>();</span> @@ -194,7 +216,7 @@ class lists and explains the available e <p>The complete code for the <strong>DropBoxService</strong> service is available <a href="DropBoxService.java">here</a>.</p> -<h2 id="consuming-job-events">Consuming Job Events</h2> +<h2 id="consuming-job-events">Consuming Job Events<a class="headerlink" href="#consuming-job-events" title="Permanent link">¶</a></h2> <p>Now that you have implemented a service that starts a job when a file is uploaded to <strong>/tmp/dropbox</strong>, you will implement the service <strong>DropBoxEventHandler</strong> that processes those jobs and moves the files to a location according to their MIME types.</p> <p>To process to the job that have been defined before the property <strong>job.topics</strong> needs to be set to <strong>DropBoxService.JOB_TOPIC</strong> in the class annotations:</p> <div class="codehilite"><pre><span class="nd">@Property</span><span class="o">(</span><span class="n">name</span><span class="o">=</span><span class="s">"job.topics"</span><span class="o">,</span> Modified: websites/staging/sling/trunk/content/documentation/tutorials-how-tos/installing-and-upgrading-bundles.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/tutorials-how-tos/installing-and-upgrading-bundles.html (original) +++ websites/staging/sling/trunk/content/documentation/tutorials-how-tos/installing-and-upgrading-bundles.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - Installing and Upgrading Bundles</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,17 +101,28 @@ <h1>Installing and Upgrading Bundles</h1> - <div class="note"> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<div class="note"> We recommend to use the Apache Felix Web Console. The documentation below describes the old Sling Management Console, which isn't in use any more. Please refer to the documentation of the <a href="http://felix.apache.org/site/apache-felix-web-console.html">Apache Felix Web Console</a>. </div> <p>OSGi bundles installed in the OSGi framework, which is provided by Sling, may be upgraded or removed and new bundles may be installed by using the Sling Management Console. This page is about using the Sling Management Console for those tasks.</p> <p>Basically, you have two choices to install and upgrade bundles: Upload the bundle files or install them from a Bundle Repository.</p> -<h2 id="sling-management-console">Sling Management Console</h2> +<h2 id="sling-management-console">Sling Management Console<a class="headerlink" href="#sling-management-console" title="Permanent link">¶</a></h2> <p>The Sling Management Console is installed by default when Sling is running and may be reached at on the page <code>/system/console</code> in the Sling Context by default. For example if you installed the Sling Web Application in the <code>/sample</code> context of the Servlet Container running at <code>http://somehost:4402</code>, you would access the Sling Management Console at <code>http://somehost:4402/sample/system/console</code>.</p> <p>You will be prompted for a user name and password to access the Sling Management Console. This password is preset to be <em>admin</em> for the user name and <em>admin</em> for the password.</p> <p>NB: Both the username and password and the location of the Sling Management Console inside the Web Application Context is configurable in the <em>Sling Management Console</em> configuration on the <em>Configuration</em> page.</p> -<h2 id="installing-and-upgrading-bundles-by-upload">Installing and upgrading bundles by Upload</h2> +<h2 id="installing-and-upgrading-bundles-by-upload">Installing and upgrading bundles by Upload<a class="headerlink" href="#installing-and-upgrading-bundles-by-upload" title="Permanent link">¶</a></h2> <p>To install a new bundle or upgrade an already installed bundle, go to the <em>Bundles</em> page in the Sling Management Console. At the top and the bottom of the page you have a form to specify and upload a bundle as a file :</p> <ul> <li>Select the bundle file to upload</li> @@ -111,15 +133,15 @@ We recommend to use the Apache Felix Web <p>After clicking the button, the bundle file will be uploaded. If a bundle with the same bundle symbolic name is already installed, the respective bundle will be updated with the new bundle file. Otherwise the bundle file will be installed as a new bundle and its start level is set as defined. Additionally the bundle will optionally be started.</p> <p>After having updated a bundle, you should also refresh the packages by clicking on the <em>Refresh Packages</em> button. The reson for this is, that the old version of the bundle is still used by other bundles even after upgrading to a new version. Only when the packages are refreshed any users of the bundle will be relinked to use the new bundle version. As this might be a somewhat lengthy operation, which also stops and restarts using bundles, this operation has to be executed explicitly.</p> <p>Also, if you plan to upgrade multiple bundles, you may wish to upgrade all bundles before repackaging the using bundles.</p> -<h2 id="installing-and-upgrading-bundles-from-the-bundle-repository">Installing and upgrading bundles from the Bundle Repository</h2> +<h2 id="installing-and-upgrading-bundles-from-the-bundle-repository">Installing and upgrading bundles from the Bundle Repository<a class="headerlink" href="#installing-and-upgrading-bundles-from-the-bundle-repository" title="Permanent link">¶</a></h2> <p>The OSGi Bundle Repository is a repository of bundles, from which Sling may download and install or upgrade bundles very easily. Unlike the installation of bundles by file upload, the OSGi Bundle Repository has the functionality to resolve and dependencies of bundles to be installed.</p> <p>Say you wish to install bundle <em>X</em> which depends on packages provided by bundle <em>Y</em>. When uploading bundle <em>X</em> as a file it will not resolve, that is Sling (the OSGi framework actually) is not able to ensure proper operation of bundle <em>X</em> and thus prevents the bundle from being started and used. You will have to manually upload bundle <em>Y</em> yourself. When using the OSGi Bundle Repository, you just select bundle <em>X</em> for installation and the bundle repository will find out, that bundle <em>Y</em> is also required and will automatically download and install it along with bundle <em>X</em>.</p> -<h3 id="the-bundle-repository-page">The Bundle Repository page</h3> +<h3 id="the-bundle-repository-page">The Bundle Repository page<a class="headerlink" href="#the-bundle-repository-page" title="Permanent link">¶</a></h3> <p>Installation or update of bundles may be done on the <em>Bundle Repository</em> page of the Sling Management Console. In the upper part of the page, you will see a list (usually just a single entry) of OSGi Bundle Repositories known to Sling. In the lower part of the list you see the bundles available from these repositories. To install or update bundles, just check the respective button and click on the <em>Deploy Selected</em> or <em>Deploy and Start Selected</em> button at the bottom of the page depending on whether you want to start the bundle(s) after installation or not.</p> <p>See below for more information on OSGi Bundle Repository management.</p> -<h3 id="the-bundles-page">The Bundles page</h3> +<h3 id="the-bundles-page">The Bundles page<a class="headerlink" href="#the-bundles-page" title="Permanent link">¶</a></h3> <p>You may also want to upgrade already installed bundles from the <em>Bundles</em> page of the Sling Management Console. For each bundle listed in this page, there is an <em>Upgrade</em> button. If there is an upgrade to the installed bundle available in the OSGi Bundle Repository, the button is enabled and clicking on the button will upgrade the respective bundle. If no upgrade is available from the OSGi Bundle Repository, this button is disabled.</p> -<h3 id="managing-osgi-bundle-repositories">Managing OSGi Bundle Repositories</h3> +<h3 id="managing-osgi-bundle-repositories">Managing OSGi Bundle Repositories<a class="headerlink" href="#managing-osgi-bundle-repositories" title="Permanent link">¶</a></h3> <p>Currently management of known OSGi Bundle Repositories is very simple. If a configured bundle repository is not available on startup, it will be marked as being inactive. If you know the repository is now available, you may click on the <em>Refresh</em> button, to activate it. Similarly, the contents of the repository may be modified by for example adding new bundles or updating bundles in the repository, these changes will be made known to Sling by clicking the <em>Refresh</em> button.</p> <p>There exists no GUI functionality yet to add a new repository to the list of known repositories. Instead you may submit a request with parameters <code>action</code> whose value must be <code>refreshOBR</code> and <code>repository</code> whose value must be the URL to the repository descriptor file generally called <code>repository.xml</code>.</p> <p>For example, if you run Sling on <code>http://localhost:7402/sample</code> with default location of the Sling Management Console, the following request would add a repository at <code>/tmp/repo/repository.xml</code> in the filesystem:</p> Modified: websites/staging/sling/trunk/content/documentation/tutorials-how-tos/jackrabbit-persistence.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/tutorials-how-tos/jackrabbit-persistence.html (original) +++ websites/staging/sling/trunk/content/documentation/tutorials-how-tos/jackrabbit-persistence.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - Jackrabbit Persistence</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,9 +101,20 @@ <h1>Jackrabbit Persistence</h1> - <p>Out-of-the-box the embedded Jackrabbit repository used by Sling (the Embedded Jackrabbit Repository bundle) uses Derby to persist the JCR nodes and properties. For some applications or environments it may be required or required to replace Derby with another backing store such as PostgreSQL or Oracle.</p> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p>Out-of-the-box the embedded Jackrabbit repository used by Sling (the Embedded Jackrabbit Repository bundle) uses Derby to persist the JCR nodes and properties. For some applications or environments it may be required or required to replace Derby with another backing store such as PostgreSQL or Oracle.</p> <p>This page is based on the journey of Tony Giaccone to get Sling running with a PostgreSQL based Jackrabbit instance.</p> -<h2 id="management-summary">Management Summary</h2> +<h2 id="management-summary">Management Summary<a class="headerlink" href="#management-summary" title="Permanent link">¶</a></h2> <p>To replace Derby as the persistence manager for Jackrabbit the following steps are required:</p> <ol> <li>Provide a JDBC driver for your database as an OSGi bundle</li> @@ -100,7 +122,7 @@ <li>(Re-) Start the Embedded Jackrabbit bundle</li> </ol> <p>When you are not using the Derby persistence manager, you may safely remove the Derby bundle from your Sling instance.</p> -<h2 id="jdbc-driver">JDBC Driver</h2> +<h2 id="jdbc-driver">JDBC Driver<a class="headerlink" href="#jdbc-driver" title="Permanent link">¶</a></h2> <p>The hardest thing to do is probably getting the JDBC driver for your database. One option is to look at the bundles provided by Spring Source in their repository at <a href="http://www.springsource.com/repository/">http://www.springsource.com/repository/</a>.</p> <p>Another option is to create the bundle on your own using Peter Kriens' <a href="http://www.aqute.biz/Bnd/Bnd">BND Tool</a>:</p> <ol> @@ -125,7 +147,7 @@ </li> </ol> <p>Tony reports no success with the Spring Source bundle, whily the BND approach worked for the PostgreSQL JDBC driver.</p> -<h2 id="replace-derby-in-a-running-sling-instance">Replace Derby in a running Sling Instance</h2> +<h2 id="replace-derby-in-a-running-sling-instance">Replace Derby in a running Sling Instance<a class="headerlink" href="#replace-derby-in-a-running-sling-instance" title="Permanent link">¶</a></h2> <p>To replace Derby in a running Sling instance follow these steps (e.g. through the Web Console at <code>/system/console</code>):</p> <ol> <li>Uninstall the Apache Derby bundle</li> @@ -135,7 +157,7 @@ This needs to be reconfigured and restar <li>Refresh the packages (click the <em>Refresh Packages</em> button)</li> </ol> <p>Alternatively, you may wish to stop Sling after uninstalling Derby and installing the JDBC bundle. Technically, this is not required, though.</p> -<h2 id="reconfiguring-jackrabbit">Reconfiguring Jackrabbit</h2> +<h2 id="reconfiguring-jackrabbit">Reconfiguring Jackrabbit<a class="headerlink" href="#reconfiguring-jackrabbit" title="Permanent link">¶</a></h2> <p>To actually use a persistence manager other than the default (Derby) persistence manager, you have to configure Jackrabbit to use it. Create a <code>repository.xml</code> file in the <code>sling/jackrabbit</code> folder before starting Sling for the first time. If the repository was already started, you can also modify the existing file.</p> <p>To prepare a repository.xml file before first startup, use the <a href="http://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/jackrabbit-server/src/main/resources/repository.xml"><code>repository.xml</code></a> as a template and modify it by replacing the <code><PersistenceManager></code> elements to refer to the selected persistence manager.</p> <p>If the file already exists, you can modifiy this existing file and there is no need to get the original from the SVN repository.</p> @@ -176,7 +198,7 @@ This needs to be reconfigured and restar <p>Modify the <code>url</code>, <code>user</code>, and <code>password</code> parameters to match your database setup.</p> <p>If you reconfigure Jackrabbit to use the new persistence manager, the existing repository data in the <code>sling/jackrabbit</code> directory, except the <code>repository.xml</code> file, of course, should now be removed.</p> <p>Finally either start Sling or start the Jackrabbit Embedded Repository bundle.</p> -<h2 id="credits">Credits</h2> +<h2 id="credits">Credits<a class="headerlink" href="#credits" title="Permanent link">¶</a></h2> <p>This description is based on Tony Giaccone's description <a href="http://markmail.org/message/wlbfrukmjjsl33hh">Swapping Postgres for Derby</a> sent to the Sling Users mailing list.</p> <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;"> Rev. 1500501 by fmeschbe on Sun, 7 Jul 2013 18:49:51 +0000 Modified: websites/staging/sling/trunk/content/documentation/tutorials-how-tos/testing-sling-based-applications.html ============================================================================== --- websites/staging/sling/trunk/content/documentation/tutorials-how-tos/testing-sling-based-applications.html (original) +++ websites/staging/sling/trunk/content/documentation/tutorials-how-tos/testing-sling-based-applications.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - Testing Sling-based applications</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> Modified: websites/staging/sling/trunk/content/downloads.html ============================================================================== --- websites/staging/sling/trunk/content/downloads.html (original) +++ websites/staging/sling/trunk/content/downloads.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - Downloads</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> Modified: websites/staging/sling/trunk/content/errors/403.html ============================================================================== --- websites/staging/sling/trunk/content/errors/403.html (original) +++ websites/staging/sling/trunk/content/errors/403.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - Forbidden (403)</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,7 +101,18 @@ <h1>Forbidden (403)</h1> - <p>We're sorry, but the page you requested cannot be accessed. This may be because:</p> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p>We're sorry, but the page you requested cannot be accessed. This may be because:</p> <ul> <li>You typed the address incorrectly</li> <li>You followed a link from another site that pointed to this page.</li> Modified: websites/staging/sling/trunk/content/errors/404.html ============================================================================== --- websites/staging/sling/trunk/content/errors/404.html (original) +++ websites/staging/sling/trunk/content/errors/404.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - Page Not Found</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -90,7 +101,18 @@ <h1>Page Not Found</h1> - <p>We're sorry, but the page you requested cannot be found. This may be because:</p> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p>We're sorry, but the page you requested cannot be found. This may be because:</p> <ul> <li>The page has moved, was outdated, or has not been created yet</li> <li>You typed the address incorrectly</li> Modified: websites/staging/sling/trunk/content/guides.html ============================================================================== --- websites/staging/sling/trunk/content/guides.html (original) +++ websites/staging/sling/trunk/content/guides.html Tue Sep 22 10:23:16 2015 @@ -18,11 +18,11 @@ limitations under the License. --> <head> + <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Apache Sling - Guides</title> <link rel="icon" href="/res/favicon.ico"> <link rel="stylesheet" href="/res/site.css" type="text/css" media="all"> <link rel="stylesheet" href="/res/codehilite.css" type="text/css" media="all"> - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> </head> <body> <div class="title"> @@ -39,7 +39,18 @@ </div> <div class="menu"> - <p><strong><a href="/documentation.html">Documentation</a></strong> <br /> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p><strong><a href="/documentation.html">Documentation</a></strong> <br /> <a href="/documentation/getting-started.html">Getting Started</a> <br /> <a href="/documentation/the-sling-engine.html">The Sling Engine</a> <br /> <a href="/documentation/development.html">Development</a> <br /> @@ -95,7 +106,18 @@ <h1>Guides</h1> - <p>These pages contain further information in a more informal way.</p> + <style type="text/css"> +/* The following code is added by mdx_elementid.py + It was originally lifted from http://subversion.apache.org/style/site.css */ +/* + * Hide class="elementid-permalink", except when an enclosing heading + * has the :hover property. + */ +.headerlink, .elementid-permalink { + visibility: hidden; +} +h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style> +<p>These pages contain further information in a more informal way.</p> <div class="codehilite"><pre><span class="o">*</span> <span class="p">[</span><span class="n">Discover</span> <span class="n">Sling</span> <span class="n">in</span> 15 <span class="n">minutes</span> <span class="p">](</span><span class="o">/</span><span class="n">documentation</span><span class="o">/</span><span class="n">getting</span><span class="o">-</span><span class="n">started</span><span class="o">/</span><span class="n">discover</span><span class="o">-</span><span class="n">sling</span><span class="o">-</span><span class="n">in</span><span class="o">-</span>15<span class="o">-</span><span class="n">minutes</span><span class="p">.</span><span class="n">html</span><span class="p">)</span> <span class="o">-</span> <span class="n">title</span> <span class="n">says</span> <span class="n">it</span> <span class="n">all</span> <span class="o">*</span> <span class="p">[</span><span class="n">Resources</span><span class="p">](</span><span class="o">/</span><span class="n">documentation</span><span class="o">/</span><span class="n">the</span><span class="o">-</span><span class="n">sling</span><span class="o">-</span><span class="n">engine</span><span class="o">/</span><span class="n">resources</span><span class="p">.</span><span class="n">html</span><span class="p">)</span> <span class="o">--</span> <span class="n">Presents</span> <span class="n">the</span> <span class="n">Resource</span> <span class="n">as</span> <span class="n">the</span> <span class="n">object</span> <span class="n">around</span> <span class="n">which</span> <span class="n">Sling</span> <span class="n">is</span> <span class="n">built</span>