| Apache Sling > FAQ > The Sling Launchpad |
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.
Since Sling requires some space on the filesystem to store various files Sling has to know where this filesystem space is located.
The following is a list of uses for the Sling Home directory:
The Java Standalone Application supports a number of command line options, which influence the operation of the launch process.
| Option | Argument | Description |
|---|---|---|
| start | – | Open a TCP/IP server socket when starting Sling. Uses option -j to define the local socket address. |
| status | – | Check whether a (remote) Sling application is running. Uses option -j to define the address of the Sling instance to check. Note, that the Sling application terminates after checking for the (remote) Sling status. |
| stop | – | Stop a (remote) Sling application is running. Uses option -j to define the address of the Sling instance to stop. Note, that the Sling application terminates after stopping the (remote) Sling instance. |
| -c | slinghome | The directory in which Sling locates its initial configuration file sling.properties and where files of Sling itself such as the Apache Felix bundle archive or the JCR repository files are stored. This defaults to the sling folder in the current working directory. This is the value which is commonly refered to as ${sling.home}. |
| -l | loglevel | Sets the initial loglevel as an integer in the range 0 to 4 or as one of the well known level strings ERROR, WARN, INFO, or DEBUG. This option overwrites the org.apache.sling.osg.log.level setting the sling.properties file. The default is INFO. |
| -f | logfile | The log file to use or - to log to standard out. This option overwrites the org.apache.sling.osg.log.file setting the sling.properties file. The default is ${sling.home}/logs/error.log. |
| -a | address | The interfact to bind to (use 0.0.0.0 for any). This option is not implemented yet. |
| -p | port | The port to listen (default 8080) to handle HTTP requests. This option overwrites the org.osgi.service.http.port setting the sling.properties file. |
| -j | [ host ":" ] port | The socket address to listen on for control connections (start or to use as the remote endpoint for the control connection (status and stop. If this parameter has no arguments or is not specified, the address defaults to port 63000 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. |
| -h | – | Prints a simple usage message listing all available command line options. |
The Sling Standalone application looks for a definition of the sling.home setting in the following locations in order of precendence:
Note that using a control connection for the Sling Standalone Application presents a potential security issue. For this reason the following defaults apply:
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 sling.properties fiele. One exception to this rule is the sling.home parameter, which is used to set the value of the sling.home 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.
The sling.home folders for Sling Web Applications without the sling.home servlet parameter are all located in the sling folder in the current working directory as reported by the user.dir system property. The name of the actual directory is derived from the Web Application Context Path by replacing all slash characters / by underscore characters _. For the root context a single underscore character _ is used.
Examples:
| Servlet Context | Default sling.home |
|---|---|
| root | sling/_ |
| /sling | sling/_sling |
| /sling/instance1 | sling/_sling_instance1 |
The sling.properties 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 sling.properties file installed when Sling is first started.
One thing to note is, that the sling.properties 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 ${name} notation. Such property references may even be cascaded as in
java.packages=${jre-${java.specification.version}}
The Sling Launchapd consists of Launchbad Base project and three additional projects which ultimately create a Standalone Java Application and a Web Appliction with standard parts of Sling.
The Launchpad Base projects creates the following artifacts, which are required in actual setups to get a Sling application:
$ java -jar org.apache.sling.launchpad.base-app.jar
To build a very basic Sling launcher, the Launchpad Base 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 Launchpad Bundles, Launchpad App, and Launchpad WebApp get to that.
The second project we want to look at is the Launchpad Bundles 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 resources/9 where 9 is a start level which is assigned to the bundles as they are installed. The special start level 0 instructs the installer to not actually assign a specific start level to the bundles contained in that folder.
Currently the following start level assignement is used by the Launchpad Bundles project:
| Start Level | Bundle Group | Bundle(s) |
|---|---|---|
| 1 | Basic bundles required for the correct operation of Sling | org.apache.sling.commons.log |
| 5 | Apache Felix Web Console | org.apache.felix.bundlerepository, org.apache.felix.webconsole, org.apache.sling.extensions.threaddump |
| 10 | OSGi Compendium Service Implementations | org.apache.felix.configadmin, org.apache.felix.eventadmin, org.apache.felix.metatype, org.apache.felix.scr |
| 15 | JCR Repository (Jackrabbit) | commons-collections, commons-io-1.4.jar 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 |
| 0 | Actual Sling Application bundles | 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 |
The Launchpad App and Launchpad WebApp bundles are actually projects which just glue together artifacts from the Launchpad projects. There is nothing special about them. Here's what is done:
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.