use of org.apache.sling.launchpad.base.impl.Sling in project sling by apache.
the class SlingBridge method getSlingBridge.
public static Sling getSlingBridge(final Notifiable notifiable, final Logger logger, final LaunchpadContentProvider resourceProvider, final Map<String, String> propOverwrite, final ServletContext servletContext) throws BundleException {
final Sling sling = new Sling(notifiable, logger, resourceProvider, propOverwrite) {
@Override
protected void loadPropertiesOverride(final Map<String, String> properties) {
if (propOverwrite != null) {
properties.putAll(propOverwrite);
}
}
};
servletContext.setAttribute(BundleContext.class.getName(), sling.getBundleContext());
return sling;
}
use of org.apache.sling.launchpad.base.impl.Sling in project sling by apache.
the class SlingServletDelegate method init.
/**
* Initializes this servlet by loading the framework configuration
* properties, starting the OSGi framework (Apache Felix) and exposing the
* system bundle context and the <code>Felix</code> instance as servlet
* context attributes.
*
* @throws ServletException if the framework cannot be initialized.
*/
@Override
public final void init() throws ServletException {
// temporary holders control final setup and ensure proper
// disposal in case of setup errors
Sling tmpSling = null;
Servlet tmpDelegatee = null;
try {
log("Starting Apache Sling in " + slingHome);
// read the default parameters
Map<String, String> props = loadConfigProperties(slingHome);
Logger logger = new ServletContextLogger(getServletContext());
LaunchpadContentProvider rp = new ServletContextResourceProvider(getServletContext());
tmpSling = SlingBridge.getSlingBridge(notifiable, logger, rp, props, getServletContext());
// set up the OSGi HttpService proxy servlet
tmpDelegatee = new ProxyServlet();
tmpDelegatee.init(getServletConfig());
// them destroyed in the finally clause.
if (servletDestroyed) {
log("SlingServletDelegate destroyed while starting Apache Sling, shutting Apache Sling down");
} else {
// set the fields now
sling = tmpSling;
delegatee = tmpDelegatee;
// reset temporary holders to prevent destroyal
tmpSling = null;
tmpDelegatee = null;
log("Apache Sling successfully started in " + slingHome);
}
} catch (BundleException be) {
throw new ServletException("Failed to start Apache Sling in " + slingHome, be);
} catch (ServletException se) {
throw new ServletException("Failed to start bridge servlet for Apache Sling", se);
} catch (Throwable t) {
throw new ServletException("Uncaught Failure starting Apache Sling", t);
} finally {
// clean up temporary fields
if (tmpDelegatee != null) {
tmpDelegatee.destroy();
}
if (tmpSling != null) {
tmpSling.destroy();
}
}
}
use of org.apache.sling.launchpad.base.impl.Sling in project sling by apache.
the class MainDelegate method start.
@Override
public boolean start() {
Map<String, String> props = new HashMap<String, String>();
// parse the command line (exit in case of failure)
if (commandLine == null) {
setCommandLine(new HashMap<String, String>());
}
// if sling.home was set on the command line, set it in the properties
if (slingHome != null) {
props.put(SharedConstants.SLING_HOME, slingHome);
} else if (commandLine.containsKey(SharedConstants.SLING_HOME)) {
props.put(SharedConstants.SLING_HOME, commandLine.get(SharedConstants.SLING_HOME));
}
// ensure sling.launchpad is set
if (!commandLine.containsKey(SharedConstants.SLING_LAUNCHPAD)) {
commandLine.put(SharedConstants.SLING_LAUNCHPAD, slingHome);
}
// check sling.properties in the command line
final String slingPropertiesProp = commandLine.remove(SharedConstants.SLING_PROPERTIES);
if (slingPropertiesProp != null) {
props.put(SharedConstants.SLING_PROPERTIES, slingPropertiesProp);
}
// set up and configure Felix Logger
int logLevel;
if (!commandLine.containsKey(PROP_LOG_LEVEL)) {
logLevel = DEFAULT_LOG_LEVEL;
} else {
logLevel = toLogLevelInt(commandLine.get(PROP_LOG_LEVEL), DEFAULT_LOG_LEVEL);
commandLine.put(LOG_LEVEL_PROP, String.valueOf(logLevel));
}
final Logger logger = new SlingLogger();
// default log level: prevent tons of needless WARN from the framework
logger.setLogLevel(Logger.LOG_ERROR);
if (System.getProperty(PROP_BOOT_LOG_LEVEL) != null) {
try {
logger.setLogLevel(Integer.parseInt(System.getProperty(PROP_BOOT_LOG_LEVEL)));
} catch (final NumberFormatException ex) {
// just ignore
}
}
try {
LaunchpadContentProvider resProvider = new ClassLoaderResourceProvider(getClass().getClassLoader());
// creating the instance launches the framework and we are done here
// ..
sling = new Sling(notifiable, logger, resProvider, props) {
// overwrite the loadPropertiesOverride method to inject the
// command line arguments unconditionally. These will not be
// persisted in any properties file, though
@Override
protected void loadPropertiesOverride(Map<String, String> properties) {
if (commandLine != null) {
properties.putAll(commandLine);
}
// Display port number on console, in case HttpService doesn't. This is logged as late as
// possible in order to pick up defaults from the Sling property files, although system
// property substitutions will be missed.
info("HTTP server port: " + properties.get(PROP_PORT), null);
}
};
// we successfully started it
return true;
} catch (BundleException be) {
error("Failed to Start OSGi framework", be);
}
// we failed to start
return false;
}
use of org.apache.sling.launchpad.base.impl.Sling in project sling by apache.
the class RunMojo method startSling.
protected Sling startSling(LaunchpadContentProvider resourceProvider, final Map<String, String> props, Logger logger) throws BundleException {
if (!registeredHook) {
Runtime.getRuntime().addShutdownHook(shutdown);
registeredHook = true;
}
// creating the instance launches the framework and we are done here
Sling mySling = new Sling(this, logger, resourceProvider, props) {
// overwrite the loadPropertiesOverride method to inject the
// mojo arguments unconditionally. These will not be persisted
// in any properties file, though
protected void loadPropertiesOverride(Map<String, String> properties) {
if (props != null) {
properties.putAll(props);
}
}
};
// TODO this seems hacky!
try {
while (mySling != null) {
Thread.sleep(100);
}
} catch (InterruptedException e) {
}
return mySling;
}
Aggregations