Class SlingServletDelegate
- java.lang.Object
-
- javax.servlet.GenericServlet
-
- org.apache.sling.launchpad.base.webapp.SlingServletDelegate
-
- All Implemented Interfaces:
Serializable
,javax.servlet.Servlet
,javax.servlet.ServletConfig
,Launcher
public class SlingServletDelegate extends javax.servlet.GenericServlet implements Launcher
TheSlingServletDelegate
serves as a basic servlet for Project Sling. The tasks of this servlet are as follows:- The
init()
method launches ApacheFelix
as the OSGi framework implementation we use. - Registers as a service listener interested for services of type
javax.servlet.Servlet
. - Handles requests by delegating to a servlet which is expected to be
registered with the framework as a service of type
javax.servlet.Servlet
. If no delegatee servlet has been registered request handlings results in a temporary unavailability of the servlet.
Request Handling
This servlet handles request by forwarding to a delegatee servlet. The delegatee servlet is automatically retrieved from the service registry by the
getDelegatee()
. This method also makes sure, the such a servlet actually exits by throwing anUnvailableException
if not and also makes sure the servlet is initialized.Launch Configuration
The Apache
Felix
framework requires configuration parameters to be specified for startup. This servlet builds the list of parameters from three locations:- The
sling.properties
is read from the servlet class path. This properties file contains default settings. - Extensions of this servlet may provide additional properties to be
loaded overwriting the
loadConfigProperties(String)
method. - Finally, web application init parameters are added to the properties and may overwrite existing properties of the same name(s).
After loading all properties, variable substitution takes place on the property values. A variable is indicated as
${<prop-name>}
where<prop-name>
is the name of a system or configuration property (configuration properties override system properties). Variables may be nested and are resolved from inner-most to outer-most. For example, the property value${outer-${inner}}
is resolved by first resolving${inner}
and then resolving the property whose name is the catenation ofouter-
and the result of resolving${inner}
.Logging
This servlet logs through the servlet container logging mechanism by calling the
GenericServlet.log
methods. Bundles launched within the framework provided by this servlet may use whatever logging mechanism they choose to use. The Commons OSGI Log Bundle provides an OSGi Log Service implementation, which also provides access to Apache Commons Logging, SLF4J and Log4J logging. It is recommended that this bundle is used to setup and configure logging for systems based on this servlet.- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description SlingServletDelegate()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
destroy()
Destroys this servlet by shutting down the OSGi framework and hence the delegatee servlet if one is set at all.void
init()
Initializes this servlet by loading the framework configuration properties, starting the OSGi framework (Apache Felix) and exposing the system bundle context and theFelix
instance as servlet context attributes.void
service(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res)
Services the request by delegating to the delegatee servlet.void
setCommandLine(Map<String,String> args)
The commandline provided from the standalone launch case.void
setNotifiable(Notifiable notifiable)
TheNotifiable
to notify on framework stop or updatevoid
setSlingHome(String slingHome)
Sets the sling.home to be used for starting the framework.boolean
start()
Starts the framework and returnstrue
if successfull.void
stop()
Stops the framework.
-
-
-
Method Detail
-
setNotifiable
public void setNotifiable(Notifiable notifiable)
Description copied from interface:Launcher
TheNotifiable
to notify on framework stop or update- Specified by:
setNotifiable
in interfaceLauncher
- Parameters:
notifiable
- The notifiable
-
setCommandLine
public void setCommandLine(Map<String,String> args)
Description copied from interface:Launcher
The commandline provided from the standalone launch case.- Specified by:
setCommandLine
in interfaceLauncher
- Parameters:
args
- The commandline
-
setSlingHome
public void setSlingHome(String slingHome)
Description copied from interface:Launcher
Sets the sling.home to be used for starting the framework. This method must be called with a non-null
argument before trying to start the framework.- Specified by:
setSlingHome
in interfaceLauncher
- Parameters:
slingHome
- The sling.home directory
-
start
public boolean start()
Description copied from interface:Launcher
Starts the framework and returnstrue
if successfull.
-
stop
public void stop()
Description copied from interface:Launcher
Stops the framework. This method only returns when the framework has actually been stopped. This method may be used by the main class or servlet to initiate a shutdown of the framework.
-
init
public final void init() throws javax.servlet.ServletException
Initializes this servlet by loading the framework configuration properties, starting the OSGi framework (Apache Felix) and exposing the system bundle context and theFelix
instance as servlet context attributes.- Overrides:
init
in classjavax.servlet.GenericServlet
- Throws:
javax.servlet.ServletException
- if the framework cannot be initialized.
-
service
public final void service(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res) throws javax.servlet.ServletException, IOException
Services the request by delegating to the delegatee servlet. If no delegatee servlet is available, aUnavailableException
is thrown.- Specified by:
service
in interfacejavax.servlet.Servlet
- Specified by:
service
in classjavax.servlet.GenericServlet
- Parameters:
req
- theServletRequest
object that contains the client's requestres
- theServletResponse
object that will contain the servlet's response- Throws:
javax.servlet.UnavailableException
- if the no delegatee servlet is currently availablejavax.servlet.ServletException
- if an exception occurs that interferes with the servlet's normal operation occurredIOException
- if an input or output exception occurs
-
destroy
public final void destroy()
Destroys this servlet by shutting down the OSGi framework and hence the delegatee servlet if one is set at all.- Specified by:
destroy
in interfacejavax.servlet.Servlet
- Overrides:
destroy
in classjavax.servlet.GenericServlet
-
-