Search in sources :

Example 1 with LaunchpadContentProvider

use of org.apache.sling.launchpad.api.LaunchpadContentProvider in project sling by apache.

the class ServicesListener method notifyChange.

/**
     * Notify of service changes from the listeners.
     * If all services are available, register listener and pass resources
     * to the OSGi installer.
     */
public synchronized void notifyChange() {
    // check if all services are available
    final OsgiInstaller installer = (OsgiInstaller) this.installerListener.getService();
    final LaunchpadContentProvider lcp = (LaunchpadContentProvider) this.providerListener.getService();
    final StartupHandler handler = (StartupHandler) this.startupListener.getService();
    final SlingSettingsService settings = (SlingSettingsService) this.settingsListener.getService();
    if (installer != null && lcp != null && handler != null && settings != null) {
        if (!this.installed) {
            this.installed = true;
            this.launchpadListener = new LaunchpadListener(handler);
            final Dictionary<String, Object> props = new Hashtable<String, Object>();
            props.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Launchpad Startup Listener");
            props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
            this.launchpadListenerReg = this.bundleContext.registerService(InstallationListener.class.getName(), launchpadListener, props);
            LaunchpadConfigInstaller.install(installer, lcp, settings.getRunModes());
        }
    }
}
Also used : LaunchpadContentProvider(org.apache.sling.launchpad.api.LaunchpadContentProvider) Hashtable(java.util.Hashtable) StartupHandler(org.apache.sling.launchpad.api.StartupHandler) OsgiInstaller(org.apache.sling.installer.api.OsgiInstaller) SlingSettingsService(org.apache.sling.settings.SlingSettingsService)

Example 2 with LaunchpadContentProvider

use of org.apache.sling.launchpad.api.LaunchpadContentProvider 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();
        }
    }
}
Also used : ServletException(javax.servlet.ServletException) LaunchpadContentProvider(org.apache.sling.launchpad.api.LaunchpadContentProvider) ProxyServlet(org.apache.felix.http.proxy.ProxyServlet) ProxyServlet(org.apache.felix.http.proxy.ProxyServlet) Servlet(javax.servlet.Servlet) GenericServlet(javax.servlet.GenericServlet) BundleException(org.osgi.framework.BundleException) Logger(org.apache.felix.framework.Logger) Sling(org.apache.sling.launchpad.base.impl.Sling)

Example 3 with LaunchpadContentProvider

use of org.apache.sling.launchpad.api.LaunchpadContentProvider 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;
}
Also used : HashMap(java.util.HashMap) Logger(org.apache.felix.framework.Logger) Sling(org.apache.sling.launchpad.base.impl.Sling) LaunchpadContentProvider(org.apache.sling.launchpad.api.LaunchpadContentProvider) ClassLoaderResourceProvider(org.apache.sling.launchpad.base.impl.ClassLoaderResourceProvider) BundleException(org.osgi.framework.BundleException)

Aggregations

LaunchpadContentProvider (org.apache.sling.launchpad.api.LaunchpadContentProvider)3 Logger (org.apache.felix.framework.Logger)2 Sling (org.apache.sling.launchpad.base.impl.Sling)2 BundleException (org.osgi.framework.BundleException)2 HashMap (java.util.HashMap)1 Hashtable (java.util.Hashtable)1 GenericServlet (javax.servlet.GenericServlet)1 Servlet (javax.servlet.Servlet)1 ServletException (javax.servlet.ServletException)1 ProxyServlet (org.apache.felix.http.proxy.ProxyServlet)1 OsgiInstaller (org.apache.sling.installer.api.OsgiInstaller)1 StartupHandler (org.apache.sling.launchpad.api.StartupHandler)1 ClassLoaderResourceProvider (org.apache.sling.launchpad.base.impl.ClassLoaderResourceProvider)1 SlingSettingsService (org.apache.sling.settings.SlingSettingsService)1