Search in sources :

Example 1 with Sling

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;
}
Also used : Sling(org.apache.sling.launchpad.base.impl.Sling) Map(java.util.Map) BundleContext(org.osgi.framework.BundleContext)

Example 2 with 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();
        }
    }
}
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 Sling

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;
}
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)

Example 4 with Sling

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;
}
Also used : Sling(org.apache.sling.launchpad.base.impl.Sling) Map(java.util.Map)

Aggregations

Sling (org.apache.sling.launchpad.base.impl.Sling)4 Map (java.util.Map)2 Logger (org.apache.felix.framework.Logger)2 LaunchpadContentProvider (org.apache.sling.launchpad.api.LaunchpadContentProvider)2 BundleException (org.osgi.framework.BundleException)2 HashMap (java.util.HashMap)1 GenericServlet (javax.servlet.GenericServlet)1 Servlet (javax.servlet.Servlet)1 ServletException (javax.servlet.ServletException)1 ProxyServlet (org.apache.felix.http.proxy.ProxyServlet)1 ClassLoaderResourceProvider (org.apache.sling.launchpad.base.impl.ClassLoaderResourceProvider)1 BundleContext (org.osgi.framework.BundleContext)1